rnwind 0.0.9 → 0.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/lib/cjs/core/parser/tw-parser.cjs +126 -3
- package/lib/cjs/core/parser/tw-parser.cjs.map +1 -1
- package/lib/cjs/core/parser/tw-parser.d.ts +22 -0
- package/lib/cjs/core/style-builder/build-style.cjs +12 -3
- package/lib/cjs/core/style-builder/build-style.cjs.map +1 -1
- package/lib/cjs/core/style-builder/build-style.d.ts +3 -1
- package/lib/cjs/core/style-builder/union-builder.cjs +9 -1
- package/lib/cjs/core/style-builder/union-builder.cjs.map +1 -1
- package/lib/cjs/core/style-builder/union-builder.d.ts +7 -0
- package/lib/cjs/runtime/hooks/use-scheme.cjs +8 -5
- package/lib/cjs/runtime/hooks/use-scheme.cjs.map +1 -1
- package/lib/cjs/runtime/index.cjs +1 -0
- package/lib/cjs/runtime/index.cjs.map +1 -1
- package/lib/cjs/runtime/index.d.ts +1 -1
- package/lib/cjs/runtime/lookup-css.cjs +27 -0
- package/lib/cjs/runtime/lookup-css.cjs.map +1 -1
- package/lib/cjs/runtime/lookup-css.d.ts +18 -0
- package/lib/cjs/testing/index.cjs +1 -1
- package/lib/cjs/testing/index.cjs.map +1 -1
- package/lib/esm/core/parser/color.mjs +1 -1
- package/lib/esm/core/parser/tw-parser.d.ts +22 -0
- package/lib/esm/core/parser/tw-parser.mjs +107 -2
- package/lib/esm/core/parser/tw-parser.mjs.map +1 -1
- package/lib/esm/core/style-builder/build-style.d.ts +3 -1
- package/lib/esm/core/style-builder/build-style.mjs +12 -3
- package/lib/esm/core/style-builder/build-style.mjs.map +1 -1
- package/lib/esm/core/style-builder/union-builder.d.ts +7 -0
- package/lib/esm/core/style-builder/union-builder.mjs +9 -1
- package/lib/esm/core/style-builder/union-builder.mjs.map +1 -1
- package/lib/esm/runtime/hooks/use-scheme.mjs +8 -5
- package/lib/esm/runtime/hooks/use-scheme.mjs.map +1 -1
- package/lib/esm/runtime/index.d.ts +1 -1
- package/lib/esm/runtime/index.mjs +1 -1
- package/lib/esm/runtime/index.mjs.map +1 -1
- package/lib/esm/runtime/lookup-css.d.ts +18 -0
- package/lib/esm/runtime/lookup-css.mjs +26 -1
- package/lib/esm/runtime/lookup-css.mjs.map +1 -1
- package/lib/esm/testing/index.mjs +2 -2
- package/lib/esm/testing/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/core/parser/tw-parser.ts +118 -1
- package/src/core/style-builder/build-style.ts +12 -1
- package/src/core/style-builder/union-builder.ts +10 -1
- package/src/runtime/hooks/use-scheme.ts +8 -4
- package/src/runtime/index.ts +1 -0
- package/src/runtime/lookup-css.ts +28 -0
- package/src/testing/index.ts +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tw-parser.cjs","sources":["../../../../../src/core/parser/tw-parser.ts"],"sourcesContent":["import { compile } from '@tailwindcss/node'\nimport { Scanner, type SourceEntry } from '@tailwindcss/oxide'\nimport { formatHex as culoriFormatHex } from 'culori'\nimport { Features, transform, type TransformOptions } from 'lightningcss'\nimport { declarationToRnEntries } from './declaration'\nimport { detectGradientAtom, type GradientAtomInfo } from './gradient'\nimport { detectHapticAtom, type HapticRequest } from './haptics'\nimport { keyframeSelectorOffsets, keyframesName, pickAnimationName } from './keyframes'\nimport { serializeInitialValue } from './property'\nimport { classNameFromSelector } from './selector'\nimport {\n BASE_SCHEME,\n compileReadyTheme,\n extractCustomVariantSchemes,\n extractSchemeAliases,\n extractThemeVars,\n type ThemeSchemeTable,\n} from './theme-vars'\nimport { coerceUnparsedValue, serializeTokens, substituteThemeVars } from './tokens'\nimport { normalizeColorString } from './color'\nimport type { RNStyle } from './types'\nimport type { Declaration as LcDeclaration, TokenOrValue } from 'lightningcss'\n\n/**\n * Inferred compiler type. `@tailwindcss/node` doesn't export its\n * compiler shape as a named type, so we pull it off the `compile()`\n * return to stay resilient to minor upstream shape shifts.\n */\ntype TailwindCompiler = Awaited<ReturnType<typeof compile>>\n\n/**\n * Default LightningCSS transform options for TailwindParser's visitor.\n * Its taken from official Tailwind source:\n * https://github.com/tailwindlabs/tailwindcss/blob/main/packages/%40tailwindcss-node/src/optimize.ts\n */\nconst DEFAULT_TRANSFORM_OPTIONS: Partial<TransformOptions<never>> = {\n drafts: {\n customMedia: true,\n },\n nonStandard: {\n deepSelectorCombinator: true,\n },\n include: Features.Nesting | Features.MediaQueries,\n exclude: Features.LogicalProperties | Features.DirSelector | Features.LightDark,\n // NOTE: deliberately no `targets`. With targets that include\n // color-mix-supporting browsers (Safari 16.4+, Chrome 111+, …),\n // lightningcss EVALUATES `color-mix(in oklab, var(--theme-color)\n // <pct>%, transparent)` at parse time using whichever value of\n // `--theme-color` it sees first in the cascade. Tailwind v4 emits\n // exactly this shape for `<prop>-<themed>/<N>` utilities (e.g.\n // `border-text/20`), so the resulting RGB color is locked to ONE\n // scheme — every variant gets the same value. By dropping targets,\n // lightningcss leaves color-mix as an unparsed function and our\n // per-scheme `unparsedToEntries` substitution path runs instead,\n // producing the right rgba(...) for each scheme. Targets in this\n // pipeline are otherwise unused — we never re-emit CSS from the AST.\n}\n/** Parser configuration — one instance per Metro session, theme CSS fixed. */\nexport interface TailwindParserConfig {\n /**\n * Theme CSS passed to `@tailwindcss/node`'s compiler. Typically the\n * user's `global.css`. We append `theme(inline)` to the tailwindcss\n * import so Tailwind resolves every `var(--theme-token)` at compile\n * time — that gives lightningcss fully-typed values (integers / rems /\n * colors) instead of unresolved `var()` references.\n */\n themeCss: string\n /**\n * Glob sources the oxide Scanner walks at project-scan time\n * (`parseProject()`). Typically\n * `[{ base: projectRoot, pattern: '**\\/*.{ts,tsx,js,jsx}', negated: false }]`\n * plus negated globs for `node_modules` and the rnwind cache dir.\n *\n * When omitted, the scanner has no sources and `parseProject()`\n * returns an empty result — `parseAtoms()` (per-file, content-driven)\n * still works without sources.\n */\n sources?: readonly SourceEntry[]\n}\n\n/** Per-call inputs — Metro hands us file content + filename; we derive the extension. */\nexport interface ParseOptions {\n content: string\n extension: string\n}\n\n/** One parsed keyframe step — offset plus the RN style at that offset. */\nexport interface KeyframeStep {\n offset: string\n style: RNStyle\n}\n\n/** One parsed `@keyframes` animation block. */\nexport interface KeyframeBlock {\n name: string\n steps: KeyframeStep[]\n}\n\n/** Interactive variant ('active' / 'focus') an `active:`/`focus:` atom carries. */\nexport type InteractiveStateTag = 'active' | 'focus'\n\n/**\n * Per-scheme resolved style for a single utility class. Keys are scheme\n * names declared via `@variant <name>` in the theme CSS (or the synthetic\n * `'base'` scheme for themes without variants). Values are the RN style\n * object under that scheme.\n *\n * The reserved `__state` key is set on `active:` / `focus:` atoms so\n * the build-side style-builder can tag the atom for `precomputeHoist`\n * — which routes interactive atoms into the stated-hoist's 4-state\n * precompute. Standard atoms have no `__state`.\n */\nexport type SchemedStyle = Readonly<Record<string, RNStyle>> & {\n /** Interactive-state gate set by `active:` / `focus:` variants. */\n readonly __state?: InteractiveStateTag\n}\n\n/** Full result of one `parseAtoms` call. */\nexport interface ParsedOutput {\n /** Resolved RN style per utility class, per declared scheme. */\n atoms: Map<string, SchemedStyle>\n /** `@keyframes <name> { ... }` blocks the candidates pulled in. */\n keyframes: Map<string, KeyframeBlock>\n /** `@property --x { initial-value: y }` declared custom-property defaults. */\n propertyDefaults: Map<string, string>\n /**\n * Gradient metadata per atom, for atoms that play a role in a\n * Tailwind v4 gradient (`from-*`, `via-*`, `to-*`, `bg-gradient-to-*`,\n * `bg-linear-to-*`). The transformer reads this map to extract\n * `colors / start / end` props at JSX-rewrite time. Regular non-\n * gradient atoms don't appear here.\n */\n gradientAtoms: Map<string, GradientAtomInfo>\n /**\n * Haptic metadata per atom for classes that emit a\n * `--rnwind-haptic` marker. The transformer reads this map to\n * strip the atom from the className and wire a mount-time or\n * press-time call into the `onHaptics` callback registered on\n * `<SchemeProvider>`.\n */\n hapticAtoms: Map<string, HapticRequest>\n /** Candidates oxide surfaced, in document order. */\n candidates: readonly string[]\n /** Every scheme the theme declares (or `['base']` when there are no `@variant` blocks). */\n schemes: readonly string[]\n /**\n * Responsive breakpoint name → minimum-width threshold (px). Pulled from\n * `--breakpoint-*` tokens in the compiled `:root` block, so both\n * Tailwind defaults (`sm`, `md`, `lg`, `xl`, `2xl`) and any user\n * override (e.g. `--breakpoint-3xl: 120rem`) land here. Used by the\n * style-builder to emit `registerBreakpoints({...})` in the manifest\n * so the runtime can filter `md:*` / `lg:*` atoms based on the\n * provider's `windowWidth`.\n */\n breakpoints: ReadonlyMap<string, number>\n}\n\n/**\n * Parses one source file's Tailwind usage into RN-ready style objects.\n *\n * Pipeline:\n * 1. `@tailwindcss/oxide` Scanner finds every Tailwind candidate.\n * 2. `@tailwindcss/node` compiler emits CSS for those candidates with\n * theme tokens inlined.\n * 3. lightningcss `transform` + typed visitor walks the emitted CSS:\n * - `style` rules → per-class RN-style object.\n * - `@keyframes` rules → per-name step map (Reanimated-ready).\n * - `@property` rules → custom-property initial values.\n *\n * One instance holds one Scanner + one lazily-built compiler so repeated\n * calls share upstream state. Theme CSS is fixed at construction — theme\n * edits require a new parser.\n */\nexport class TailwindParser {\n private readonly scanner: Scanner\n private compiler: TailwindCompiler | undefined\n private readonly themeSchemes: ThemeSchemeTable\n private readonly schemeAliases: ReadonlyMap<string, string>\n /**\n * Scheme names declared via `@custom-variant <name> …;`. A scheme\n * listed here but absent from {@link themeSchemes} (no `@variant`\n * override block) draws its values from the base `@theme` — the\n * standard Tailwind v4 \"light defaults + dark override\" shape.\n */\n private readonly customVariantSchemes: readonly string[]\n /**\n * Memoise `resolveCandidates` results by candidate-list fingerprint.\n * Fast Refresh hits this on every save: oxide's scan is cheap, but\n * the LightningCSS visitor walk over the compiled CSS is ~2ms per\n * file. A file whose `className` literals didn't change returns the\n * SAME candidate set, so the second `parseAtoms` call returns the\n * cached `ParsedOutput` — zero compile, zero visitor walk.\n *\n * Theme CSS changes build a new `TailwindParser` (from\n * `getRnwindState` detecting the hash shift), so this cache is\n * naturally invalidated — no stale-theme values leak through.\n */\n private readonly parseCache = new Map<string, ParsedOutput>()\n\n /**\n * Build a parser bound to a theme CSS source. `@theme` and\n * `@variant` blocks are extracted eagerly into a scheme table the\n * visitor consults when resolving `var(--x)` references.\n * @param config Parser configuration.\n */\n constructor(private readonly config: TailwindParserConfig) {\n this.themeSchemes = extractThemeVars(config.themeCss)\n this.schemeAliases = extractSchemeAliases(config.themeCss)\n this.customVariantSchemes = extractCustomVariantSchemes(config.themeCss)\n this.scanner = new Scanner({ sources: config.sources ? [...config.sources] : [] })\n }\n\n /**\n * Schemes declared by the user — the union of every `@custom-variant\n * <name>` declaration and every `@variant <name>` block, or just\n * `['base']` for themes without any. Used to decide how many\n * per-scheme buckets the per-atom resolver fills. Exposed publicly so\n * Metro integration can hand the names to the `.d.ts` generator\n * without a full parse.\n *\n * Both sources matter. `@variant` blocks alone miss the common\n * Tailwind v4 shape where the light palette sits in the base `@theme`\n * and only `@variant dark` overrides it: there `light` exists solely\n * as a `@custom-variant` and would otherwise be dropped, collapsing\n * every themed atom to a single bucket that can't switch.\n * `@custom-variant` order wins (it's where users enumerate their\n * schemes); any `@variant`-only scheme is appended after.\n * @returns Scheme names.\n */\n public get declaredSchemes(): readonly string[] {\n const ordered: string[] = []\n const seen = new Set<string>()\n for (const name of this.customVariantSchemes) {\n if (seen.has(name)) continue\n seen.add(name)\n ordered.push(name)\n }\n for (const name of this.themeSchemes.keys()) {\n if (name === BASE_SCHEME || seen.has(name)) continue\n seen.add(name)\n ordered.push(name)\n }\n return ordered.length > 0 ? ordered : [BASE_SCHEME]\n }\n\n /**\n * Build an effective var table for one scheme — base vars overridden by\n * variant vars. When the scheme IS `'base'` (no variants declared), the\n * base table is returned unchanged.\n * @param scheme Scheme name.\n * @returns Effective var name → value lookup for the scheme.\n */\n private effectiveVars(scheme: string): ReadonlyMap<string, string> {\n const base = this.themeSchemes.get(BASE_SCHEME)\n const variant = scheme === BASE_SCHEME ? undefined : this.themeSchemes.get(scheme)\n if (!variant) return base ?? new Map()\n // eslint-disable-next-line unicorn/no-useless-collection-argument\n const merged = new Map(base ?? [])\n for (const [k, v] of variant) merged.set(k, v)\n return merged\n }\n\n /**\n * Build the Tailwind compiler on first use and cache it. The theme CSS\n * gets a `theme(inline)` modifier on its `@import 'tailwindcss'` so\n * lightningcss sees resolved colors/lengths instead of `var()` refs.\n * @returns Cached compiler instance.\n */\n private async ensureCompiler(): Promise<TailwindCompiler> {\n if (this.compiler) return this.compiler\n const ready = compileReadyTheme(this.config.themeCss, this.themeSchemes)\n try {\n this.compiler = await compile(withInlineTheme(ready), {\n base: process.cwd(),\n onDependency: () => {},\n })\n } catch (error) {\n throw wrapThemeError(error)\n }\n return this.compiler\n }\n\n /**\n * Parse one file's Tailwind usage into the full typed result.\n * @param options Source content + extension.\n * @param options.content Raw source text to scan for Tailwind candidates.\n * @param options.extension File extension (`tsx`, `ts`, `jsx`, `js`) — feeds oxide's tokenizer.\n * @returns RN atoms, keyframes, property defaults, candidates list.\n */\n public async parseAtoms({ content, extension }: ParseOptions): Promise<ParsedOutput> {\n const candidates = this.scanner.getCandidatesWithPositions({ content, extension }).map((c) => c.candidate)\n const fingerprint = fingerprintCandidates(candidates)\n const cached = this.parseCache.get(fingerprint)\n if (cached) return cached\n const result = await this.resolveCandidates(candidates)\n this.parseCache.set(fingerprint, result)\n return result\n }\n\n /**\n * Scan every source file the Scanner was configured to watch via\n * `sources` and resolve the union of candidates in one pass. Used by\n * `UnionBuilder` at Metro startup (and on first worker access) to\n * populate the complete atom registry before ANY per-file transform\n * has run — so scheme files never ship a partial view of the theme.\n *\n * Hot-reload path uses `parseAtoms` for the per-file delta; this one\n * only runs once per parser instance (and whenever the parser is\n * rebuilt due to a theme CSS change).\n * @returns Full RN atoms, keyframes, property defaults for every\n * candidate discovered across the configured sources.\n */\n public async parseProject(): Promise<ParsedOutput> {\n const candidates = this.scanner.scan()\n return this.resolveCandidates(candidates)\n }\n\n /**\n * Compile + typed-visit the given candidate class names. Shared\n * implementation for both `parseAtoms` (single file) and\n * `parseProject` (whole project).\n * @param candidates Class-name candidates the oxide Scanner produced.\n * @returns Fully-typed parser result.\n */\n private async resolveCandidates(candidates: readonly string[]): Promise<ParsedOutput> {\n if (candidates.length === 0) return emptyOutput()\n const compiler = await this.ensureCompiler()\n let css: string\n try {\n css = compiler.build([...candidates])\n } catch (error) {\n throw wrapThemeError(error)\n }\n // Tailwind v4 emits opacity-suffixed themed colors as a pre-resolved\n // sRGB fallback PLUS a `@supports`-gated var()-based override:\n // border-color: color-mix(in srgb, #0A0A0A 20%, transparent);\n // @supports (color: color-mix(in lab, red, red)) {\n // border-color: color-mix(in oklab, var(--color-text) 20%, transparent);\n // }\n // Lightningcss takes the OUTER fallback (locked to whichever scheme\n // the compiler resolved first), and our per-scheme substitution\n // never gets a chance. Unwrap the @supports so the var()-based\n // declaration overrides the fallback in the same rule — lightningcss\n // emits the override as `unparsed` and the parser's themeVars-aware\n // path produces correct rgba per scheme.\n css = unwrapColorMixSupports(css)\n // `compiler.build(candidates)` memoizes across calls — it returns CSS for\n // every candidate the compiler has EVER seen in this process. To keep\n // parser output pure per-call we restrict outputs to this call's\n // candidates:\n // - atoms: match class selectors against `wanted`.\n // - keyframes: collect `animation-name` references during the style\n // walk, then filter the visited keyframes to referenced names.\n const wanted = new Set(candidates)\n const schemes = this.declaredSchemes\n // Tailwind's compiled CSS contains every theme token — including\n // ones imported from secondary CSS files (e.g. `@import\n // 'rnwind/css'`). Pull them out of the `:root` block so\n // `var(--duration-normal)` style references in unparsed declarations\n // resolve to literal values (`220ms`) instead of being passed through\n // to RN, which can't read CSS custom properties.\n const compiledTheme = extractRootCustomProperties(css)\n const schemeTables = new Map<string, ReadonlyMap<string, string>>()\n for (const scheme of schemes) {\n const merged = new Map(compiledTheme)\n for (const [k, v] of this.effectiveVars(scheme)) merged.set(k, v)\n schemeTables.set(scheme, merged)\n }\n\n const atoms = new Map<string, Record<string, RNStyle>>()\n const keyframes: ParsedOutput['keyframes'] = new Map()\n const referencedKeyframes = new Set<string>()\n const propertyDefaults: ParsedOutput['propertyDefaults'] = new Map()\n const gradientAtoms: ParsedOutput['gradientAtoms'] = new Map()\n const hapticAtoms: ParsedOutput['hapticAtoms'] = new Map()\n const breakpoints = new Map<string, number>()\n const { schemeAliases } = this\n\n try {\n transform({\n ...DEFAULT_TRANSFORM_OPTIONS,\n filename: 'rnwind-virtual.css',\n code: Buffer.from(css),\n visitor: {\n Rule: {\n style(rule) {\n for (const selector of rule.value.selectors) {\n const className = classNameFromSelector(selector)\n if (!className || !wanted.has(className)) continue\n processStyleRule(\n rule.value.declarations.declarations,\n className,\n { schemes, schemeTables, atoms, referencedKeyframes, schemeAliases, breakpoints },\n rule.value.rules ?? [],\n )\n // Gradient atoms are detected per rule: the parser's main\n // RN-style path drops the `--tw-gradient-*` customs as\n // unsupported, but for gradient utilities we want to\n // surface their role + resolved colour so the transformer\n // can rewrite `<LinearGradient className=\"...\">` into\n // `colors={...}` / `start={...}` / `end={...}` props.\n const gradientTable = schemeTables.get(BASE_SCHEME) ?? schemeTables.get(schemes[0] ?? BASE_SCHEME)\n const gradient = detectGradientAtom(rule.value.declarations.declarations, gradientTable)\n if (gradient) gradientAtoms.set(className, gradient)\n // Haptics may live on the rule directly OR inside a\n // nested pseudo (e.g. `&:active` for `active:haptic-*`).\n // Inspect both so `active:haptic-medium` registers.\n const hapticDecls: LcDeclaration[] = [...rule.value.declarations.declarations]\n for (const nested of rule.value.rules ?? []) hapticDecls.push(...collectNestedDecls(nested))\n const haptic = detectHapticAtom(hapticDecls)\n if (haptic) hapticAtoms.set(className, haptic)\n }\n },\n keyframes(rule) {\n const name = keyframesName(rule.value.name)\n if (!name) return\n const steps: KeyframeStep[] = []\n const baseTable = schemeTables.get(BASE_SCHEME) ?? schemeTables.get(schemes[0] ?? BASE_SCHEME)\n for (const frame of rule.value.keyframes) {\n const offsets = keyframeSelectorOffsets(frame.selectors)\n if (offsets.length === 0) continue\n const style: RNStyle = {}\n const frameDecls = frame.declarations.declarations ?? []\n for (const decl of frameDecls) {\n for (const [key, value] of declarationToRnEntries(decl, baseTable)) style[key] = value\n }\n // One frame can carry several offsets (`0%, 100% { … }`); emit a\n // step for each so the terminal frame isn't lost.\n for (const offset of offsets) steps.push({ offset, style })\n }\n keyframes.set(name, { name, steps })\n },\n property(rule) {\n const initial = serializeInitialValue(rule.value.initialValue)\n if (initial !== null) propertyDefaults.set(rule.value.name, initial)\n },\n },\n },\n })\n } catch (error) {\n throw wrapThemeError(error)\n }\n\n // Prune keyframes to those actually referenced by this call's atoms.\n for (const name of keyframes.keys()) {\n if (!referencedKeyframes.has(name)) keyframes.delete(name)\n }\n\n return { atoms, keyframes, propertyDefaults, gradientAtoms, hapticAtoms, candidates: [...candidates], schemes, breakpoints }\n }\n}\n\n/**\n * Wrap an error from `@tailwindcss/node`'s compiler or `lightningcss`'s\n * transform with a `rnwind:` prefix so the user sees a clear \"this came\n * from your theme CSS\" signal in Metro's stack trace. Preserves the\n * original error as `cause` so downstream tooling (Sentry, Metro\n * symbolication) can still inspect it.\n * @param error Underlying error from the compiler or transform.\n * @returns Prefixed Error with the original attached as `cause`.\n */\nfunction wrapThemeError(error: unknown): Error {\n const message = error instanceof Error ? error.message : String(error)\n const wrapped = new Error(\n `rnwind: failed to compile theme CSS — ${message}\\n` +\n `Check your global.css for unbalanced braces, unknown @utility / @variant declarations, ` +\n `or unsupported color functions. Run \\`bun run --cwd packages/rnwind code-check\\` if this is the rnwind repo itself.`,\n )\n if (error instanceof Error) (wrapped as { cause?: unknown }).cause = error\n return wrapped\n}\n\n/**\n * Fingerprint a candidate list for `parseCache` lookup. Sorting gives\n * the same key regardless of source order (the set of candidates is\n * what drives `resolveCandidates`'s output, not their order).\n * @param candidates Raw oxide-scanner output for one file.\n * @returns Canonical string key.\n */\nfunction fingerprintCandidates(candidates: readonly string[]): string {\n if (candidates.length === 0) return ''\n if (candidates.length === 1) return candidates[0]!\n return [...candidates].toSorted((a, b) => a.localeCompare(b)).join('\\0')\n}\n\n/**\n * Empty sentinel returned when oxide finds no candidates in the file.\n * @returns Zero-atom result with only the `base` scheme declared.\n */\nfunction emptyOutput(): ParsedOutput {\n return {\n atoms: new Map(),\n keyframes: new Map(),\n propertyDefaults: new Map(),\n gradientAtoms: new Map(),\n hapticAtoms: new Map(),\n candidates: [],\n schemes: [BASE_SCHEME],\n breakpoints: new Map(),\n }\n}\n\n/**\n * Upgrade `@import 'tailwindcss'` (single- or double-quoted, with or\n * without an existing `theme(...)` clause) to `@import 'tailwindcss'\n * theme(inline)`. User-authored `theme(...)` clauses are preserved so\n * overrides win.\n * @param css Theme CSS source.\n * @returns CSS with the Tailwind import upgraded.\n */\nfunction withInlineTheme(css: string): string {\n return css.replaceAll(/(@import\\s+['\"]tailwindcss['\"])(?!\\s*theme\\()/g, '$1 theme(inline)')\n}\n\n/**\n * Collect rule-local custom-property writes (`--tw-translate-x`,\n * `--tw-scale-x`, `--tw-skew-y`, …). Tailwind v4 uses these as\n * composable transform tokens that `translate: var(--tw-translate-x)\n * var(--tw-translate-y)` then references. Surfacing them as theme vars\n * lets the declaration converter resolve the references as if they\n * were declared in `@theme`.\n * @param decls All declarations from one lightningcss style rule.\n * @returns Map from custom-property name (with leading `--`) to its raw value.\n */\nfunction collectRuleLocalVars(decls: readonly { property: string; value: unknown }[]): ReadonlyMap<string, string> {\n const out = new Map<string, string>()\n for (const decl of decls) {\n if (decl.property !== 'custom') continue\n const custom = decl.value as { name: { name: string } | string; value?: readonly TokenOrValue[] }\n const rawName = typeof custom.name === 'string' ? custom.name : custom.name.name\n if (!rawName.startsWith('--tw-')) continue\n if (!custom.value) continue\n const text = serializeTokens(custom.value).trim()\n if (text.length > 0) out.set(rawName, text)\n }\n return out\n}\n\ninterface StyleRuleContext {\n schemes: readonly string[]\n schemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>\n atoms: Map<string, Record<string, RNStyle>>\n referencedKeyframes: Set<string>\n schemeAliases: ReadonlyMap<string, string>\n /**\n * Mutable breakpoint registry — `applyMediaRule` populates this as it\n * walks responsive variant atoms. The driving signal is the `@media\n * (width >= Xrem)` condition on the nested rule. Result lives on\n * {@link ParsedOutput.breakpoints}.\n */\n breakpoints: Map<string, number>\n}\n\n/**\n * Process one matched style rule for a given class name: fold its\n * declarations into the per-scheme buckets, detect referenced keyframes,\n * then apply Tailwind's composable transform post-pass.\n * @param declarations Declarations from one lightningcss style rule.\n * @param className Class name this rule's selectors matched.\n * @param ctx Parser-call-wide context (schemes, tables, output maps).\n * @param nestedRules Nested style rules (Tailwind variant prefixes like `dark:`\n * wrap their decls in `&:where(.<scheme>, .<scheme> *)` nested rules).\n */\nfunction processStyleRule(\n declarations: readonly LcDeclaration[],\n className: string,\n ctx: StyleRuleContext,\n nestedRules: readonly unknown[] = [],\n): void {\n const bucket = ctx.atoms.get(className) ?? {}\n const ruleLocalVars = collectRuleLocalVars(declarations)\n const ruleSchemeTables = mergeRuleVars(ctx.schemeTables, ruleLocalVars)\n // Detect active:/focus: prefix on the class name. Tailwind emits the\n // actual decls inside `&:active { … }` / `&:focus { … }`, and the\n // OUTER rule has zero direct decls — so the existing per-scheme phase\n // below produces an empty bucket. We collect the inner decls into the\n // base scheme and tag the bucket with `__state` so the style-builder\n // can route the atom into `precomputeHoist`'s state buckets when the\n // interactive state.\n const interactiveState = classNameStateOf(className)\n // Phase 1: outer declarations apply to EVERY scheme (unconditional\n // utilities like `opacity-50`).\n for (const decl of declarations) {\n applyDeclarationToBucket(decl, bucket, ctx.schemes, ruleSchemeTables)\n const animationRef = pickAnimationName(decl)\n if (animationRef) ctx.referencedKeyframes.add(animationRef)\n }\n applyComposedTransform(bucket, ctx.schemes, ruleLocalVars)\n applyComposedShadow(bucket, ctx.schemes, ruleLocalVars, ruleSchemeTables)\n applyComposedRing(bucket, ctx.schemes, ruleLocalVars, ruleSchemeTables)\n // Phase 2: nested rules — three orthogonal flavours, dispatched on\n // the lightningcss node `type`:\n // - `media`: Tailwind v4 responsive variants (`sm:`, `md:`, …) wrap\n // declarations in `@media (width >= Xrem)`. Decls fold into every\n // scheme; the atom's name carries the breakpoint association so\n // the runtime can gate it on `windowWidth`.\n // - `style` + `interactiveState`: `&:active` / `&:focus` pseudo\n // decls (every scheme — interaction is theme-orthogonal).\n // - `style` (default): Tailwind v4 scheme variants\n // (`&:where(.<scheme>, .<scheme> *)`).\n for (const scheme of ctx.schemes) bucket[scheme] = bucket[scheme] ?? {}\n for (const nested of nestedRules) {\n const node = nested as { type?: string }\n if (node?.type === 'media') {\n applyMediaRule(nested, className, bucket, ctx, ruleSchemeTables, ruleLocalVars)\n continue\n }\n if (interactiveState) {\n applyInteractiveNestedRule(nested, bucket, ctx, ruleSchemeTables, ruleLocalVars)\n } else {\n applyNestedSchemeRule(nested, bucket, ctx, ruleSchemeTables, ruleLocalVars)\n }\n }\n normalizeLineHeightToPx(bucket, ctx.schemes)\n if (interactiveState) (bucket as Record<string, unknown>).__state = interactiveState\n ctx.atoms.set(className, bucket)\n}\n\n/** Recognised interactive variant prefixes. RN can drive both at runtime. */\nconst INTERACTIVE_PREFIXES = new Set(['active', 'focus'])\n\n/**\n * Inspect a class name for a leading interactive variant prefix. The\n * Tailwind compiler emits `active:bg-sky-700` literally (backslash-\n * escaped for CSS), and that name is the same string the parser sees.\n * So a cheap `split(':')` on the head is enough — no need to parse the\n * pseudo-class out of the selector itself.\n * @param className Tailwind utility class (e.g. `active:bg-sky-700`).\n * @returns The interactive state prefix (`'active'` / `'focus'`), or null when none.\n */\nfunction classNameStateOf(className: string): 'active' | 'focus' | null {\n const colon = className.indexOf(':')\n if (colon === -1) return null\n const prefix = className.slice(0, colon)\n if (!INTERACTIVE_PREFIXES.has(prefix)) return null\n return prefix as 'active' | 'focus'\n}\n\n/**\n * Pull the `min-width` threshold (px) out of a `@media (width >= Xrem)`\n * lightningcss node. Tailwind v4 emits exactly this shape for every\n * responsive variant — `>= 40rem` for `sm`, `>= 48rem` for `md`, etc.\n * Returns null for any other media condition (`hover`, `prefers-*`,\n * range bounds we don't model) so the caller can skip non-responsive\n * media wrappers without breaking.\n * @param nested A lightningcss `media` rule node.\n * @returns Threshold in px, or null when the condition isn't a simple\n * width-min check.\n */\nfunction readMediaMinWidthPx(nested: unknown): number | null {\n if (typeof nested !== 'object' || nested === null) return null\n const node = nested as { type?: string; value?: { query?: { mediaQueries?: readonly unknown[] } } }\n if (node.type !== 'media') return null\n const queries = node.value?.query?.mediaQueries\n if (queries?.length !== 1) return null\n const query = queries[0] as {\n condition?: {\n type?: string\n value?: {\n type?: string\n name?: string\n operator?: string\n value?: { type?: string; value?: { type?: string; value?: { unit?: string; value?: number } } }\n }\n }\n }\n const {condition} = query\n if (condition?.type !== 'feature') return null\n const feature = condition.value\n if (feature?.type !== 'range' || feature.name !== 'width') return null\n if (feature.operator !== 'greater-than-equal') return null\n const length = feature.value\n if (length?.type !== 'length') return null\n const inner = length.value?.value\n if (!inner || typeof inner.value !== 'number') return null\n if (inner.unit === 'rem') return inner.value * 16\n if (inner.unit === 'px') return inner.value\n return null\n}\n\n/**\n * Pull the leading `prefix:` segment off a className. `md:bg-red-500`\n * → `'md'`. Returns null for atoms without a colon (the common case)\n * or for empty prefixes.\n * @param className Atom name.\n * @returns Prefix or null.\n */\nfunction leadingPrefix(className: string): string | null {\n const colon = className.indexOf(':')\n if (colon <= 0) return null\n return className.slice(0, colon)\n}\n\n/**\n * Fold a Tailwind v4 responsive `@media (width >= Xrem)` nested rule\n * into every scheme's bucket and record the breakpoint threshold\n * (`md` → 768) on the parser-call context. The runtime later gates the\n * atom on `windowWidth` against this threshold via the prefix on the\n * atom's class name.\n *\n * Read directly from the media condition rather than from compiled\n * `--breakpoint-*` `:root` tokens because Tailwind's `theme(inline)`\n * mode strips those — the only authoritative source for the actual\n * thresholds Tailwind generated is the `@media` query itself.\n * @param nested One nested `media` node from `rule.value.rules`.\n * @param className Outer rule's class name (carries the breakpoint prefix).\n * @param bucket Per-scheme style map for the atom.\n * @param ctx Parser-call-wide context.\n * @param ruleSchemeTables Per-scheme var tables (outer rule's merged table).\n * @param ruleLocalVars Outer rule's `--tw-*` vars (inherited for inner decls).\n */\nfunction applyMediaRule(\n nested: unknown,\n className: string,\n bucket: Record<string, RNStyle>,\n ctx: StyleRuleContext,\n ruleSchemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n ruleLocalVars: ReadonlyMap<string, string>,\n): void {\n const decls = collectNestedDecls(nested)\n if (decls.length === 0) return\n const minWidth = readMediaMinWidthPx(nested)\n const prefix = leadingPrefix(className)\n if (minWidth !== null && prefix !== null) ctx.breakpoints.set(prefix, minWidth)\n for (const scheme of ctx.schemes) {\n const table = ruleSchemeTables.get(scheme)\n const schemeBucket = bucket[scheme] ?? {}\n for (const decl of decls) {\n for (const [key, value] of declarationToRnEntries(decl, table)) schemeBucket[key] = value\n const animationRef = pickAnimationName(decl)\n if (animationRef) ctx.referencedKeyframes.add(animationRef)\n }\n const nestedLocalVars = new Map(ruleLocalVars)\n for (const [k, v] of collectRuleLocalVars(decls)) nestedLocalVars.set(k, v)\n applyComposedTransformToScheme(schemeBucket, nestedLocalVars)\n applyComposedShadowToScheme(schemeBucket, nestedLocalVars, table)\n bucket[scheme] = schemeBucket\n }\n}\n\n/**\n * Fold one nested rule from an interactive (`active:` / `focus:`) atom\n * into every scheme's bucket. The Tailwind output for `active:bg-sky-700`\n * is `.active\\:bg-sky-700 { &:active { background-color: oklch(...) } }`\n * — the outer rule has zero\n * decls; the leaf lives three levels deep through pseudo + media. We\n * unwrap the pseudo and the media shell, take the inner decls, and\n * apply them across every scheme — interactivity is orthogonal to\n * theme. The bucket gets `__state: 'active' | 'focus'` set elsewhere.\n * @param nested One nested-rule node from `rule.value.rules`.\n * @param bucket Per-scheme style map for the atom.\n * @param ctx Parser-call-wide context.\n * @param ruleSchemeTables Per-scheme var tables (outer rule's merged table).\n * @param ruleLocalVars Outer rule's `--tw-*` vars (inherited for inner decls).\n */\nfunction applyInteractiveNestedRule(\n nested: unknown,\n bucket: Record<string, RNStyle>,\n ctx: StyleRuleContext,\n ruleSchemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n ruleLocalVars: ReadonlyMap<string, string>,\n): void {\n const decls = collectNestedDecls(nested)\n if (decls.length === 0) return\n for (const scheme of ctx.schemes) {\n const table = ruleSchemeTables.get(scheme)\n const schemeBucket = bucket[scheme] ?? {}\n for (const decl of decls) {\n for (const [key, value] of declarationToRnEntries(decl, table)) schemeBucket[key] = value\n const animationRef = pickAnimationName(decl)\n if (animationRef) ctx.referencedKeyframes.add(animationRef)\n }\n const nestedLocalVars = new Map(ruleLocalVars)\n for (const [k, v] of collectRuleLocalVars(decls)) nestedLocalVars.set(k, v)\n applyComposedTransformToScheme(schemeBucket, nestedLocalVars)\n applyComposedShadowToScheme(schemeBucket, nestedLocalVars, table)\n bucket[scheme] = schemeBucket\n }\n}\n\n/**\n * Recursively flatten a nested style/media rule into its leaf\n * declarations. Tailwind wraps interactive pseudo decls in `style`\n * nodes (`&:active`, `&:focus`); the walk unwraps them and any\n * `@media` shell around them.\n * @param nested A nested rule node.\n * @returns Every declaration found in the nested subtree.\n */\nfunction collectNestedDecls(nested: unknown): readonly LcDeclaration[] {\n if (typeof nested !== 'object' || nested === null) return []\n const node = nested as { type?: string; value?: NestedStyleRule & { rules?: readonly unknown[] } }\n if (!node.value) return []\n // `style` (with `&:active`) and `media` wrappers both surface the\n // actual decls. lightningcss surfaces inner-only declarations as a\n // `nested-declarations` node — flatten that too.\n if (node.type === 'nested-declarations') return [...(node.value.declarations?.declarations ?? [])]\n if (node.type !== 'style' && node.type !== 'media') return []\n const out: LcDeclaration[] = [...(node.value.declarations?.declarations ?? [])]\n for (const child of node.value.rules ?? []) out.push(...collectNestedDecls(child))\n return out\n}\n\n/**\n * Fold one nested style rule (Tailwind's `&:where(.<scheme>, .<scheme> *)`\n * pattern) into the scheme bucket its selector targets. Rules we can't\n * attribute to a single scheme are skipped — they'd only ever reach the\n * bucket via CSS cascading in a browser, which doesn't translate to RN.\n * @param nested One nested-rule node from `rule.value.rules`.\n * @param bucket Per-scheme style map for the atom.\n * @param ctx Parser-call-wide context.\n * @param ruleSchemeTables Per-scheme var tables (outer rule's merged table).\n * @param ruleLocalVars Outer rule's `--tw-*` vars (inherited for inner decls).\n */\nfunction applyNestedSchemeRule(\n nested: unknown,\n bucket: Record<string, RNStyle>,\n ctx: StyleRuleContext,\n ruleSchemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n ruleLocalVars: ReadonlyMap<string, string>,\n): void {\n if (typeof nested !== 'object' || nested === null) return\n const node = nested as { type?: string; value?: NestedStyleRule }\n if (node.type !== 'style' || !node.value) return\n const targetScheme = detectNestedScheme(node.value.selectors, ctx.schemes, ctx.schemeAliases)\n if (!targetScheme) return\n const innerDecls = node.value.declarations?.declarations ?? []\n const table = ruleSchemeTables.get(targetScheme)\n const schemeBucket = bucket[targetScheme] ?? {}\n for (const decl of innerDecls) {\n for (const [key, value] of declarationToRnEntries(decl, table)) schemeBucket[key] = value\n const animationRef = pickAnimationName(decl)\n if (animationRef) ctx.referencedKeyframes.add(animationRef)\n }\n // Apply the composed-transform + shadow post-passes to just this one\n // scheme, so nested `--tw-*` custom prop writes compose correctly.\n const nestedLocalVars = new Map(ruleLocalVars)\n for (const [k, v] of collectRuleLocalVars(innerDecls)) nestedLocalVars.set(k, v)\n applyComposedTransformToScheme(schemeBucket, nestedLocalVars)\n applyComposedShadowToScheme(schemeBucket, nestedLocalVars, table)\n bucket[targetScheme] = schemeBucket\n}\n\n/**\n * Shape of a lightningcss style rule as it appears inside `rule.value.rules`.\n * Loose typing because the full type is a sprawling discriminated union\n * we only need one shape from.\n */\ninterface NestedStyleRule {\n selectors: readonly (readonly unknown[])[]\n declarations?: { declarations: readonly LcDeclaration[] }\n}\n\n/**\n * Detect which scheme a nested `&:where(.<scheme>, .<scheme> *)`\n * selector targets. Recognises both the rnwind-default literal class\n * (`.dark`) and any user-declared `@custom-variant` selector class\n * (`.scheme-dark`), via the `aliases` map built from the theme CSS.\n * @param selectors Nested rule's selector lists.\n * @param schemes Declared scheme names.\n * @param aliases Class-name → scheme-name map from `@custom-variant` decls.\n * @returns Matching scheme name, or null when the selector isn't scheme-scoped.\n */\nfunction detectNestedScheme(\n selectors: readonly (readonly unknown[])[],\n schemes: readonly string[],\n aliases: ReadonlyMap<string, string>,\n): string | null {\n const known = new Set(schemes)\n for (const selector of selectors) {\n const found = findSchemeInSelector(selector, schemes, known, aliases)\n if (found) return found\n }\n return null\n}\n\n/**\n * Inner half of {@link detectNestedScheme} — extracted so each function\n * stays under the cognitive-complexity cap.\n * @param selector One compound selector (sequence of simple parts).\n * @param schemes Declared scheme names (for recursion).\n * @param known Set form of `schemes` for O(1) lookups.\n * @param aliases Class-name → scheme-name map from `@custom-variant` decls.\n * @returns Matching scheme name, or null.\n */\nfunction findSchemeInSelector(\n selector: readonly unknown[],\n schemes: readonly string[],\n known: ReadonlySet<string>,\n aliases: ReadonlyMap<string, string>,\n): string | null {\n for (const part of selector) {\n const direct = matchSchemeClass(part, known, aliases)\n if (direct) return direct\n const nested = matchSchemeInWhere(part, schemes, aliases)\n if (nested) return nested\n }\n return null\n}\n\n/**\n * Match a `.scheme` class part against the declared schemes (literal\n * match) or against the `@custom-variant` alias map (e.g. `.scheme-dark`\n * → `dark`).\n * @param part One simple selector part.\n * @param known Declared scheme names.\n * @param aliases Class-name → scheme-name map from `@custom-variant` decls.\n * @returns Matching scheme name, or null.\n */\nfunction matchSchemeClass(part: unknown, known: ReadonlySet<string>, aliases: ReadonlyMap<string, string>): string | null {\n if (typeof part !== 'object' || part === null) return null\n const node = part as { type?: string; name?: string }\n if (node.type !== 'class') return null\n if (typeof node.name !== 'string') return null\n if (known.has(node.name)) return node.name\n return aliases.get(node.name) ?? null\n}\n\n/**\n * Match a `:where(.scheme, …)` pseudo-class wrapper and recurse into\n * its inner selectors.\n * @param part One simple selector part.\n * @param schemes Declared scheme names.\n * @param aliases Class-name → scheme-name map from `@custom-variant` decls.\n * @returns Matching scheme name from inside the `where`, or null.\n */\nfunction matchSchemeInWhere(part: unknown, schemes: readonly string[], aliases: ReadonlyMap<string, string>): string | null {\n if (typeof part !== 'object' || part === null) return null\n const node = part as { type?: string; kind?: string; selectors?: readonly (readonly unknown[])[] }\n if (node.type !== 'pseudo-class' || node.kind !== 'where' || !node.selectors) return null\n return detectNestedScheme(node.selectors, schemes, aliases)\n}\n\n/**\n * Per-scheme version of `applyComposedTransform` — synthesize a\n * `transform` array into a SINGLE scheme's style from its rule-local\n * `--tw-*` vars.\n * @param style Scheme-specific style map.\n * @param ruleLocalVars Combined outer+nested `--tw-*` vars.\n */\nfunction applyComposedTransformToScheme(style: RNStyle, ruleLocalVars: ReadonlyMap<string, string>): void {\n const composed = composeTransformFromVars(ruleLocalVars)\n if (composed.length === 0) return\n delete style.translate\n delete style.scale\n delete style.rotate\n style.transform = composed\n}\n\n/**\n * Per-scheme version of `applyComposedShadow` — synthesize RN shadow\n * longhands into a SINGLE scheme's style from its `--tw-shadow` custom\n * prop.\n * @param style Scheme-specific style map.\n * @param ruleLocalVars Combined outer+nested `--tw-*` vars.\n * @param table Per-scheme var table for resolving `var(--color-x)` in colors.\n */\nfunction applyComposedShadowToScheme(\n style: RNStyle,\n ruleLocalVars: ReadonlyMap<string, string>,\n table?: ReadonlyMap<string, string>,\n): void {\n const rawShadow = ruleLocalVars.get('--tw-shadow')\n const rawShadowColor = ruleLocalVars.get('--tw-shadow-color')\n if (!rawShadow && rawShadowColor) {\n const color = resolveCustomColorString(rawShadowColor, table)\n if (!color) return\n delete style.boxShadow\n style.shadowColor = color\n return\n }\n if (!rawShadow) return\n const shadow = parseFirstShadow(rawShadow)\n if (!shadow) return\n delete style.boxShadow\n style.shadowColor = shadow.color\n style.shadowOffset = { width: shadow.x, height: shadow.y }\n style.shadowOpacity = shadow.opacity\n style.shadowRadius = shadow.blur\n style.elevation = Math.max(1, Math.min(24, Math.round(Math.max(shadow.y, shadow.blur / 2))))\n}\n\n/**\n * Tailwind v4's `shadow-*` utilities write a `--tw-shadow` custom prop\n * holding the actual `<x> <y> <blur> <spread> <color>` shadow values,\n * then a `box-shadow: var(--tw-shadow)` declaration RN can't use. This\n * post-pass parses `--tw-shadow` and emits the RN shadow longhands —\n * `shadowColor` / `shadowOffset` / `shadowOpacity` / `shadowRadius` /\n * `elevation` — so iOS and Android both render the shadow.\n * @param bucket Per-scheme style map for the atom.\n * @param schemes Scheme names active for this parse.\n * @param ruleLocalVars Rule-local `--tw-*` vars.\n * @param schemeTables Per-scheme var tables for resolving `var(--color-x)`.\n */\nfunction applyComposedShadow(\n bucket: Record<string, RNStyle>,\n schemes: readonly string[],\n ruleLocalVars: ReadonlyMap<string, string>,\n schemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n): void {\n const rawShadow = ruleLocalVars.get('--tw-shadow')\n const rawShadowColor = ruleLocalVars.get('--tw-shadow-color')\n // Color-only utility (`shadow-red-50`, `shadow-gray-200`, …): emit\n // `shadowColor` + `shadowOpacity: 1` so the explicit color overrides\n // the size utility's 0.1 alpha fallback (matches Tailwind v4 web,\n // where setting `--tw-shadow-color` swaps in a solid color). Offset /\n // blur / elevation come from the partner size utility's atom.\n if (!rawShadow && rawShadowColor) {\n for (const scheme of schemes) {\n // Resolve per scheme — a custom token may differ between light/dark.\n const color = resolveCustomColorString(rawShadowColor, schemeTables.get(scheme))\n if (!color) continue\n const style = bucket[scheme] ?? {}\n delete style.boxShadow\n style.shadowColor = color\n bucket[scheme] = style\n }\n return\n }\n if (!rawShadow) return\n const shadow = parseFirstShadow(rawShadow)\n if (!shadow) return\n for (const scheme of schemes) {\n const style = bucket[scheme] ?? {}\n delete style.boxShadow\n style.shadowColor = shadow.color\n style.shadowOffset = { width: shadow.x, height: shadow.y }\n style.shadowOpacity = shadow.opacity\n style.shadowRadius = shadow.blur\n style.elevation = Math.max(1, Math.min(24, Math.round(Math.max(shadow.y, shadow.blur / 2))))\n bucket[scheme] = style\n }\n}\n\n/**\n * Synthesize RN ring styles from Tailwind's `--tw-ring-color` /\n * `--tw-ring-shadow` composable custom props. RN has no native ring;\n * we approximate by writing `borderColor` + `borderWidth` so the\n * outline is visible. Atoms that ALREADY set borderColor (e.g. paired\n * with `border-2`) keep their value — the ring just won't override.\n * @param bucket Per-scheme style map for the atom.\n * @param schemes Scheme names active for this parse.\n * @param ruleLocalVars Rule-local `--tw-*` vars.\n * @param schemeTables Per-scheme var tables for resolving `var(--color-x)`.\n */\nfunction applyComposedRing(\n bucket: Record<string, RNStyle>,\n schemes: readonly string[],\n ruleLocalVars: ReadonlyMap<string, string>,\n schemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n): void {\n const ringColor = ruleLocalVars.get('--tw-ring-color')\n if (!ringColor) return\n for (const scheme of schemes) {\n // Resolve per scheme — a custom token may differ between light/dark.\n const color = resolveCustomColorString(ringColor, schemeTables.get(scheme))\n if (!color) continue\n const style = bucket[scheme] ?? {}\n if (!('borderColor' in style)) style.borderColor = color\n bucket[scheme] = style\n }\n}\n\n/**\n * Tailwind composable shadow/inset-shadow alpha defaults. Their `100%` lives\n * in an `@property` initial-value (not the rule's local vars), so after the\n * `@supports` color-mix is unwrapped, `var(--tw-shadow-alpha)` is left dangling\n * and the shadow color fails to resolve. Seed the default; a `/<opacity>`\n * modifier still wins because the in-rule table value overrides it.\n */\nconst COMPOSABLE_ALPHA_DEFAULTS: ReadonlyMap<string, string> = new Map([\n ['--tw-shadow-alpha', '100%'],\n ['--tw-inset-shadow-alpha', '100%'],\n])\n\n/**\n * Resolve a CSS color string (`oklch(0.971 0.013 17.38)`, `#ff0000`,\n * `rgb(0 0 0 / 0.1)`) to the hex string RN's `shadowColor` accepts.\n * Wraps culori's parser via {@link parseCssColorToHex}.\n *\n * Custom `@theme` color tokens arrive as `var(--color-x)` (only the default\n * palette is `theme(inline)`-d), so `table` is substituted FIRST — without it\n * `shadow-<token>` / `ring-<token>` silently drop the color (culori can't\n * parse a bare `var()`). The table is per-scheme so a token that differs\n * between light/dark resolves to the right value for each.\n * @param raw Raw color text from a `--tw-shadow-color` / `--tw-ring-color` prop.\n * @param table Per-scheme var table for resolving `var(--color-x)` references.\n * @returns `#rrggbb` string, or null when culori can't parse it.\n */\nfunction resolveCustomColorString(raw: string, table?: ReadonlyMap<string, string>): string | null {\n const seeded = new Map([...COMPOSABLE_ALPHA_DEFAULTS, ...(table ?? [])])\n const substituted = substituteThemeVars(raw, seeded)\n // `coerceUnparsedValue` collapses Tailwind's opacity shape\n // `color-mix(in oklab, <color> <pct>%, transparent)` (emitted by\n // `shadow-<token>` / `ring-<token>`) to a flat rgba/hex and unwraps\n // `var(…, fallback)`. Modern spaces (`oklch(…)`) then lower via\n // `normalizeColorString`; anything still un-RN-safe falls to culori.\n const coerced = coerceUnparsedValue(unwrapVariableFallback(substituted).trim())\n if (typeof coerced !== 'string' || coerced.length === 0 || coerced.startsWith('var(')) return null\n if (coerced.startsWith('#') || coerced.startsWith('rgb') || coerced.startsWith('hsl')) return coerced\n return normalizeColorString(coerced) ?? parseCssColorToHex(coerced)\n}\n\n/**\n * Parse any CSS color expression into an `#rrggbb` string via culori.\n * Falls back to null when culori doesn't recognize the format.\n * @param text CSS color value.\n * @returns Hex string, or null.\n */\nfunction parseCssColorToHex(text: string): string | null {\n return formatHexSafe(text)\n}\n\n/**\n * Format a CSS color via culori.\n * @param text CSS color value.\n * @returns `#rrggbb` string when culori succeeds, else null.\n */\nfunction formatHexSafe(text: string): string | null {\n try {\n const hex = culoriFormatHex(text)\n return typeof hex === 'string' ? hex : null\n } catch {\n return null\n }\n}\n\ninterface ParsedShadow {\n x: number\n y: number\n blur: number\n spread: number\n color: string\n opacity: number\n}\n\n/**\n * Parse the first shadow from a `--tw-shadow` custom-property value.\n * The value is a comma-separated list of shadows; each shadow is\n * `<x> <y> <blur> <spread> <color>`. RN renders only one shadow per\n * view, so we keep the first.\n * @param raw Raw `--tw-shadow` text (post-substitution).\n * @returns Parsed shadow, or null when the shape is unrecognized.\n */\nfunction parseFirstShadow(raw: string): ParsedShadow | null {\n // Split on top-level commas (parens-aware) so colors like `rgba(0,0,0,0.5)`\n // don't fragment the list.\n const head = topLevelSplit(raw, ',')[0]?.trim()\n if (!head) return null\n const { lengths, remainder } = extractShadowLengths(head)\n const [x = 0, y = 0, blur = 0, spread = 0] = lengths\n const { color, opacity } = parseShadowColor(remainder.trim())\n return { x, y, blur, spread, color, opacity }\n}\n\n/**\n * Pull the first 4 numeric tokens out of a shadow expression and return\n * them alongside the remaining text (which is the color expression).\n * Shadow shape: `<x> <y> <blur> <spread> <color>` — tokens may be bare\n * (`0`), px-dimensioned (`1px`), or rem/em/%.\n * @param head Single shadow expression (one comma-separated entry).\n * @returns Pixel lengths + the remainder text (color expression).\n */\nfunction extractShadowLengths(head: string): { lengths: number[]; remainder: string } {\n // Take ONLY the leading run of length tokens, stopping at the first\n // non-length token (the color). A previous global digit-regex scanned\n // the whole string, so a <4-length shadow like `0 1px 1px rgb(0 0 0 /\n // 0.05)` stole a digit out of the color expression — corrupting the\n // alpha (opacity) or a digit-leading hex. Whitespace-splitting can't\n // reach inside the color because we break as soon as a token isn't a\n // bare/`px`/`rem`/`em`/`%` length.\n // Unambiguous integer-or-decimal (no `\\d*\\.?\\d+` overlap) so there's no\n // super-linear backtracking on long digit runs.\n const isLength = /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|%)?$/\n const parts = head.split(/\\s+/)\n const lengths: number[] = []\n let index = 0\n while (index < parts.length && lengths.length < 4 && isLength.test(parts[index]!)) {\n lengths.push(parseLengthToken(parts[index]!))\n index += 1\n }\n return { lengths, remainder: parts.slice(index).join(' ') }\n}\n\n/**\n * Coerce one shadow length token into a pixel number. Accepts bare\n * integers (`0`), `Npx`, and `Nrem` — every shape Tailwind's\n * `--tw-shadow` value uses.\n * @param token Token text.\n * @returns Pixel number.\n */\nfunction parseLengthToken(token: string): number {\n if (token.endsWith('rem')) return Number(token.slice(0, -3)) * 16\n if (token.endsWith('em')) return Number(token.slice(0, -2)) * 16\n if (token.endsWith('px')) return Number(token.slice(0, -2))\n if (token.endsWith('%')) return Number(token.slice(0, -1))\n return Number(token)\n}\n\n/**\n * Extract a color string + extracted alpha from a shadow's color\n * expression. Supports `rgb(...)` / `rgba(...)` / `#rrggbb` / hex with\n * alpha / theme-resolved CSS color strings.\n * @param expr Color expression text.\n * @returns Color string for `shadowColor` + alpha for `shadowOpacity`.\n */\nfunction parseShadowColor(expr: string): { color: string; opacity: number } {\n const working = unwrapVariableFallback(expr).trim()\n if (working.length === 0) return { color: '#000', opacity: 0.1 }\n const rgba = parseRgbaExpression(working)\n if (rgba) return rgba\n if (working.startsWith('#')) return { color: working, opacity: 1 }\n // Named (`red`) / modern (`hsl(…)`, `oklch(…)`) colors — culori → sRGB hex.\n // Without this they fell to the default black at 0.1 alpha, silently losing\n // the user's `shadow-[0_2px_4px_red]` color.\n const hex = formatHexSafe(working)\n if (hex) return { color: hex, opacity: 1 }\n return { color: '#000', opacity: 0.1 }\n}\n\n/**\n * Strip the `var(--name, fallback)` wrapper from a CSS value. Tailwind\n * wraps shadow colors as `var(--tw-shadow-color, rgb(0 0 0 / 0.1))`,\n * and when the var is unresolved we want the fallback.\n * @param expr Raw CSS value.\n * @returns Inner fallback when wrapped, otherwise the input unchanged.\n */\nfunction unwrapVariableFallback(expr: string): string {\n const trimmed = expr.trim()\n if (!trimmed.startsWith('var(') || !trimmed.endsWith(')')) return trimmed\n const inner = trimmed.slice(4, -1)\n let depth = 0\n for (let index = 0; index < inner.length; index += 1) {\n const ch = inner[index]\n if (ch === '(') depth += 1\n else if (ch === ')') depth -= 1\n else if (ch === ',' && depth === 0) return inner.slice(index + 1)\n }\n return trimmed\n}\n\n/**\n * Parse an `rgb(r g b)` / `rgba(r,g,b,a)` / `rgb(r g b / a)` color\n * expression into a hex + alpha pair. Returns `null` when the shape\n * doesn't match.\n * @param text Expression text (already trimmed and unwrapped).\n * @returns Hex color + alpha, or null.\n */\nfunction parseRgbaExpression(text: string): { color: string; opacity: number } | null {\n const head = /^rgba?\\(([^)]+)\\)$/i.exec(text)\n if (!head) return null\n const inner = head[1]!.replaceAll(',', ' ').replaceAll('/', ' ')\n const tokens = inner.split(/\\s+/).filter((part) => part.length > 0)\n if (tokens.length < 3) return null\n const [r, g, b, alphaText] = tokens\n let opacity = 1\n if (typeof alphaText === 'string') {\n opacity = alphaText.endsWith('%') ? Number(alphaText.slice(0, -1)) / 100 : Number(alphaText)\n }\n const hex = `#${[r!, g!, b!]\n .map((n) =>\n Math.max(0, Math.min(255, Math.round(Number(n))))\n .toString(16)\n .padStart(2, '0'),\n )\n .join('')}`\n return { color: hex, opacity }\n}\n\n/**\n * Split `text` at top-level occurrences of `delimiter`, treating\n * parentheses as nesting. Used to safely split shadow lists without\n * fragmenting `rgb(0, 0, 0, 0.5)` on its commas.\n * @param text Source text.\n * @param delimiter Single-character delimiter to split on.\n * @returns Parts of the text between top-level delimiters.\n */\nfunction topLevelSplit(text: string, delimiter: string): string[] {\n const parts: string[] = []\n let depth = 0\n let start = 0\n for (let index = 0; index < text.length; index += 1) {\n const ch = text[index]\n if (ch === '(') depth += 1\n else if (ch === ')') depth -= 1\n else if (ch === delimiter && depth === 0) {\n parts.push(text.slice(start, index))\n start = index + 1\n }\n }\n parts.push(text.slice(start))\n return parts\n}\n\n/**\n * Tailwind v4's `text-*` utilities emit `line-height` as a unitless\n * multiplier (`calc(2.5 / 2.25)` for `text-4xl`) that the browser\n * resolves against the element's `font-size`. RN's `lineHeight` is\n * always pixels — so when both `fontSize` and a multiplier-shaped\n * `lineHeight` (less than 10) land on the same atom, multiply through\n * to a pixel value. Atoms with only one of the two are left alone.\n * @param bucket Per-scheme style map for the atom.\n * @param schemes Scheme names active for this parse.\n */\nfunction normalizeLineHeightToPx(bucket: Record<string, RNStyle>, schemes: readonly string[]): void {\n for (const scheme of schemes) {\n const style = bucket[scheme]\n if (!style) continue\n const { fontSize } = style\n const { lineHeight } = style\n if (typeof fontSize !== 'number' || typeof lineHeight !== 'number') continue\n if (lineHeight >= 10) continue\n style.lineHeight = Math.round(fontSize * lineHeight * 10_000) / 10_000\n }\n}\n\n/**\n * Fold one declaration's resolved entries into every scheme's bucket on\n * the target atom.\n * @param decl Lightningcss declaration to convert.\n * @param bucket Per-scheme style map for the atom.\n * @param schemes Scheme names active for this parse.\n * @param ruleSchemeTables Per-scheme var tables (with rule-local overrides folded in).\n */\nfunction applyDeclarationToBucket(\n decl: LcDeclaration,\n bucket: Record<string, RNStyle>,\n schemes: readonly string[],\n ruleSchemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n): void {\n for (const scheme of schemes) {\n const schemeBucket = bucket[scheme] ?? {}\n for (const [key, value] of declarationToRnEntries(decl, ruleSchemeTables.get(scheme))) {\n schemeBucket[key] = value\n }\n bucket[scheme] = schemeBucket\n }\n}\n\n/**\n * Apply the composed-transform post-pass for a single atom: if any of\n * Tailwind's `--tw-translate-*` / `--tw-scale-*` / `--tw-skew-*` vars\n * were written, synthesize a single `transform` array and drop the\n * intermediate `translate`/`scale`/`rotate` shorthand entries.\n * @param bucket Per-scheme style map for the atom.\n * @param schemes Scheme names active for this parse.\n * @param ruleLocalVars Rule-local `--tw-*` vars.\n */\nfunction applyComposedTransform(\n bucket: Record<string, RNStyle>,\n schemes: readonly string[],\n ruleLocalVars: ReadonlyMap<string, string>,\n): void {\n const composed = composeTransformFromVars(ruleLocalVars)\n if (composed.length === 0) return\n for (const scheme of schemes) {\n const schemeBucket = bucket[scheme] ?? {}\n delete schemeBucket.translate\n delete schemeBucket.scale\n delete schemeBucket.rotate\n schemeBucket.transform = composed\n bucket[scheme] = schemeBucket\n }\n}\n\n/**\n * Synthesize an RN `transform` array from Tailwind v4's composable\n * `--tw-translate-x/y`, `--tw-scale-x/y`, `--tw-skew-x/y`, and\n * `--tw-rotate-x/y/z` custom properties. Returns an empty array when\n * none of those props were written, letting the caller skip the\n * post-pass.\n * @param ruleVars Rule-local `--tw-*` vars collected from the style rule.\n * @returns RN transform operations (possibly empty).\n */\nfunction composeTransformFromVars(ruleVars: ReadonlyMap<string, string>): readonly Record<string, string | number>[] {\n const ops: Record<string, string | number>[] = []\n addAxisOp(ops, 'translateX', ruleVars.get('--tw-translate-x'), resolveLengthExpression)\n addAxisOp(ops, 'translateY', ruleVars.get('--tw-translate-y'), resolveLengthExpression)\n addAxisOp(ops, 'scaleX', ruleVars.get('--tw-scale-x'), resolveNumberOrPercent)\n addAxisOp(ops, 'scaleY', ruleVars.get('--tw-scale-y'), resolveNumberOrPercent)\n addAxisOp(ops, 'skewX', ruleVars.get('--tw-skew-x'), extractAngleFromSkewFunction)\n addAxisOp(ops, 'skewY', ruleVars.get('--tw-skew-y'), extractAngleFromSkewFunction)\n return ops\n}\n\n/**\n * Push `{<key>: resolved(raw)}` into `ops` when `raw` is present and the\n * resolver returns non-null. Keeps {@link composeTransformFromVars}\n * below the cognitive complexity threshold.\n * @param ops Target array to mutate.\n * @param key RN transform op key (e.g. `'translateX'`).\n * @param raw Rule-local var value (possibly undefined).\n * @param resolve Value-resolver for this axis type.\n */\nfunction addAxisOp<T extends string | number>(\n ops: Record<string, string | number>[],\n key: string,\n raw: string | undefined,\n resolve: (text: string) => T | null,\n): void {\n if (!raw) return\n const value = resolve(raw)\n if (value !== null) ops.push({ [key]: value })\n}\n\n/**\n * Resolve a CSS length expression into the value a RN transform op\n * accepts — pixels as a number, or a percentage string preserved\n * verbatim. Supports the shapes Tailwind v4 emits into `--tw-translate-*`:\n *\n * - Direct lengths: `16px`, `1rem`, bare `42`.\n * - Percentages: `100%`, `-100%`.\n * - Flat calc: `calc(0.25rem * 52)`.\n * - Fractional calc: `calc(1 / 2 * 100%)` (→ `translate-x-1/2`).\n * - Nested calc with sign flip: `calc(calc(1 / 3 * 100%) * -1)` (→ `-translate-x-1/3`).\n *\n * Returns null when the expression mixes units (`calc(100% - 10px)` —\n * RN can't express those) or contains a token the evaluator can't\n * interpret; the transform op is simply skipped in that case.\n * @param text Length expression text.\n * @returns Pixel number, percentage string, or null when unrepresentable.\n */\nfunction resolveLengthExpression(text: string): number | string | null {\n const trimmed = text.trim()\n if (trimmed.length === 0) return null\n const evaluated = evaluateLengthExpr(trimmed)\n if (!evaluated) return null\n if (evaluated.unit === '%') return `${stripTrailingZeros(evaluated.value)}%`\n if (evaluated.unit === 'rem') return roundTransformValue(evaluated.value * 16)\n return roundTransformValue(evaluated.value)\n}\n\n/** Evaluated length + its unit. `''` means px or bare number. */\ninterface EvaluatedLength {\n value: number\n unit: '%' | 'rem' | ''\n}\n\n/**\n * Evaluate a CSS length expression to a `{value, unit}` pair.\n *\n * Strategy: detect the (at most one) unit suffix present in the text,\n * strip every `calc(` to `(`, strip the unit suffix from numeric tokens,\n * and run a small arithmetic evaluator. Mixed-unit expressions are\n * rejected because RN has no way to express `calc(100% - 10px)` in a\n * flat transform op.\n * @param text Raw CSS length expression (already trimmed).\n * @returns Evaluated length with its unit, or `null` when invalid.\n */\nfunction evaluateLengthExpr(text: string): EvaluatedLength | null {\n const units = detectUnits(text)\n if (units.length > 1) return null\n const unit = (units[0] ?? '') as EvaluatedLength['unit']\n const arithmetic = stripCalcAndUnits(text)\n const value = evaluateArithmetic(arithmetic)\n if (value === null || !Number.isFinite(value)) return null\n return { value, unit }\n}\n\n/**\n * Detect which length units appear in the expression. Multi-unit\n * expressions (e.g. `calc(100% - 1rem)`) aren't representable in one RN\n * transform op, so we reject them.\n * @param text Length expression.\n * @returns Sorted, deduped unit list found in the text.\n */\nfunction detectUnits(text: string): readonly string[] {\n const found = new Set<string>()\n if (/\\d%/.test(text)) found.add('%')\n if (/[\\d.]rem\\b/.test(text)) found.add('rem')\n if (/[\\d.]px\\b/.test(text)) found.add('px')\n return [...found]\n}\n\n/**\n * Strip every `calc(` wrapper to a plain `(`, and strip `%` / `rem` /\n * `px` unit suffixes from numeric tokens. Result is a plain arithmetic\n * expression the evaluator can consume.\n * @param text Length expression.\n * @returns Arithmetic text suitable for {@link evaluateArithmetic}.\n */\nfunction stripCalcAndUnits(text: string): string {\n // Input is Tailwind's compiled CSS, not user-controlled — no ReDoS risk.\n // eslint-disable-next-line sonarjs/slow-regex\n return text.replaceAll(/\\bcalc\\s*\\(/g, '(').replaceAll(/([\\d.]+)(?:rem|px|%)/g, '$1')\n}\n\n/**\n * Format a percentage number so `50` stays `\"50%\"` (not `\"50.00000001%\"`)\n * when float drift is in the low bits. Strips trailing-zero decimals.\n * @param value Percentage magnitude.\n * @returns Integer-ish string.\n */\nfunction stripTrailingZeros(value: number): string {\n const rounded = Math.round(value * 1_000_000) / 1_000_000\n return String(rounded)\n}\n\n/**\n * Tiny recursive-descent evaluator for CSS arithmetic. Accepts `+`, `-`,\n * `*`, `/`, parens, and decimal numbers. Returns `null` on malformed\n * input — rejects anything the tokenizer can't classify.\n * @param text Arithmetic text (post {@link stripCalcAndUnits}).\n * @returns Evaluated number, or `null`.\n */\nfunction evaluateArithmetic(text: string): number | null {\n const tokens = tokenizeArithmetic(text)\n if (!tokens) return null\n const cursor = { index: 0 }\n const result = parseArithmeticExpr(tokens, cursor)\n if (cursor.index !== tokens.length) return null\n return result\n}\n\n/**\n * Split arithmetic text into numeric and operator tokens. Returns null\n * when the text contains any character outside the allowed set.\n * @param text Arithmetic text.\n * @returns Token list, or null on unexpected character.\n */\nfunction tokenizeArithmetic(text: string): readonly string[] | null {\n const tokens: string[] = []\n let index = 0\n while (index < text.length) {\n const ch = text[index]!\n if (isArithmeticWhitespace(ch)) {\n index += 1\n } else if (isArithmeticOperator(ch)) {\n tokens.push(ch)\n index += 1\n } else if (isDigitOrDot(ch)) {\n const next = consumeNumber(text, index)\n tokens.push(text.slice(index, next))\n index = next\n } else {\n return null\n }\n }\n return tokens\n}\n\n/**\n * Check whether `ch` is a whitespace character the arithmetic tokenizer\n * may skip.\n * @param ch Single-character string.\n * @returns True for space / tab / newline.\n */\nfunction isArithmeticWhitespace(ch: string): boolean {\n return ch === ' ' || ch === '\\t' || ch === '\\n'\n}\n\n/**\n * Check whether `ch` is one of the arithmetic operator tokens.\n * @param ch Single-character string.\n * @returns True for `(`, `)`, `+`, `-`, `*`, `/`.\n */\nfunction isArithmeticOperator(ch: string): boolean {\n return ch === '(' || ch === ')' || ch === '+' || ch === '-' || ch === '*' || ch === '/'\n}\n\n/**\n * Check whether `ch` belongs to a numeric token.\n * @param ch Single-character string.\n * @returns True for a digit `0`–`9` or `.`.\n */\nfunction isDigitOrDot(ch: string): boolean {\n return (ch >= '0' && ch <= '9') || ch === '.'\n}\n\n/**\n * Advance past a numeric token starting at `start`.\n * @param text Source text.\n * @param start Index of the first digit or dot.\n * @returns Index just past the last digit-or-dot.\n */\nfunction consumeNumber(text: string, start: number): number {\n let index = start\n while (index < text.length && isDigitOrDot(text[index]!)) index += 1\n return index\n}\n\n/**\n * Parse an additive expression: `term (('+'|'-') term)*`.\n * @param tokens Token list.\n * @param cursor Mutable cursor.\n * @param cursor.index Current token index; advanced past consumed tokens.\n * @returns Evaluated number, or `null` on parse failure.\n */\nfunction parseArithmeticExpr(tokens: readonly string[], cursor: { index: number }): number | null {\n let left = parseArithmeticTerm(tokens, cursor)\n if (left === null) return null\n while (cursor.index < tokens.length) {\n const op = tokens[cursor.index]\n if (op !== '+' && op !== '-') break\n cursor.index += 1\n const right = parseArithmeticTerm(tokens, cursor)\n if (right === null) return null\n left = op === '+' ? left + right : left - right\n }\n return left\n}\n\n/**\n * Parse a multiplicative expression: `factor (('*'|'/') factor)*`.\n * @param tokens Token list.\n * @param cursor Mutable cursor.\n * @param cursor.index Current token index; advanced past consumed tokens.\n * @returns Evaluated number, or `null`.\n */\nfunction parseArithmeticTerm(tokens: readonly string[], cursor: { index: number }): number | null {\n let left = parseArithmeticFactor(tokens, cursor)\n if (left === null) return null\n while (cursor.index < tokens.length) {\n const op = tokens[cursor.index]\n if (op !== '*' && op !== '/') break\n cursor.index += 1\n const right = parseArithmeticFactor(tokens, cursor)\n if (right === null) return null\n left = op === '*' ? left * right : left / right\n }\n return left\n}\n\n/**\n * Parse a factor: unary minus, parenthesised expression, or number.\n * @param tokens Token list.\n * @param cursor Mutable cursor.\n * @param cursor.index Current token index; advanced past consumed tokens.\n * @returns Evaluated number, or `null`.\n */\nfunction parseArithmeticFactor(tokens: readonly string[], cursor: { index: number }): number | null {\n if (cursor.index >= tokens.length) return null\n const tok = tokens[cursor.index]!\n if (tok === '-') {\n cursor.index += 1\n const right = parseArithmeticFactor(tokens, cursor)\n return right === null ? null : -right\n }\n if (tok === '+') {\n cursor.index += 1\n return parseArithmeticFactor(tokens, cursor)\n }\n if (tok === '(') {\n cursor.index += 1\n const inner = parseArithmeticExpr(tokens, cursor)\n if (cursor.index >= tokens.length || tokens[cursor.index] !== ')') return null\n cursor.index += 1\n return inner\n }\n const number_ = Number(tok)\n if (!Number.isFinite(number_)) return null\n cursor.index += 1\n return number_\n}\n\n/**\n * Resolve a scale factor expressed as a percentage (`150%`), number (`1.5`),\n * or a `calc()` expression. Tailwind emits NEGATIVE scale utilities as a calc\n * (`-scale-x-100` → `calc(100% * -1)`), so a plain percent/number regex\n * silently dropped them — `-scale-*` (the horizontal-flip idiom) rendered\n * nothing. Fall back to the shared arithmetic evaluator, reading `%` as a\n * fraction (`100%` → 1) and rounding off f32 noise.\n * @param text Raw value.\n * @returns Scale number (e.g. 1.5 for 150%, -1 for `calc(100% * -1)`), or null.\n */\nfunction resolveNumberOrPercent(text: string): number | null {\n const trimmed = text.trim()\n const percent = /^(-?\\d+(?:\\.\\d+)?)%$/.exec(trimmed)\n if (percent) return roundTransformValue(Number(percent[1]) / 100)\n const bare = /^-?\\d+(?:\\.\\d+)?$/.exec(trimmed)\n if (bare) return roundTransformValue(Number(trimmed))\n const evaluated = evaluateLengthExpr(trimmed)\n if (!evaluated || evaluated.unit === 'rem') return null\n return roundTransformValue(evaluated.unit === '%' ? evaluated.value / 100 : evaluated.value)\n}\n\n/**\n * Round a composed-transform numeric value to 4 decimals. lightningcss\n * serializes arbitrary literals (`scale-x-[0.333]`) back as noisy f32 text\n * (`0.3330000042915344`), and the resolvers `Number()` that verbatim — round\n * so the RN `transform` array stays clean.\n * @param value Raw number.\n * @returns Rounded number.\n */\nfunction roundTransformValue(value: number): number {\n return Math.round(value * 10_000) / 10_000\n}\n\n/**\n * Extract the angle from Tailwind's `skewX(12deg)` / `skewY(-5deg)` /\n * `skewX(calc(6deg * -1))` custom-property value shape. Returns null\n * when the inner expression doesn't reduce to a degree value.\n *\n * Tailwind v4 emits negative skew utilities as a nested `calc()`\n * (`-skew-x-6` → `skewX(calc(6deg * -1))`), so the inner body has to be\n * evaluated as arithmetic — a bare-angle regex silently drops those.\n * @param text Raw value.\n * @returns `<N>deg` string, or null.\n */\nfunction extractAngleFromSkewFunction(text: string): string | null {\n const trimmed = text.trim()\n if (!trimmed.endsWith(')')) return null\n const openIdx = trimmed.indexOf('(')\n if (openIdx < 5) return null\n const head = trimmed.slice(0, openIdx)\n if (head !== 'skewX' && head !== 'skewY') return null\n const inner = trimmed.slice(openIdx + 1, -1).trim()\n return resolveAngleExpression(inner)\n}\n\n/**\n * Evaluate an expression whose single unit is `deg`. Strips `calc(`\n * wrappers and `deg` suffixes, runs the arithmetic evaluator, reapplies\n * `deg`. Returns null for unit mismatches or unparseable text.\n * @param text Angle expression (e.g. `6deg`, `calc(6deg * -1)`).\n * @returns `<N>deg`, or null when not representable.\n */\nfunction resolveAngleExpression(text: string): string | null {\n if (!/[\\d.]deg\\b/.test(text)) return null\n // Input is Tailwind's compiled CSS, not user-controlled — no ReDoS risk.\n // eslint-disable-next-line sonarjs/slow-regex\n const arithmetic = text.replaceAll(/\\bcalc\\s*\\(/g, '(').replaceAll(/([\\d.]+)deg/g, '$1')\n const value = evaluateArithmetic(arithmetic)\n if (value === null || !Number.isFinite(value)) return null\n return `${stripTrailingZeros(value)}deg`\n}\n\n/**\n * Scan Tailwind's compiled CSS for `:root, :host { --x: y; … }` blocks\n * and pull the custom-property declarations out. This captures every\n * theme token Tailwind resolved — including tokens imported from the\n * user's secondary `@import` files (e.g. `rnwind/css`'s\n * `--duration-normal: 220ms`) — without rnwind having to re-implement\n * `@import` resolution.\n *\n * Regex-free scanner: finds `:root` prefixes, walks forward with\n * brace-depth tracking to find the matching block close, then extracts\n * every `--name: value;` pair with a paren-balanced walker so commas\n * inside `rgb(0, 0, 0)` don't confuse the split.\n * @param css Tailwind's compiled CSS.\n * @returns Map of custom-property name → resolved value.\n */\n/**\n * Strip `\\@supports (color: color-mix(in lab, red, red)) { … }` wrappers\n * from Tailwind v4's compiled CSS, hoisting their inner declarations up\n * to the parent rule.\n *\n * Tailwind emits opacity-suffixed themed colors with both a pre-resolved\n * sRGB fallback AND a var()-based override gated behind the color-mix\n * `\\@supports` clause. The OUTER fallback hard-codes a single scheme's\n * value of the theme token; the inner override is var()-based and\n * substitutes correctly per scheme. By unwrapping the gate, the inner\n * declaration becomes a sibling of the fallback in the same rule body —\n * lightningcss takes the LATER one (the var()-based unparsed form), and\n * the parser's themeVars-aware path produces correct rgba per scheme.\n * Modern RN-targeted browsers all support color-mix anyway, so dropping\n * the gating is safe.\n * @param css Tailwind-compiled CSS.\n * @returns CSS with the color-mix support gates unwrapped.\n */\nfunction unwrapColorMixSupports(css: string): string {\n const guard = '@supports (color: color-mix(in lab, red, red))'\n let out = ''\n let cursor = 0\n while (cursor < css.length) {\n const head = css.indexOf(guard, cursor)\n if (head === -1) {\n out += css.slice(cursor)\n break\n }\n out += css.slice(cursor, head)\n const brace = css.indexOf('{', head)\n if (brace === -1) {\n out += css.slice(head)\n break\n }\n const blockEnd = findMatchingClose(css, brace + 1)\n if (blockEnd === -1) {\n out += css.slice(head)\n break\n }\n const inner = css.slice(brace + 1, blockEnd)\n // Only unwrap when the gated declaration substitutes a USER theme\n // token (`var(--color-…)`). Tailwind also gates `--tw-*` internal\n // composers (shadow color, ring color, …) on the same supports\n // clause; their outer fallback is the optimized hex/oklch value\n // the parser's own composed-prop pass needs (`applyComposedShadow`\n // reads `--tw-shadow-color` from the rule's local vars). Unwrapping\n // them would replace the resolvable color with an unresolvable\n // `color-mix(... var(--tw-shadow-alpha), transparent)` text and\n // break the composed-shadow path.\n // Keep the gate intact for non-themed colors — the outer fallback\n // wins, which is what Tailwind intended.\n out += inner.includes('var(--color-') ? inner : css.slice(head, blockEnd + 1)\n cursor = blockEnd + 1\n }\n return out\n}\n\n/**\n * Extract every `--name: value` declaration from the `:root` blocks in\n * Tailwind's compiled CSS into a flat map.\n * @param css Tailwind-compiled CSS.\n * @returns Map of custom-property name → resolved value.\n */\nfunction extractRootCustomProperties(css: string): Map<string, string> {\n const out = new Map<string, string>()\n let cursor = 0\n while (cursor < css.length) {\n const blockEnd = consumeNextRootBlock(css, cursor, out)\n if (blockEnd === -1) break\n cursor = blockEnd + 1\n }\n return out\n}\n\n/**\n * Locate the next `:root` block from `cursor`, extract its custom\n * properties into `out`, and return the index of its closing brace.\n * Split out from {@link extractRootCustomProperties} to keep complexity\n * below the cap.\n * @param css Source CSS.\n * @param cursor Start index for the search.\n * @param out Destination map, mutated.\n * @returns Index of the closing brace, or -1 when no block remains.\n */\nfunction consumeNextRootBlock(css: string, cursor: number, out: Map<string, string>): number {\n const head = css.indexOf(':root', cursor)\n if (head === -1) return -1\n const brace = css.indexOf('{', head)\n if (brace === -1) return -1\n const blockEnd = findMatchingClose(css, brace + 1)\n if (blockEnd === -1) return -1\n collectCustomDeclarations(css.slice(brace + 1, blockEnd), out)\n return blockEnd\n}\n\n/**\n * Parse the body of a `:root` block — a `;`-separated list of `--name:\n * value` declarations — into the output map. Top-level `;` split is\n * paren-aware so `rgb(0, 0, 0)` doesn't fragment the list.\n * @param body Block body text (between braces).\n * @param out Destination map, mutated.\n */\nfunction collectCustomDeclarations(body: string, out: Map<string, string>): void {\n for (const declaration of topLevelSplit(body, ';')) {\n const colon = declaration.indexOf(':')\n if (colon === -1) continue\n const name = declaration.slice(0, colon).trim()\n const value = declaration.slice(colon + 1).trim()\n if (name.startsWith('--') && value.length > 0) out.set(name, value)\n }\n}\n\n/**\n * Walk forward from `start` tracking brace depth; return the index of\n * the matching `}` for the opener just before `start`.\n * @param source Source text.\n * @param start Index just past the opening `{`.\n * @returns Index of matching `}`, or `-1` on imbalance.\n */\nfunction findMatchingClose(source: string, start: number): number {\n let depth = 1\n for (let index = start; index < source.length; index += 1) {\n const ch = source[index]\n if (ch === '{') depth += 1\n else if (ch === '}') {\n depth -= 1\n if (depth === 0) return index\n }\n }\n return -1\n}\n\n/**\n * Merge rule-local custom vars into every scheme's var table. Creates\n * fresh maps so the rule pass doesn't mutate the shared parser state.\n * @param schemeTables Base per-scheme var tables.\n * @param ruleVars Rule-local `--tw-*` overrides.\n * @returns Merged per-scheme tables.\n */\nfunction mergeRuleVars(\n schemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n ruleVars: ReadonlyMap<string, string>,\n): Map<string, ReadonlyMap<string, string>> {\n if (ruleVars.size === 0) return new Map(schemeTables)\n const out = new Map<string, ReadonlyMap<string, string>>()\n for (const [scheme, table] of schemeTables) {\n const merged = new Map(table)\n for (const [k, v] of ruleVars) merged.set(k, v)\n out.set(scheme, merged)\n }\n return out\n}\n"],"names":["Features","extractThemeVars","extractSchemeAliases","extractCustomVariantSchemes","Scanner","BASE_SCHEME","compileReadyTheme","compile","keyframes","transform","selector","classNameFromSelector","gradient","detectGradientAtom","detectHapticAtom","keyframesName","keyframeSelectorOffsets","declarationToRnEntries","serializeInitialValue","serializeTokens","pickAnimationName","substituteThemeVars","coerceUnparsedValue","normalizeColorString","culoriFormatHex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tw-parser.cjs","sources":["../../../../../src/core/parser/tw-parser.ts"],"sourcesContent":["import { compile } from '@tailwindcss/node'\nimport * as tailwindNode from '@tailwindcss/node'\nimport { Scanner, type SourceEntry } from '@tailwindcss/oxide'\nimport { formatHex as culoriFormatHex } from 'culori'\nimport { Features, transform, type TransformOptions } from 'lightningcss'\nimport { declarationToRnEntries } from './declaration'\nimport { detectGradientAtom, type GradientAtomInfo } from './gradient'\nimport { detectHapticAtom, type HapticRequest } from './haptics'\nimport { keyframeSelectorOffsets, keyframesName, pickAnimationName } from './keyframes'\nimport { serializeInitialValue } from './property'\nimport { classNameFromSelector } from './selector'\nimport {\n BASE_SCHEME,\n compileReadyTheme,\n extractCustomVariantSchemes,\n extractSchemeAliases,\n extractThemeVars,\n type ThemeSchemeTable,\n} from './theme-vars'\nimport { coerceUnparsedValue, serializeTokens, substituteThemeVars } from './tokens'\nimport { normalizeColorString } from './color'\nimport type { RNStyle } from './types'\nimport type { ThemeTable, ThemeTables } from '../types'\nimport type { Declaration as LcDeclaration, TokenOrValue } from 'lightningcss'\n\n/**\n * Inferred compiler type. `@tailwindcss/node` doesn't export its\n * compiler shape as a named type, so we pull it off the `compile()`\n * return to stay resilient to minor upstream shape shifts.\n */\ntype TailwindCompiler = Awaited<ReturnType<typeof compile>>\n\n/**\n * Default LightningCSS transform options for TailwindParser's visitor.\n * Its taken from official Tailwind source:\n * https://github.com/tailwindlabs/tailwindcss/blob/main/packages/%40tailwindcss-node/src/optimize.ts\n */\nconst DEFAULT_TRANSFORM_OPTIONS: Partial<TransformOptions<never>> = {\n drafts: {\n customMedia: true,\n },\n nonStandard: {\n deepSelectorCombinator: true,\n },\n include: Features.Nesting | Features.MediaQueries,\n exclude: Features.LogicalProperties | Features.DirSelector | Features.LightDark,\n // NOTE: deliberately no `targets`. With targets that include\n // color-mix-supporting browsers (Safari 16.4+, Chrome 111+, …),\n // lightningcss EVALUATES `color-mix(in oklab, var(--theme-color)\n // <pct>%, transparent)` at parse time using whichever value of\n // `--theme-color` it sees first in the cascade. Tailwind v4 emits\n // exactly this shape for `<prop>-<themed>/<N>` utilities (e.g.\n // `border-text/20`), so the resulting RGB color is locked to ONE\n // scheme — every variant gets the same value. By dropping targets,\n // lightningcss leaves color-mix as an unparsed function and our\n // per-scheme `unparsedToEntries` substitution path runs instead,\n // producing the right rgba(...) for each scheme. Targets in this\n // pipeline are otherwise unused — we never re-emit CSS from the AST.\n}\n/** Parser configuration — one instance per Metro session, theme CSS fixed. */\nexport interface TailwindParserConfig {\n /**\n * Theme CSS passed to `@tailwindcss/node`'s compiler. Typically the\n * user's `global.css`. We append `theme(inline)` to the tailwindcss\n * import so Tailwind resolves every `var(--theme-token)` at compile\n * time — that gives lightningcss fully-typed values (integers / rems /\n * colors) instead of unresolved `var()` references.\n */\n themeCss: string\n /**\n * Glob sources the oxide Scanner walks at project-scan time\n * (`parseProject()`). Typically\n * `[{ base: projectRoot, pattern: '**\\/*.{ts,tsx,js,jsx}', negated: false }]`\n * plus negated globs for `node_modules` and the rnwind cache dir.\n *\n * When omitted, the scanner has no sources and `parseProject()`\n * returns an empty result — `parseAtoms()` (per-file, content-driven)\n * still works without sources.\n */\n sources?: readonly SourceEntry[]\n}\n\n/** Per-call inputs — Metro hands us file content + filename; we derive the extension. */\nexport interface ParseOptions {\n content: string\n extension: string\n}\n\n/** One parsed keyframe step — offset plus the RN style at that offset. */\nexport interface KeyframeStep {\n offset: string\n style: RNStyle\n}\n\n/** One parsed `@keyframes` animation block. */\nexport interface KeyframeBlock {\n name: string\n steps: KeyframeStep[]\n}\n\n/** Interactive variant ('active' / 'focus') an `active:`/`focus:` atom carries. */\nexport type InteractiveStateTag = 'active' | 'focus'\n\n/**\n * Per-scheme resolved style for a single utility class. Keys are scheme\n * names declared via `@variant <name>` in the theme CSS (or the synthetic\n * `'base'` scheme for themes without variants). Values are the RN style\n * object under that scheme.\n *\n * The reserved `__state` key is set on `active:` / `focus:` atoms so\n * the build-side style-builder can tag the atom for `precomputeHoist`\n * — which routes interactive atoms into the stated-hoist's 4-state\n * precompute. Standard atoms have no `__state`.\n */\nexport type SchemedStyle = Readonly<Record<string, RNStyle>> & {\n /** Interactive-state gate set by `active:` / `focus:` variants. */\n readonly __state?: InteractiveStateTag\n}\n\n/** Full result of one `parseAtoms` call. */\nexport interface ParsedOutput {\n /** Resolved RN style per utility class, per declared scheme. */\n atoms: Map<string, SchemedStyle>\n /** `@keyframes <name> { ... }` blocks the candidates pulled in. */\n keyframes: Map<string, KeyframeBlock>\n /** `@property --x { initial-value: y }` declared custom-property defaults. */\n propertyDefaults: Map<string, string>\n /**\n * Gradient metadata per atom, for atoms that play a role in a\n * Tailwind v4 gradient (`from-*`, `via-*`, `to-*`, `bg-gradient-to-*`,\n * `bg-linear-to-*`). The transformer reads this map to extract\n * `colors / start / end` props at JSX-rewrite time. Regular non-\n * gradient atoms don't appear here.\n */\n gradientAtoms: Map<string, GradientAtomInfo>\n /**\n * Haptic metadata per atom for classes that emit a\n * `--rnwind-haptic` marker. The transformer reads this map to\n * strip the atom from the className and wire a mount-time or\n * press-time call into the `onHaptics` callback registered on\n * `<SchemeProvider>`.\n */\n hapticAtoms: Map<string, HapticRequest>\n /** Candidates oxide surfaced, in document order. */\n candidates: readonly string[]\n /** Every scheme the theme declares (or `['base']` when there are no `@variant` blocks). */\n schemes: readonly string[]\n /**\n * Responsive breakpoint name → minimum-width threshold (px). Pulled from\n * `--breakpoint-*` tokens in the compiled `:root` block, so both\n * Tailwind defaults (`sm`, `md`, `lg`, `xl`, `2xl`) and any user\n * override (e.g. `--breakpoint-3xl: 120rem`) land here. Used by the\n * style-builder to emit `registerBreakpoints({...})` in the manifest\n * so the runtime can filter `md:*` / `lg:*` atoms based on the\n * provider's `windowWidth`.\n */\n breakpoints: ReadonlyMap<string, number>\n /**\n * Per-scheme user theme token tables (`--color-*`, `--spacing-*`, …) with\n * `--color-*` values lowered to sRGB. The style-builder emits these as\n * `registerThemeTokens({...})` in the manifest so `useColor` / `useToken` /\n * `useSize` resolve out of the box, without the user threading a `tables`\n * prop on the provider. Keyed by scheme (`base` + each declared variant).\n */\n themeTokens: ThemeTables\n}\n\n/**\n * Parses one source file's Tailwind usage into RN-ready style objects.\n *\n * Pipeline:\n * 1. `@tailwindcss/oxide` Scanner finds every Tailwind candidate.\n * 2. `@tailwindcss/node` compiler emits CSS for those candidates with\n * theme tokens inlined.\n * 3. lightningcss `transform` + typed visitor walks the emitted CSS:\n * - `style` rules → per-class RN-style object.\n * - `@keyframes` rules → per-name step map (Reanimated-ready).\n * - `@property` rules → custom-property initial values.\n *\n * One instance holds one Scanner + one lazily-built compiler so repeated\n * calls share upstream state. Theme CSS is fixed at construction — theme\n * edits require a new parser.\n */\nexport class TailwindParser {\n private readonly scanner: Scanner\n private compiler: TailwindCompiler | undefined\n /** Full resolved base theme (built-in palette + user `@theme`), colors lowered to sRGB. Source for `useColor` / `useToken`. */\n private baseThemeTokens: ThemeTable | null = null\n private readonly themeSchemes: ThemeSchemeTable\n private readonly schemeAliases: ReadonlyMap<string, string>\n /**\n * Scheme names declared via `@custom-variant <name> …;`. A scheme\n * listed here but absent from {@link themeSchemes} (no `@variant`\n * override block) draws its values from the base `@theme` — the\n * standard Tailwind v4 \"light defaults + dark override\" shape.\n */\n private readonly customVariantSchemes: readonly string[]\n /**\n * Memoise `resolveCandidates` results by candidate-list fingerprint.\n * Fast Refresh hits this on every save: oxide's scan is cheap, but\n * the LightningCSS visitor walk over the compiled CSS is ~2ms per\n * file. A file whose `className` literals didn't change returns the\n * SAME candidate set, so the second `parseAtoms` call returns the\n * cached `ParsedOutput` — zero compile, zero visitor walk.\n *\n * Theme CSS changes build a new `TailwindParser` (from\n * `getRnwindState` detecting the hash shift), so this cache is\n * naturally invalidated — no stale-theme values leak through.\n */\n private readonly parseCache = new Map<string, ParsedOutput>()\n\n /**\n * Build a parser bound to a theme CSS source. `@theme` and\n * `@variant` blocks are extracted eagerly into a scheme table the\n * visitor consults when resolving `var(--x)` references.\n * @param config Parser configuration.\n */\n constructor(private readonly config: TailwindParserConfig) {\n this.themeSchemes = extractThemeVars(config.themeCss)\n this.schemeAliases = extractSchemeAliases(config.themeCss)\n this.customVariantSchemes = extractCustomVariantSchemes(config.themeCss)\n this.scanner = new Scanner({ sources: config.sources ? [...config.sources] : [] })\n }\n\n /**\n * Schemes declared by the user — the union of every `@custom-variant\n * <name>` declaration and every `@variant <name>` block, or just\n * `['base']` for themes without any. Used to decide how many\n * per-scheme buckets the per-atom resolver fills. Exposed publicly so\n * Metro integration can hand the names to the `.d.ts` generator\n * without a full parse.\n *\n * Both sources matter. `@variant` blocks alone miss the common\n * Tailwind v4 shape where the light palette sits in the base `@theme`\n * and only `@variant dark` overrides it: there `light` exists solely\n * as a `@custom-variant` and would otherwise be dropped, collapsing\n * every themed atom to a single bucket that can't switch.\n * `@custom-variant` order wins (it's where users enumerate their\n * schemes); any `@variant`-only scheme is appended after.\n * @returns Scheme names.\n */\n public get declaredSchemes(): readonly string[] {\n const ordered: string[] = []\n const seen = new Set<string>()\n for (const name of this.customVariantSchemes) {\n if (seen.has(name)) continue\n seen.add(name)\n ordered.push(name)\n }\n for (const name of this.themeSchemes.keys()) {\n if (name === BASE_SCHEME || seen.has(name)) continue\n seen.add(name)\n ordered.push(name)\n }\n return ordered.length > 0 ? ordered : [BASE_SCHEME]\n }\n\n /**\n * Build an effective var table for one scheme — base vars overridden by\n * variant vars. When the scheme IS `'base'` (no variants declared), the\n * base table is returned unchanged.\n * @param scheme Scheme name.\n * @returns Effective var name → value lookup for the scheme.\n */\n private effectiveVars(scheme: string): ReadonlyMap<string, string> {\n const base = this.themeSchemes.get(BASE_SCHEME)\n const variant = scheme === BASE_SCHEME ? undefined : this.themeSchemes.get(scheme)\n if (!variant) return base ?? new Map()\n // eslint-disable-next-line unicorn/no-useless-collection-argument\n const merged = new Map(base ?? [])\n for (const [k, v] of variant) merged.set(k, v)\n return merged\n }\n\n /**\n * Build the per-scheme theme token tables for `registerThemeTokens` —\n * the data source for `useColor` / `useToken` / `useSize`. Emits one table\n * per scheme the user wrote tokens under (`base` + each variant block /\n * `.dark` override). `--color-*` values are lowered to sRGB (matching the\n * className path) using `resolver` so a wide-gamut or `var()`-referencing\n * token resolves to an RN-renderable string; other tokens pass through.\n * @param resolver Full compiled `:root` table, for resolving `var()` refs.\n * @returns Scheme → (token name → value) map.\n */\n private buildThemeTokens(resolver: ReadonlyMap<string, string>): ThemeTables {\n const out: ThemeTables = {}\n // BASE: the full resolved theme (built-in palette + user `@theme`). The\n // runtime merges this under the active scheme, so `useColor('pink-500')`\n // and `useColor('<your-token>')` both resolve in every scheme.\n if (this.baseThemeTokens) out[BASE_SCHEME] = this.baseThemeTokens\n // VARIANTS: only the per-scheme overrides the user wrote (`.dark { … }` /\n // `@variant dark { … }`) — they layer on top of base at runtime.\n for (const scheme of this.themeSchemes.keys()) {\n if (scheme === BASE_SCHEME) continue\n const userTable = this.themeSchemes.get(scheme)\n if (!userTable || userTable.size === 0) continue\n const schemeResolver = new Map(resolver)\n for (const [k, v] of this.effectiveVars(scheme)) schemeResolver.set(k, v)\n const table: ThemeTable = {}\n for (const [name, raw] of userTable) {\n table[name] = name.startsWith('--color-') ? lowerColorToken(raw, schemeResolver) : raw\n }\n out[scheme] = table\n }\n return out\n }\n\n /**\n * Build the Tailwind compiler on first use and cache it. The theme CSS\n * gets a `theme(inline)` modifier on its `@import 'tailwindcss'` so\n * lightningcss sees resolved colors/lengths instead of `var()` refs.\n * @returns Cached compiler instance.\n */\n private async ensureCompiler(): Promise<TailwindCompiler> {\n if (this.compiler) return this.compiler\n const ready = compileReadyTheme(this.config.themeCss, this.themeSchemes)\n try {\n this.compiler = await compile(withInlineTheme(ready), {\n base: process.cwd(),\n onDependency: () => {},\n })\n } catch (error) {\n throw wrapThemeError(error)\n }\n // Load the resolved design system ONCE to capture the FULL theme — the\n // built-in palette (`pink-500`, …) plus the user's `@theme` tokens — so\n // `useColor` / `useToken` resolve any theme value, not just the utilities\n // a class happened to use (Tailwind tree-shakes `:root`, so the compiled\n // CSS alone never carries the full palette). Best-effort: a load failure\n // just narrows the hooks to the user's own tokens.\n this.baseThemeTokens = await loadBaseThemeTokens(ready)\n return this.compiler\n }\n\n /**\n * Parse one file's Tailwind usage into the full typed result.\n * @param options Source content + extension.\n * @param options.content Raw source text to scan for Tailwind candidates.\n * @param options.extension File extension (`tsx`, `ts`, `jsx`, `js`) — feeds oxide's tokenizer.\n * @returns RN atoms, keyframes, property defaults, candidates list.\n */\n public async parseAtoms({ content, extension }: ParseOptions): Promise<ParsedOutput> {\n const candidates = this.scanner.getCandidatesWithPositions({ content, extension }).map((c) => c.candidate)\n const fingerprint = fingerprintCandidates(candidates)\n const cached = this.parseCache.get(fingerprint)\n if (cached) return cached\n const result = await this.resolveCandidates(candidates)\n this.parseCache.set(fingerprint, result)\n return result\n }\n\n /**\n * Scan every source file the Scanner was configured to watch via\n * `sources` and resolve the union of candidates in one pass. Used by\n * `UnionBuilder` at Metro startup (and on first worker access) to\n * populate the complete atom registry before ANY per-file transform\n * has run — so scheme files never ship a partial view of the theme.\n *\n * Hot-reload path uses `parseAtoms` for the per-file delta; this one\n * only runs once per parser instance (and whenever the parser is\n * rebuilt due to a theme CSS change).\n * @returns Full RN atoms, keyframes, property defaults for every\n * candidate discovered across the configured sources.\n */\n public async parseProject(): Promise<ParsedOutput> {\n const candidates = this.scanner.scan()\n return this.resolveCandidates(candidates)\n }\n\n /**\n * Compile + typed-visit the given candidate class names. Shared\n * implementation for both `parseAtoms` (single file) and\n * `parseProject` (whole project).\n * @param candidates Class-name candidates the oxide Scanner produced.\n * @returns Fully-typed parser result.\n */\n private async resolveCandidates(candidates: readonly string[]): Promise<ParsedOutput> {\n if (candidates.length === 0) return emptyOutput()\n const compiler = await this.ensureCompiler()\n let css: string\n try {\n css = compiler.build([...candidates])\n } catch (error) {\n throw wrapThemeError(error)\n }\n // Tailwind v4 emits opacity-suffixed themed colors as a pre-resolved\n // sRGB fallback PLUS a `@supports`-gated var()-based override:\n // border-color: color-mix(in srgb, #0A0A0A 20%, transparent);\n // @supports (color: color-mix(in lab, red, red)) {\n // border-color: color-mix(in oklab, var(--color-text) 20%, transparent);\n // }\n // Lightningcss takes the OUTER fallback (locked to whichever scheme\n // the compiler resolved first), and our per-scheme substitution\n // never gets a chance. Unwrap the @supports so the var()-based\n // declaration overrides the fallback in the same rule — lightningcss\n // emits the override as `unparsed` and the parser's themeVars-aware\n // path produces correct rgba per scheme.\n css = unwrapColorMixSupports(css)\n // `compiler.build(candidates)` memoizes across calls — it returns CSS for\n // every candidate the compiler has EVER seen in this process. To keep\n // parser output pure per-call we restrict outputs to this call's\n // candidates:\n // - atoms: match class selectors against `wanted`.\n // - keyframes: collect `animation-name` references during the style\n // walk, then filter the visited keyframes to referenced names.\n const wanted = new Set(candidates)\n const schemes = this.declaredSchemes\n // Tailwind's compiled CSS contains every theme token — including\n // ones imported from secondary CSS files (e.g. `@import\n // 'rnwind/css'`). Pull them out of the `:root` block so\n // `var(--duration-normal)` style references in unparsed declarations\n // resolve to literal values (`220ms`) instead of being passed through\n // to RN, which can't read CSS custom properties.\n const compiledTheme = extractRootCustomProperties(css)\n const schemeTables = new Map<string, ReadonlyMap<string, string>>()\n for (const scheme of schemes) {\n const merged = new Map(compiledTheme)\n for (const [k, v] of this.effectiveVars(scheme)) merged.set(k, v)\n schemeTables.set(scheme, merged)\n }\n\n const atoms = new Map<string, Record<string, RNStyle>>()\n const keyframes: ParsedOutput['keyframes'] = new Map()\n const referencedKeyframes = new Set<string>()\n const propertyDefaults: ParsedOutput['propertyDefaults'] = new Map()\n const gradientAtoms: ParsedOutput['gradientAtoms'] = new Map()\n const hapticAtoms: ParsedOutput['hapticAtoms'] = new Map()\n const breakpoints = new Map<string, number>()\n const { schemeAliases } = this\n\n try {\n transform({\n ...DEFAULT_TRANSFORM_OPTIONS,\n filename: 'rnwind-virtual.css',\n code: Buffer.from(css),\n visitor: {\n Rule: {\n style(rule) {\n for (const selector of rule.value.selectors) {\n const className = classNameFromSelector(selector)\n if (!className || !wanted.has(className)) continue\n processStyleRule(\n rule.value.declarations.declarations,\n className,\n { schemes, schemeTables, atoms, referencedKeyframes, schemeAliases, breakpoints },\n rule.value.rules ?? [],\n )\n // Gradient atoms are detected per rule: the parser's main\n // RN-style path drops the `--tw-gradient-*` customs as\n // unsupported, but for gradient utilities we want to\n // surface their role + resolved colour so the transformer\n // can rewrite `<LinearGradient className=\"...\">` into\n // `colors={...}` / `start={...}` / `end={...}` props.\n const gradientTable = schemeTables.get(BASE_SCHEME) ?? schemeTables.get(schemes[0] ?? BASE_SCHEME)\n const gradient = detectGradientAtom(rule.value.declarations.declarations, gradientTable)\n if (gradient) gradientAtoms.set(className, gradient)\n // Haptics may live on the rule directly OR inside a\n // nested pseudo (e.g. `&:active` for `active:haptic-*`).\n // Inspect both so `active:haptic-medium` registers.\n const hapticDecls: LcDeclaration[] = [...rule.value.declarations.declarations]\n for (const nested of rule.value.rules ?? []) hapticDecls.push(...collectNestedDecls(nested))\n const haptic = detectHapticAtom(hapticDecls)\n if (haptic) hapticAtoms.set(className, haptic)\n }\n },\n keyframes(rule) {\n const name = keyframesName(rule.value.name)\n if (!name) return\n const steps: KeyframeStep[] = []\n const baseTable = schemeTables.get(BASE_SCHEME) ?? schemeTables.get(schemes[0] ?? BASE_SCHEME)\n for (const frame of rule.value.keyframes) {\n const offsets = keyframeSelectorOffsets(frame.selectors)\n if (offsets.length === 0) continue\n const style: RNStyle = {}\n const frameDecls = frame.declarations.declarations ?? []\n for (const decl of frameDecls) {\n for (const [key, value] of declarationToRnEntries(decl, baseTable)) style[key] = value\n }\n // One frame can carry several offsets (`0%, 100% { … }`); emit a\n // step for each so the terminal frame isn't lost.\n for (const offset of offsets) steps.push({ offset, style })\n }\n keyframes.set(name, { name, steps })\n },\n property(rule) {\n const initial = serializeInitialValue(rule.value.initialValue)\n if (initial !== null) propertyDefaults.set(rule.value.name, initial)\n },\n },\n },\n })\n } catch (error) {\n throw wrapThemeError(error)\n }\n\n // Prune keyframes to those actually referenced by this call's atoms.\n for (const name of keyframes.keys()) {\n if (!referencedKeyframes.has(name)) keyframes.delete(name)\n }\n\n const themeTokens = this.buildThemeTokens(compiledTheme)\n return { atoms, keyframes, propertyDefaults, gradientAtoms, hapticAtoms, candidates: [...candidates], schemes, breakpoints, themeTokens }\n }\n}\n\n/**\n * Lower a `--color-*` token value to an RN-renderable sRGB string, matching\n * the className path: resolve any `var()` ref via `resolver`, then lower a\n * wide-gamut form (`oklch(…)`, `lab(…)`, `color(p3 …)`) to sRGB. Hex / rgb /\n * named colors pass through unchanged.\n * @param raw Raw token value.\n * @param resolver Var name → value table for resolving `var()` references.\n * @returns RN-safe color string.\n */\nfunction lowerColorToken(raw: string, resolver: ReadonlyMap<string, string>): string {\n const substituted = substituteThemeVars(raw, resolver)\n return normalizeColorString(substituted) ?? substituted\n}\n\n/** Theme token families excluded from the registered base table — pure Tailwind internals with no `useColor`/`useToken` value. */\nconst INTERNAL_TOKEN_PREFIXES: readonly string[] = ['--tw-', '--default-']\n\n/** Shape of a resolved design-system theme entry from `@tailwindcss/node`'s unstable loader. */\ninterface DesignSystemTheme {\n theme?: { entries?: () => Iterable<[string, { value?: unknown }]> }\n}\n\n/**\n * `@tailwindcss/node`'s `__unstable__loadDesignSystem` — exists at runtime but\n * isn't in the package's published types, so it's accessed through a narrowed\n * cast rather than a named import. Returns `undefined` when the (unstable) API\n * isn't present, so {@link loadBaseThemeTokens} degrades gracefully.\n */\nconst loadDesignSystem = (tailwindNode as unknown as {\n __unstable__loadDesignSystem?: (css: string, options: { base: string }) => Promise<DesignSystemTheme>\n}).__unstable__loadDesignSystem\n\n/**\n * Load the FULL resolved Tailwind theme (built-in palette + the user's\n * `@theme`) via the design-system API and flatten it to an RN-safe token\n * table — `--color-*` values lowered to sRGB, everything else passed through.\n * This is what lets `useColor` / `useToken` resolve ANY theme token, including\n * built-ins a class never used (Tailwind tree-shakes the compiled `:root`, so\n * the compiled CSS alone can't supply the full palette). Internal `--tw-*` /\n * `--default-*` families are dropped. Returns `null` on any failure so the\n * caller degrades to the user's own `@theme` tokens.\n * @param themeCss Compile-ready theme CSS (variants stripped, custom-variants added).\n * @returns Flattened base token table, or null.\n */\nasync function loadBaseThemeTokens(themeCss: string): Promise<ThemeTable | null> {\n if (typeof loadDesignSystem !== 'function') return null\n try {\n const design = await loadDesignSystem(themeCss, { base: process.cwd() })\n const entries = design.theme?.entries?.()\n if (!entries) return null\n const table: ThemeTable = {}\n for (const [name, entry] of entries) {\n const raw = entry?.value\n if (typeof raw !== 'string') continue\n if (INTERNAL_TOKEN_PREFIXES.some((prefix) => name.startsWith(prefix))) continue\n table[name] = name.startsWith('--color-') ? (normalizeColorString(raw) ?? raw) : raw\n }\n return table\n } catch {\n return null\n }\n}\n\n/**\n * Wrap an error from `@tailwindcss/node`'s compiler or `lightningcss`'s\n * transform with a `rnwind:` prefix so the user sees a clear \"this came\n * from your theme CSS\" signal in Metro's stack trace. Preserves the\n * original error as `cause` so downstream tooling (Sentry, Metro\n * symbolication) can still inspect it.\n * @param error Underlying error from the compiler or transform.\n * @returns Prefixed Error with the original attached as `cause`.\n */\nfunction wrapThemeError(error: unknown): Error {\n const message = error instanceof Error ? error.message : String(error)\n const wrapped = new Error(\n `rnwind: failed to compile theme CSS — ${message}\\n` +\n `Check your global.css for unbalanced braces, unknown @utility / @variant declarations, ` +\n `or unsupported color functions. Run \\`bun run --cwd packages/rnwind code-check\\` if this is the rnwind repo itself.`,\n )\n if (error instanceof Error) (wrapped as { cause?: unknown }).cause = error\n return wrapped\n}\n\n/**\n * Fingerprint a candidate list for `parseCache` lookup. Sorting gives\n * the same key regardless of source order (the set of candidates is\n * what drives `resolveCandidates`'s output, not their order).\n * @param candidates Raw oxide-scanner output for one file.\n * @returns Canonical string key.\n */\nfunction fingerprintCandidates(candidates: readonly string[]): string {\n if (candidates.length === 0) return ''\n if (candidates.length === 1) return candidates[0]!\n return [...candidates].toSorted((a, b) => a.localeCompare(b)).join('\\0')\n}\n\n/**\n * Empty sentinel returned when oxide finds no candidates in the file.\n * @returns Zero-atom result with only the `base` scheme declared.\n */\nfunction emptyOutput(): ParsedOutput {\n return {\n atoms: new Map(),\n keyframes: new Map(),\n propertyDefaults: new Map(),\n gradientAtoms: new Map(),\n hapticAtoms: new Map(),\n candidates: [],\n schemes: [BASE_SCHEME],\n breakpoints: new Map(),\n themeTokens: {},\n }\n}\n\n/**\n * Upgrade `@import 'tailwindcss'` (single- or double-quoted, with or\n * without an existing `theme(...)` clause) to `@import 'tailwindcss'\n * theme(inline)`. User-authored `theme(...)` clauses are preserved so\n * overrides win.\n * @param css Theme CSS source.\n * @returns CSS with the Tailwind import upgraded.\n */\nfunction withInlineTheme(css: string): string {\n return css.replaceAll(/(@import\\s+['\"]tailwindcss['\"])(?!\\s*theme\\()/g, '$1 theme(inline)')\n}\n\n/**\n * Collect rule-local custom-property writes (`--tw-translate-x`,\n * `--tw-scale-x`, `--tw-skew-y`, …). Tailwind v4 uses these as\n * composable transform tokens that `translate: var(--tw-translate-x)\n * var(--tw-translate-y)` then references. Surfacing them as theme vars\n * lets the declaration converter resolve the references as if they\n * were declared in `@theme`.\n * @param decls All declarations from one lightningcss style rule.\n * @returns Map from custom-property name (with leading `--`) to its raw value.\n */\nfunction collectRuleLocalVars(decls: readonly { property: string; value: unknown }[]): ReadonlyMap<string, string> {\n const out = new Map<string, string>()\n for (const decl of decls) {\n if (decl.property !== 'custom') continue\n const custom = decl.value as { name: { name: string } | string; value?: readonly TokenOrValue[] }\n const rawName = typeof custom.name === 'string' ? custom.name : custom.name.name\n if (!rawName.startsWith('--tw-')) continue\n if (!custom.value) continue\n const text = serializeTokens(custom.value).trim()\n if (text.length > 0) out.set(rawName, text)\n }\n return out\n}\n\ninterface StyleRuleContext {\n schemes: readonly string[]\n schemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>\n atoms: Map<string, Record<string, RNStyle>>\n referencedKeyframes: Set<string>\n schemeAliases: ReadonlyMap<string, string>\n /**\n * Mutable breakpoint registry — `applyMediaRule` populates this as it\n * walks responsive variant atoms. The driving signal is the `@media\n * (width >= Xrem)` condition on the nested rule. Result lives on\n * {@link ParsedOutput.breakpoints}.\n */\n breakpoints: Map<string, number>\n}\n\n/**\n * Process one matched style rule for a given class name: fold its\n * declarations into the per-scheme buckets, detect referenced keyframes,\n * then apply Tailwind's composable transform post-pass.\n * @param declarations Declarations from one lightningcss style rule.\n * @param className Class name this rule's selectors matched.\n * @param ctx Parser-call-wide context (schemes, tables, output maps).\n * @param nestedRules Nested style rules (Tailwind variant prefixes like `dark:`\n * wrap their decls in `&:where(.<scheme>, .<scheme> *)` nested rules).\n */\nfunction processStyleRule(\n declarations: readonly LcDeclaration[],\n className: string,\n ctx: StyleRuleContext,\n nestedRules: readonly unknown[] = [],\n): void {\n const bucket = ctx.atoms.get(className) ?? {}\n const ruleLocalVars = collectRuleLocalVars(declarations)\n const ruleSchemeTables = mergeRuleVars(ctx.schemeTables, ruleLocalVars)\n // Detect active:/focus: prefix on the class name. Tailwind emits the\n // actual decls inside `&:active { … }` / `&:focus { … }`, and the\n // OUTER rule has zero direct decls — so the existing per-scheme phase\n // below produces an empty bucket. We collect the inner decls into the\n // base scheme and tag the bucket with `__state` so the style-builder\n // can route the atom into `precomputeHoist`'s state buckets when the\n // interactive state.\n const interactiveState = classNameStateOf(className)\n // Phase 1: outer declarations apply to EVERY scheme (unconditional\n // utilities like `opacity-50`).\n for (const decl of declarations) {\n applyDeclarationToBucket(decl, bucket, ctx.schemes, ruleSchemeTables)\n const animationRef = pickAnimationName(decl)\n if (animationRef) ctx.referencedKeyframes.add(animationRef)\n }\n applyComposedTransform(bucket, ctx.schemes, ruleLocalVars)\n applyComposedShadow(bucket, ctx.schemes, ruleLocalVars, ruleSchemeTables)\n applyComposedRing(bucket, ctx.schemes, ruleLocalVars, ruleSchemeTables)\n // Phase 2: nested rules — three orthogonal flavours, dispatched on\n // the lightningcss node `type`:\n // - `media`: Tailwind v4 responsive variants (`sm:`, `md:`, …) wrap\n // declarations in `@media (width >= Xrem)`. Decls fold into every\n // scheme; the atom's name carries the breakpoint association so\n // the runtime can gate it on `windowWidth`.\n // - `style` + `interactiveState`: `&:active` / `&:focus` pseudo\n // decls (every scheme — interaction is theme-orthogonal).\n // - `style` (default): Tailwind v4 scheme variants\n // (`&:where(.<scheme>, .<scheme> *)`).\n for (const scheme of ctx.schemes) bucket[scheme] = bucket[scheme] ?? {}\n for (const nested of nestedRules) {\n const node = nested as { type?: string }\n if (node?.type === 'media') {\n applyMediaRule(nested, className, bucket, ctx, ruleSchemeTables, ruleLocalVars)\n continue\n }\n if (interactiveState) {\n applyInteractiveNestedRule(nested, bucket, ctx, ruleSchemeTables, ruleLocalVars)\n } else {\n applyNestedSchemeRule(nested, bucket, ctx, ruleSchemeTables, ruleLocalVars)\n }\n }\n normalizeLineHeightToPx(bucket, ctx.schemes)\n if (interactiveState) (bucket as Record<string, unknown>).__state = interactiveState\n ctx.atoms.set(className, bucket)\n}\n\n/** Recognised interactive variant prefixes. RN can drive both at runtime. */\nconst INTERACTIVE_PREFIXES = new Set(['active', 'focus'])\n\n/**\n * Inspect a class name for a leading interactive variant prefix. The\n * Tailwind compiler emits `active:bg-sky-700` literally (backslash-\n * escaped for CSS), and that name is the same string the parser sees.\n * So a cheap `split(':')` on the head is enough — no need to parse the\n * pseudo-class out of the selector itself.\n * @param className Tailwind utility class (e.g. `active:bg-sky-700`).\n * @returns The interactive state prefix (`'active'` / `'focus'`), or null when none.\n */\nfunction classNameStateOf(className: string): 'active' | 'focus' | null {\n const colon = className.indexOf(':')\n if (colon === -1) return null\n const prefix = className.slice(0, colon)\n if (!INTERACTIVE_PREFIXES.has(prefix)) return null\n return prefix as 'active' | 'focus'\n}\n\n/**\n * Pull the `min-width` threshold (px) out of a `@media (width >= Xrem)`\n * lightningcss node. Tailwind v4 emits exactly this shape for every\n * responsive variant — `>= 40rem` for `sm`, `>= 48rem` for `md`, etc.\n * Returns null for any other media condition (`hover`, `prefers-*`,\n * range bounds we don't model) so the caller can skip non-responsive\n * media wrappers without breaking.\n * @param nested A lightningcss `media` rule node.\n * @returns Threshold in px, or null when the condition isn't a simple\n * width-min check.\n */\nfunction readMediaMinWidthPx(nested: unknown): number | null {\n if (typeof nested !== 'object' || nested === null) return null\n const node = nested as { type?: string; value?: { query?: { mediaQueries?: readonly unknown[] } } }\n if (node.type !== 'media') return null\n const queries = node.value?.query?.mediaQueries\n if (queries?.length !== 1) return null\n const query = queries[0] as {\n condition?: {\n type?: string\n value?: {\n type?: string\n name?: string\n operator?: string\n value?: { type?: string; value?: { type?: string; value?: { unit?: string; value?: number } } }\n }\n }\n }\n const {condition} = query\n if (condition?.type !== 'feature') return null\n const feature = condition.value\n if (feature?.type !== 'range' || feature.name !== 'width') return null\n if (feature.operator !== 'greater-than-equal') return null\n const length = feature.value\n if (length?.type !== 'length') return null\n const inner = length.value?.value\n if (!inner || typeof inner.value !== 'number') return null\n if (inner.unit === 'rem') return inner.value * 16\n if (inner.unit === 'px') return inner.value\n return null\n}\n\n/**\n * Pull the leading `prefix:` segment off a className. `md:bg-red-500`\n * → `'md'`. Returns null for atoms without a colon (the common case)\n * or for empty prefixes.\n * @param className Atom name.\n * @returns Prefix or null.\n */\nfunction leadingPrefix(className: string): string | null {\n const colon = className.indexOf(':')\n if (colon <= 0) return null\n return className.slice(0, colon)\n}\n\n/**\n * Fold a Tailwind v4 responsive `@media (width >= Xrem)` nested rule\n * into every scheme's bucket and record the breakpoint threshold\n * (`md` → 768) on the parser-call context. The runtime later gates the\n * atom on `windowWidth` against this threshold via the prefix on the\n * atom's class name.\n *\n * Read directly from the media condition rather than from compiled\n * `--breakpoint-*` `:root` tokens because Tailwind's `theme(inline)`\n * mode strips those — the only authoritative source for the actual\n * thresholds Tailwind generated is the `@media` query itself.\n * @param nested One nested `media` node from `rule.value.rules`.\n * @param className Outer rule's class name (carries the breakpoint prefix).\n * @param bucket Per-scheme style map for the atom.\n * @param ctx Parser-call-wide context.\n * @param ruleSchemeTables Per-scheme var tables (outer rule's merged table).\n * @param ruleLocalVars Outer rule's `--tw-*` vars (inherited for inner decls).\n */\nfunction applyMediaRule(\n nested: unknown,\n className: string,\n bucket: Record<string, RNStyle>,\n ctx: StyleRuleContext,\n ruleSchemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n ruleLocalVars: ReadonlyMap<string, string>,\n): void {\n const decls = collectNestedDecls(nested)\n if (decls.length === 0) return\n const minWidth = readMediaMinWidthPx(nested)\n const prefix = leadingPrefix(className)\n if (minWidth !== null && prefix !== null) ctx.breakpoints.set(prefix, minWidth)\n for (const scheme of ctx.schemes) {\n const table = ruleSchemeTables.get(scheme)\n const schemeBucket = bucket[scheme] ?? {}\n for (const decl of decls) {\n for (const [key, value] of declarationToRnEntries(decl, table)) schemeBucket[key] = value\n const animationRef = pickAnimationName(decl)\n if (animationRef) ctx.referencedKeyframes.add(animationRef)\n }\n const nestedLocalVars = new Map(ruleLocalVars)\n for (const [k, v] of collectRuleLocalVars(decls)) nestedLocalVars.set(k, v)\n applyComposedTransformToScheme(schemeBucket, nestedLocalVars)\n applyComposedShadowToScheme(schemeBucket, nestedLocalVars, table)\n bucket[scheme] = schemeBucket\n }\n}\n\n/**\n * Fold one nested rule from an interactive (`active:` / `focus:`) atom\n * into every scheme's bucket. The Tailwind output for `active:bg-sky-700`\n * is `.active\\:bg-sky-700 { &:active { background-color: oklch(...) } }`\n * — the outer rule has zero\n * decls; the leaf lives three levels deep through pseudo + media. We\n * unwrap the pseudo and the media shell, take the inner decls, and\n * apply them across every scheme — interactivity is orthogonal to\n * theme. The bucket gets `__state: 'active' | 'focus'` set elsewhere.\n * @param nested One nested-rule node from `rule.value.rules`.\n * @param bucket Per-scheme style map for the atom.\n * @param ctx Parser-call-wide context.\n * @param ruleSchemeTables Per-scheme var tables (outer rule's merged table).\n * @param ruleLocalVars Outer rule's `--tw-*` vars (inherited for inner decls).\n */\nfunction applyInteractiveNestedRule(\n nested: unknown,\n bucket: Record<string, RNStyle>,\n ctx: StyleRuleContext,\n ruleSchemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n ruleLocalVars: ReadonlyMap<string, string>,\n): void {\n const decls = collectNestedDecls(nested)\n if (decls.length === 0) return\n for (const scheme of ctx.schemes) {\n const table = ruleSchemeTables.get(scheme)\n const schemeBucket = bucket[scheme] ?? {}\n for (const decl of decls) {\n for (const [key, value] of declarationToRnEntries(decl, table)) schemeBucket[key] = value\n const animationRef = pickAnimationName(decl)\n if (animationRef) ctx.referencedKeyframes.add(animationRef)\n }\n const nestedLocalVars = new Map(ruleLocalVars)\n for (const [k, v] of collectRuleLocalVars(decls)) nestedLocalVars.set(k, v)\n applyComposedTransformToScheme(schemeBucket, nestedLocalVars)\n applyComposedShadowToScheme(schemeBucket, nestedLocalVars, table)\n bucket[scheme] = schemeBucket\n }\n}\n\n/**\n * Recursively flatten a nested style/media rule into its leaf\n * declarations. Tailwind wraps interactive pseudo decls in `style`\n * nodes (`&:active`, `&:focus`); the walk unwraps them and any\n * `@media` shell around them.\n * @param nested A nested rule node.\n * @returns Every declaration found in the nested subtree.\n */\nfunction collectNestedDecls(nested: unknown): readonly LcDeclaration[] {\n if (typeof nested !== 'object' || nested === null) return []\n const node = nested as { type?: string; value?: NestedStyleRule & { rules?: readonly unknown[] } }\n if (!node.value) return []\n // `style` (with `&:active`) and `media` wrappers both surface the\n // actual decls. lightningcss surfaces inner-only declarations as a\n // `nested-declarations` node — flatten that too.\n if (node.type === 'nested-declarations') return [...(node.value.declarations?.declarations ?? [])]\n if (node.type !== 'style' && node.type !== 'media') return []\n const out: LcDeclaration[] = [...(node.value.declarations?.declarations ?? [])]\n for (const child of node.value.rules ?? []) out.push(...collectNestedDecls(child))\n return out\n}\n\n/**\n * Fold one nested style rule (Tailwind's `&:where(.<scheme>, .<scheme> *)`\n * pattern) into the scheme bucket its selector targets. Rules we can't\n * attribute to a single scheme are skipped — they'd only ever reach the\n * bucket via CSS cascading in a browser, which doesn't translate to RN.\n * @param nested One nested-rule node from `rule.value.rules`.\n * @param bucket Per-scheme style map for the atom.\n * @param ctx Parser-call-wide context.\n * @param ruleSchemeTables Per-scheme var tables (outer rule's merged table).\n * @param ruleLocalVars Outer rule's `--tw-*` vars (inherited for inner decls).\n */\nfunction applyNestedSchemeRule(\n nested: unknown,\n bucket: Record<string, RNStyle>,\n ctx: StyleRuleContext,\n ruleSchemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n ruleLocalVars: ReadonlyMap<string, string>,\n): void {\n if (typeof nested !== 'object' || nested === null) return\n const node = nested as { type?: string; value?: NestedStyleRule }\n if (node.type !== 'style' || !node.value) return\n const targetScheme = detectNestedScheme(node.value.selectors, ctx.schemes, ctx.schemeAliases)\n if (!targetScheme) return\n const innerDecls = node.value.declarations?.declarations ?? []\n const table = ruleSchemeTables.get(targetScheme)\n const schemeBucket = bucket[targetScheme] ?? {}\n for (const decl of innerDecls) {\n for (const [key, value] of declarationToRnEntries(decl, table)) schemeBucket[key] = value\n const animationRef = pickAnimationName(decl)\n if (animationRef) ctx.referencedKeyframes.add(animationRef)\n }\n // Apply the composed-transform + shadow post-passes to just this one\n // scheme, so nested `--tw-*` custom prop writes compose correctly.\n const nestedLocalVars = new Map(ruleLocalVars)\n for (const [k, v] of collectRuleLocalVars(innerDecls)) nestedLocalVars.set(k, v)\n applyComposedTransformToScheme(schemeBucket, nestedLocalVars)\n applyComposedShadowToScheme(schemeBucket, nestedLocalVars, table)\n bucket[targetScheme] = schemeBucket\n}\n\n/**\n * Shape of a lightningcss style rule as it appears inside `rule.value.rules`.\n * Loose typing because the full type is a sprawling discriminated union\n * we only need one shape from.\n */\ninterface NestedStyleRule {\n selectors: readonly (readonly unknown[])[]\n declarations?: { declarations: readonly LcDeclaration[] }\n}\n\n/**\n * Detect which scheme a nested `&:where(.<scheme>, .<scheme> *)`\n * selector targets. Recognises both the rnwind-default literal class\n * (`.dark`) and any user-declared `@custom-variant` selector class\n * (`.scheme-dark`), via the `aliases` map built from the theme CSS.\n * @param selectors Nested rule's selector lists.\n * @param schemes Declared scheme names.\n * @param aliases Class-name → scheme-name map from `@custom-variant` decls.\n * @returns Matching scheme name, or null when the selector isn't scheme-scoped.\n */\nfunction detectNestedScheme(\n selectors: readonly (readonly unknown[])[],\n schemes: readonly string[],\n aliases: ReadonlyMap<string, string>,\n): string | null {\n const known = new Set(schemes)\n for (const selector of selectors) {\n const found = findSchemeInSelector(selector, schemes, known, aliases)\n if (found) return found\n }\n return null\n}\n\n/**\n * Inner half of {@link detectNestedScheme} — extracted so each function\n * stays under the cognitive-complexity cap.\n * @param selector One compound selector (sequence of simple parts).\n * @param schemes Declared scheme names (for recursion).\n * @param known Set form of `schemes` for O(1) lookups.\n * @param aliases Class-name → scheme-name map from `@custom-variant` decls.\n * @returns Matching scheme name, or null.\n */\nfunction findSchemeInSelector(\n selector: readonly unknown[],\n schemes: readonly string[],\n known: ReadonlySet<string>,\n aliases: ReadonlyMap<string, string>,\n): string | null {\n for (const part of selector) {\n const direct = matchSchemeClass(part, known, aliases)\n if (direct) return direct\n const nested = matchSchemeInWhere(part, schemes, aliases)\n if (nested) return nested\n }\n return null\n}\n\n/**\n * Match a `.scheme` class part against the declared schemes (literal\n * match) or against the `@custom-variant` alias map (e.g. `.scheme-dark`\n * → `dark`).\n * @param part One simple selector part.\n * @param known Declared scheme names.\n * @param aliases Class-name → scheme-name map from `@custom-variant` decls.\n * @returns Matching scheme name, or null.\n */\nfunction matchSchemeClass(part: unknown, known: ReadonlySet<string>, aliases: ReadonlyMap<string, string>): string | null {\n if (typeof part !== 'object' || part === null) return null\n const node = part as { type?: string; name?: string }\n if (node.type !== 'class') return null\n if (typeof node.name !== 'string') return null\n if (known.has(node.name)) return node.name\n return aliases.get(node.name) ?? null\n}\n\n/**\n * Match a `:where(.scheme, …)` pseudo-class wrapper and recurse into\n * its inner selectors.\n * @param part One simple selector part.\n * @param schemes Declared scheme names.\n * @param aliases Class-name → scheme-name map from `@custom-variant` decls.\n * @returns Matching scheme name from inside the `where`, or null.\n */\nfunction matchSchemeInWhere(part: unknown, schemes: readonly string[], aliases: ReadonlyMap<string, string>): string | null {\n if (typeof part !== 'object' || part === null) return null\n const node = part as { type?: string; kind?: string; selectors?: readonly (readonly unknown[])[] }\n if (node.type !== 'pseudo-class' || node.kind !== 'where' || !node.selectors) return null\n return detectNestedScheme(node.selectors, schemes, aliases)\n}\n\n/**\n * Per-scheme version of `applyComposedTransform` — synthesize a\n * `transform` array into a SINGLE scheme's style from its rule-local\n * `--tw-*` vars.\n * @param style Scheme-specific style map.\n * @param ruleLocalVars Combined outer+nested `--tw-*` vars.\n */\nfunction applyComposedTransformToScheme(style: RNStyle, ruleLocalVars: ReadonlyMap<string, string>): void {\n const composed = composeTransformFromVars(ruleLocalVars)\n if (composed.length === 0) return\n delete style.translate\n delete style.scale\n delete style.rotate\n style.transform = composed\n}\n\n/**\n * Per-scheme version of `applyComposedShadow` — synthesize RN shadow\n * longhands into a SINGLE scheme's style from its `--tw-shadow` custom\n * prop.\n * @param style Scheme-specific style map.\n * @param ruleLocalVars Combined outer+nested `--tw-*` vars.\n * @param table Per-scheme var table for resolving `var(--color-x)` in colors.\n */\nfunction applyComposedShadowToScheme(\n style: RNStyle,\n ruleLocalVars: ReadonlyMap<string, string>,\n table?: ReadonlyMap<string, string>,\n): void {\n const rawShadow = ruleLocalVars.get('--tw-shadow')\n const rawShadowColor = ruleLocalVars.get('--tw-shadow-color')\n if (!rawShadow && rawShadowColor) {\n const color = resolveCustomColorString(rawShadowColor, table)\n if (!color) return\n delete style.boxShadow\n style.shadowColor = color\n return\n }\n if (!rawShadow) return\n const shadow = parseFirstShadow(rawShadow)\n if (!shadow) return\n delete style.boxShadow\n style.shadowColor = shadow.color\n style.shadowOffset = { width: shadow.x, height: shadow.y }\n style.shadowOpacity = shadow.opacity\n style.shadowRadius = shadow.blur\n style.elevation = Math.max(1, Math.min(24, Math.round(Math.max(shadow.y, shadow.blur / 2))))\n}\n\n/**\n * Tailwind v4's `shadow-*` utilities write a `--tw-shadow` custom prop\n * holding the actual `<x> <y> <blur> <spread> <color>` shadow values,\n * then a `box-shadow: var(--tw-shadow)` declaration RN can't use. This\n * post-pass parses `--tw-shadow` and emits the RN shadow longhands —\n * `shadowColor` / `shadowOffset` / `shadowOpacity` / `shadowRadius` /\n * `elevation` — so iOS and Android both render the shadow.\n * @param bucket Per-scheme style map for the atom.\n * @param schemes Scheme names active for this parse.\n * @param ruleLocalVars Rule-local `--tw-*` vars.\n * @param schemeTables Per-scheme var tables for resolving `var(--color-x)`.\n */\nfunction applyComposedShadow(\n bucket: Record<string, RNStyle>,\n schemes: readonly string[],\n ruleLocalVars: ReadonlyMap<string, string>,\n schemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n): void {\n const rawShadow = ruleLocalVars.get('--tw-shadow')\n const rawShadowColor = ruleLocalVars.get('--tw-shadow-color')\n // Color-only utility (`shadow-red-50`, `shadow-gray-200`, …): emit\n // `shadowColor` + `shadowOpacity: 1` so the explicit color overrides\n // the size utility's 0.1 alpha fallback (matches Tailwind v4 web,\n // where setting `--tw-shadow-color` swaps in a solid color). Offset /\n // blur / elevation come from the partner size utility's atom.\n if (!rawShadow && rawShadowColor) {\n for (const scheme of schemes) {\n // Resolve per scheme — a custom token may differ between light/dark.\n const color = resolveCustomColorString(rawShadowColor, schemeTables.get(scheme))\n if (!color) continue\n const style = bucket[scheme] ?? {}\n delete style.boxShadow\n style.shadowColor = color\n bucket[scheme] = style\n }\n return\n }\n if (!rawShadow) return\n const shadow = parseFirstShadow(rawShadow)\n if (!shadow) return\n for (const scheme of schemes) {\n const style = bucket[scheme] ?? {}\n delete style.boxShadow\n style.shadowColor = shadow.color\n style.shadowOffset = { width: shadow.x, height: shadow.y }\n style.shadowOpacity = shadow.opacity\n style.shadowRadius = shadow.blur\n style.elevation = Math.max(1, Math.min(24, Math.round(Math.max(shadow.y, shadow.blur / 2))))\n bucket[scheme] = style\n }\n}\n\n/**\n * Synthesize RN ring styles from Tailwind's `--tw-ring-color` /\n * `--tw-ring-shadow` composable custom props. RN has no native ring;\n * we approximate by writing `borderColor` + `borderWidth` so the\n * outline is visible. Atoms that ALREADY set borderColor (e.g. paired\n * with `border-2`) keep their value — the ring just won't override.\n * @param bucket Per-scheme style map for the atom.\n * @param schemes Scheme names active for this parse.\n * @param ruleLocalVars Rule-local `--tw-*` vars.\n * @param schemeTables Per-scheme var tables for resolving `var(--color-x)`.\n */\nfunction applyComposedRing(\n bucket: Record<string, RNStyle>,\n schemes: readonly string[],\n ruleLocalVars: ReadonlyMap<string, string>,\n schemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n): void {\n const ringColor = ruleLocalVars.get('--tw-ring-color')\n if (!ringColor) return\n for (const scheme of schemes) {\n // Resolve per scheme — a custom token may differ between light/dark.\n const color = resolveCustomColorString(ringColor, schemeTables.get(scheme))\n if (!color) continue\n const style = bucket[scheme] ?? {}\n if (!('borderColor' in style)) style.borderColor = color\n bucket[scheme] = style\n }\n}\n\n/**\n * Tailwind composable shadow/inset-shadow alpha defaults. Their `100%` lives\n * in an `@property` initial-value (not the rule's local vars), so after the\n * `@supports` color-mix is unwrapped, `var(--tw-shadow-alpha)` is left dangling\n * and the shadow color fails to resolve. Seed the default; a `/<opacity>`\n * modifier still wins because the in-rule table value overrides it.\n */\nconst COMPOSABLE_ALPHA_DEFAULTS: ReadonlyMap<string, string> = new Map([\n ['--tw-shadow-alpha', '100%'],\n ['--tw-inset-shadow-alpha', '100%'],\n])\n\n/**\n * Resolve a CSS color string (`oklch(0.971 0.013 17.38)`, `#ff0000`,\n * `rgb(0 0 0 / 0.1)`) to the hex string RN's `shadowColor` accepts.\n * Wraps culori's parser via {@link parseCssColorToHex}.\n *\n * Custom `@theme` color tokens arrive as `var(--color-x)` (only the default\n * palette is `theme(inline)`-d), so `table` is substituted FIRST — without it\n * `shadow-<token>` / `ring-<token>` silently drop the color (culori can't\n * parse a bare `var()`). The table is per-scheme so a token that differs\n * between light/dark resolves to the right value for each.\n * @param raw Raw color text from a `--tw-shadow-color` / `--tw-ring-color` prop.\n * @param table Per-scheme var table for resolving `var(--color-x)` references.\n * @returns `#rrggbb` string, or null when culori can't parse it.\n */\nfunction resolveCustomColorString(raw: string, table?: ReadonlyMap<string, string>): string | null {\n const seeded = new Map([...COMPOSABLE_ALPHA_DEFAULTS, ...(table ?? [])])\n const substituted = substituteThemeVars(raw, seeded)\n // `coerceUnparsedValue` collapses Tailwind's opacity shape\n // `color-mix(in oklab, <color> <pct>%, transparent)` (emitted by\n // `shadow-<token>` / `ring-<token>`) to a flat rgba/hex and unwraps\n // `var(…, fallback)`. Modern spaces (`oklch(…)`) then lower via\n // `normalizeColorString`; anything still un-RN-safe falls to culori.\n const coerced = coerceUnparsedValue(unwrapVariableFallback(substituted).trim())\n if (typeof coerced !== 'string' || coerced.length === 0 || coerced.startsWith('var(')) return null\n if (coerced.startsWith('#') || coerced.startsWith('rgb') || coerced.startsWith('hsl')) return coerced\n return normalizeColorString(coerced) ?? parseCssColorToHex(coerced)\n}\n\n/**\n * Parse any CSS color expression into an `#rrggbb` string via culori.\n * Falls back to null when culori doesn't recognize the format.\n * @param text CSS color value.\n * @returns Hex string, or null.\n */\nfunction parseCssColorToHex(text: string): string | null {\n return formatHexSafe(text)\n}\n\n/**\n * Format a CSS color via culori.\n * @param text CSS color value.\n * @returns `#rrggbb` string when culori succeeds, else null.\n */\nfunction formatHexSafe(text: string): string | null {\n try {\n const hex = culoriFormatHex(text)\n return typeof hex === 'string' ? hex : null\n } catch {\n return null\n }\n}\n\ninterface ParsedShadow {\n x: number\n y: number\n blur: number\n spread: number\n color: string\n opacity: number\n}\n\n/**\n * Parse the first shadow from a `--tw-shadow` custom-property value.\n * The value is a comma-separated list of shadows; each shadow is\n * `<x> <y> <blur> <spread> <color>`. RN renders only one shadow per\n * view, so we keep the first.\n * @param raw Raw `--tw-shadow` text (post-substitution).\n * @returns Parsed shadow, or null when the shape is unrecognized.\n */\nfunction parseFirstShadow(raw: string): ParsedShadow | null {\n // Split on top-level commas (parens-aware) so colors like `rgba(0,0,0,0.5)`\n // don't fragment the list.\n const head = topLevelSplit(raw, ',')[0]?.trim()\n if (!head) return null\n const { lengths, remainder } = extractShadowLengths(head)\n const [x = 0, y = 0, blur = 0, spread = 0] = lengths\n const { color, opacity } = parseShadowColor(remainder.trim())\n return { x, y, blur, spread, color, opacity }\n}\n\n/**\n * Pull the first 4 numeric tokens out of a shadow expression and return\n * them alongside the remaining text (which is the color expression).\n * Shadow shape: `<x> <y> <blur> <spread> <color>` — tokens may be bare\n * (`0`), px-dimensioned (`1px`), or rem/em/%.\n * @param head Single shadow expression (one comma-separated entry).\n * @returns Pixel lengths + the remainder text (color expression).\n */\nfunction extractShadowLengths(head: string): { lengths: number[]; remainder: string } {\n // Take ONLY the leading run of length tokens, stopping at the first\n // non-length token (the color). A previous global digit-regex scanned\n // the whole string, so a <4-length shadow like `0 1px 1px rgb(0 0 0 /\n // 0.05)` stole a digit out of the color expression — corrupting the\n // alpha (opacity) or a digit-leading hex. Whitespace-splitting can't\n // reach inside the color because we break as soon as a token isn't a\n // bare/`px`/`rem`/`em`/`%` length.\n // Unambiguous integer-or-decimal (no `\\d*\\.?\\d+` overlap) so there's no\n // super-linear backtracking on long digit runs.\n const isLength = /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:px|rem|em|%)?$/\n const parts = head.split(/\\s+/)\n const lengths: number[] = []\n let index = 0\n while (index < parts.length && lengths.length < 4 && isLength.test(parts[index]!)) {\n lengths.push(parseLengthToken(parts[index]!))\n index += 1\n }\n return { lengths, remainder: parts.slice(index).join(' ') }\n}\n\n/**\n * Coerce one shadow length token into a pixel number. Accepts bare\n * integers (`0`), `Npx`, and `Nrem` — every shape Tailwind's\n * `--tw-shadow` value uses.\n * @param token Token text.\n * @returns Pixel number.\n */\nfunction parseLengthToken(token: string): number {\n if (token.endsWith('rem')) return Number(token.slice(0, -3)) * 16\n if (token.endsWith('em')) return Number(token.slice(0, -2)) * 16\n if (token.endsWith('px')) return Number(token.slice(0, -2))\n if (token.endsWith('%')) return Number(token.slice(0, -1))\n return Number(token)\n}\n\n/**\n * Extract a color string + extracted alpha from a shadow's color\n * expression. Supports `rgb(...)` / `rgba(...)` / `#rrggbb` / hex with\n * alpha / theme-resolved CSS color strings.\n * @param expr Color expression text.\n * @returns Color string for `shadowColor` + alpha for `shadowOpacity`.\n */\nfunction parseShadowColor(expr: string): { color: string; opacity: number } {\n const working = unwrapVariableFallback(expr).trim()\n if (working.length === 0) return { color: '#000', opacity: 0.1 }\n const rgba = parseRgbaExpression(working)\n if (rgba) return rgba\n if (working.startsWith('#')) return { color: working, opacity: 1 }\n // Named (`red`) / modern (`hsl(…)`, `oklch(…)`) colors — culori → sRGB hex.\n // Without this they fell to the default black at 0.1 alpha, silently losing\n // the user's `shadow-[0_2px_4px_red]` color.\n const hex = formatHexSafe(working)\n if (hex) return { color: hex, opacity: 1 }\n return { color: '#000', opacity: 0.1 }\n}\n\n/**\n * Strip the `var(--name, fallback)` wrapper from a CSS value. Tailwind\n * wraps shadow colors as `var(--tw-shadow-color, rgb(0 0 0 / 0.1))`,\n * and when the var is unresolved we want the fallback.\n * @param expr Raw CSS value.\n * @returns Inner fallback when wrapped, otherwise the input unchanged.\n */\nfunction unwrapVariableFallback(expr: string): string {\n const trimmed = expr.trim()\n if (!trimmed.startsWith('var(') || !trimmed.endsWith(')')) return trimmed\n const inner = trimmed.slice(4, -1)\n let depth = 0\n for (let index = 0; index < inner.length; index += 1) {\n const ch = inner[index]\n if (ch === '(') depth += 1\n else if (ch === ')') depth -= 1\n else if (ch === ',' && depth === 0) return inner.slice(index + 1)\n }\n return trimmed\n}\n\n/**\n * Parse an `rgb(r g b)` / `rgba(r,g,b,a)` / `rgb(r g b / a)` color\n * expression into a hex + alpha pair. Returns `null` when the shape\n * doesn't match.\n * @param text Expression text (already trimmed and unwrapped).\n * @returns Hex color + alpha, or null.\n */\nfunction parseRgbaExpression(text: string): { color: string; opacity: number } | null {\n const head = /^rgba?\\(([^)]+)\\)$/i.exec(text)\n if (!head) return null\n const inner = head[1]!.replaceAll(',', ' ').replaceAll('/', ' ')\n const tokens = inner.split(/\\s+/).filter((part) => part.length > 0)\n if (tokens.length < 3) return null\n const [r, g, b, alphaText] = tokens\n let opacity = 1\n if (typeof alphaText === 'string') {\n opacity = alphaText.endsWith('%') ? Number(alphaText.slice(0, -1)) / 100 : Number(alphaText)\n }\n const hex = `#${[r!, g!, b!]\n .map((n) =>\n Math.max(0, Math.min(255, Math.round(Number(n))))\n .toString(16)\n .padStart(2, '0'),\n )\n .join('')}`\n return { color: hex, opacity }\n}\n\n/**\n * Split `text` at top-level occurrences of `delimiter`, treating\n * parentheses as nesting. Used to safely split shadow lists without\n * fragmenting `rgb(0, 0, 0, 0.5)` on its commas.\n * @param text Source text.\n * @param delimiter Single-character delimiter to split on.\n * @returns Parts of the text between top-level delimiters.\n */\nfunction topLevelSplit(text: string, delimiter: string): string[] {\n const parts: string[] = []\n let depth = 0\n let start = 0\n for (let index = 0; index < text.length; index += 1) {\n const ch = text[index]\n if (ch === '(') depth += 1\n else if (ch === ')') depth -= 1\n else if (ch === delimiter && depth === 0) {\n parts.push(text.slice(start, index))\n start = index + 1\n }\n }\n parts.push(text.slice(start))\n return parts\n}\n\n/**\n * Tailwind v4's `text-*` utilities emit `line-height` as a unitless\n * multiplier (`calc(2.5 / 2.25)` for `text-4xl`) that the browser\n * resolves against the element's `font-size`. RN's `lineHeight` is\n * always pixels — so when both `fontSize` and a multiplier-shaped\n * `lineHeight` (less than 10) land on the same atom, multiply through\n * to a pixel value. Atoms with only one of the two are left alone.\n * @param bucket Per-scheme style map for the atom.\n * @param schemes Scheme names active for this parse.\n */\nfunction normalizeLineHeightToPx(bucket: Record<string, RNStyle>, schemes: readonly string[]): void {\n for (const scheme of schemes) {\n const style = bucket[scheme]\n if (!style) continue\n const { fontSize } = style\n const { lineHeight } = style\n if (typeof fontSize !== 'number' || typeof lineHeight !== 'number') continue\n if (lineHeight >= 10) continue\n style.lineHeight = Math.round(fontSize * lineHeight * 10_000) / 10_000\n }\n}\n\n/**\n * Fold one declaration's resolved entries into every scheme's bucket on\n * the target atom.\n * @param decl Lightningcss declaration to convert.\n * @param bucket Per-scheme style map for the atom.\n * @param schemes Scheme names active for this parse.\n * @param ruleSchemeTables Per-scheme var tables (with rule-local overrides folded in).\n */\nfunction applyDeclarationToBucket(\n decl: LcDeclaration,\n bucket: Record<string, RNStyle>,\n schemes: readonly string[],\n ruleSchemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n): void {\n for (const scheme of schemes) {\n const schemeBucket = bucket[scheme] ?? {}\n for (const [key, value] of declarationToRnEntries(decl, ruleSchemeTables.get(scheme))) {\n schemeBucket[key] = value\n }\n bucket[scheme] = schemeBucket\n }\n}\n\n/**\n * Apply the composed-transform post-pass for a single atom: if any of\n * Tailwind's `--tw-translate-*` / `--tw-scale-*` / `--tw-skew-*` vars\n * were written, synthesize a single `transform` array and drop the\n * intermediate `translate`/`scale`/`rotate` shorthand entries.\n * @param bucket Per-scheme style map for the atom.\n * @param schemes Scheme names active for this parse.\n * @param ruleLocalVars Rule-local `--tw-*` vars.\n */\nfunction applyComposedTransform(\n bucket: Record<string, RNStyle>,\n schemes: readonly string[],\n ruleLocalVars: ReadonlyMap<string, string>,\n): void {\n const composed = composeTransformFromVars(ruleLocalVars)\n if (composed.length === 0) return\n for (const scheme of schemes) {\n const schemeBucket = bucket[scheme] ?? {}\n delete schemeBucket.translate\n delete schemeBucket.scale\n delete schemeBucket.rotate\n schemeBucket.transform = composed\n bucket[scheme] = schemeBucket\n }\n}\n\n/**\n * Synthesize an RN `transform` array from Tailwind v4's composable\n * `--tw-translate-x/y`, `--tw-scale-x/y`, `--tw-skew-x/y`, and\n * `--tw-rotate-x/y/z` custom properties. Returns an empty array when\n * none of those props were written, letting the caller skip the\n * post-pass.\n * @param ruleVars Rule-local `--tw-*` vars collected from the style rule.\n * @returns RN transform operations (possibly empty).\n */\nfunction composeTransformFromVars(ruleVars: ReadonlyMap<string, string>): readonly Record<string, string | number>[] {\n const ops: Record<string, string | number>[] = []\n addAxisOp(ops, 'translateX', ruleVars.get('--tw-translate-x'), resolveLengthExpression)\n addAxisOp(ops, 'translateY', ruleVars.get('--tw-translate-y'), resolveLengthExpression)\n addAxisOp(ops, 'scaleX', ruleVars.get('--tw-scale-x'), resolveNumberOrPercent)\n addAxisOp(ops, 'scaleY', ruleVars.get('--tw-scale-y'), resolveNumberOrPercent)\n addAxisOp(ops, 'skewX', ruleVars.get('--tw-skew-x'), extractAngleFromSkewFunction)\n addAxisOp(ops, 'skewY', ruleVars.get('--tw-skew-y'), extractAngleFromSkewFunction)\n return ops\n}\n\n/**\n * Push `{<key>: resolved(raw)}` into `ops` when `raw` is present and the\n * resolver returns non-null. Keeps {@link composeTransformFromVars}\n * below the cognitive complexity threshold.\n * @param ops Target array to mutate.\n * @param key RN transform op key (e.g. `'translateX'`).\n * @param raw Rule-local var value (possibly undefined).\n * @param resolve Value-resolver for this axis type.\n */\nfunction addAxisOp<T extends string | number>(\n ops: Record<string, string | number>[],\n key: string,\n raw: string | undefined,\n resolve: (text: string) => T | null,\n): void {\n if (!raw) return\n const value = resolve(raw)\n if (value !== null) ops.push({ [key]: value })\n}\n\n/**\n * Resolve a CSS length expression into the value a RN transform op\n * accepts — pixels as a number, or a percentage string preserved\n * verbatim. Supports the shapes Tailwind v4 emits into `--tw-translate-*`:\n *\n * - Direct lengths: `16px`, `1rem`, bare `42`.\n * - Percentages: `100%`, `-100%`.\n * - Flat calc: `calc(0.25rem * 52)`.\n * - Fractional calc: `calc(1 / 2 * 100%)` (→ `translate-x-1/2`).\n * - Nested calc with sign flip: `calc(calc(1 / 3 * 100%) * -1)` (→ `-translate-x-1/3`).\n *\n * Returns null when the expression mixes units (`calc(100% - 10px)` —\n * RN can't express those) or contains a token the evaluator can't\n * interpret; the transform op is simply skipped in that case.\n * @param text Length expression text.\n * @returns Pixel number, percentage string, or null when unrepresentable.\n */\nfunction resolveLengthExpression(text: string): number | string | null {\n const trimmed = text.trim()\n if (trimmed.length === 0) return null\n const evaluated = evaluateLengthExpr(trimmed)\n if (!evaluated) return null\n if (evaluated.unit === '%') return `${stripTrailingZeros(evaluated.value)}%`\n if (evaluated.unit === 'rem') return roundTransformValue(evaluated.value * 16)\n return roundTransformValue(evaluated.value)\n}\n\n/** Evaluated length + its unit. `''` means px or bare number. */\ninterface EvaluatedLength {\n value: number\n unit: '%' | 'rem' | ''\n}\n\n/**\n * Evaluate a CSS length expression to a `{value, unit}` pair.\n *\n * Strategy: detect the (at most one) unit suffix present in the text,\n * strip every `calc(` to `(`, strip the unit suffix from numeric tokens,\n * and run a small arithmetic evaluator. Mixed-unit expressions are\n * rejected because RN has no way to express `calc(100% - 10px)` in a\n * flat transform op.\n * @param text Raw CSS length expression (already trimmed).\n * @returns Evaluated length with its unit, or `null` when invalid.\n */\nfunction evaluateLengthExpr(text: string): EvaluatedLength | null {\n const units = detectUnits(text)\n if (units.length > 1) return null\n const unit = (units[0] ?? '') as EvaluatedLength['unit']\n const arithmetic = stripCalcAndUnits(text)\n const value = evaluateArithmetic(arithmetic)\n if (value === null || !Number.isFinite(value)) return null\n return { value, unit }\n}\n\n/**\n * Detect which length units appear in the expression. Multi-unit\n * expressions (e.g. `calc(100% - 1rem)`) aren't representable in one RN\n * transform op, so we reject them.\n * @param text Length expression.\n * @returns Sorted, deduped unit list found in the text.\n */\nfunction detectUnits(text: string): readonly string[] {\n const found = new Set<string>()\n if (/\\d%/.test(text)) found.add('%')\n if (/[\\d.]rem\\b/.test(text)) found.add('rem')\n if (/[\\d.]px\\b/.test(text)) found.add('px')\n return [...found]\n}\n\n/**\n * Strip every `calc(` wrapper to a plain `(`, and strip `%` / `rem` /\n * `px` unit suffixes from numeric tokens. Result is a plain arithmetic\n * expression the evaluator can consume.\n * @param text Length expression.\n * @returns Arithmetic text suitable for {@link evaluateArithmetic}.\n */\nfunction stripCalcAndUnits(text: string): string {\n // Input is Tailwind's compiled CSS, not user-controlled — no ReDoS risk.\n // eslint-disable-next-line sonarjs/slow-regex\n return text.replaceAll(/\\bcalc\\s*\\(/g, '(').replaceAll(/([\\d.]+)(?:rem|px|%)/g, '$1')\n}\n\n/**\n * Format a percentage number so `50` stays `\"50%\"` (not `\"50.00000001%\"`)\n * when float drift is in the low bits. Strips trailing-zero decimals.\n * @param value Percentage magnitude.\n * @returns Integer-ish string.\n */\nfunction stripTrailingZeros(value: number): string {\n const rounded = Math.round(value * 1_000_000) / 1_000_000\n return String(rounded)\n}\n\n/**\n * Tiny recursive-descent evaluator for CSS arithmetic. Accepts `+`, `-`,\n * `*`, `/`, parens, and decimal numbers. Returns `null` on malformed\n * input — rejects anything the tokenizer can't classify.\n * @param text Arithmetic text (post {@link stripCalcAndUnits}).\n * @returns Evaluated number, or `null`.\n */\nfunction evaluateArithmetic(text: string): number | null {\n const tokens = tokenizeArithmetic(text)\n if (!tokens) return null\n const cursor = { index: 0 }\n const result = parseArithmeticExpr(tokens, cursor)\n if (cursor.index !== tokens.length) return null\n return result\n}\n\n/**\n * Split arithmetic text into numeric and operator tokens. Returns null\n * when the text contains any character outside the allowed set.\n * @param text Arithmetic text.\n * @returns Token list, or null on unexpected character.\n */\nfunction tokenizeArithmetic(text: string): readonly string[] | null {\n const tokens: string[] = []\n let index = 0\n while (index < text.length) {\n const ch = text[index]!\n if (isArithmeticWhitespace(ch)) {\n index += 1\n } else if (isArithmeticOperator(ch)) {\n tokens.push(ch)\n index += 1\n } else if (isDigitOrDot(ch)) {\n const next = consumeNumber(text, index)\n tokens.push(text.slice(index, next))\n index = next\n } else {\n return null\n }\n }\n return tokens\n}\n\n/**\n * Check whether `ch` is a whitespace character the arithmetic tokenizer\n * may skip.\n * @param ch Single-character string.\n * @returns True for space / tab / newline.\n */\nfunction isArithmeticWhitespace(ch: string): boolean {\n return ch === ' ' || ch === '\\t' || ch === '\\n'\n}\n\n/**\n * Check whether `ch` is one of the arithmetic operator tokens.\n * @param ch Single-character string.\n * @returns True for `(`, `)`, `+`, `-`, `*`, `/`.\n */\nfunction isArithmeticOperator(ch: string): boolean {\n return ch === '(' || ch === ')' || ch === '+' || ch === '-' || ch === '*' || ch === '/'\n}\n\n/**\n * Check whether `ch` belongs to a numeric token.\n * @param ch Single-character string.\n * @returns True for a digit `0`–`9` or `.`.\n */\nfunction isDigitOrDot(ch: string): boolean {\n return (ch >= '0' && ch <= '9') || ch === '.'\n}\n\n/**\n * Advance past a numeric token starting at `start`.\n * @param text Source text.\n * @param start Index of the first digit or dot.\n * @returns Index just past the last digit-or-dot.\n */\nfunction consumeNumber(text: string, start: number): number {\n let index = start\n while (index < text.length && isDigitOrDot(text[index]!)) index += 1\n return index\n}\n\n/**\n * Parse an additive expression: `term (('+'|'-') term)*`.\n * @param tokens Token list.\n * @param cursor Mutable cursor.\n * @param cursor.index Current token index; advanced past consumed tokens.\n * @returns Evaluated number, or `null` on parse failure.\n */\nfunction parseArithmeticExpr(tokens: readonly string[], cursor: { index: number }): number | null {\n let left = parseArithmeticTerm(tokens, cursor)\n if (left === null) return null\n while (cursor.index < tokens.length) {\n const op = tokens[cursor.index]\n if (op !== '+' && op !== '-') break\n cursor.index += 1\n const right = parseArithmeticTerm(tokens, cursor)\n if (right === null) return null\n left = op === '+' ? left + right : left - right\n }\n return left\n}\n\n/**\n * Parse a multiplicative expression: `factor (('*'|'/') factor)*`.\n * @param tokens Token list.\n * @param cursor Mutable cursor.\n * @param cursor.index Current token index; advanced past consumed tokens.\n * @returns Evaluated number, or `null`.\n */\nfunction parseArithmeticTerm(tokens: readonly string[], cursor: { index: number }): number | null {\n let left = parseArithmeticFactor(tokens, cursor)\n if (left === null) return null\n while (cursor.index < tokens.length) {\n const op = tokens[cursor.index]\n if (op !== '*' && op !== '/') break\n cursor.index += 1\n const right = parseArithmeticFactor(tokens, cursor)\n if (right === null) return null\n left = op === '*' ? left * right : left / right\n }\n return left\n}\n\n/**\n * Parse a factor: unary minus, parenthesised expression, or number.\n * @param tokens Token list.\n * @param cursor Mutable cursor.\n * @param cursor.index Current token index; advanced past consumed tokens.\n * @returns Evaluated number, or `null`.\n */\nfunction parseArithmeticFactor(tokens: readonly string[], cursor: { index: number }): number | null {\n if (cursor.index >= tokens.length) return null\n const tok = tokens[cursor.index]!\n if (tok === '-') {\n cursor.index += 1\n const right = parseArithmeticFactor(tokens, cursor)\n return right === null ? null : -right\n }\n if (tok === '+') {\n cursor.index += 1\n return parseArithmeticFactor(tokens, cursor)\n }\n if (tok === '(') {\n cursor.index += 1\n const inner = parseArithmeticExpr(tokens, cursor)\n if (cursor.index >= tokens.length || tokens[cursor.index] !== ')') return null\n cursor.index += 1\n return inner\n }\n const number_ = Number(tok)\n if (!Number.isFinite(number_)) return null\n cursor.index += 1\n return number_\n}\n\n/**\n * Resolve a scale factor expressed as a percentage (`150%`), number (`1.5`),\n * or a `calc()` expression. Tailwind emits NEGATIVE scale utilities as a calc\n * (`-scale-x-100` → `calc(100% * -1)`), so a plain percent/number regex\n * silently dropped them — `-scale-*` (the horizontal-flip idiom) rendered\n * nothing. Fall back to the shared arithmetic evaluator, reading `%` as a\n * fraction (`100%` → 1) and rounding off f32 noise.\n * @param text Raw value.\n * @returns Scale number (e.g. 1.5 for 150%, -1 for `calc(100% * -1)`), or null.\n */\nfunction resolveNumberOrPercent(text: string): number | null {\n const trimmed = text.trim()\n const percent = /^(-?\\d+(?:\\.\\d+)?)%$/.exec(trimmed)\n if (percent) return roundTransformValue(Number(percent[1]) / 100)\n const bare = /^-?\\d+(?:\\.\\d+)?$/.exec(trimmed)\n if (bare) return roundTransformValue(Number(trimmed))\n const evaluated = evaluateLengthExpr(trimmed)\n if (!evaluated || evaluated.unit === 'rem') return null\n return roundTransformValue(evaluated.unit === '%' ? evaluated.value / 100 : evaluated.value)\n}\n\n/**\n * Round a composed-transform numeric value to 4 decimals. lightningcss\n * serializes arbitrary literals (`scale-x-[0.333]`) back as noisy f32 text\n * (`0.3330000042915344`), and the resolvers `Number()` that verbatim — round\n * so the RN `transform` array stays clean.\n * @param value Raw number.\n * @returns Rounded number.\n */\nfunction roundTransformValue(value: number): number {\n return Math.round(value * 10_000) / 10_000\n}\n\n/**\n * Extract the angle from Tailwind's `skewX(12deg)` / `skewY(-5deg)` /\n * `skewX(calc(6deg * -1))` custom-property value shape. Returns null\n * when the inner expression doesn't reduce to a degree value.\n *\n * Tailwind v4 emits negative skew utilities as a nested `calc()`\n * (`-skew-x-6` → `skewX(calc(6deg * -1))`), so the inner body has to be\n * evaluated as arithmetic — a bare-angle regex silently drops those.\n * @param text Raw value.\n * @returns `<N>deg` string, or null.\n */\nfunction extractAngleFromSkewFunction(text: string): string | null {\n const trimmed = text.trim()\n if (!trimmed.endsWith(')')) return null\n const openIdx = trimmed.indexOf('(')\n if (openIdx < 5) return null\n const head = trimmed.slice(0, openIdx)\n if (head !== 'skewX' && head !== 'skewY') return null\n const inner = trimmed.slice(openIdx + 1, -1).trim()\n return resolveAngleExpression(inner)\n}\n\n/**\n * Evaluate an expression whose single unit is `deg`. Strips `calc(`\n * wrappers and `deg` suffixes, runs the arithmetic evaluator, reapplies\n * `deg`. Returns null for unit mismatches or unparseable text.\n * @param text Angle expression (e.g. `6deg`, `calc(6deg * -1)`).\n * @returns `<N>deg`, or null when not representable.\n */\nfunction resolveAngleExpression(text: string): string | null {\n if (!/[\\d.]deg\\b/.test(text)) return null\n // Input is Tailwind's compiled CSS, not user-controlled — no ReDoS risk.\n // eslint-disable-next-line sonarjs/slow-regex\n const arithmetic = text.replaceAll(/\\bcalc\\s*\\(/g, '(').replaceAll(/([\\d.]+)deg/g, '$1')\n const value = evaluateArithmetic(arithmetic)\n if (value === null || !Number.isFinite(value)) return null\n return `${stripTrailingZeros(value)}deg`\n}\n\n/**\n * Scan Tailwind's compiled CSS for `:root, :host { --x: y; … }` blocks\n * and pull the custom-property declarations out. This captures every\n * theme token Tailwind resolved — including tokens imported from the\n * user's secondary `@import` files (e.g. `rnwind/css`'s\n * `--duration-normal: 220ms`) — without rnwind having to re-implement\n * `@import` resolution.\n *\n * Regex-free scanner: finds `:root` prefixes, walks forward with\n * brace-depth tracking to find the matching block close, then extracts\n * every `--name: value;` pair with a paren-balanced walker so commas\n * inside `rgb(0, 0, 0)` don't confuse the split.\n * @param css Tailwind's compiled CSS.\n * @returns Map of custom-property name → resolved value.\n */\n/**\n * Strip `\\@supports (color: color-mix(in lab, red, red)) { … }` wrappers\n * from Tailwind v4's compiled CSS, hoisting their inner declarations up\n * to the parent rule.\n *\n * Tailwind emits opacity-suffixed themed colors with both a pre-resolved\n * sRGB fallback AND a var()-based override gated behind the color-mix\n * `\\@supports` clause. The OUTER fallback hard-codes a single scheme's\n * value of the theme token; the inner override is var()-based and\n * substitutes correctly per scheme. By unwrapping the gate, the inner\n * declaration becomes a sibling of the fallback in the same rule body —\n * lightningcss takes the LATER one (the var()-based unparsed form), and\n * the parser's themeVars-aware path produces correct rgba per scheme.\n * Modern RN-targeted browsers all support color-mix anyway, so dropping\n * the gating is safe.\n * @param css Tailwind-compiled CSS.\n * @returns CSS with the color-mix support gates unwrapped.\n */\nfunction unwrapColorMixSupports(css: string): string {\n const guard = '@supports (color: color-mix(in lab, red, red))'\n let out = ''\n let cursor = 0\n while (cursor < css.length) {\n const head = css.indexOf(guard, cursor)\n if (head === -1) {\n out += css.slice(cursor)\n break\n }\n out += css.slice(cursor, head)\n const brace = css.indexOf('{', head)\n if (brace === -1) {\n out += css.slice(head)\n break\n }\n const blockEnd = findMatchingClose(css, brace + 1)\n if (blockEnd === -1) {\n out += css.slice(head)\n break\n }\n const inner = css.slice(brace + 1, blockEnd)\n // Only unwrap when the gated declaration substitutes a USER theme\n // token (`var(--color-…)`). Tailwind also gates `--tw-*` internal\n // composers (shadow color, ring color, …) on the same supports\n // clause; their outer fallback is the optimized hex/oklch value\n // the parser's own composed-prop pass needs (`applyComposedShadow`\n // reads `--tw-shadow-color` from the rule's local vars). Unwrapping\n // them would replace the resolvable color with an unresolvable\n // `color-mix(... var(--tw-shadow-alpha), transparent)` text and\n // break the composed-shadow path.\n // Keep the gate intact for non-themed colors — the outer fallback\n // wins, which is what Tailwind intended.\n out += inner.includes('var(--color-') ? inner : css.slice(head, blockEnd + 1)\n cursor = blockEnd + 1\n }\n return out\n}\n\n/**\n * Extract every `--name: value` declaration from the `:root` blocks in\n * Tailwind's compiled CSS into a flat map.\n * @param css Tailwind-compiled CSS.\n * @returns Map of custom-property name → resolved value.\n */\nfunction extractRootCustomProperties(css: string): Map<string, string> {\n const out = new Map<string, string>()\n let cursor = 0\n while (cursor < css.length) {\n const blockEnd = consumeNextRootBlock(css, cursor, out)\n if (blockEnd === -1) break\n cursor = blockEnd + 1\n }\n return out\n}\n\n/**\n * Locate the next `:root` block from `cursor`, extract its custom\n * properties into `out`, and return the index of its closing brace.\n * Split out from {@link extractRootCustomProperties} to keep complexity\n * below the cap.\n * @param css Source CSS.\n * @param cursor Start index for the search.\n * @param out Destination map, mutated.\n * @returns Index of the closing brace, or -1 when no block remains.\n */\nfunction consumeNextRootBlock(css: string, cursor: number, out: Map<string, string>): number {\n const head = css.indexOf(':root', cursor)\n if (head === -1) return -1\n const brace = css.indexOf('{', head)\n if (brace === -1) return -1\n const blockEnd = findMatchingClose(css, brace + 1)\n if (blockEnd === -1) return -1\n collectCustomDeclarations(css.slice(brace + 1, blockEnd), out)\n return blockEnd\n}\n\n/**\n * Parse the body of a `:root` block — a `;`-separated list of `--name:\n * value` declarations — into the output map. Top-level `;` split is\n * paren-aware so `rgb(0, 0, 0)` doesn't fragment the list.\n * @param body Block body text (between braces).\n * @param out Destination map, mutated.\n */\nfunction collectCustomDeclarations(body: string, out: Map<string, string>): void {\n for (const declaration of topLevelSplit(body, ';')) {\n const colon = declaration.indexOf(':')\n if (colon === -1) continue\n const name = declaration.slice(0, colon).trim()\n const value = declaration.slice(colon + 1).trim()\n if (name.startsWith('--') && value.length > 0) out.set(name, value)\n }\n}\n\n/**\n * Walk forward from `start` tracking brace depth; return the index of\n * the matching `}` for the opener just before `start`.\n * @param source Source text.\n * @param start Index just past the opening `{`.\n * @returns Index of matching `}`, or `-1` on imbalance.\n */\nfunction findMatchingClose(source: string, start: number): number {\n let depth = 1\n for (let index = start; index < source.length; index += 1) {\n const ch = source[index]\n if (ch === '{') depth += 1\n else if (ch === '}') {\n depth -= 1\n if (depth === 0) return index\n }\n }\n return -1\n}\n\n/**\n * Merge rule-local custom vars into every scheme's var table. Creates\n * fresh maps so the rule pass doesn't mutate the shared parser state.\n * @param schemeTables Base per-scheme var tables.\n * @param ruleVars Rule-local `--tw-*` overrides.\n * @returns Merged per-scheme tables.\n */\nfunction mergeRuleVars(\n schemeTables: ReadonlyMap<string, ReadonlyMap<string, string>>,\n ruleVars: ReadonlyMap<string, string>,\n): Map<string, ReadonlyMap<string, string>> {\n if (ruleVars.size === 0) return new Map(schemeTables)\n const out = new Map<string, ReadonlyMap<string, string>>()\n for (const [scheme, table] of schemeTables) {\n const merged = new Map(table)\n for (const [k, v] of ruleVars) merged.set(k, v)\n out.set(scheme, merged)\n }\n return out\n}\n"],"names":["Features","extractThemeVars","extractSchemeAliases","extractCustomVariantSchemes","Scanner","BASE_SCHEME","compileReadyTheme","compile","keyframes","transform","selector","classNameFromSelector","gradient","detectGradientAtom","detectHapticAtom","keyframesName","keyframeSelectorOffsets","declarationToRnEntries","serializeInitialValue","substituteThemeVars","normalizeColorString","tailwindNode","serializeTokens","pickAnimationName","coerceUnparsedValue","culoriFormatHex"],"mappings":"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"}
|