@hypergood/css-core 0.1.0 → 0.1.1
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/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -25
- package/dist/index.d.ts +3 -25
- package/dist/index.js.map +1 -1
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.js.map +1 -1
- package/package.json +1 -1
- package/src/css-properties.ts +4 -29
- package/src/runtime.ts +6 -1
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin.ts","../src/atomizer/index.ts","../src/atomizer/css-tree.ts","../src/css-js-logger.ts","../src/evaluate.ts","../src/runtime.ts","../src/print.ts","../src/string.ts","../src/style-cache.ts","../src/style-object.ts"],"sourcesContent":["import babel from \"@babel/core\";\nimport { addNamed } from \"@babel/helper-module-imports\";\nimport { Plugin, ViteDevServer } from \"vite\";\nimport { atomizeStyleRules } from \"./atomizer/index.js\";\nimport { cssJsLogger } from \"./css-js-logger.js\";\nimport { evaluateBabelExpression } from \"./evaluate.js\";\nimport { createStyleCache, StyleCache } from \"./style-cache.js\";\nimport {\n evaluateMacros,\n evaluateMedia,\n flattenStyleObject,\n} from \"./style-object.js\";\n\ntype ImportDeclaration = {\n source: string;\n specifiers: Array<{ imported: string; local: string }>;\n};\n\nfunction babelPluginGetCssJsImports({\n onFoundPotentialImport,\n}: {\n onFoundPotentialImport: (potential: ImportDeclaration) => void;\n}): babel.PluginItem {\n return {\n name: \"find-css-js-imports\",\n visitor: {\n ImportDeclaration(path) {\n if (path.node.source.value.includes(\".css\")) {\n onFoundPotentialImport({\n source: path.node.source.value,\n specifiers: path.node.specifiers.map((specifier) => ({\n imported:\n specifier.type === \"ImportSpecifier\"\n ? specifier.imported.type === \"StringLiteral\"\n ? specifier.imported.value\n : specifier.imported.name\n : specifier.local.name,\n local: specifier.local.name,\n })),\n });\n }\n },\n },\n };\n}\n\nfunction babelPluginReplaceCssProp({\n config,\n initialKnownConstants,\n styleObjectToClassNames,\n keyframesObjectToAnimationName,\n}: {\n config: PluginConfig;\n initialKnownConstants: Record<string, any>;\n styleObjectToClassNames: (styleObject: any) => string;\n keyframesObjectToAnimationName: (keyframesObject: any) => string;\n}): babel.PluginItem {\n let localCssFunctionName: string | undefined;\n let localKeyframesFunctionName: string | undefined;\n let localStyledFunctionName: string | undefined;\n let localVariantsFunctionName: string | undefined;\n\n const jsxClassProp = config.jsxClassProp ?? \"className\";\n\n let knownConstants = {\n ...initialKnownConstants,\n };\n\n return {\n name: \"replace-css-prop\",\n visitor: {\n // Statically analyze global constants and register them in case they are used in css() / keyframes()\n VariableDeclaration: {\n exit(path) {\n const parent = path.parentPath;\n const isTopLevel =\n parent.isProgram() ||\n (parent.isExportNamedDeclaration() &&\n parent.parentPath.isProgram());\n\n if (!isTopLevel) return;\n const node = path.node;\n\n if (node.kind !== \"const\") return;\n\n for (let declarator of node.declarations) {\n const init = evaluateBabelExpression(\n declarator.init,\n knownConstants,\n );\n if (init.confident) {\n const id = declarator.id;\n if (id.type === \"Identifier\") {\n // console.log(\n // `[FOUND] ${id.name} = ${JSON.stringify(init.value, null, 2)}`,\n // );\n knownConstants[id.name] = init.value;\n }\n }\n }\n },\n },\n ImportDeclaration(path) {\n if (path.node.source.value !== config.moduleName) return;\n const cssFunctionSpecifier = path.node.specifiers.find((specifier) => {\n return (\n specifier.type === \"ImportSpecifier\" &&\n specifier.imported.type === \"Identifier\" &&\n specifier.imported.name === \"css\"\n );\n });\n if (cssFunctionSpecifier) {\n localCssFunctionName = cssFunctionSpecifier.local.name;\n }\n const keyframesFunctionSpecifier = path.node.specifiers.find(\n (specifier) => {\n return (\n specifier.type === \"ImportSpecifier\" &&\n specifier.imported.type === \"Identifier\" &&\n specifier.imported.name === \"keyframes\"\n );\n },\n );\n if (keyframesFunctionSpecifier) {\n localKeyframesFunctionName = keyframesFunctionSpecifier.local.name;\n }\n const styledFunctionSpecifier = path.node.specifiers.find(\n (specifier) => {\n return (\n specifier.type === \"ImportSpecifier\" &&\n specifier.imported.type === \"Identifier\" &&\n specifier.imported.name === \"styled\"\n );\n },\n );\n if (styledFunctionSpecifier) {\n localStyledFunctionName = styledFunctionSpecifier.local.name;\n }\n const variantsFunctionSpecifier = path.node.specifiers.find(\n (specifier) => {\n return (\n specifier.type === \"ImportSpecifier\" &&\n specifier.imported.type === \"Identifier\" &&\n specifier.imported.name === \"variants\"\n );\n },\n );\n if (variantsFunctionSpecifier) {\n localVariantsFunctionName = variantsFunctionSpecifier.local.name;\n }\n },\n CallExpression: {\n exit(path) {\n if (\n babel.types.isIdentifier(path.node.callee, {\n name: localKeyframesFunctionName,\n })\n ) {\n const args = path.node.arguments;\n if (args.length !== 1) return;\n const firstArg = args[0];\n if (firstArg.type !== \"ObjectExpression\") return;\n\n const styleObjectResult = evaluateBabelExpression(\n firstArg,\n knownConstants,\n );\n let styleObject = styleObjectResult.value;\n if (!styleObjectResult.confident) {\n throw new Error(\n \"COULD NOT EVALUATE KEYFRAMES: L\" + firstArg.loc?.start.line,\n );\n }\n\n const animationName = keyframesObjectToAnimationName(styleObject);\n\n path.replaceWith({\n type: \"StringLiteral\",\n value: animationName,\n });\n }\n\n if (\n babel.types.isIdentifier(path.node.callee, {\n name: localCssFunctionName,\n })\n ) {\n const args = path.node.arguments;\n if (args.length !== 1) return;\n const firstArg = args[0];\n if (firstArg.type !== \"ObjectExpression\") return;\n\n const styleObjectResult = evaluateBabelExpression(\n firstArg,\n knownConstants,\n );\n let styleObject = styleObjectResult.value;\n if (!styleObjectResult.confident) {\n throw new Error(\n \"COULD NOT EVALUATE CSS: L\" + firstArg.loc?.start.line,\n );\n }\n\n const classNames = styleObjectToClassNames(styleObject);\n\n path.replaceWith({\n type: \"StringLiteral\",\n value: classNames,\n });\n }\n\n if (\n babel.types.isIdentifier(path.node.callee, {\n name: localStyledFunctionName,\n })\n ) {\n const args = path.node.arguments;\n if (args.length !== 2) return;\n const secondArg = args[1];\n if (secondArg.type !== \"ObjectExpression\") return;\n\n const getPropertyKeyName = (\n prop: babel.types.ObjectExpression[\"properties\"][number],\n ): string | undefined => {\n if (prop.type !== \"ObjectProperty\") return undefined;\n const key = prop.key;\n if (key.type === \"Identifier\") return key.name;\n if (key.type === \"StringLiteral\") return key.value;\n return undefined;\n };\n\n const evaluateToClassNames = (\n node: babel.types.Expression,\n what: string,\n ) => {\n const result = evaluateBabelExpression(node, knownConstants);\n if (!result.confident) {\n throw new Error(\n `COULD NOT EVALUATE ${what}: L` + node.loc?.start.line,\n );\n }\n return styleObjectToClassNames(result.value);\n };\n\n // Separate the base styles from the `variants` / `defaultVariants`\n // keys, which get transformed independently.\n const baseProperties: babel.types.ObjectExpression[\"properties\"] =\n [];\n let variantsProperty: babel.types.ObjectProperty | undefined;\n let defaultVariantsProperty:\n | babel.types.ObjectExpression[\"properties\"][number]\n | undefined;\n\n for (const prop of secondArg.properties) {\n const keyName = getPropertyKeyName(prop);\n if (keyName === \"variants\" && prop.type === \"ObjectProperty\") {\n variantsProperty = prop;\n } else if (keyName === \"defaultVariants\") {\n defaultVariantsProperty = prop;\n } else {\n baseProperties.push(prop);\n }\n }\n\n const newProperties: babel.types.ObjectExpression[\"properties\"] =\n [];\n\n // base: everything that isn't `variants` / `defaultVariants`\n const baseClassNames = evaluateToClassNames(\n babel.types.objectExpression(baseProperties),\n \"STYLED\",\n );\n newProperties.push(\n babel.types.objectProperty(\n babel.types.identifier(\"base\"),\n babel.types.stringLiteral(baseClassNames),\n ),\n );\n\n // variants: { variant: { value: styleObject } } -> { variant: { value: classNames } }\n if (variantsProperty) {\n if (variantsProperty.value.type === \"ObjectExpression\") {\n const newVariantGroups: babel.types.ObjectExpression[\"properties\"] =\n [];\n for (const group of variantsProperty.value.properties) {\n if (\n group.type !== \"ObjectProperty\" ||\n group.value.type !== \"ObjectExpression\"\n ) {\n newVariantGroups.push(group);\n continue;\n }\n const newVariantValues: babel.types.ObjectExpression[\"properties\"] =\n [];\n for (const variant of group.value.properties) {\n if (\n variant.type !== \"ObjectProperty\" ||\n variant.value.type !== \"ObjectExpression\"\n ) {\n newVariantValues.push(variant);\n continue;\n }\n const variantClassNames = evaluateToClassNames(\n variant.value,\n \"STYLED VARIANT\",\n );\n newVariantValues.push(\n babel.types.objectProperty(\n variant.key,\n babel.types.stringLiteral(variantClassNames),\n variant.computed,\n ),\n );\n }\n newVariantGroups.push(\n babel.types.objectProperty(\n group.key,\n babel.types.objectExpression(newVariantValues),\n group.computed,\n ),\n );\n }\n newProperties.push(\n babel.types.objectProperty(\n babel.types.identifier(\"variants\"),\n babel.types.objectExpression(newVariantGroups),\n variantsProperty.computed,\n ),\n );\n } else {\n newProperties.push(variantsProperty);\n }\n }\n\n // defaultVariants: passed through unchanged\n if (defaultVariantsProperty) {\n newProperties.push(defaultVariantsProperty);\n }\n\n args[1] = babel.types.objectExpression(newProperties);\n }\n\n if (\n babel.types.isIdentifier(path.node.callee, {\n name: localVariantsFunctionName,\n })\n ) {\n const args = path.node.arguments;\n if (args.length !== 1) return;\n const firstArg = args[0];\n if (firstArg.type !== \"ObjectExpression\") return;\n\n // { name: styleObject } -> { name: classNames }\n const newProperties: babel.types.ObjectExpression[\"properties\"] =\n [];\n for (const prop of firstArg.properties) {\n if (\n prop.type !== \"ObjectProperty\" ||\n prop.value.type !== \"ObjectExpression\"\n ) {\n newProperties.push(prop);\n continue;\n }\n const styleObjectResult = evaluateBabelExpression(\n prop.value,\n knownConstants,\n );\n if (!styleObjectResult.confident) {\n throw new Error(\n \"COULD NOT EVALUATE VARIANTS: L\" + prop.value.loc?.start.line,\n );\n }\n const classNames = styleObjectToClassNames(\n styleObjectResult.value,\n );\n newProperties.push(\n babel.types.objectProperty(\n prop.key,\n babel.types.stringLiteral(classNames),\n prop.computed,\n ),\n );\n }\n\n path.replaceWith(babel.types.objectExpression(newProperties));\n }\n },\n },\n JSXAttribute(path, state) {\n if (\n path.node.name &&\n path.node.name.type === \"JSXIdentifier\" &&\n path.node.name.name === \"css\"\n ) {\n const value = path.node.value;\n if (value?.type !== \"JSXExpressionContainer\") return;\n\n const expression = value.expression;\n\n switch (expression.type) {\n case \"ObjectExpression\": {\n const styleObjectResult = evaluateBabelExpression(\n expression,\n knownConstants,\n );\n let styleObject = styleObjectResult.value;\n if (!styleObjectResult.confident) {\n const badNode = styleObjectResult.badNode;\n if (badNode) {\n const { start, end } = badNode;\n const rawCode = state.file.code.slice(start, end);\n console.error(`COULD NOT EVALUATE CSS: \\`${rawCode}\\``);\n return;\n } else {\n console.error(\n \"COULD NOT EVALUATE CSS: L\" + expression.loc?.start.line,\n );\n return;\n }\n }\n const classNames = styleObjectToClassNames(styleObject);\n\n path.node.name.name = jsxClassProp;\n path.node.value = {\n type: \"StringLiteral\",\n value: classNames,\n };\n break;\n }\n case \"ArrayExpression\": {\n const elements = expression.elements;\n const mergeClassNamesId = addNamed(\n path,\n \"mergeClassNames\",\n config.moduleName || \"\",\n );\n\n const cleanedElements: babel.types.Expression[] = [];\n\n for (const element of elements) {\n if (element) {\n // if (element.type !== \"SpreadElement\") {\n // cleanedElements.push(element);\n // }\n if (element.type === \"ObjectExpression\") {\n const styleObjectResult = evaluateBabelExpression(\n element,\n knownConstants,\n );\n if (styleObjectResult.confident) {\n let styleObject = styleObjectResult.value;\n const classNames = styleObjectToClassNames(styleObject);\n cleanedElements.push(\n babel.types.stringLiteral(classNames),\n );\n }\n } else if (\n element.type === \"LogicalExpression\" &&\n element.operator === \"&&\" &&\n element.right.type === \"ObjectExpression\"\n ) {\n const styleObjectResult = evaluateBabelExpression(\n element.right,\n knownConstants,\n );\n if (styleObjectResult.confident) {\n let styleObject = styleObjectResult.value;\n const classNames = styleObjectToClassNames(styleObject);\n cleanedElements.push(\n babel.types.logicalExpression(\n \"&&\",\n element.left,\n babel.types.stringLiteral(classNames),\n ),\n );\n }\n } else if (\n element.type === \"ConditionalExpression\" &&\n element.consequent.type === \"ObjectExpression\" &&\n element.alternate.type === \"ObjectExpression\"\n ) {\n const consequentObject = evaluateBabelExpression(\n element.consequent,\n knownConstants,\n );\n const alternateObject = evaluateBabelExpression(\n element.alternate,\n knownConstants,\n );\n if (\n consequentObject.confident &&\n alternateObject.confident\n ) {\n const classNames = styleObjectToClassNames(\n consequentObject.value,\n );\n const alternateClassNames = styleObjectToClassNames(\n alternateObject.value,\n );\n cleanedElements.push(\n babel.types.conditionalExpression(\n element.test,\n babel.types.stringLiteral(classNames),\n babel.types.stringLiteral(alternateClassNames),\n ),\n );\n }\n } else if (element.type !== \"SpreadElement\") {\n cleanedElements.push(element);\n }\n }\n }\n\n path.node.name.name = jsxClassProp;\n value.expression = babel.types.callExpression(mergeClassNamesId, [\n babel.types.arrayExpression(cleanedElements),\n ]);\n\n break;\n }\n default: {\n path.node.name.name = jsxClassProp;\n }\n }\n }\n },\n },\n };\n}\n\nexport type PluginConfig = {\n moduleName: string;\n jsxClassProp?: string;\n media?: Record<string, string>;\n macros?: Record<string, (value: string) => any>;\n};\n\nconst styleCache = createStyleCache();\nexport function vitePluginCss(\n config: PluginConfig = { moduleName: \"@hypergood/css-core\" },\n): Plugin[] {\n const { plugin: generationPlugin, reload: reloadStyles } =\n createGenerationPlugin(styleCache);\n\n let devServer: ViteDevServer | null = null;\n const { processedFiles, transform: registerCssJsFiles } = cssJsLogger();\n\n return [\n generationPlugin,\n {\n name: \"hypercss:process\",\n\n // Capture the dev server instance\n configureServer(server) {\n devServer = server;\n },\n\n // `css={...}` is compiled to a literal `class=\"...\"` string at transform\n // time, so the markup is only as fresh as the transformed module the\n // renderer used. `hotUpdate` runs per-environment, but a non-standard SSR\n // environment (e.g. Nitro) may not re-transform on its own — leaving the\n // server-rendered class stale until a restart. Explicitly invalidate the\n // changed file in *every* environment so client and SSR copies refresh\n // together.\n hotUpdate(ctx) {\n const cleanFile = ctx.file.split(\"?\")[0]!;\n if (!/\\.[jt]sx?$/.test(cleanFile)) return;\n\n const server = ctx.server ?? devServer;\n if (!server?.environments) return;\n\n for (const env of Object.values(server.environments)) {\n for (const mod of env.moduleGraph.getModulesByFile(cleanFile) ??\n []) {\n env.moduleGraph.invalidateModule(mod);\n }\n }\n },\n\n // Run before other plugins (like the default JSX transform)\n enforce: \"pre\",\n\n async transform(code, id) {\n const cleanId = id.split(\"?\")[0]!;\n await registerCssJsFiles.bind(this)(code, id, devServer);\n const rulesCount = styleCache.getLength();\n if (!/\\.[jt]sx?$/.test(cleanId)) {\n return null;\n }\n if (id.includes(\"node_modules\")) {\n return null;\n }\n\n if (!code.includes(\"css\")) {\n return null;\n }\n\n const isTypeScript =\n cleanId.endsWith(\".tsx\") || cleanId.endsWith(\".ts\");\n\n const cssJsImportDeclarations: ImportDeclaration[] = [];\n\n const getImportedConstants = async () => {\n await babel.transformAsync(code, {\n filename: id,\n sourceFileName: id,\n sourceMaps: true,\n parserOpts: {\n sourceType: \"module\",\n plugins: [\n \"jsx\",\n // Add TypeScript support for .tsx files\n ...(isTypeScript ? [\"typescript\" as const] : []),\n ],\n },\n plugins: [\n babelPluginGetCssJsImports({\n onFoundPotentialImport: (dec) => {\n cssJsImportDeclarations.push(dec);\n },\n }),\n ],\n // Don't transform anything else, just run our plugin\n configFile: false,\n babelrc: false,\n });\n const importedConstants: Record<string, unknown> = {};\n\n for (const declaration of cssJsImportDeclarations) {\n const resolvedId = (await this.resolve(declaration.source, id))?.id;\n const resolvedPath = resolvedId?.split(\"?\")[0]!;\n\n const module = processedFiles.get(resolvedPath);\n\n if (module) {\n for (const specifier of declaration.specifiers) {\n importedConstants[specifier.local] = module[specifier.imported];\n }\n }\n }\n return importedConstants;\n };\n\n try {\n const importedConstants: Record<string, unknown> =\n await getImportedConstants();\n\n let result = await babel.transformAsync(code, {\n filename: id,\n sourceFileName: id,\n sourceMaps: true,\n parserOpts: {\n sourceType: \"module\",\n plugins: [\n \"jsx\",\n // Add TypeScript support for .tsx files\n ...(isTypeScript ? [\"typescript\" as const] : []),\n ],\n },\n plugins: [\n babelPluginReplaceCssProp({\n config,\n initialKnownConstants: importedConstants,\n keyframesObjectToAnimationName: (keyframes) => {\n const newKeyframes = Object.fromEntries(\n Object.entries(keyframes).map(\n ([key, styleObject]: [key: string, value: any]) => {\n if (config.macros) {\n styleObject = evaluateMacros(\n styleObject,\n config.macros,\n );\n }\n if (config.media) {\n styleObject = evaluateMedia(\n styleObject,\n config.media,\n );\n }\n const styleRules = flattenStyleObject(styleObject);\n const optimized = atomizeStyleRules(styleRules);\n return [key, optimized];\n },\n ),\n );\n\n return styleCache.getAnimationName(newKeyframes);\n },\n styleObjectToClassNames: (styleObject) => {\n if (config.macros) {\n styleObject = evaluateMacros(styleObject, config.macros);\n }\n if (config.media) {\n styleObject = evaluateMedia(styleObject, config.media);\n }\n const styleRules = flattenStyleObject(styleObject);\n const optimized = atomizeStyleRules(styleRules);\n const classNames = styleCache.getClassNames(optimized);\n return classNames;\n },\n }),\n ],\n // Don't transform anything else, just run our plugin\n configFile: false,\n babelrc: false,\n });\n\n if (result && result.code) {\n if (styleCache.getLength() > rulesCount) {\n void reloadStyles();\n }\n return {\n code: result.code,\n map: result.map,\n };\n }\n } catch (error: any) {\n this.error(`Failed to transform ${id}: ${error.message}`);\n }\n\n return null;\n },\n },\n ];\n}\n\nconst CSS_REPLACE_ME = \"@hypercss;\";\nfunction createGenerationPlugin(styleCache: StyleCache) {\n let modulesToInvalidate = new Map<string, string>();\n let server: ViteDevServer;\n\n async function reload() {\n if (!server || modulesToInvalidate.size === 0) {\n return;\n }\n\n // In Vite 6+/8 every environment (client, ssr, and any custom ones such\n // as Nitro's) keeps its own module graph. The deprecated\n // `server.moduleGraph` / `server.reloadModule` only ever touch the client\n // graph, so a stale SSR copy of the generated stylesheet would survive\n // until a full dev-server restart. Invalidate in every environment.\n const environments = server.environments\n ? Object.values(server.environments)\n : [];\n\n for (const [id] of modulesToInvalidate.entries()) {\n if (environments.length > 0) {\n for (const env of environments) {\n const mod = env.moduleGraph.getModuleById(id);\n if (mod) env.moduleGraph.invalidateModule(mod);\n }\n } else {\n // Legacy (Vite <6) fallback.\n const mod = server.moduleGraph.getModuleById(id);\n if (mod) server.moduleGraph.invalidateModule(mod);\n }\n\n // Push the regenerated CSS to the browser. HMR only targets the client,\n // so use the legacy client module node `reloadModule` expects.\n const clientMod = server.moduleGraph.getModuleById(id);\n if (clientMod) {\n await server.reloadModule(clientMod);\n }\n }\n }\n\n function pickCssAssetFromRollupBundle(bundle: any, choose: any) {\n const assets = Object.values(bundle).filter(\n (a: any) =>\n a &&\n a.type === \"asset\" &&\n typeof a.fileName === \"string\" &&\n a.fileName.endsWith(\".css\"),\n );\n if (assets.length === 0) return null;\n if (typeof choose === \"function\") {\n const chosen = assets.find((a: any) => choose(a.fileName));\n if (chosen) return chosen;\n }\n const best =\n assets.find((a: any) => /(^|\\/)index\\.css$/.test(a.fileName)) ||\n assets.find((a: any) => /(^|\\/)style\\.css$/.test(a.fileName));\n return best || assets[0];\n }\n const plugin: Plugin = {\n name: \"hypercss:generate\",\n enforce: \"pre\",\n configureServer(_server) {\n server = _server;\n },\n async transform(code, id, { ssr: isSSR = false } = { moduleType: \"jsx\" }) {\n if (!/\\.css/.test(id)) {\n return null;\n }\n if (id.includes(\"node_modules\")) {\n return null;\n }\n if (!code.includes(CSS_REPLACE_ME)) {\n return null;\n }\n\n modulesToInvalidate.set(id, code);\n if (server) {\n if (!isSSR) {\n await server?.waitForRequestsIdle?.(id);\n }\n\n return code.replace(CSS_REPLACE_ME, styleCache.processStyleRules());\n }\n },\n // Rollup/Vite: append to an existing CSS asset during generateBundle\n // Note: some bundlers/plugins may mutate CSS assets later; we also guard in writeBundle.\n generateBundle(_opts, bundle) {\n const css = styleCache.processStyleRules();\n if (!css) return;\n const target = pickCssAssetFromRollupBundle(bundle, undefined) as any;\n if (target) {\n const current =\n typeof target.source === \"string\"\n ? target.source\n : target.source?.toString() || \"\";\n target.source = current ? current + \"\\n\" + css : css;\n } else {\n // Defer to writeBundle to append or emit fallback file\n }\n },\n };\n\n return {\n plugin,\n reload,\n };\n}\n","import * as csstree from \"css-tree\";\nimport { StyleRule } from \"../style-rule.js\";\nimport { evaluateLexerNode, LexerNode } from \"./css-tree.js\";\nimport { AtomizerFn } from \"./types.js\";\n\nconst atomizers: Record<string, AtomizerFn> = {\n animation: (value) => {\n const ast = csstree.parse(value, { context: \"value\" });\n const matchResult = csstree.lexer.matchProperty(\"animation\", ast);\n const match = matchResult.matched?.match;\n\n // console.log({ match: JSON.stringify(match) });\n\n if (!match) return undefined;\n\n const animationNames: LexerNode[] = [];\n const animationDurations: LexerNode[] = [];\n const animationDelays: LexerNode[] = [];\n const timingFunctions: LexerNode[] = [];\n const iterations: LexerNode[] = [];\n const fillModes: LexerNode[] = [];\n const playStates: LexerNode[] = [];\n\n for (const singleAnimation of match) {\n const keyframesName = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"keyframes-name\",\n );\n if (keyframesName) {\n animationNames.push(keyframesName);\n }\n const duration = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"animation-duration\",\n );\n if (duration) {\n animationDurations.push(duration);\n }\n const easing = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"easing-function\",\n );\n if (easing) {\n timingFunctions.push(easing);\n }\n const delay = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"animation-delay\",\n );\n if (delay) {\n animationDelays.push(delay);\n }\n const count = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"single-animation-iteration-count\",\n );\n if (count) {\n iterations.push(count);\n }\n const fillMode = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"single-animation-fill-mode\",\n );\n if (fillMode) {\n fillModes.push(fillMode);\n }\n const playState = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"single-animation-play-state\",\n );\n if (playState) {\n playStates.push(playState);\n }\n }\n\n return {\n \"animation-name\":\n animationNames.map(evaluateLexerNode).join(\",\") || undefined,\n \"animation-iteration-count\":\n iterations.map(evaluateLexerNode).join(\",\") || undefined,\n \"animation-delay\":\n animationDelays.map(evaluateLexerNode).join(\",\") || undefined,\n \"animation-duration\":\n animationDurations.map(evaluateLexerNode).join(\",\") || undefined,\n \"animation-timing-function\":\n timingFunctions.map(evaluateLexerNode).join(\",\") || undefined,\n \"animation-fill-mode\":\n fillModes.map(evaluateLexerNode).join(\",\") || undefined,\n \"animation-play-state\":\n playStates.map(evaluateLexerNode).join(\",\") || undefined,\n };\n },\n border: (value) => {\n const ast = csstree.parse(value, { context: \"value\" });\n const matchResult = csstree.lexer.matchProperty(\"border\", ast);\n const match = matchResult.matched?.match;\n\n if (!match) return;\n\n const lineWidth = match.find((t) => t.syntax?.name === \"line-width\");\n const lineStyle = match.find((t) => t.syntax?.name === \"line-style\");\n const color = match.find((t) => t.syntax?.name === \"color\");\n\n const lineWidthString = evaluateLexerNode(lineWidth);\n const lineStyleString = evaluateLexerNode(lineStyle);\n const colorString = evaluateLexerNode(color);\n\n return {\n \"border-bottom-style\": lineStyleString,\n \"border-left-style\": lineStyleString,\n \"border-right-style\": lineStyleString,\n \"border-top-style\": lineStyleString,\n \"border-bottom-color\": colorString,\n \"border-left-color\": colorString,\n \"border-right-color\": colorString,\n \"border-top-color\": colorString,\n \"border-bottom-width\": lineWidthString,\n \"border-left-width\": lineWidthString,\n \"border-right-width\": lineWidthString,\n \"border-top-width\": lineWidthString,\n };\n },\n \"border-radius\": (value) => {\n const ast = csstree.parse(value, { context: \"value\" });\n const matchResult = csstree.lexer.matchProperty(\"border-radius\", ast);\n const match = matchResult.matched?.match;\n if (!match) return undefined;\n\n const slashIndex = match.findIndex(\n (n) => n.syntax?.type === \"Token\" && n.syntax.value === \"/\",\n );\n const horizontalRadiiNodes =\n slashIndex === -1 ? match : match.slice(0, slashIndex);\n let verticalRadiiNodes =\n slashIndex === -1 ? match : match.slice(slashIndex + 1);\n if (!verticalRadiiNodes.length) {\n verticalRadiiNodes = horizontalRadiiNodes;\n }\n\n const horizontalRadiiStrings = horizontalRadiiNodes.map(evaluateLexerNode);\n const verticalRadiiStrings = verticalRadiiNodes.map(evaluateLexerNode);\n\n const horizontalRadii = expandRadii(horizontalRadiiStrings);\n const verticalRadii = expandRadii(verticalRadiiStrings);\n\n return {\n \"border-top-left-radius\": `${horizontalRadii.topLeft} ${verticalRadii.topLeft}`,\n \"border-top-right-radius\": `${horizontalRadii.topRight} ${verticalRadii.topRight}`,\n \"border-bottom-left-radius\": `${horizontalRadii.bottomLeft} ${verticalRadii.bottomLeft}`,\n \"border-bottom-right-radius\": `${horizontalRadii.bottomRight} ${verticalRadii.bottomRight}`,\n };\n },\n margin: (value) => {\n const ast = csstree.parse(value, { context: \"value\" });\n const matchResult = csstree.lexer.matchProperty(\"margin\", ast);\n const match = matchResult.matched?.match;\n if (!match) return undefined;\n\n const sizeStrings = match.map(evaluateLexerNode);\n const sizes = expandSizing(sizeStrings);\n\n return {\n \"margin-top\": sizes.top,\n \"margin-right\": sizes.right,\n \"margin-bottom\": sizes.bottom,\n \"margin-left\": sizes.left,\n };\n },\n padding: (value) => {\n const ast = csstree.parse(value, { context: \"value\" });\n const matchResult = csstree.lexer.matchProperty(\"padding\", ast);\n const match = matchResult.matched?.match;\n if (!match) return undefined;\n\n const sizeStrings = match.map(evaluateLexerNode);\n\n const sizes = expandSizing(sizeStrings);\n\n return {\n \"padding-top\": sizes.top,\n \"padding-right\": sizes.right,\n \"padding-bottom\": sizes.bottom,\n \"padding-left\": sizes.left,\n };\n },\n};\n\nfunction createDefaultAtomizer(property: string) {\n const atomizer: AtomizerFn = (value) => {\n const ast = csstree.parse(value, { context: \"value\" });\n const matchResult = csstree.lexer.matchProperty(property, ast);\n // if (property === \"color\") {\n // console.log(JSON.stringify(matchResult));\n // }\n const lexxed = evaluateLexerNode(matchResult.matched);\n\n return {\n [property]: lexxed,\n };\n };\n return atomizer;\n}\n\nfunction expandRadii(radii: string[]): {\n topLeft: string;\n topRight: string;\n bottomLeft: string;\n bottomRight: string;\n} {\n const [r1, r2, r3, r4] = radii;\n switch (radii.length) {\n case 1:\n return {\n topLeft: r1,\n topRight: r1,\n bottomLeft: r1,\n bottomRight: r1,\n };\n case 2:\n return {\n topLeft: r1,\n topRight: r2,\n bottomLeft: r2,\n bottomRight: r1,\n };\n case 3:\n return {\n topLeft: r1,\n topRight: r2,\n bottomLeft: r2,\n bottomRight: r3,\n };\n default:\n return {\n topLeft: r1,\n topRight: r2,\n bottomLeft: r4,\n bottomRight: r3,\n };\n }\n}\nfunction expandSizing(sizes: string[]): {\n top: string;\n right: string;\n bottom: string;\n left: string;\n} {\n const [r1, r2, r3, r4] = sizes;\n switch (sizes.length) {\n case 1:\n return {\n top: r1,\n right: r1,\n bottom: r1,\n left: r1,\n };\n case 2:\n return {\n top: r1,\n right: r2,\n bottom: r1,\n left: r2,\n };\n case 3:\n return {\n top: r1,\n right: r2,\n bottom: r3,\n left: r2,\n };\n default:\n return {\n top: r1,\n right: r2,\n bottom: r3,\n left: r4,\n };\n }\n}\n\nexport function atomizeStyleRules(styleRules: StyleRule[]): StyleRule[] {\n return styleRules.flatMap((rule) => {\n const atomizer =\n atomizers[rule.property] || createDefaultAtomizer(rule.property);\n if (!atomizer) return [rule];\n\n const atomized = atomizer(rule.value);\n if (!atomized) return [rule];\n\n return Object.entries(atomized)\n .filter(([key, value]) => value !== undefined)\n .map(([key, value]) => ({\n ...rule,\n property: key,\n value: value!,\n }));\n });\n}\n","import { CssNode } from \"css-tree\";\n\nexport interface LexerNode {\n syntax: {\n type: \"Type\" | \"Property\" | \"Keyword\" | \"Token\";\n name?: SyntaxName;\n value?: string;\n } | null;\n token?: string;\n node?: CssNode;\n match?: LexerNode[];\n}\n\ndeclare module \"css-tree\" {\n interface LexerMatchResult {\n matched: LexerNode | null;\n iterations: number;\n getTrace(node: CssNode): Array<{ type: string; name: string }> | null;\n isType(node: CssNode | null, type: string): boolean;\n isProperty(node: CssNode | null, property: string): boolean;\n isKeyword(node: CssNode | null): boolean;\n }\n}\n\nexport function evaluateLexerNode(node: LexerNode | null | undefined): string {\n if (!node) return \"\";\n switch (node.syntax?.name) {\n case \"named-color\":\n return evaluateNamedColor(node);\n }\n // if (node.node && node.node.type === \"Operator\") {\n // return node.node.value;\n // }\n if (node.token) {\n return node.token;\n }\n return node.match?.map(evaluateLexerNode).join(\" \") || \"\";\n}\n\nexport function evaluateNamedColor(node: LexerNode) {\n const name = node.match?.[0].token || \"\";\n if (name.toLowerCase() in NAMED_COLOR_MAP) {\n return NAMED_COLOR_MAP[name.toLowerCase()];\n }\n return name;\n}\n\n/**\n * Choose the shortest option between hex and named color, prioritize hex color if both are the same length, prioritize gray over grey\n */\nconst NAMED_COLOR_MAP: Record<string, string> = {\n aliceblue: \"#f0f8ff\",\n antiquewhite: \"#faebd7\",\n aqua: \"#0ff\",\n aquamarine: \"#7fffd4\",\n \"#f0ffff\": \"azure\",\n \"#f5f5dc\": \"beige\",\n \"#ffe4c4\": \"bisque\",\n black: \"#000\",\n blanchedalmond: \"#ffebcd\",\n blue: \"#00f\",\n blueviolet: \"#8a2be2\",\n \"#a52a2a\": \"brown\",\n burlywood: \"#deb887\",\n cadetblue: \"#5f9ea0\",\n chartreuse: \"#7fff00\",\n chocolate: \"#d2691e\",\n \"#ff7f50\": \"coral\",\n cornflowerblue: \"#6495ed\",\n cornsilk: \"#fff8dc\",\n crimson: \"#dc143c\",\n cyan: \"#0ff\",\n darkblue: \"#00008b\",\n darkcyan: \"#008b8b\",\n darkgoldenrod: \"#b8860b\",\n darkgray: \"#a9a9a9\",\n darkgreen: \"#006400\",\n darkgrey: \"#a9a9a9\",\n darkkhaki: \"#bdb76b\",\n darkmagenta: \"#8b008b\",\n darkolivegreen: \"#556b2f\",\n darkorange: \"#ff8c00\",\n darkorchid: \"#9932cc\",\n darkred: \"#8b0000\",\n darksalmon: \"#e9967a\",\n darkseagreen: \"#8fbc8f\",\n darkslateblue: \"#483d8b\",\n darkslategray: \"#2f4f4f\",\n darkslategrey: \"#2f4f4f\",\n darkturquoise: \"#00ced1\",\n darkviolet: \"#9400d3\",\n deeppink: \"#ff1493\",\n deepskyblue: \"#00bfff\",\n dimgray: \"#696969\",\n dimgrey: \"#696969\",\n dodgerblue: \"#1e90ff\",\n firebrick: \"#b22222\",\n floralwhite: \"#fffaf0\",\n forestgreen: \"#228b22\",\n fuchsia: \"#f0f\",\n gainsboro: \"#dcdcdc\",\n ghostwhite: \"#f8f8ff\",\n \"#ffd700\": \"gold\",\n goldenrod: \"#daa520\",\n \"#808080\": \"gray\",\n \"#008000\": \"green\",\n greenyellow: \"#adff2f\",\n grey: \"gray\",\n honeydew: \"#f0fff0\",\n hotpink: \"#ff69b4\",\n indianred: \"#cd5c5c\",\n \"#4b0082\": \"indigo\",\n \"#fffff0\": \"ivory\",\n \"#f0e68c\": \"khaki\",\n lavender: \"#e6e6fa\",\n lavenderblush: \"#fff0f5\",\n lawngreen: \"#7cfc00\",\n lemonchiffon: \"#fffacd\",\n lightblue: \"#add8e6\",\n lightcoral: \"#f08080\",\n lightcyan: \"#e0ffff\",\n lightgoldenrodyellow: \"#fafad2\",\n lightgray: \"#d3d3d3\",\n lightgreen: \"#90ee90\",\n lightgrey: \"#d3d3d3\",\n lightpink: \"#ffb6c1\",\n lightsalmon: \"#ffa07a\",\n lightseagreen: \"#20b2aa\",\n lightskyblue: \"#87cefa\",\n lightslategray: \"#789\",\n lightslategrey: \"#789\",\n lightsteelblue: \"#b0c4de\",\n lightyellow: \"#ffffe0\",\n lime: \"#0f0\",\n limegreen: \"#32cd32\",\n \"#faf0e6\": \"linen\",\n magenta: \"#ff00ff\",\n \"#800000\": \"maroon\",\n mediumaquamarine: \"#66cdaa\",\n mediumblue: \"#0000cd\",\n mediumorchid: \"#ba55d3\",\n mediumpurple: \"#9370db\",\n mediumseagreen: \"#3cb371\",\n mediumslateblue: \"#7b68ee\",\n mediumspringgreen: \"#00fa9a\",\n mediumturquoise: \"#48d1cc\",\n mediumvioletred: \"#c71585\",\n midnightblue: \"#191970\",\n mintcream: \"#f5fffa\",\n mistyrose: \"#ffe4e1\",\n moccasin: \"#ffe4b5\",\n navajowhite: \"#ffdead\",\n \"#000080\": \"navy\",\n oldlace: \"#fdf5e6\",\n \"#808000\": \"olive\",\n olivedrab: \"#6b8e23\",\n \"#ffa500\": \"orange\",\n orangered: \"#ff4500\",\n \"#da70d6\": \"orchid\",\n palegoldenrod: \"#eee8aa\",\n palegreen: \"#98fb98\",\n paleturquoise: \"#afeeee\",\n palevioletred: \"#db7093\",\n papayawhip: \"#ffefd5\",\n peachpuff: \"#ffdab9\",\n \"#cd853f\": \"peru\",\n \"#ffc0cb\": \"pink\",\n \"#dda0dd\": \"plum\",\n powderblue: \"#b0e0e6\",\n \"#800080\": \"purple\",\n rebeccapurple: \"#639\",\n \"#f00\": \"red\",\n rosybrown: \"#bc8f8f\",\n royalblue: \"#4169e1\",\n saddlebrown: \"#8b4513\",\n \"#fa8072\": \"salmon\",\n sandybrown: \"#f4a460\",\n seagreen: \"#2e8b57\",\n seashell: \"#fff5ee\",\n \"#a0522d\": \"sienna\",\n \"#c0c0c0\": \"silver\",\n skyblue: \"#87ceeb\",\n slateblue: \"#6a5acd\",\n slategray: \"#708090\",\n slategrey: \"#708090\",\n \"#fffafa\": \"snow\",\n springgreen: \"#00ff7f\",\n steelblue: \"#4682b4\",\n \"#d2b48c\": \"tan\",\n \"#008080\": \"teal\",\n thistle: \"#d8bfd8\",\n \"#ff634\": \"tomato\",\n turquoise: \"#40e0d0\",\n \"#ee82ee\": \"violet\",\n \"#f5deb3\": \"wheat\",\n white: \"#fff\",\n whitesmoke: \"#f5f5f5\",\n yellow: \"#ff0\",\n yellowgreen: \"#9acd32\",\n};\n\ntype SyntaxPropertyName = \"animation-duration\" | \"animation-delay\";\n\nexport type SyntaxName =\n | SyntaxPropertyName\n | \"abs()\"\n | \"absolute-size\"\n | \"acos()\"\n | \"alpha-value\"\n | \"an+b\"\n | \"anchor()\"\n | \"anchor-name\"\n | \"anchor-side\"\n | \"anchor-size\"\n | \"anchor-size()\"\n | \"angle-percentage\"\n | \"angular-color-hint\"\n | \"angular-color-stop\"\n | \"angular-color-stop-list\"\n | \"animateable-feature\"\n | \"asin()\"\n | \"atan()\"\n | \"atan2()\"\n | \"attachment\"\n | \"attr()\"\n | \"attr-matcher\"\n | \"attr-modifier\"\n | \"attr-type\"\n | \"attribute-selector\"\n | \"auto-repeat\"\n | \"auto-track-list\"\n | \"axis\"\n | \"baseline-position\"\n | \"basic-shape\"\n | \"basic-shape-rect\"\n | \"bg-clip\"\n | \"bg-image\"\n | \"bg-layer\"\n | \"bg-position\"\n | \"bg-size\"\n | \"blend-mode\"\n | \"blur()\"\n | \"brightness()\"\n | \"calc()\"\n | \"calc-constant\"\n | \"calc-product\"\n | \"calc-size()\"\n | \"calc-size-basis\"\n | \"calc-sum\"\n | \"calc-value\"\n | \"cf-final-image\"\n | \"cf-mixing-image\"\n | \"circle()\"\n | \"clamp()\"\n | \"class-selector\"\n | \"clip-source\"\n | \"color\"\n | \"color()\"\n | \"color-base\"\n | \"color-function\"\n | \"color-interpolation-method\"\n | \"color-mix()\"\n | \"color-stop\"\n | \"color-stop-angle\"\n | \"color-stop-length\"\n | \"color-stop-list\"\n | \"colorspace-params\"\n | \"combinator\"\n | \"common-lig-values\"\n | \"compat-auto\"\n | \"compat-special\"\n | \"complex-selector\"\n | \"complex-selector-list\"\n | \"composite-style\"\n | \"compositing-operator\"\n | \"compound-selector\"\n | \"compound-selector-list\"\n | \"conic-gradient()\"\n | \"conic-gradient-syntax\"\n | \"container-condition\"\n | \"container-name\"\n | \"container-query\"\n | \"content-distribution\"\n | \"content-list\"\n | \"content-position\"\n | \"content-replacement\"\n | \"contextual-alt-values\"\n | \"contrast()\"\n | \"coord-box\"\n | \"cos()\"\n | \"counter\"\n | \"counter()\"\n | \"counter-name\"\n | \"counter-style\"\n | \"counter-style-name\"\n | \"counters()\"\n | \"cross-fade()\"\n | \"cubic-bezier()\"\n | \"cubic-bezier-easing-function\"\n | \"cursor-predefined\"\n | \"custom-color-space\"\n | \"custom-params\"\n | \"dasharray\"\n | \"dashndashdigit-ident\"\n | \"deprecated-system-color\"\n | \"discretionary-lig-values\"\n | \"display-box\"\n | \"display-inside\"\n | \"display-internal\"\n | \"display-legacy\"\n | \"display-listitem\"\n | \"display-outside\"\n | \"drop-shadow()\"\n | \"easing-function\"\n | \"east-asian-variant-values\"\n | \"east-asian-width-values\"\n | \"element()\"\n | \"ellipse()\"\n | \"env()\"\n | \"exp()\"\n | \"explicit-track-list\"\n | \"family-name\"\n | \"feature-tag-value\"\n | \"feature-type\"\n | \"feature-value-block\"\n | \"feature-value-block-list\"\n | \"feature-value-declaration\"\n | \"feature-value-declaration-list\"\n | \"feature-value-name\"\n | \"filter-function\"\n | \"filter-value-list\"\n | \"final-bg-layer\"\n | \"fit-content()\"\n | \"fixed-breadth\"\n | \"fixed-repeat\"\n | \"fixed-size\"\n | \"font-stretch-absolute\"\n | \"font-variant-css2\"\n | \"font-weight-absolute\"\n | \"font-width-css3\"\n | \"form-control-identifier\"\n | \"frequency-percentage\"\n | \"generic-complete\"\n | \"general-enclosed\"\n | \"generic-family\"\n | \"generic-incomplete\"\n | \"geometry-box\"\n | \"gradient\"\n | \"grayscale()\"\n | \"grid-line\"\n | \"historical-lig-values\"\n | \"hsl()\"\n | \"hsla()\"\n | \"hue\"\n | \"hue-interpolation-method\"\n | \"hue-rotate()\"\n | \"hwb()\"\n | \"hypot()\"\n | \"id-selector\"\n | \"image\"\n | \"image()\"\n | \"image-set()\"\n | \"image-set-option\"\n | \"image-src\"\n | \"image-tags\"\n | \"inflexible-breadth\"\n | \"inset()\"\n | \"integer\"\n | \"invert()\"\n | \"keyframe-block\"\n | \"keyframe-selector\"\n | \"keyframes-name\"\n | \"lab()\"\n | \"layer()\"\n | \"layer-name\"\n | \"lch()\"\n | \"leader()\"\n | \"leader-type\"\n | \"length-percentage\"\n | \"light-dark()\"\n | \"line-name-list\"\n | \"line-names\"\n | \"line-style\"\n | \"line-width\"\n | \"linear()\"\n | \"linear-color-hint\"\n | \"linear-color-stop\"\n | \"linear-easing-function\"\n | \"linear-gradient()\"\n | \"linear-gradient-syntax\"\n | \"log()\"\n | \"mask-layer\"\n | \"mask-position\"\n | \"mask-reference\"\n | \"mask-source\"\n | \"masking-mode\"\n | \"matrix()\"\n | \"matrix3d()\"\n | \"max()\"\n | \"media-and\"\n | \"media-condition\"\n | \"media-condition-without-or\"\n | \"media-feature\"\n | \"media-in-parens\"\n | \"media-not\"\n | \"media-or\"\n | \"media-query\"\n | \"media-query-list\"\n | \"media-type\"\n | \"mf-boolean\"\n | \"mf-name\"\n | \"mf-plain\"\n | \"mf-range\"\n | \"mf-value\"\n | \"min()\"\n | \"minmax()\"\n | \"mod()\"\n | \"n-dimension\"\n | \"name-repeat\"\n | \"named-color\"\n | \"namespace-prefix\"\n | \"ndash-dimension\"\n | \"ndashdigit-dimension\"\n | \"ndashdigit-ident\"\n | \"ns-prefix\"\n | \"number-percentage\"\n | \"numeric-figure-values\"\n | \"numeric-fraction-values\"\n | \"numeric-spacing-values\"\n | \"offset-path\"\n | \"oklab()\"\n | \"oklch()\"\n | \"opacity()\"\n | \"opacity-value\"\n | \"outline-line-style\"\n | \"outline-radius\"\n | \"overflow-position\"\n | \"page-body\"\n | \"page-margin-box\"\n | \"page-margin-box-type\"\n | \"page-selector\"\n | \"page-selector-list\"\n | \"page-size\"\n | \"paint\"\n | \"paint()\"\n | \"paint-box\"\n | \"palette-identifier\"\n | \"palette-mix()\"\n | \"path()\"\n | \"perspective()\"\n | \"polar-color-space\"\n | \"polygon()\"\n | \"position\"\n | \"position-area\"\n | \"pow()\"\n | \"predefined-rgb\"\n | \"predefined-rgb-params\"\n | \"pseudo-class-selector\"\n | \"pseudo-element-selector\"\n | \"pseudo-page\"\n | \"query-in-parens\"\n | \"quote\"\n | \"radial-extent\"\n | \"radial-gradient()\"\n | \"radial-gradient-syntax\"\n | \"radial-shape\"\n | \"radial-size\"\n | \"ratio\"\n | \"ray()\"\n | \"ray-size\"\n | \"rect()\"\n | \"rectangular-color-space\"\n | \"relative-selector\"\n | \"relative-selector-list\"\n | \"relative-size\"\n | \"rem()\"\n | \"repeat-style\"\n | \"repeating-conic-gradient()\"\n | \"repeating-linear-gradient()\"\n | \"repeating-radial-gradient()\"\n | \"reversed-counter-name\"\n | \"rgb()\"\n | \"rgba()\"\n | \"rotate()\"\n | \"rotate3d()\"\n | \"rotateX()\"\n | \"rotateY()\"\n | \"rotateZ()\"\n | \"round()\"\n | \"rounding-strategy\"\n | \"saturate()\"\n | \"scale()\"\n | \"scale3d()\"\n | \"scaleX()\"\n | \"scaleY()\"\n | \"scaleZ()\"\n | \"scope-end\"\n | \"scope-start\"\n | \"scroll()\"\n | \"scroller\"\n | \"scroll-state-feature\"\n | \"scroll-state-in-parens\"\n | \"scroll-state-query\"\n | \"selector-list\"\n | \"self-position\"\n | \"sepia()\"\n | \"shadow\"\n | \"shadow-t\"\n | \"shape\"\n | \"shape-box\"\n | \"side-or-corner\"\n | \"sign()\"\n | \"signed-integer\"\n | \"signless-integer\"\n | \"sin()\"\n | \"single-animation\"\n | \"single-animation-composition\"\n | \"single-animation-direction\"\n | \"single-animation-fill-mode\"\n | \"single-animation-iteration-count\"\n | \"single-animation-play-state\"\n | \"single-animation-timeline\"\n | \"single-transition\"\n | \"single-transition-property\"\n | \"size\"\n | \"size-feature\"\n | \"skew()\"\n | \"skewX()\"\n | \"skewY()\"\n | \"sqrt()\"\n | \"step-position\"\n | \"step-easing-function\"\n | \"steps()\"\n | \"style-feature\"\n | \"style-in-parens\"\n | \"style-query\"\n | \"subclass-selector\"\n | \"supports-condition\"\n | \"supports-decl\"\n | \"supports-feature\"\n | \"supports-in-parens\"\n | \"supports-selector-fn\"\n | \"symbol\"\n | \"symbols()\"\n | \"symbols-type\"\n | \"system-color\"\n | \"system-family-name\"\n | \"tan()\"\n | \"target\"\n | \"target-counter()\"\n | \"target-counters()\"\n | \"target-text()\"\n | \"text-edge\"\n | \"time-percentage\"\n | \"timeline-range-name\"\n | \"track-breadth\"\n | \"track-list\"\n | \"track-repeat\"\n | \"track-size\"\n | \"transform-function\"\n | \"transform-list\"\n | \"transition-behavior-value\"\n | \"translate()\"\n | \"translate3d()\"\n | \"translateX()\"\n | \"translateY()\"\n | \"translateZ()\"\n | \"try-size\"\n | \"try-tactic\"\n | \"type-or-unit\"\n | \"type-selector\"\n | \"var()\"\n | \"view()\"\n | \"viewport-length\"\n | \"visual-box\"\n | \"wq-name\"\n | \"xywh()\"\n | \"xyz\"\n | \"xyz-params\";\n","import type { ViteDevServer } from \"vite\";\n\nconst CSS_JS_REGEX = /\\.css\\.[jt]s/;\nconst IMPORT_REGEX =\n /import\\s+(?:[\\s\\S]*?\\s+from\\s+)?['\"]([^'\"]+\\.css(?:\\.[jt]s)?)['\"]/g;\n\nexport function cssJsLogger() {\n const processedFiles = new Map<string, Record<string, unknown>>();\n\n async function transform(\n code: string,\n id: string,\n devServer: ViteDevServer | null,\n ) {\n if (!devServer) return null;\n\n // Skip the .css.ts files themselves - we'll process them from their importers\n const cleanId = id.split(\"?\")[0];\n // if (CSS_JS_REGEX.test(cleanId)) return null;\n\n // Only check JS/TS files for imports\n if (!/\\.[jt]sx?$/.test(cleanId)) return null;\n\n const imports: string[] = [];\n let match;\n while ((match = IMPORT_REGEX.exec(code)) !== null) {\n imports.push(match[1]);\n }\n\n for (const specifier of imports) {\n // Get the import specifier\n if (!specifier) continue;\n\n if (!specifier.includes(\".css\")) continue;\n\n // Resolve the full path\n const resolved = await this.resolve(specifier, id);\n if (!resolved) continue;\n\n const resolvedPath = resolved.id.split(\"?\")[0];\n\n if (!CSS_JS_REGEX.test(resolvedPath)) continue;\n\n try {\n // Now it's safe to load - the module has already been transformed\n const moduleExports = await devServer.ssrLoadModule(resolvedPath);\n processedFiles.set(resolvedPath, moduleExports);\n } catch (error) {\n console.error(`\\n❌ Error processing ${resolvedPath}:`, error);\n }\n }\n\n return null;\n }\n\n return { processedFiles, transform };\n}\n","export type EvaluationResult = {\n confident: boolean;\n value: any;\n badNode?: babel.types.Node | null | undefined;\n};\n\nconst UNKNOWN = (badNode?: babel.types.Node | null | undefined) =>\n ({\n confident: false,\n value: undefined,\n badNode,\n }) as EvaluationResult;\nconst known = (value: any) => ({\n confident: true,\n value,\n});\n\nexport function evaluateBabelExpression(\n node: babel.types.Node | null | undefined,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n if (!node) return UNKNOWN(node);\n switch (node.type) {\n case \"ArrayExpression\":\n return evaluateArrayExpression(node, knownConstants);\n case \"BinaryExpression\":\n return evaluateBinaryExpression(node, knownConstants);\n case \"Identifier\":\n return evaluateIdentifier(node, knownConstants);\n case \"MemberExpression\":\n return evaluateMemberExpression(node, knownConstants);\n case \"NullLiteral\":\n return evaluateNullLiteral(node);\n case \"NumericLiteral\":\n return evaluateNumericLiteral(node);\n case \"ObjectExpression\":\n return evaluateObjectExpression(node, knownConstants);\n case \"StringLiteral\":\n return evaluateStringLiteral(node);\n case \"TemplateLiteral\":\n return evaluateTemplateLiteral(node, knownConstants);\n case \"UnaryExpression\":\n return evaluateUnaryExpression(node, knownConstants);\n default:\n return UNKNOWN(node);\n }\n}\n\nfunction evaluateArrayExpression(\n node: babel.types.ArrayExpression,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n const elements: any[] = [];\n for (const item of node.elements) {\n if (!item) return UNKNOWN(node);\n if (item.type === \"SpreadElement\") {\n const spreadElements = evaluateBabelExpression(\n item.argument,\n knownConstants,\n );\n if (spreadElements.confident) {\n elements.push(...spreadElements.value);\n continue;\n } else {\n return UNKNOWN(spreadElements.badNode);\n }\n }\n const result = evaluateBabelExpression(item, knownConstants);\n if (result.confident) {\n elements.push(result.value);\n } else {\n return UNKNOWN(result.badNode);\n }\n }\n\n return known(elements);\n}\n\nfunction evaluateBinaryExpression(\n node: babel.types.BinaryExpression,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n const left = evaluateBabelExpression(node.left, knownConstants);\n const right = evaluateBabelExpression(node.right, knownConstants);\n\n if (!left.confident) return UNKNOWN(left.badNode);\n if (!right.confident) return UNKNOWN(right.badNode);\n\n switch (node.operator) {\n case \"+\":\n return known(left.value + right.value);\n case \"-\":\n return known(left.value - right.value);\n case \"/\":\n return known(left.value / right.value);\n case \"%\":\n return known(left.value % right.value);\n case \"*\":\n return known(left.value * right.value);\n case \"**\":\n return known(left.value ** right.value);\n case \"&\":\n return known(left.value & right.value);\n case \"|\":\n return known(left.value | right.value);\n case \">>\":\n return known(left.value >> right.value);\n case \">>>\":\n return known(left.value >>> right.value);\n case \"<<\":\n return known(left.value << right.value);\n case \"^\":\n return known(left.value ^ right.value);\n case \"==\":\n return known(left.value == right.value);\n case \"===\":\n return known(left.value === right.value);\n case \"!=\":\n return known(left.value != right.value);\n case \"!==\":\n return known(left.value !== right.value);\n case \"in\":\n return known(left.value in right.value);\n case \"instanceof\":\n return known(left.value instanceof right.value);\n case \">\":\n return known(left.value > right.value);\n case \"<\":\n return known(left.value < right.value);\n case \">=\":\n return known(left.value >= right.value);\n case \"<=\":\n return known(left.value <= right.value);\n default:\n return UNKNOWN(node);\n }\n}\n\nfunction evaluateIdentifier(\n node: babel.types.Identifier,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n if (node.name in knownConstants) {\n return known(knownConstants[node.name]);\n }\n if (node.name === \"undefined\") {\n return known(undefined);\n }\n return UNKNOWN(node);\n}\n\nfunction evaluateMemberExpression(\n node: babel.types.MemberExpression,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n const obj = evaluateBabelExpression(node.object, knownConstants);\n\n const propertyNode = node.property;\n let property: EvaluationResult;\n if (node.computed) {\n property = evaluateBabelExpression(propertyNode, knownConstants);\n } else {\n if (propertyNode.type === \"Identifier\") {\n property = known(propertyNode.name);\n } else {\n return UNKNOWN(node);\n }\n }\n\n if (!obj.confident || !property.confident) return UNKNOWN(node);\n\n return known(obj.value[property.value]);\n}\n\nfunction evaluateNullLiteral(node: babel.types.NullLiteral): EvaluationResult {\n return known(null);\n}\n\nfunction evaluateNumericLiteral(\n node: babel.types.NumericLiteral,\n): EvaluationResult {\n return known(node.value);\n}\n\nfunction evaluateObjectExpression(\n node: babel.types.ObjectExpression,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n let result: any = {};\n\n for (const property of node.properties) {\n switch (property.type) {\n case \"ObjectMethod\":\n return UNKNOWN(property);\n case \"SpreadElement\": {\n const values = evaluateBabelExpression(\n property.argument,\n knownConstants,\n );\n if (values.confident) {\n result = {\n ...result,\n ...values.value,\n };\n continue;\n } else {\n return UNKNOWN(property);\n }\n }\n case \"ObjectProperty\": {\n const keyNode = property.key;\n let key: EvaluationResult;\n if (property.computed) {\n key = evaluateBabelExpression(keyNode, knownConstants);\n } else {\n if (keyNode.type === \"StringLiteral\") {\n key = known(keyNode.value);\n } else if (keyNode.type === \"Identifier\") {\n key = known(keyNode.name);\n } else {\n return UNKNOWN(property);\n }\n }\n const value = evaluateBabelExpression(property.value, knownConstants);\n if (!key || !key.confident || !value.confident)\n return UNKNOWN(property);\n result[key.value] = value.value;\n }\n }\n }\n\n return known(result);\n}\n\nfunction evaluateStringLiteral(\n node: babel.types.StringLiteral,\n): EvaluationResult {\n return known(node.value);\n}\n\nfunction evaluateTemplateLiteral(\n node: babel.types.TemplateLiteral,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n const quasisAsStrings = node.quasis.map((q) => q.value.cooked ?? q.value.raw);\n const expressions = node.expressions.map((e) =>\n evaluateBabelExpression(e, knownConstants),\n );\n if (expressions.some((e) => !e.confident)) {\n return UNKNOWN(node);\n }\n const expressionValues = expressions.map((e) => e.value);\n let result = \"\";\n for (let i = 0; i < quasisAsStrings.length; i++) {\n result += quasisAsStrings[i];\n if (i < expressionValues.length) {\n let value = expressionValues[i];\n result += value;\n }\n }\n return known(result);\n}\n\nfunction evaluateUnaryExpression(\n node: babel.types.UnaryExpression,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n const argument = evaluateBabelExpression(node.argument, knownConstants);\n\n if (!argument.confident) return UNKNOWN(argument.badNode);\n\n switch (node.operator) {\n case \"+\":\n return known(+argument.value);\n case \"-\":\n return known(-argument.value);\n case \"void\":\n return known(void argument.value);\n case \"!\":\n return known(!argument.value);\n case \"~\":\n return known(~argument.value);\n case \"typeof\":\n return known(typeof argument.value);\n default:\n return UNKNOWN(node);\n }\n}\n","import type { CSSProperties } from \"./css-properties.js\";\n\nexport type { CSSProperties, CSSValue } from \"./css-properties.js\";\n\n/**\n * The style object accepted by `styled()`: top-level CSS properties plus the\n * optional `variants` and `defaultVariants` keys.\n */\nexport type StyledStyleObject = CSSProperties & {\n variants?: Record<string, Record<string, CSSProperties>>;\n defaultVariants?: Record<string, string | number | boolean>;\n};\n\nexport function css(styleObject: CSSProperties): string {\n throw new Error(\"RAHHH\");\n}\n\nexport function keyframes(styleObject: Record<string, CSSProperties>): string {\n throw new Error(\"RAHHH\");\n}\n\nexport function styled(component: any, styleObject: StyledStyleObject): any {\n throw new Error(\"RAHHH\");\n}\n\nexport function variants<\n T extends Record<string, Record<string, CSSProperties>>,\n>(variantsObject: T): { [K in keyof T]: string } {\n throw new Error(\"RAHHH\");\n}\n\nexport function mergeClassNames(\n classNames: Array<string | boolean | null | undefined>,\n): string {\n let cleanNames = classNames\n .filter((element) => typeof element === \"string\")\n .join(\" \")\n .split(/\\s+/);\n\n let classMap = Object.create(null) as Record<string, string>;\n for (let className of cleanNames) {\n if (className.startsWith(\"x\") && className.includes(\"-\")) {\n classMap[className.split(\"-\")[0]!] = className;\n } else {\n classMap[className] = className;\n }\n }\n\n return Object.values(classMap).join(\" \");\n}\n","import { AnimationRules, StyleRule } from \"./style-rule.js\";\n\nexport function printStyleSheet({\n animations,\n getAnimationName,\n styleRules,\n styleRuleToClassName,\n}: {\n animations: AnimationRules[];\n getAnimationName: (rule: AnimationRules) => string;\n styleRules: StyleRule[];\n styleRuleToClassName: (styleRule: StyleRule) => string;\n}) {\n const keyframesSection = animations.map((animation) => {\n return `@keyframes ${getAnimationName(animation)} {\n${Object.entries(animation)\n .map(\n ([key, styleRules]) => ` ${key} {\n${styleRules.map((rule) => ` ${rule.property}: ${rule.value};`).join(\"\\n\")}\n }`,\n )\n .join(\"\\n\")}\n}`;\n });\n\n const tree = groupStyleRules(styleRules, []);\n const rulesSection = renderStyleRuleNode(tree, styleRuleToClassName);\n return keyframesSection + \"\\n\" + rulesSection;\n}\n\nfunction renderStyleRuleNode(\n node: StyleRuleNode,\n styleRuleToClassName: (styleRule: StyleRule) => string,\n indent = 0,\n): string {\n const rulesSection = node.rules\n .sort((a, b) => a.value.localeCompare(b.value))\n .sort((a, b) => a.property.localeCompare(b.property))\n .sort((a, b) => a.selector.length - b.selector.length)\n .sort((a, b) => a.atRules.length - b.atRules.length)\n .map((rule) => {\n const className = styleRuleToClassName(rule);\n return `${space(indent)}${rule.selector.replaceAll(\"&\", \".\" + className)} { ${rule.property}: ${rule.value} }`;\n })\n .join(\"\\n\");\n\n const childrenSection = node.children\n .map((node) => {\n return `${space(indent)}${node.atRule} {\n${renderStyleRuleNode(node, styleRuleToClassName, indent + 1)}\n${space(indent)}}`;\n })\n .join(\"\\n\");\n\n return [rulesSection, childrenSection].filter(Boolean).join(\"\\n\\n\");\n}\n\nfunction space(indent = 0) {\n return \"\".padEnd(indent * 2, \" \");\n}\n\ntype StyleRuleNode = {\n atRule: string | undefined;\n rules: StyleRule[];\n children: StyleRuleNode[];\n};\n\nfunction groupStyleRules(styleRules: StyleRule[], atRulesSoFar: string[]) {\n const matchingStyleRules = styleRules.filter(\n (r) => r.atRules.length === atRulesSoFar.length,\n );\n\n const nextAtRulesArr = styleRules\n .map((r) => r.atRules[atRulesSoFar.length])\n .filter(Boolean);\n\n const nextAtRulesSet = new Set(nextAtRulesArr);\n\n const node: StyleRuleNode = {\n atRule: atRulesSoFar.length\n ? atRulesSoFar[atRulesSoFar.length - 1]\n : undefined,\n rules: matchingStyleRules,\n children: [...nextAtRulesSet].map((atRule) =>\n groupStyleRules(\n styleRules.filter((r) => r.atRules[atRulesSoFar.length] === atRule),\n [...atRulesSoFar, atRule],\n ),\n ),\n };\n\n return node;\n}\n","// Started with letters first because I think it looks better\nconst ALPHABET = \"abcdefghijklmnopqrstuvwxyz0123456789\";\nconst ALPHABET_LENGTH = ALPHABET.length;\n\nfunction toChar63(number: number) {\n return ALPHABET[number - 1];\n}\n\n/**\n * Oops it's actually base 36, limited to lowercase letters and numbers for\n * better compression.\n */\nexport function toBase64ish(number: number): string {\n let string = \"\";\n let _number = number;\n\n while (_number > 0) {\n string = string + toChar63(_number % ALPHABET_LENGTH || ALPHABET_LENGTH);\n _number = Math.floor((_number - 1) / ALPHABET_LENGTH);\n }\n\n return string;\n}\n\n/** Returns the given value converted to camel-case. */\nexport const toCamelCase = (value: string) =>\n !/[A-Z]/.test(value)\n ? value.replace(/-[^]/g, (capital) => capital[1].toUpperCase())\n : value;\n\n/** Returns the given value converted to kebab-case. */\nexport const toKebabCase = (value: string) =>\n // ignore kebab-like values\n value.includes(\"-\")\n ? value\n : // replace any upper-case letter with a dash and the lower-case variant\n value.replace(/[A-Z]/g, (capital) => \"-\" + capital.toLowerCase());\n","import { mergeClassNames } from \"./index.js\";\nimport { printStyleSheet } from \"./print.js\";\nimport { toBase64ish } from \"./string.js\";\nimport { AnimationRules, StyleRule } from \"./style-rule.js\";\n\nfunction dedupeRules(rules: StyleRule[]) {\n return rules.filter((r, i, all) => {\n const firstIndex = all.findIndex(\n (r2) => r2.property === r.property && r2.value === r.value,\n );\n if (firstIndex === i) return true;\n return false;\n });\n}\n\nfunction dedupeAnimations(rules: AnimationRules[]) {\n return rules.filter((r, i, all) => {\n const firstIndex = all.findIndex(\n (r2) => JSON.stringify(r2) === JSON.stringify(r),\n );\n if (firstIndex === i) return true;\n return false;\n });\n}\n\nfunction createAnimationNameCache() {\n let cacheIndex = 1;\n let keyframesHashToAnimationName = new Map<string, string>();\n\n function createAnimationName() {\n return \"x\" + toBase64ish(cacheIndex++);\n }\n\n function getAnimationName(rule: AnimationRules) {\n const propertyHash = JSON.stringify(rule);\n\n let propertySegment = keyframesHashToAnimationName.get(propertyHash);\n if (!propertySegment) {\n propertySegment = createAnimationName();\n keyframesHashToAnimationName.set(propertyHash, propertySegment);\n }\n\n return propertySegment;\n }\n\n return { getAnimationName };\n}\n\nfunction createPropertyClassSegmentCache() {\n let propertyCacheIndex = 1;\n let propertyHashToClassSegment = new Map<string, string>();\n\n function createPropertyClassSegment() {\n return toBase64ish(propertyCacheIndex++);\n }\n\n function getPropertyClassSegment(rule: StyleRule) {\n let { selector, property, atRules } = rule;\n const propertyHash = [selector, property, ...atRules].join(\" $ \");\n\n let propertySegment = propertyHashToClassSegment.get(propertyHash);\n if (!propertySegment) {\n propertySegment = createPropertyClassSegment();\n propertyHashToClassSegment.set(propertyHash, propertySegment);\n }\n\n return propertySegment;\n }\n\n return { getPropertyClassSegment };\n}\n\nfunction createValueClassSegmentCache() {\n let valueCacheIndices = new Map<string, number>();\n function getValueCacheIndex(propertyHash: string) {\n return valueCacheIndices.get(propertyHash) || 1;\n }\n function incrementValueCacheIndex(propertyHash: string) {\n valueCacheIndices.set(propertyHash, getValueCacheIndex(propertyHash) + 1);\n }\n let valueClassSegmentCache: {\n [propertyClassSegment: string]: {\n [valueHash: string]: string;\n };\n } = {};\n function getValueClassSegmentFromCache(\n propertyHash: string,\n valueHash: string,\n ): string | undefined {\n return valueClassSegmentCache[propertyHash]?.[valueHash];\n }\n function setValueClassSegment(\n propertyHash: string,\n valueHash: string,\n valueClassSegment: string,\n ) {\n if (!valueClassSegmentCache[propertyHash]) {\n valueClassSegmentCache[propertyHash] = {};\n }\n valueClassSegmentCache[propertyHash][valueHash] = valueClassSegment;\n }\n function createValueClassSegment(propertyHash: string) {\n const idx = getValueCacheIndex(propertyHash);\n const valueClassSegment = toBase64ish(idx);\n incrementValueCacheIndex(propertyHash);\n return valueClassSegment;\n }\n\n function getValueClassSegment(rule: StyleRule, propertyHash: string) {\n let { value } = rule;\n\n const valueHash = value;\n let valueClassSegment = getValueClassSegmentFromCache(\n propertyHash,\n valueHash,\n );\n if (!valueClassSegment) {\n valueClassSegment = createValueClassSegment(propertyHash);\n setValueClassSegment(propertyHash, valueHash, valueClassSegment);\n }\n return valueClassSegment;\n }\n\n return { getValueClassSegment };\n}\n\nexport function createStyleCache() {\n let rules: StyleRule[] = [];\n let animations: AnimationRules[] = [];\n\n const { getPropertyClassSegment } = createPropertyClassSegmentCache();\n const { getValueClassSegment } = createValueClassSegmentCache();\n const { getAnimationName } = createAnimationNameCache();\n\n function styleRuleToClassName(rule: StyleRule) {\n let propertyClassSegment = getPropertyClassSegment(rule);\n let valueClassSegment = getValueClassSegment(rule, propertyClassSegment);\n\n const className = \"x\" + propertyClassSegment + \"-\" + valueClassSegment;\n\n return className;\n }\n\n return {\n getLength: () => rules.length,\n addRules: (r: StyleRule[]) => {\n rules.push(...r);\n rules = dedupeRules(rules);\n },\n getClassNames: (r: StyleRule[]) => {\n rules.push(...r);\n rules = dedupeRules(rules);\n return mergeClassNames(r.map(styleRuleToClassName));\n },\n getAnimationName: (keyframe: AnimationRules) => {\n animations.push(keyframe);\n animations = dedupeAnimations(animations);\n return getAnimationName(keyframe);\n },\n processStyleRules: () => {\n return printStyleSheet({\n animations,\n getAnimationName,\n styleRules: rules,\n styleRuleToClassName,\n });\n },\n };\n}\n\nexport type StyleCache = ReturnType<typeof createStyleCache>;\n","import { toKebabCase } from \"./string.js\";\nimport { StyleRule } from \"./style-rule.js\";\n\nexport type StyleObject = {\n [key in string]: string | number | StyleObject;\n};\n\nexport type KeyframesObject = {\n [key in string]: StyleObject;\n};\n\nfunction joinSingleSelector(a: string, b: string) {\n if (!b.includes(\"&\")) {\n if (b.includes(\" \")) {\n b = `& ${b}`;\n } else {\n if (/^[a-zA-Z]/.test(b) || b.startsWith(\"*\")) {\n b = `& ${b}`;\n } else {\n b = `&${b}`;\n }\n }\n }\n const selector = b.replaceAll(\"&\", a);\n\n return selector;\n}\n\nexport function joinSelectors(a: string, bs: string): string[] {\n const bsArray = bs.split(/,\\s*/);\n return bsArray.map((b) => joinSingleSelector(a, b.trim()));\n}\n\nexport type MacroFn = (arg: any) => void;\nexport type Macros = Record<string, (arg: any) => StyleObject>;\n\nexport function evaluateMacros(\n cssObj: StyleObject,\n macros: Macros,\n usedMacroKeys: string[] = [],\n) {\n return Object.fromEntries(\n Object.entries(cssObj).flatMap(([key, value]) => {\n const macro = macros[key];\n if (!macro || usedMacroKeys.includes(key)) {\n return [\n [\n key,\n typeof value === \"object\"\n ? evaluateMacros(value, macros, usedMacroKeys)\n : value,\n ],\n ];\n }\n const macrofied = macro(value);\n return Object.entries(macrofied).map(([key, value]) => [\n key,\n typeof value === \"object\"\n ? evaluateMacros(value, macros, [...usedMacroKeys, key])\n : value,\n ]);\n }),\n );\n}\n\nexport type Media = Record<string, string>;\n\nexport function evaluateMedia(cssObj: StyleObject, media: Media) {\n return Object.fromEntries(\n Object.entries(cssObj).map(([key, value]) => {\n value = typeof value === \"object\" ? evaluateMedia(value, media) : value;\n if (key.startsWith(\"@\")) {\n const thisMedia = media[key.slice(1)];\n if (thisMedia) {\n const newKey = `@media ${thisMedia}`;\n return [newKey, value];\n }\n }\n return [key, value];\n }),\n );\n}\n\nexport function flattenStyleObject(\n cssObj: StyleObject,\n selector = \"&\",\n atRules: string[] = [],\n): StyleRule[] {\n return Object.entries(cssObj).flatMap(([key, value]) => {\n if (typeof value === \"object\") {\n if (key.startsWith(\"@\")) {\n let newAtRule = key;\n return flattenStyleObject(value, selector, [...atRules, newAtRule]);\n }\n\n let nextSelectors = joinSelectors(selector, key);\n return nextSelectors.flatMap((nextSelector) => {\n return flattenStyleObject(value as StyleObject, nextSelector, atRules);\n });\n }\n\n const property = toKebabCase(key);\n\n if (typeof value === \"number\") {\n if (unitlessProps[property]) {\n value = value.toString();\n } else {\n value = value + \"px\";\n }\n }\n\n value = value.trim();\n let important = false;\n if (value.endsWith(\"!important\")) {\n important = true;\n value = value.slice(0, value.length - \"!important\".length);\n }\n\n return [\n {\n selector,\n property,\n value,\n atRules,\n important,\n },\n ];\n });\n}\n\n/** CSS Properties whose number values should not be auto-converted to pixels. */\nexport const unitlessProps: Record<string, number> = {\n \"animation-iteration-count\": 1,\n \"aspect-ratio\": 1,\n \"border-image-outset\": 1,\n \"border-image-slice\": 1,\n \"border-Image-width\": 1,\n \"box-flex\": 1,\n \"box-flex-group\": 1,\n \"box-ordinal-group\": 1,\n \"column-count\": 1,\n columns: 1,\n flex: 1,\n \"flex-grow\": 1,\n \"flex-positive\": 1,\n \"flex-shrink\": 1,\n \"flex-negative\": 1,\n \"flex-order\": 1,\n \"grid-row\": 1,\n \"grid-row-end\": 1,\n \"grid-row-span\": 1,\n \"grid-row-start\": 1,\n \"grid-column\": 1,\n \"grid-column-end\": 1,\n \"grid-column-span\": 1,\n \"grid-column-start\": 1,\n \"ms-grid-row\": 1,\n \"ms-grid-row-span\": 1,\n \"ms-grid-column\": 1,\n \"ms-grid-column-span\": 1,\n \"font-weight\": 1,\n \"line-height\": 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n \"tab-size\": 1,\n widows: 1,\n \"z-index\": 1,\n zoom: 1,\n \"-webkit-line-clamp\": 1,\n\n // SVG-related properties\n \"fill-opacity\": 1,\n \"flood-opacity\": 1,\n \"stop-opacity\": 1,\n \"stroke-dasharray\": 1,\n \"stroke-dashoffset\": 1,\n \"stroke-miterlimit\": 1,\n \"stroke-opacity\": 1,\n \"stroke-width\": 1,\n};\n"],"mappings":";AAAA,OAAO,WAAW;AAClB,SAAS,gBAAgB;;;ACDzB,YAAY,aAAa;;;ACwBlB,SAAS,kBAAkB,MAA4C;AAC5E,MAAI,CAAC,KAAM,QAAO;AAClB,UAAQ,KAAK,QAAQ,MAAM;AAAA,IACzB,KAAK;AACH,aAAO,mBAAmB,IAAI;AAAA,EAClC;AAIA,MAAI,KAAK,OAAO;AACd,WAAO,KAAK;AAAA,EACd;AACA,SAAO,KAAK,OAAO,IAAI,iBAAiB,EAAE,KAAK,GAAG,KAAK;AACzD;AAEO,SAAS,mBAAmB,MAAiB;AAClD,QAAM,OAAO,KAAK,QAAQ,CAAC,EAAE,SAAS;AACtC,MAAI,KAAK,YAAY,KAAK,iBAAiB;AACzC,WAAO,gBAAgB,KAAK,YAAY,CAAC;AAAA,EAC3C;AACA,SAAO;AACT;AAKA,IAAM,kBAA0C;AAAA,EAC9C,WAAW;AAAA,EACX,cAAc;AAAA,EACd,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,eAAe;AAAA,EACf,UAAU;AAAA,EACV,WAAW;AAAA,EACX,UAAU;AAAA,EACV,WAAW;AAAA,EACX,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,aAAa;AAAA,EACb,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AAAA,EACb,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AAAA,EACV,eAAe;AAAA,EACf,WAAW;AAAA,EACX,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,sBAAsB;AAAA,EACtB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,eAAe;AAAA,EACf,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AAAA,EACT,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AAAA,EACV,aAAa;AAAA,EACb,WAAW;AAAA,EACX,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,eAAe;AAAA,EACf,WAAW;AAAA,EACX,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AAAA,EACT,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,aAAa;AACf;;;ADlMA,IAAM,YAAwC;AAAA,EAC5C,WAAW,CAAC,UAAU;AACpB,UAAM,MAAc,cAAM,OAAO,EAAE,SAAS,QAAQ,CAAC;AACrD,UAAM,cAAsB,cAAM,cAAc,aAAa,GAAG;AAChE,UAAM,QAAQ,YAAY,SAAS;AAInC,QAAI,CAAC,MAAO,QAAO;AAEnB,UAAM,iBAA8B,CAAC;AACrC,UAAM,qBAAkC,CAAC;AACzC,UAAM,kBAA+B,CAAC;AACtC,UAAM,kBAA+B,CAAC;AACtC,UAAM,aAA0B,CAAC;AACjC,UAAM,YAAyB,CAAC;AAChC,UAAM,aAA0B,CAAC;AAEjC,eAAW,mBAAmB,OAAO;AACnC,YAAM,gBAAgB,gBAAgB,OAAO;AAAA,QAC3C,CAAC,MAAM,EAAE,QAAQ,SAAS;AAAA,MAC5B;AACA,UAAI,eAAe;AACjB,uBAAe,KAAK,aAAa;AAAA,MACnC;AACA,YAAM,WAAW,gBAAgB,OAAO;AAAA,QACtC,CAAC,MAAM,EAAE,QAAQ,SAAS;AAAA,MAC5B;AACA,UAAI,UAAU;AACZ,2BAAmB,KAAK,QAAQ;AAAA,MAClC;AACA,YAAM,SAAS,gBAAgB,OAAO;AAAA,QACpC,CAAC,MAAM,EAAE,QAAQ,SAAS;AAAA,MAC5B;AACA,UAAI,QAAQ;AACV,wBAAgB,KAAK,MAAM;AAAA,MAC7B;AACA,YAAM,QAAQ,gBAAgB,OAAO;AAAA,QACnC,CAAC,MAAM,EAAE,QAAQ,SAAS;AAAA,MAC5B;AACA,UAAI,OAAO;AACT,wBAAgB,KAAK,KAAK;AAAA,MAC5B;AACA,YAAM,QAAQ,gBAAgB,OAAO;AAAA,QACnC,CAAC,MAAM,EAAE,QAAQ,SAAS;AAAA,MAC5B;AACA,UAAI,OAAO;AACT,mBAAW,KAAK,KAAK;AAAA,MACvB;AACA,YAAM,WAAW,gBAAgB,OAAO;AAAA,QACtC,CAAC,MAAM,EAAE,QAAQ,SAAS;AAAA,MAC5B;AACA,UAAI,UAAU;AACZ,kBAAU,KAAK,QAAQ;AAAA,MACzB;AACA,YAAM,YAAY,gBAAgB,OAAO;AAAA,QACvC,CAAC,MAAM,EAAE,QAAQ,SAAS;AAAA,MAC5B;AACA,UAAI,WAAW;AACb,mBAAW,KAAK,SAAS;AAAA,MAC3B;AAAA,IACF;AAEA,WAAO;AAAA,MACL,kBACE,eAAe,IAAI,iBAAiB,EAAE,KAAK,GAAG,KAAK;AAAA,MACrD,6BACE,WAAW,IAAI,iBAAiB,EAAE,KAAK,GAAG,KAAK;AAAA,MACjD,mBACE,gBAAgB,IAAI,iBAAiB,EAAE,KAAK,GAAG,KAAK;AAAA,MACtD,sBACE,mBAAmB,IAAI,iBAAiB,EAAE,KAAK,GAAG,KAAK;AAAA,MACzD,6BACE,gBAAgB,IAAI,iBAAiB,EAAE,KAAK,GAAG,KAAK;AAAA,MACtD,uBACE,UAAU,IAAI,iBAAiB,EAAE,KAAK,GAAG,KAAK;AAAA,MAChD,wBACE,WAAW,IAAI,iBAAiB,EAAE,KAAK,GAAG,KAAK;AAAA,IACnD;AAAA,EACF;AAAA,EACA,QAAQ,CAAC,UAAU;AACjB,UAAM,MAAc,cAAM,OAAO,EAAE,SAAS,QAAQ,CAAC;AACrD,UAAM,cAAsB,cAAM,cAAc,UAAU,GAAG;AAC7D,UAAM,QAAQ,YAAY,SAAS;AAEnC,QAAI,CAAC,MAAO;AAEZ,UAAM,YAAY,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,YAAY;AACnE,UAAM,YAAY,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,YAAY;AACnE,UAAM,QAAQ,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,OAAO;AAE1D,UAAM,kBAAkB,kBAAkB,SAAS;AACnD,UAAM,kBAAkB,kBAAkB,SAAS;AACnD,UAAM,cAAc,kBAAkB,KAAK;AAE3C,WAAO;AAAA,MACL,uBAAuB;AAAA,MACvB,qBAAqB;AAAA,MACrB,sBAAsB;AAAA,MACtB,oBAAoB;AAAA,MACpB,uBAAuB;AAAA,MACvB,qBAAqB;AAAA,MACrB,sBAAsB;AAAA,MACtB,oBAAoB;AAAA,MACpB,uBAAuB;AAAA,MACvB,qBAAqB;AAAA,MACrB,sBAAsB;AAAA,MACtB,oBAAoB;AAAA,IACtB;AAAA,EACF;AAAA,EACA,iBAAiB,CAAC,UAAU;AAC1B,UAAM,MAAc,cAAM,OAAO,EAAE,SAAS,QAAQ,CAAC;AACrD,UAAM,cAAsB,cAAM,cAAc,iBAAiB,GAAG;AACpE,UAAM,QAAQ,YAAY,SAAS;AACnC,QAAI,CAAC,MAAO,QAAO;AAEnB,UAAM,aAAa,MAAM;AAAA,MACvB,CAAC,MAAM,EAAE,QAAQ,SAAS,WAAW,EAAE,OAAO,UAAU;AAAA,IAC1D;AACA,UAAM,uBACJ,eAAe,KAAK,QAAQ,MAAM,MAAM,GAAG,UAAU;AACvD,QAAI,qBACF,eAAe,KAAK,QAAQ,MAAM,MAAM,aAAa,CAAC;AACxD,QAAI,CAAC,mBAAmB,QAAQ;AAC9B,2BAAqB;AAAA,IACvB;AAEA,UAAM,yBAAyB,qBAAqB,IAAI,iBAAiB;AACzE,UAAM,uBAAuB,mBAAmB,IAAI,iBAAiB;AAErE,UAAM,kBAAkB,YAAY,sBAAsB;AAC1D,UAAM,gBAAgB,YAAY,oBAAoB;AAEtD,WAAO;AAAA,MACL,0BAA0B,GAAG,gBAAgB,OAAO,IAAI,cAAc,OAAO;AAAA,MAC7E,2BAA2B,GAAG,gBAAgB,QAAQ,IAAI,cAAc,QAAQ;AAAA,MAChF,6BAA6B,GAAG,gBAAgB,UAAU,IAAI,cAAc,UAAU;AAAA,MACtF,8BAA8B,GAAG,gBAAgB,WAAW,IAAI,cAAc,WAAW;AAAA,IAC3F;AAAA,EACF;AAAA,EACA,QAAQ,CAAC,UAAU;AACjB,UAAM,MAAc,cAAM,OAAO,EAAE,SAAS,QAAQ,CAAC;AACrD,UAAM,cAAsB,cAAM,cAAc,UAAU,GAAG;AAC7D,UAAM,QAAQ,YAAY,SAAS;AACnC,QAAI,CAAC,MAAO,QAAO;AAEnB,UAAM,cAAc,MAAM,IAAI,iBAAiB;AAC/C,UAAM,QAAQ,aAAa,WAAW;AAEtC,WAAO;AAAA,MACL,cAAc,MAAM;AAAA,MACpB,gBAAgB,MAAM;AAAA,MACtB,iBAAiB,MAAM;AAAA,MACvB,eAAe,MAAM;AAAA,IACvB;AAAA,EACF;AAAA,EACA,SAAS,CAAC,UAAU;AAClB,UAAM,MAAc,cAAM,OAAO,EAAE,SAAS,QAAQ,CAAC;AACrD,UAAM,cAAsB,cAAM,cAAc,WAAW,GAAG;AAC9D,UAAM,QAAQ,YAAY,SAAS;AACnC,QAAI,CAAC,MAAO,QAAO;AAEnB,UAAM,cAAc,MAAM,IAAI,iBAAiB;AAE/C,UAAM,QAAQ,aAAa,WAAW;AAEtC,WAAO;AAAA,MACL,eAAe,MAAM;AAAA,MACrB,iBAAiB,MAAM;AAAA,MACvB,kBAAkB,MAAM;AAAA,MACxB,gBAAgB,MAAM;AAAA,IACxB;AAAA,EACF;AACF;AAEA,SAAS,sBAAsB,UAAkB;AAC/C,QAAM,WAAuB,CAAC,UAAU;AACtC,UAAM,MAAc,cAAM,OAAO,EAAE,SAAS,QAAQ,CAAC;AACrD,UAAM,cAAsB,cAAM,cAAc,UAAU,GAAG;AAI7D,UAAM,SAAS,kBAAkB,YAAY,OAAO;AAEpD,WAAO;AAAA,MACL,CAAC,QAAQ,GAAG;AAAA,IACd;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,YAAY,OAKnB;AACA,QAAM,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI;AACzB,UAAQ,MAAM,QAAQ;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,aAAa;AAAA,MACf;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,aAAa;AAAA,MACf;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,aAAa;AAAA,MACf;AAAA,IACF;AACE,aAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,aAAa;AAAA,MACf;AAAA,EACJ;AACF;AACA,SAAS,aAAa,OAKpB;AACA,QAAM,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI;AACzB,UAAQ,MAAM,QAAQ;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,QACL,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,MAAM;AAAA,MACR;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,MAAM;AAAA,MACR;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,MAAM;AAAA,MACR;AAAA,IACF;AACE,aAAO;AAAA,QACL,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,MAAM;AAAA,MACR;AAAA,EACJ;AACF;AAEO,SAAS,kBAAkB,YAAsC;AACtE,SAAO,WAAW,QAAQ,CAAC,SAAS;AAClC,UAAM,WACJ,UAAU,KAAK,QAAQ,KAAK,sBAAsB,KAAK,QAAQ;AACjE,QAAI,CAAC,SAAU,QAAO,CAAC,IAAI;AAE3B,UAAM,WAAW,SAAS,KAAK,KAAK;AACpC,QAAI,CAAC,SAAU,QAAO,CAAC,IAAI;AAE3B,WAAO,OAAO,QAAQ,QAAQ,EAC3B,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,UAAU,MAAS,EAC5C,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;AAAA,MACtB,GAAG;AAAA,MACH,UAAU;AAAA,MACV;AAAA,IACF,EAAE;AAAA,EACN,CAAC;AACH;;;AEhSA,IAAM,eAAe;AACrB,IAAM,eACJ;AAEK,SAAS,cAAc;AAC5B,QAAM,iBAAiB,oBAAI,IAAqC;AAEhE,iBAAe,UACb,MACA,IACA,WACA;AACA,QAAI,CAAC,UAAW,QAAO;AAGvB,UAAM,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;AAI/B,QAAI,CAAC,aAAa,KAAK,OAAO,EAAG,QAAO;AAExC,UAAM,UAAoB,CAAC;AAC3B,QAAI;AACJ,YAAQ,QAAQ,aAAa,KAAK,IAAI,OAAO,MAAM;AACjD,cAAQ,KAAK,MAAM,CAAC,CAAC;AAAA,IACvB;AAEA,eAAW,aAAa,SAAS;AAE/B,UAAI,CAAC,UAAW;AAEhB,UAAI,CAAC,UAAU,SAAS,MAAM,EAAG;AAGjC,YAAM,WAAW,MAAM,KAAK,QAAQ,WAAW,EAAE;AACjD,UAAI,CAAC,SAAU;AAEf,YAAM,eAAe,SAAS,GAAG,MAAM,GAAG,EAAE,CAAC;AAE7C,UAAI,CAAC,aAAa,KAAK,YAAY,EAAG;AAEtC,UAAI;AAEF,cAAM,gBAAgB,MAAM,UAAU,cAAc,YAAY;AAChE,uBAAe,IAAI,cAAc,aAAa;AAAA,MAChD,SAAS,OAAO;AACd,gBAAQ,MAAM;AAAA,0BAAwB,YAAY,KAAK,KAAK;AAAA,MAC9D;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,gBAAgB,UAAU;AACrC;;;AClDA,IAAM,UAAU,CAAC,aACd;AAAA,EACC,WAAW;AAAA,EACX,OAAO;AAAA,EACP;AACF;AACF,IAAM,QAAQ,CAAC,WAAgB;AAAA,EAC7B,WAAW;AAAA,EACX;AACF;AAEO,SAAS,wBACd,MACA,gBACkB;AAClB,MAAI,CAAC,KAAM,QAAO,QAAQ,IAAI;AAC9B,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AACH,aAAO,wBAAwB,MAAM,cAAc;AAAA,IACrD,KAAK;AACH,aAAO,yBAAyB,MAAM,cAAc;AAAA,IACtD,KAAK;AACH,aAAO,mBAAmB,MAAM,cAAc;AAAA,IAChD,KAAK;AACH,aAAO,yBAAyB,MAAM,cAAc;AAAA,IACtD,KAAK;AACH,aAAO,oBAAoB,IAAI;AAAA,IACjC,KAAK;AACH,aAAO,uBAAuB,IAAI;AAAA,IACpC,KAAK;AACH,aAAO,yBAAyB,MAAM,cAAc;AAAA,IACtD,KAAK;AACH,aAAO,sBAAsB,IAAI;AAAA,IACnC,KAAK;AACH,aAAO,wBAAwB,MAAM,cAAc;AAAA,IACrD,KAAK;AACH,aAAO,wBAAwB,MAAM,cAAc;AAAA,IACrD;AACE,aAAO,QAAQ,IAAI;AAAA,EACvB;AACF;AAEA,SAAS,wBACP,MACA,gBACkB;AAClB,QAAM,WAAkB,CAAC;AACzB,aAAW,QAAQ,KAAK,UAAU;AAChC,QAAI,CAAC,KAAM,QAAO,QAAQ,IAAI;AAC9B,QAAI,KAAK,SAAS,iBAAiB;AACjC,YAAM,iBAAiB;AAAA,QACrB,KAAK;AAAA,QACL;AAAA,MACF;AACA,UAAI,eAAe,WAAW;AAC5B,iBAAS,KAAK,GAAG,eAAe,KAAK;AACrC;AAAA,MACF,OAAO;AACL,eAAO,QAAQ,eAAe,OAAO;AAAA,MACvC;AAAA,IACF;AACA,UAAM,SAAS,wBAAwB,MAAM,cAAc;AAC3D,QAAI,OAAO,WAAW;AACpB,eAAS,KAAK,OAAO,KAAK;AAAA,IAC5B,OAAO;AACL,aAAO,QAAQ,OAAO,OAAO;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO,MAAM,QAAQ;AACvB;AAEA,SAAS,yBACP,MACA,gBACkB;AAClB,QAAM,OAAO,wBAAwB,KAAK,MAAM,cAAc;AAC9D,QAAM,QAAQ,wBAAwB,KAAK,OAAO,cAAc;AAEhE,MAAI,CAAC,KAAK,UAAW,QAAO,QAAQ,KAAK,OAAO;AAChD,MAAI,CAAC,MAAM,UAAW,QAAO,QAAQ,MAAM,OAAO;AAElD,UAAQ,KAAK,UAAU;AAAA,IACrB,KAAK;AACH,aAAO,MAAM,KAAK,QAAQ,MAAM,KAAK;AAAA,IACvC,KAAK;AACH,aAAO,MAAM,KAAK,QAAQ,MAAM,KAAK;AAAA,IACvC,KAAK;AACH,aAAO,MAAM,KAAK,QAAQ,MAAM,KAAK;AAAA,IACvC,KAAK;AACH,aAAO,MAAM,KAAK,QAAQ,MAAM,KAAK;AAAA,IACvC,KAAK;AACH,aAAO,MAAM,KAAK,QAAQ,MAAM,KAAK;AAAA,IACvC,KAAK;AACH,aAAO,MAAM,KAAK,SAAS,MAAM,KAAK;AAAA,IACxC,KAAK;AACH,aAAO,MAAM,KAAK,QAAQ,MAAM,KAAK;AAAA,IACvC,KAAK;AACH,aAAO,MAAM,KAAK,QAAQ,MAAM,KAAK;AAAA,IACvC,KAAK;AACH,aAAO,MAAM,KAAK,SAAS,MAAM,KAAK;AAAA,IACxC,KAAK;AACH,aAAO,MAAM,KAAK,UAAU,MAAM,KAAK;AAAA,IACzC,KAAK;AACH,aAAO,MAAM,KAAK,SAAS,MAAM,KAAK;AAAA,IACxC,KAAK;AACH,aAAO,MAAM,KAAK,QAAQ,MAAM,KAAK;AAAA,IACvC,KAAK;AACH,aAAO,MAAM,KAAK,SAAS,MAAM,KAAK;AAAA,IACxC,KAAK;AACH,aAAO,MAAM,KAAK,UAAU,MAAM,KAAK;AAAA,IACzC,KAAK;AACH,aAAO,MAAM,KAAK,SAAS,MAAM,KAAK;AAAA,IACxC,KAAK;AACH,aAAO,MAAM,KAAK,UAAU,MAAM,KAAK;AAAA,IACzC,KAAK;AACH,aAAO,MAAM,KAAK,SAAS,MAAM,KAAK;AAAA,IACxC,KAAK;AACH,aAAO,MAAM,KAAK,iBAAiB,MAAM,KAAK;AAAA,IAChD,KAAK;AACH,aAAO,MAAM,KAAK,QAAQ,MAAM,KAAK;AAAA,IACvC,KAAK;AACH,aAAO,MAAM,KAAK,QAAQ,MAAM,KAAK;AAAA,IACvC,KAAK;AACH,aAAO,MAAM,KAAK,SAAS,MAAM,KAAK;AAAA,IACxC,KAAK;AACH,aAAO,MAAM,KAAK,SAAS,MAAM,KAAK;AAAA,IACxC;AACE,aAAO,QAAQ,IAAI;AAAA,EACvB;AACF;AAEA,SAAS,mBACP,MACA,gBACkB;AAClB,MAAI,KAAK,QAAQ,gBAAgB;AAC/B,WAAO,MAAM,eAAe,KAAK,IAAI,CAAC;AAAA,EACxC;AACA,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO,MAAM,MAAS;AAAA,EACxB;AACA,SAAO,QAAQ,IAAI;AACrB;AAEA,SAAS,yBACP,MACA,gBACkB;AAClB,QAAM,MAAM,wBAAwB,KAAK,QAAQ,cAAc;AAE/D,QAAM,eAAe,KAAK;AAC1B,MAAI;AACJ,MAAI,KAAK,UAAU;AACjB,eAAW,wBAAwB,cAAc,cAAc;AAAA,EACjE,OAAO;AACL,QAAI,aAAa,SAAS,cAAc;AACtC,iBAAW,MAAM,aAAa,IAAI;AAAA,IACpC,OAAO;AACL,aAAO,QAAQ,IAAI;AAAA,IACrB;AAAA,EACF;AAEA,MAAI,CAAC,IAAI,aAAa,CAAC,SAAS,UAAW,QAAO,QAAQ,IAAI;AAE9D,SAAO,MAAM,IAAI,MAAM,SAAS,KAAK,CAAC;AACxC;AAEA,SAAS,oBAAoB,MAAiD;AAC5E,SAAO,MAAM,IAAI;AACnB;AAEA,SAAS,uBACP,MACkB;AAClB,SAAO,MAAM,KAAK,KAAK;AACzB;AAEA,SAAS,yBACP,MACA,gBACkB;AAClB,MAAI,SAAc,CAAC;AAEnB,aAAW,YAAY,KAAK,YAAY;AACtC,YAAQ,SAAS,MAAM;AAAA,MACrB,KAAK;AACH,eAAO,QAAQ,QAAQ;AAAA,MACzB,KAAK,iBAAiB;AACpB,cAAM,SAAS;AAAA,UACb,SAAS;AAAA,UACT;AAAA,QACF;AACA,YAAI,OAAO,WAAW;AACpB,mBAAS;AAAA,YACP,GAAG;AAAA,YACH,GAAG,OAAO;AAAA,UACZ;AACA;AAAA,QACF,OAAO;AACL,iBAAO,QAAQ,QAAQ;AAAA,QACzB;AAAA,MACF;AAAA,MACA,KAAK,kBAAkB;AACrB,cAAM,UAAU,SAAS;AACzB,YAAI;AACJ,YAAI,SAAS,UAAU;AACrB,gBAAM,wBAAwB,SAAS,cAAc;AAAA,QACvD,OAAO;AACL,cAAI,QAAQ,SAAS,iBAAiB;AACpC,kBAAM,MAAM,QAAQ,KAAK;AAAA,UAC3B,WAAW,QAAQ,SAAS,cAAc;AACxC,kBAAM,MAAM,QAAQ,IAAI;AAAA,UAC1B,OAAO;AACL,mBAAO,QAAQ,QAAQ;AAAA,UACzB;AAAA,QACF;AACA,cAAM,QAAQ,wBAAwB,SAAS,OAAO,cAAc;AACpE,YAAI,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,MAAM;AACnC,iBAAO,QAAQ,QAAQ;AACzB,eAAO,IAAI,KAAK,IAAI,MAAM;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM,MAAM;AACrB;AAEA,SAAS,sBACP,MACkB;AAClB,SAAO,MAAM,KAAK,KAAK;AACzB;AAEA,SAAS,wBACP,MACA,gBACkB;AAClB,QAAM,kBAAkB,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,UAAU,EAAE,MAAM,GAAG;AAC5E,QAAM,cAAc,KAAK,YAAY;AAAA,IAAI,CAAC,MACxC,wBAAwB,GAAG,cAAc;AAAA,EAC3C;AACA,MAAI,YAAY,KAAK,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG;AACzC,WAAO,QAAQ,IAAI;AAAA,EACrB;AACA,QAAM,mBAAmB,YAAY,IAAI,CAAC,MAAM,EAAE,KAAK;AACvD,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC/C,cAAU,gBAAgB,CAAC;AAC3B,QAAI,IAAI,iBAAiB,QAAQ;AAC/B,UAAI,QAAQ,iBAAiB,CAAC;AAC9B,gBAAU;AAAA,IACZ;AAAA,EACF;AACA,SAAO,MAAM,MAAM;AACrB;AAEA,SAAS,wBACP,MACA,gBACkB;AAClB,QAAM,WAAW,wBAAwB,KAAK,UAAU,cAAc;AAEtE,MAAI,CAAC,SAAS,UAAW,QAAO,QAAQ,SAAS,OAAO;AAExD,UAAQ,KAAK,UAAU;AAAA,IACrB,KAAK;AACH,aAAO,MAAM,CAAC,SAAS,KAAK;AAAA,IAC9B,KAAK;AACH,aAAO,MAAM,CAAC,SAAS,KAAK;AAAA,IAC9B,KAAK;AACH,aAAO,MAAM,KAAK,SAAS,KAAK;AAAA,IAClC,KAAK;AACH,aAAO,MAAM,CAAC,SAAS,KAAK;AAAA,IAC9B,KAAK;AACH,aAAO,MAAM,CAAC,SAAS,KAAK;AAAA,IAC9B,KAAK;AACH,aAAO,MAAM,OAAO,SAAS,KAAK;AAAA,IACpC;AACE,aAAO,QAAQ,IAAI;AAAA,EACvB;AACF;;;AChQO,SAAS,gBACd,YACQ;AACR,MAAI,aAAa,WACd,OAAO,CAAC,YAAY,OAAO,YAAY,QAAQ,EAC/C,KAAK,GAAG,EACR,MAAM,KAAK;AAEd,MAAI,WAAW,uBAAO,OAAO,IAAI;AACjC,WAAS,aAAa,YAAY;AAChC,QAAI,UAAU,WAAW,GAAG,KAAK,UAAU,SAAS,GAAG,GAAG;AACxD,eAAS,UAAU,MAAM,GAAG,EAAE,CAAC,CAAE,IAAI;AAAA,IACvC,OAAO;AACL,eAAS,SAAS,IAAI;AAAA,IACxB;AAAA,EACF;AAEA,SAAO,OAAO,OAAO,QAAQ,EAAE,KAAK,GAAG;AACzC;;;AC/CO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,mBAAmB,WAAW,IAAI,CAAC,cAAc;AACrD,WAAO,cAAc,iBAAiB,SAAS,CAAC;AAAA,EAClD,OAAO,QAAQ,SAAS,EACvB;AAAA,MACC,CAAC,CAAC,KAAKA,WAAU,MAAM,KAAK,GAAG;AAAA,EACjCA,YAAW,IAAI,CAAC,SAAS,OAAO,KAAK,QAAQ,KAAK,KAAK,KAAK,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA,IAE3E,EACC,KAAK,IAAI,CAAC;AAAA;AAAA,EAEX,CAAC;AAED,QAAM,OAAO,gBAAgB,YAAY,CAAC,CAAC;AAC3C,QAAM,eAAe,oBAAoB,MAAM,oBAAoB;AACnE,SAAO,mBAAmB,OAAO;AACnC;AAEA,SAAS,oBACP,MACA,sBACA,SAAS,GACD;AACR,QAAM,eAAe,KAAK,MACvB,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,cAAc,EAAE,KAAK,CAAC,EAC7C,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,cAAc,EAAE,QAAQ,CAAC,EACnD,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,SAAS,EAAE,SAAS,MAAM,EACpD,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,SAAS,EAAE,QAAQ,MAAM,EAClD,IAAI,CAAC,SAAS;AACb,UAAM,YAAY,qBAAqB,IAAI;AAC3C,WAAO,GAAG,MAAM,MAAM,CAAC,GAAG,KAAK,SAAS,WAAW,KAAK,MAAM,SAAS,CAAC,MAAM,KAAK,QAAQ,KAAK,KAAK,KAAK;AAAA,EAC5G,CAAC,EACA,KAAK,IAAI;AAEZ,QAAM,kBAAkB,KAAK,SAC1B,IAAI,CAACC,UAAS;AACb,WAAO,GAAG,MAAM,MAAM,CAAC,GAAGA,MAAK,MAAM;AAAA,EACzC,oBAAoBA,OAAM,sBAAsB,SAAS,CAAC,CAAC;AAAA,EAC3D,MAAM,MAAM,CAAC;AAAA,EACX,CAAC,EACA,KAAK,IAAI;AAEZ,SAAO,CAAC,cAAc,eAAe,EAAE,OAAO,OAAO,EAAE,KAAK,MAAM;AACpE;AAEA,SAAS,MAAM,SAAS,GAAG;AACzB,SAAO,GAAG,OAAO,SAAS,GAAG,GAAG;AAClC;AAQA,SAAS,gBAAgB,YAAyB,cAAwB;AACxE,QAAM,qBAAqB,WAAW;AAAA,IACpC,CAAC,MAAM,EAAE,QAAQ,WAAW,aAAa;AAAA,EAC3C;AAEA,QAAM,iBAAiB,WACpB,IAAI,CAAC,MAAM,EAAE,QAAQ,aAAa,MAAM,CAAC,EACzC,OAAO,OAAO;AAEjB,QAAM,iBAAiB,IAAI,IAAI,cAAc;AAE7C,QAAM,OAAsB;AAAA,IAC1B,QAAQ,aAAa,SACjB,aAAa,aAAa,SAAS,CAAC,IACpC;AAAA,IACJ,OAAO;AAAA,IACP,UAAU,CAAC,GAAG,cAAc,EAAE;AAAA,MAAI,CAAC,WACjC;AAAA,QACE,WAAW,OAAO,CAAC,MAAM,EAAE,QAAQ,aAAa,MAAM,MAAM,MAAM;AAAA,QAClE,CAAC,GAAG,cAAc,MAAM;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;AC3FA,IAAM,WAAW;AACjB,IAAM,kBAAkB,SAAS;AAEjC,SAAS,SAAS,QAAgB;AAChC,SAAO,SAAS,SAAS,CAAC;AAC5B;AAMO,SAAS,YAAY,QAAwB;AAClD,MAAI,SAAS;AACb,MAAI,UAAU;AAEd,SAAO,UAAU,GAAG;AAClB,aAAS,SAAS,SAAS,UAAU,mBAAmB,eAAe;AACvE,cAAU,KAAK,OAAO,UAAU,KAAK,eAAe;AAAA,EACtD;AAEA,SAAO;AACT;AASO,IAAM,cAAc,CAAC;AAAA;AAAA,EAE1B,MAAM,SAAS,GAAG,IACd;AAAA;AAAA,IAEA,MAAM,QAAQ,UAAU,CAAC,YAAY,MAAM,QAAQ,YAAY,CAAC;AAAA;AAAA;;;AC/BtE,SAAS,YAAY,OAAoB;AACvC,SAAO,MAAM,OAAO,CAAC,GAAG,GAAG,QAAQ;AACjC,UAAM,aAAa,IAAI;AAAA,MACrB,CAAC,OAAO,GAAG,aAAa,EAAE,YAAY,GAAG,UAAU,EAAE;AAAA,IACvD;AACA,QAAI,eAAe,EAAG,QAAO;AAC7B,WAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,iBAAiB,OAAyB;AACjD,SAAO,MAAM,OAAO,CAAC,GAAG,GAAG,QAAQ;AACjC,UAAM,aAAa,IAAI;AAAA,MACrB,CAAC,OAAO,KAAK,UAAU,EAAE,MAAM,KAAK,UAAU,CAAC;AAAA,IACjD;AACA,QAAI,eAAe,EAAG,QAAO;AAC7B,WAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,2BAA2B;AAClC,MAAI,aAAa;AACjB,MAAI,+BAA+B,oBAAI,IAAoB;AAE3D,WAAS,sBAAsB;AAC7B,WAAO,MAAM,YAAY,YAAY;AAAA,EACvC;AAEA,WAAS,iBAAiB,MAAsB;AAC9C,UAAM,eAAe,KAAK,UAAU,IAAI;AAExC,QAAI,kBAAkB,6BAA6B,IAAI,YAAY;AACnE,QAAI,CAAC,iBAAiB;AACpB,wBAAkB,oBAAoB;AACtC,mCAA6B,IAAI,cAAc,eAAe;AAAA,IAChE;AAEA,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,iBAAiB;AAC5B;AAEA,SAAS,kCAAkC;AACzC,MAAI,qBAAqB;AACzB,MAAI,6BAA6B,oBAAI,IAAoB;AAEzD,WAAS,6BAA6B;AACpC,WAAO,YAAY,oBAAoB;AAAA,EACzC;AAEA,WAAS,wBAAwB,MAAiB;AAChD,QAAI,EAAE,UAAU,UAAU,QAAQ,IAAI;AACtC,UAAM,eAAe,CAAC,UAAU,UAAU,GAAG,OAAO,EAAE,KAAK,KAAK;AAEhE,QAAI,kBAAkB,2BAA2B,IAAI,YAAY;AACjE,QAAI,CAAC,iBAAiB;AACpB,wBAAkB,2BAA2B;AAC7C,iCAA2B,IAAI,cAAc,eAAe;AAAA,IAC9D;AAEA,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,wBAAwB;AACnC;AAEA,SAAS,+BAA+B;AACtC,MAAI,oBAAoB,oBAAI,IAAoB;AAChD,WAAS,mBAAmB,cAAsB;AAChD,WAAO,kBAAkB,IAAI,YAAY,KAAK;AAAA,EAChD;AACA,WAAS,yBAAyB,cAAsB;AACtD,sBAAkB,IAAI,cAAc,mBAAmB,YAAY,IAAI,CAAC;AAAA,EAC1E;AACA,MAAI,yBAIA,CAAC;AACL,WAAS,8BACP,cACA,WACoB;AACpB,WAAO,uBAAuB,YAAY,IAAI,SAAS;AAAA,EACzD;AACA,WAAS,qBACP,cACA,WACA,mBACA;AACA,QAAI,CAAC,uBAAuB,YAAY,GAAG;AACzC,6BAAuB,YAAY,IAAI,CAAC;AAAA,IAC1C;AACA,2BAAuB,YAAY,EAAE,SAAS,IAAI;AAAA,EACpD;AACA,WAAS,wBAAwB,cAAsB;AACrD,UAAM,MAAM,mBAAmB,YAAY;AAC3C,UAAM,oBAAoB,YAAY,GAAG;AACzC,6BAAyB,YAAY;AACrC,WAAO;AAAA,EACT;AAEA,WAAS,qBAAqB,MAAiB,cAAsB;AACnE,QAAI,EAAE,MAAM,IAAI;AAEhB,UAAM,YAAY;AAClB,QAAI,oBAAoB;AAAA,MACtB;AAAA,MACA;AAAA,IACF;AACA,QAAI,CAAC,mBAAmB;AACtB,0BAAoB,wBAAwB,YAAY;AACxD,2BAAqB,cAAc,WAAW,iBAAiB;AAAA,IACjE;AACA,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,qBAAqB;AAChC;AAEO,SAAS,mBAAmB;AACjC,MAAI,QAAqB,CAAC;AAC1B,MAAI,aAA+B,CAAC;AAEpC,QAAM,EAAE,wBAAwB,IAAI,gCAAgC;AACpE,QAAM,EAAE,qBAAqB,IAAI,6BAA6B;AAC9D,QAAM,EAAE,iBAAiB,IAAI,yBAAyB;AAEtD,WAAS,qBAAqB,MAAiB;AAC7C,QAAI,uBAAuB,wBAAwB,IAAI;AACvD,QAAI,oBAAoB,qBAAqB,MAAM,oBAAoB;AAEvE,UAAM,YAAY,MAAM,uBAAuB,MAAM;AAErD,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,WAAW,MAAM,MAAM;AAAA,IACvB,UAAU,CAAC,MAAmB;AAC5B,YAAM,KAAK,GAAG,CAAC;AACf,cAAQ,YAAY,KAAK;AAAA,IAC3B;AAAA,IACA,eAAe,CAAC,MAAmB;AACjC,YAAM,KAAK,GAAG,CAAC;AACf,cAAQ,YAAY,KAAK;AACzB,aAAO,gBAAgB,EAAE,IAAI,oBAAoB,CAAC;AAAA,IACpD;AAAA,IACA,kBAAkB,CAAC,aAA6B;AAC9C,iBAAW,KAAK,QAAQ;AACxB,mBAAa,iBAAiB,UAAU;AACxC,aAAO,iBAAiB,QAAQ;AAAA,IAClC;AAAA,IACA,mBAAmB,MAAM;AACvB,aAAO,gBAAgB;AAAA,QACrB;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;AC7JA,SAAS,mBAAmB,GAAW,GAAW;AAChD,MAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AACpB,QAAI,EAAE,SAAS,GAAG,GAAG;AACnB,UAAI,KAAK,CAAC;AAAA,IACZ,OAAO;AACL,UAAI,YAAY,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG;AAC5C,YAAI,KAAK,CAAC;AAAA,MACZ,OAAO;AACL,YAAI,IAAI,CAAC;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACA,QAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAEpC,SAAO;AACT;AAEO,SAAS,cAAc,GAAW,IAAsB;AAC7D,QAAM,UAAU,GAAG,MAAM,MAAM;AAC/B,SAAO,QAAQ,IAAI,CAAC,MAAM,mBAAmB,GAAG,EAAE,KAAK,CAAC,CAAC;AAC3D;AAKO,SAAS,eACd,QACA,QACA,gBAA0B,CAAC,GAC3B;AACA,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,YAAM,QAAQ,OAAO,GAAG;AACxB,UAAI,CAAC,SAAS,cAAc,SAAS,GAAG,GAAG;AACzC,eAAO;AAAA,UACL;AAAA,YACE;AAAA,YACA,OAAO,UAAU,WACb,eAAe,OAAO,QAAQ,aAAa,IAC3C;AAAA,UACN;AAAA,QACF;AAAA,MACF;AACA,YAAM,YAAY,MAAM,KAAK;AAC7B,aAAO,OAAO,QAAQ,SAAS,EAAE,IAAI,CAAC,CAACC,MAAKC,MAAK,MAAM;AAAA,QACrDD;AAAA,QACA,OAAOC,WAAU,WACb,eAAeA,QAAO,QAAQ,CAAC,GAAG,eAAeD,IAAG,CAAC,IACrDC;AAAA,MACN,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAIO,SAAS,cAAc,QAAqB,OAAc;AAC/D,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAC3C,cAAQ,OAAO,UAAU,WAAW,cAAc,OAAO,KAAK,IAAI;AAClE,UAAI,IAAI,WAAW,GAAG,GAAG;AACvB,cAAM,YAAY,MAAM,IAAI,MAAM,CAAC,CAAC;AACpC,YAAI,WAAW;AACb,gBAAM,SAAS,UAAU,SAAS;AAClC,iBAAO,CAAC,QAAQ,KAAK;AAAA,QACvB;AAAA,MACF;AACA,aAAO,CAAC,KAAK,KAAK;AAAA,IACpB,CAAC;AAAA,EACH;AACF;AAEO,SAAS,mBACd,QACA,WAAW,KACX,UAAoB,CAAC,GACR;AACb,SAAO,OAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,QAAI,OAAO,UAAU,UAAU;AAC7B,UAAI,IAAI,WAAW,GAAG,GAAG;AACvB,YAAI,YAAY;AAChB,eAAO,mBAAmB,OAAO,UAAU,CAAC,GAAG,SAAS,SAAS,CAAC;AAAA,MACpE;AAEA,UAAI,gBAAgB,cAAc,UAAU,GAAG;AAC/C,aAAO,cAAc,QAAQ,CAAC,iBAAiB;AAC7C,eAAO,mBAAmB,OAAsB,cAAc,OAAO;AAAA,MACvE,CAAC;AAAA,IACH;AAEA,UAAM,WAAW,YAAY,GAAG;AAEhC,QAAI,OAAO,UAAU,UAAU;AAC7B,UAAI,cAAc,QAAQ,GAAG;AAC3B,gBAAQ,MAAM,SAAS;AAAA,MACzB,OAAO;AACL,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AAEA,YAAQ,MAAM,KAAK;AACnB,QAAI,YAAY;AAChB,QAAI,MAAM,SAAS,YAAY,GAAG;AAChC,kBAAY;AACZ,cAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,aAAa,MAAM;AAAA,IAC3D;AAEA,WAAO;AAAA,MACL;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAGO,IAAM,gBAAwC;AAAA,EACnD,6BAA6B;AAAA,EAC7B,gBAAgB;AAAA,EAChB,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,MAAM;AAAA,EACN,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,MAAM;AAAA,EACN,sBAAsB;AAAA;AAAA,EAGtB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,gBAAgB;AAClB;;;ATlKA,SAAS,2BAA2B;AAAA,EAClC;AACF,GAEqB;AACnB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,MACP,kBAAkB,MAAM;AACtB,YAAI,KAAK,KAAK,OAAO,MAAM,SAAS,MAAM,GAAG;AAC3C,iCAAuB;AAAA,YACrB,QAAQ,KAAK,KAAK,OAAO;AAAA,YACzB,YAAY,KAAK,KAAK,WAAW,IAAI,CAAC,eAAe;AAAA,cACnD,UACE,UAAU,SAAS,oBACf,UAAU,SAAS,SAAS,kBAC1B,UAAU,SAAS,QACnB,UAAU,SAAS,OACrB,UAAU,MAAM;AAAA,cACtB,OAAO,UAAU,MAAM;AAAA,YACzB,EAAE;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,0BAA0B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKqB;AACnB,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,QAAM,eAAe,OAAO,gBAAgB;AAE5C,MAAI,iBAAiB;AAAA,IACnB,GAAG;AAAA,EACL;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA;AAAA,MAEP,qBAAqB;AAAA,QACnB,KAAK,MAAM;AACT,gBAAM,SAAS,KAAK;AACpB,gBAAM,aACJ,OAAO,UAAU,KAChB,OAAO,yBAAyB,KAC/B,OAAO,WAAW,UAAU;AAEhC,cAAI,CAAC,WAAY;AACjB,gBAAM,OAAO,KAAK;AAElB,cAAI,KAAK,SAAS,QAAS;AAE3B,mBAAS,cAAc,KAAK,cAAc;AACxC,kBAAM,OAAO;AAAA,cACX,WAAW;AAAA,cACX;AAAA,YACF;AACA,gBAAI,KAAK,WAAW;AAClB,oBAAM,KAAK,WAAW;AACtB,kBAAI,GAAG,SAAS,cAAc;AAI5B,+BAAe,GAAG,IAAI,IAAI,KAAK;AAAA,cACjC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,kBAAkB,MAAM;AACtB,YAAI,KAAK,KAAK,OAAO,UAAU,OAAO,WAAY;AAClD,cAAM,uBAAuB,KAAK,KAAK,WAAW,KAAK,CAAC,cAAc;AACpE,iBACE,UAAU,SAAS,qBACnB,UAAU,SAAS,SAAS,gBAC5B,UAAU,SAAS,SAAS;AAAA,QAEhC,CAAC;AACD,YAAI,sBAAsB;AACxB,iCAAuB,qBAAqB,MAAM;AAAA,QACpD;AACA,cAAM,6BAA6B,KAAK,KAAK,WAAW;AAAA,UACtD,CAAC,cAAc;AACb,mBACE,UAAU,SAAS,qBACnB,UAAU,SAAS,SAAS,gBAC5B,UAAU,SAAS,SAAS;AAAA,UAEhC;AAAA,QACF;AACA,YAAI,4BAA4B;AAC9B,uCAA6B,2BAA2B,MAAM;AAAA,QAChE;AACA,cAAM,0BAA0B,KAAK,KAAK,WAAW;AAAA,UACnD,CAAC,cAAc;AACb,mBACE,UAAU,SAAS,qBACnB,UAAU,SAAS,SAAS,gBAC5B,UAAU,SAAS,SAAS;AAAA,UAEhC;AAAA,QACF;AACA,YAAI,yBAAyB;AAC3B,oCAA0B,wBAAwB,MAAM;AAAA,QAC1D;AACA,cAAM,4BAA4B,KAAK,KAAK,WAAW;AAAA,UACrD,CAAC,cAAc;AACb,mBACE,UAAU,SAAS,qBACnB,UAAU,SAAS,SAAS,gBAC5B,UAAU,SAAS,SAAS;AAAA,UAEhC;AAAA,QACF;AACA,YAAI,2BAA2B;AAC7B,sCAA4B,0BAA0B,MAAM;AAAA,QAC9D;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,KAAK,MAAM;AACT,cACE,MAAM,MAAM,aAAa,KAAK,KAAK,QAAQ;AAAA,YACzC,MAAM;AAAA,UACR,CAAC,GACD;AACA,kBAAM,OAAO,KAAK,KAAK;AACvB,gBAAI,KAAK,WAAW,EAAG;AACvB,kBAAM,WAAW,KAAK,CAAC;AACvB,gBAAI,SAAS,SAAS,mBAAoB;AAE1C,kBAAM,oBAAoB;AAAA,cACxB;AAAA,cACA;AAAA,YACF;AACA,gBAAI,cAAc,kBAAkB;AACpC,gBAAI,CAAC,kBAAkB,WAAW;AAChC,oBAAM,IAAI;AAAA,gBACR,oCAAoC,SAAS,KAAK,MAAM;AAAA,cAC1D;AAAA,YACF;AAEA,kBAAM,gBAAgB,+BAA+B,WAAW;AAEhE,iBAAK,YAAY;AAAA,cACf,MAAM;AAAA,cACN,OAAO;AAAA,YACT,CAAC;AAAA,UACH;AAEA,cACE,MAAM,MAAM,aAAa,KAAK,KAAK,QAAQ;AAAA,YACzC,MAAM;AAAA,UACR,CAAC,GACD;AACA,kBAAM,OAAO,KAAK,KAAK;AACvB,gBAAI,KAAK,WAAW,EAAG;AACvB,kBAAM,WAAW,KAAK,CAAC;AACvB,gBAAI,SAAS,SAAS,mBAAoB;AAE1C,kBAAM,oBAAoB;AAAA,cACxB;AAAA,cACA;AAAA,YACF;AACA,gBAAI,cAAc,kBAAkB;AACpC,gBAAI,CAAC,kBAAkB,WAAW;AAChC,oBAAM,IAAI;AAAA,gBACR,8BAA8B,SAAS,KAAK,MAAM;AAAA,cACpD;AAAA,YACF;AAEA,kBAAM,aAAa,wBAAwB,WAAW;AAEtD,iBAAK,YAAY;AAAA,cACf,MAAM;AAAA,cACN,OAAO;AAAA,YACT,CAAC;AAAA,UACH;AAEA,cACE,MAAM,MAAM,aAAa,KAAK,KAAK,QAAQ;AAAA,YACzC,MAAM;AAAA,UACR,CAAC,GACD;AACA,kBAAM,OAAO,KAAK,KAAK;AACvB,gBAAI,KAAK,WAAW,EAAG;AACvB,kBAAM,YAAY,KAAK,CAAC;AACxB,gBAAI,UAAU,SAAS,mBAAoB;AAE3C,kBAAM,qBAAqB,CACzB,SACuB;AACvB,kBAAI,KAAK,SAAS,iBAAkB,QAAO;AAC3C,oBAAM,MAAM,KAAK;AACjB,kBAAI,IAAI,SAAS,aAAc,QAAO,IAAI;AAC1C,kBAAI,IAAI,SAAS,gBAAiB,QAAO,IAAI;AAC7C,qBAAO;AAAA,YACT;AAEA,kBAAM,uBAAuB,CAC3B,MACA,SACG;AACH,oBAAM,SAAS,wBAAwB,MAAM,cAAc;AAC3D,kBAAI,CAAC,OAAO,WAAW;AACrB,sBAAM,IAAI;AAAA,kBACR,sBAAsB,IAAI,QAAQ,KAAK,KAAK,MAAM;AAAA,gBACpD;AAAA,cACF;AACA,qBAAO,wBAAwB,OAAO,KAAK;AAAA,YAC7C;AAIA,kBAAM,iBACJ,CAAC;AACH,gBAAI;AACJ,gBAAI;AAIJ,uBAAW,QAAQ,UAAU,YAAY;AACvC,oBAAM,UAAU,mBAAmB,IAAI;AACvC,kBAAI,YAAY,cAAc,KAAK,SAAS,kBAAkB;AAC5D,mCAAmB;AAAA,cACrB,WAAW,YAAY,mBAAmB;AACxC,0CAA0B;AAAA,cAC5B,OAAO;AACL,+BAAe,KAAK,IAAI;AAAA,cAC1B;AAAA,YACF;AAEA,kBAAM,gBACJ,CAAC;AAGH,kBAAM,iBAAiB;AAAA,cACrB,MAAM,MAAM,iBAAiB,cAAc;AAAA,cAC3C;AAAA,YACF;AACA,0BAAc;AAAA,cACZ,MAAM,MAAM;AAAA,gBACV,MAAM,MAAM,WAAW,MAAM;AAAA,gBAC7B,MAAM,MAAM,cAAc,cAAc;AAAA,cAC1C;AAAA,YACF;AAGA,gBAAI,kBAAkB;AACpB,kBAAI,iBAAiB,MAAM,SAAS,oBAAoB;AACtD,sBAAM,mBACJ,CAAC;AACH,2BAAW,SAAS,iBAAiB,MAAM,YAAY;AACrD,sBACE,MAAM,SAAS,oBACf,MAAM,MAAM,SAAS,oBACrB;AACA,qCAAiB,KAAK,KAAK;AAC3B;AAAA,kBACF;AACA,wBAAM,mBACJ,CAAC;AACH,6BAAW,WAAW,MAAM,MAAM,YAAY;AAC5C,wBACE,QAAQ,SAAS,oBACjB,QAAQ,MAAM,SAAS,oBACvB;AACA,uCAAiB,KAAK,OAAO;AAC7B;AAAA,oBACF;AACA,0BAAM,oBAAoB;AAAA,sBACxB,QAAQ;AAAA,sBACR;AAAA,oBACF;AACA,qCAAiB;AAAA,sBACf,MAAM,MAAM;AAAA,wBACV,QAAQ;AAAA,wBACR,MAAM,MAAM,cAAc,iBAAiB;AAAA,wBAC3C,QAAQ;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AACA,mCAAiB;AAAA,oBACf,MAAM,MAAM;AAAA,sBACV,MAAM;AAAA,sBACN,MAAM,MAAM,iBAAiB,gBAAgB;AAAA,sBAC7C,MAAM;AAAA,oBACR;AAAA,kBACF;AAAA,gBACF;AACA,8BAAc;AAAA,kBACZ,MAAM,MAAM;AAAA,oBACV,MAAM,MAAM,WAAW,UAAU;AAAA,oBACjC,MAAM,MAAM,iBAAiB,gBAAgB;AAAA,oBAC7C,iBAAiB;AAAA,kBACnB;AAAA,gBACF;AAAA,cACF,OAAO;AACL,8BAAc,KAAK,gBAAgB;AAAA,cACrC;AAAA,YACF;AAGA,gBAAI,yBAAyB;AAC3B,4BAAc,KAAK,uBAAuB;AAAA,YAC5C;AAEA,iBAAK,CAAC,IAAI,MAAM,MAAM,iBAAiB,aAAa;AAAA,UACtD;AAEA,cACE,MAAM,MAAM,aAAa,KAAK,KAAK,QAAQ;AAAA,YACzC,MAAM;AAAA,UACR,CAAC,GACD;AACA,kBAAM,OAAO,KAAK,KAAK;AACvB,gBAAI,KAAK,WAAW,EAAG;AACvB,kBAAM,WAAW,KAAK,CAAC;AACvB,gBAAI,SAAS,SAAS,mBAAoB;AAG1C,kBAAM,gBACJ,CAAC;AACH,uBAAW,QAAQ,SAAS,YAAY;AACtC,kBACE,KAAK,SAAS,oBACd,KAAK,MAAM,SAAS,oBACpB;AACA,8BAAc,KAAK,IAAI;AACvB;AAAA,cACF;AACA,oBAAM,oBAAoB;AAAA,gBACxB,KAAK;AAAA,gBACL;AAAA,cACF;AACA,kBAAI,CAAC,kBAAkB,WAAW;AAChC,sBAAM,IAAI;AAAA,kBACR,mCAAmC,KAAK,MAAM,KAAK,MAAM;AAAA,gBAC3D;AAAA,cACF;AACA,oBAAM,aAAa;AAAA,gBACjB,kBAAkB;AAAA,cACpB;AACA,4BAAc;AAAA,gBACZ,MAAM,MAAM;AAAA,kBACV,KAAK;AAAA,kBACL,MAAM,MAAM,cAAc,UAAU;AAAA,kBACpC,KAAK;AAAA,gBACP;AAAA,cACF;AAAA,YACF;AAEA,iBAAK,YAAY,MAAM,MAAM,iBAAiB,aAAa,CAAC;AAAA,UAC9D;AAAA,QACF;AAAA,MACF;AAAA,MACA,aAAa,MAAM,OAAO;AACxB,YACE,KAAK,KAAK,QACV,KAAK,KAAK,KAAK,SAAS,mBACxB,KAAK,KAAK,KAAK,SAAS,OACxB;AACA,gBAAM,QAAQ,KAAK,KAAK;AACxB,cAAI,OAAO,SAAS,yBAA0B;AAE9C,gBAAM,aAAa,MAAM;AAEzB,kBAAQ,WAAW,MAAM;AAAA,YACvB,KAAK,oBAAoB;AACvB,oBAAM,oBAAoB;AAAA,gBACxB;AAAA,gBACA;AAAA,cACF;AACA,kBAAI,cAAc,kBAAkB;AACpC,kBAAI,CAAC,kBAAkB,WAAW;AAChC,sBAAM,UAAU,kBAAkB;AAClC,oBAAI,SAAS;AACX,wBAAM,EAAE,OAAO,IAAI,IAAI;AACvB,wBAAM,UAAU,MAAM,KAAK,KAAK,MAAM,OAAO,GAAG;AAChD,0BAAQ,MAAM,6BAA6B,OAAO,IAAI;AACtD;AAAA,gBACF,OAAO;AACL,0BAAQ;AAAA,oBACN,8BAA8B,WAAW,KAAK,MAAM;AAAA,kBACtD;AACA;AAAA,gBACF;AAAA,cACF;AACA,oBAAM,aAAa,wBAAwB,WAAW;AAEtD,mBAAK,KAAK,KAAK,OAAO;AACtB,mBAAK,KAAK,QAAQ;AAAA,gBAChB,MAAM;AAAA,gBACN,OAAO;AAAA,cACT;AACA;AAAA,YACF;AAAA,YACA,KAAK,mBAAmB;AACtB,oBAAM,WAAW,WAAW;AAC5B,oBAAM,oBAAoB;AAAA,gBACxB;AAAA,gBACA;AAAA,gBACA,OAAO,cAAc;AAAA,cACvB;AAEA,oBAAM,kBAA4C,CAAC;AAEnD,yBAAW,WAAW,UAAU;AAC9B,oBAAI,SAAS;AAIX,sBAAI,QAAQ,SAAS,oBAAoB;AACvC,0BAAM,oBAAoB;AAAA,sBACxB;AAAA,sBACA;AAAA,oBACF;AACA,wBAAI,kBAAkB,WAAW;AAC/B,0BAAI,cAAc,kBAAkB;AACpC,4BAAM,aAAa,wBAAwB,WAAW;AACtD,sCAAgB;AAAA,wBACd,MAAM,MAAM,cAAc,UAAU;AAAA,sBACtC;AAAA,oBACF;AAAA,kBACF,WACE,QAAQ,SAAS,uBACjB,QAAQ,aAAa,QACrB,QAAQ,MAAM,SAAS,oBACvB;AACA,0BAAM,oBAAoB;AAAA,sBACxB,QAAQ;AAAA,sBACR;AAAA,oBACF;AACA,wBAAI,kBAAkB,WAAW;AAC/B,0BAAI,cAAc,kBAAkB;AACpC,4BAAM,aAAa,wBAAwB,WAAW;AACtD,sCAAgB;AAAA,wBACd,MAAM,MAAM;AAAA,0BACV;AAAA,0BACA,QAAQ;AAAA,0BACR,MAAM,MAAM,cAAc,UAAU;AAAA,wBACtC;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF,WACE,QAAQ,SAAS,2BACjB,QAAQ,WAAW,SAAS,sBAC5B,QAAQ,UAAU,SAAS,oBAC3B;AACA,0BAAM,mBAAmB;AAAA,sBACvB,QAAQ;AAAA,sBACR;AAAA,oBACF;AACA,0BAAM,kBAAkB;AAAA,sBACtB,QAAQ;AAAA,sBACR;AAAA,oBACF;AACA,wBACE,iBAAiB,aACjB,gBAAgB,WAChB;AACA,4BAAM,aAAa;AAAA,wBACjB,iBAAiB;AAAA,sBACnB;AACA,4BAAM,sBAAsB;AAAA,wBAC1B,gBAAgB;AAAA,sBAClB;AACA,sCAAgB;AAAA,wBACd,MAAM,MAAM;AAAA,0BACV,QAAQ;AAAA,0BACR,MAAM,MAAM,cAAc,UAAU;AAAA,0BACpC,MAAM,MAAM,cAAc,mBAAmB;AAAA,wBAC/C;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF,WAAW,QAAQ,SAAS,iBAAiB;AAC3C,oCAAgB,KAAK,OAAO;AAAA,kBAC9B;AAAA,gBACF;AAAA,cACF;AAEA,mBAAK,KAAK,KAAK,OAAO;AACtB,oBAAM,aAAa,MAAM,MAAM,eAAe,mBAAmB;AAAA,gBAC/D,MAAM,MAAM,gBAAgB,eAAe;AAAA,cAC7C,CAAC;AAED;AAAA,YACF;AAAA,YACA,SAAS;AACP,mBAAK,KAAK,KAAK,OAAO;AAAA,YACxB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AASA,IAAM,aAAa,iBAAiB;AAC7B,SAAS,cACd,SAAuB,EAAE,YAAY,sBAAsB,GACjD;AACV,QAAM,EAAE,QAAQ,kBAAkB,QAAQ,aAAa,IACrD,uBAAuB,UAAU;AAEnC,MAAI,YAAkC;AACtC,QAAM,EAAE,gBAAgB,WAAW,mBAAmB,IAAI,YAAY;AAEtE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,MAAM;AAAA;AAAA,MAGN,gBAAgB,QAAQ;AACtB,oBAAY;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,UAAU,KAAK;AACb,cAAM,YAAY,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC;AACvC,YAAI,CAAC,aAAa,KAAK,SAAS,EAAG;AAEnC,cAAM,SAAS,IAAI,UAAU;AAC7B,YAAI,CAAC,QAAQ,aAAc;AAE3B,mBAAW,OAAO,OAAO,OAAO,OAAO,YAAY,GAAG;AACpD,qBAAW,OAAO,IAAI,YAAY,iBAAiB,SAAS,KAC1D,CAAC,GAAG;AACJ,gBAAI,YAAY,iBAAiB,GAAG;AAAA,UACtC;AAAA,QACF;AAAA,MACF;AAAA;AAAA,MAGA,SAAS;AAAA,MAET,MAAM,UAAU,MAAM,IAAI;AACxB,cAAM,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;AAC/B,cAAM,mBAAmB,KAAK,IAAI,EAAE,MAAM,IAAI,SAAS;AACvD,cAAM,aAAa,WAAW,UAAU;AACxC,YAAI,CAAC,aAAa,KAAK,OAAO,GAAG;AAC/B,iBAAO;AAAA,QACT;AACA,YAAI,GAAG,SAAS,cAAc,GAAG;AAC/B,iBAAO;AAAA,QACT;AAEA,YAAI,CAAC,KAAK,SAAS,KAAK,GAAG;AACzB,iBAAO;AAAA,QACT;AAEA,cAAM,eACJ,QAAQ,SAAS,MAAM,KAAK,QAAQ,SAAS,KAAK;AAEpD,cAAM,0BAA+C,CAAC;AAEtD,cAAM,uBAAuB,YAAY;AACvC,gBAAM,MAAM,eAAe,MAAM;AAAA,YAC/B,UAAU;AAAA,YACV,gBAAgB;AAAA,YAChB,YAAY;AAAA,YACZ,YAAY;AAAA,cACV,YAAY;AAAA,cACZ,SAAS;AAAA,gBACP;AAAA;AAAA,gBAEA,GAAI,eAAe,CAAC,YAAqB,IAAI,CAAC;AAAA,cAChD;AAAA,YACF;AAAA,YACA,SAAS;AAAA,cACP,2BAA2B;AAAA,gBACzB,wBAAwB,CAAC,QAAQ;AAC/B,0CAAwB,KAAK,GAAG;AAAA,gBAClC;AAAA,cACF,CAAC;AAAA,YACH;AAAA;AAAA,YAEA,YAAY;AAAA,YACZ,SAAS;AAAA,UACX,CAAC;AACD,gBAAM,oBAA6C,CAAC;AAEpD,qBAAW,eAAe,yBAAyB;AACjD,kBAAM,cAAc,MAAM,KAAK,QAAQ,YAAY,QAAQ,EAAE,IAAI;AACjE,kBAAM,eAAe,YAAY,MAAM,GAAG,EAAE,CAAC;AAE7C,kBAAM,SAAS,eAAe,IAAI,YAAY;AAE9C,gBAAI,QAAQ;AACV,yBAAW,aAAa,YAAY,YAAY;AAC9C,kCAAkB,UAAU,KAAK,IAAI,OAAO,UAAU,QAAQ;AAAA,cAChE;AAAA,YACF;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAEA,YAAI;AACF,gBAAM,oBACJ,MAAM,qBAAqB;AAE7B,cAAI,SAAS,MAAM,MAAM,eAAe,MAAM;AAAA,YAC5C,UAAU;AAAA,YACV,gBAAgB;AAAA,YAChB,YAAY;AAAA,YACZ,YAAY;AAAA,cACV,YAAY;AAAA,cACZ,SAAS;AAAA,gBACP;AAAA;AAAA,gBAEA,GAAI,eAAe,CAAC,YAAqB,IAAI,CAAC;AAAA,cAChD;AAAA,YACF;AAAA,YACA,SAAS;AAAA,cACP,0BAA0B;AAAA,gBACxB;AAAA,gBACA,uBAAuB;AAAA,gBACvB,gCAAgC,CAAC,cAAc;AAC7C,wBAAM,eAAe,OAAO;AAAA,oBAC1B,OAAO,QAAQ,SAAS,EAAE;AAAA,sBACxB,CAAC,CAAC,KAAK,WAAW,MAAiC;AACjD,4BAAI,OAAO,QAAQ;AACjB,wCAAc;AAAA,4BACZ;AAAA,4BACA,OAAO;AAAA,0BACT;AAAA,wBACF;AACA,4BAAI,OAAO,OAAO;AAChB,wCAAc;AAAA,4BACZ;AAAA,4BACA,OAAO;AAAA,0BACT;AAAA,wBACF;AACA,8BAAM,aAAa,mBAAmB,WAAW;AACjD,8BAAM,YAAY,kBAAkB,UAAU;AAC9C,+BAAO,CAAC,KAAK,SAAS;AAAA,sBACxB;AAAA,oBACF;AAAA,kBACF;AAEA,yBAAO,WAAW,iBAAiB,YAAY;AAAA,gBACjD;AAAA,gBACA,yBAAyB,CAAC,gBAAgB;AACxC,sBAAI,OAAO,QAAQ;AACjB,kCAAc,eAAe,aAAa,OAAO,MAAM;AAAA,kBACzD;AACA,sBAAI,OAAO,OAAO;AAChB,kCAAc,cAAc,aAAa,OAAO,KAAK;AAAA,kBACvD;AACA,wBAAM,aAAa,mBAAmB,WAAW;AACjD,wBAAM,YAAY,kBAAkB,UAAU;AAC9C,wBAAM,aAAa,WAAW,cAAc,SAAS;AACrD,yBAAO;AAAA,gBACT;AAAA,cACF,CAAC;AAAA,YACH;AAAA;AAAA,YAEA,YAAY;AAAA,YACZ,SAAS;AAAA,UACX,CAAC;AAED,cAAI,UAAU,OAAO,MAAM;AACzB,gBAAI,WAAW,UAAU,IAAI,YAAY;AACvC,mBAAK,aAAa;AAAA,YACpB;AACA,mBAAO;AAAA,cACL,MAAM,OAAO;AAAA,cACb,KAAK,OAAO;AAAA,YACd;AAAA,UACF;AAAA,QACF,SAAS,OAAY;AACnB,eAAK,MAAM,uBAAuB,EAAE,KAAK,MAAM,OAAO,EAAE;AAAA,QAC1D;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,iBAAiB;AACvB,SAAS,uBAAuBC,aAAwB;AACtD,MAAI,sBAAsB,oBAAI,IAAoB;AAClD,MAAI;AAEJ,iBAAe,SAAS;AACtB,QAAI,CAAC,UAAU,oBAAoB,SAAS,GAAG;AAC7C;AAAA,IACF;AAOA,UAAM,eAAe,OAAO,eACxB,OAAO,OAAO,OAAO,YAAY,IACjC,CAAC;AAEL,eAAW,CAAC,EAAE,KAAK,oBAAoB,QAAQ,GAAG;AAChD,UAAI,aAAa,SAAS,GAAG;AAC3B,mBAAW,OAAO,cAAc;AAC9B,gBAAM,MAAM,IAAI,YAAY,cAAc,EAAE;AAC5C,cAAI,IAAK,KAAI,YAAY,iBAAiB,GAAG;AAAA,QAC/C;AAAA,MACF,OAAO;AAEL,cAAM,MAAM,OAAO,YAAY,cAAc,EAAE;AAC/C,YAAI,IAAK,QAAO,YAAY,iBAAiB,GAAG;AAAA,MAClD;AAIA,YAAM,YAAY,OAAO,YAAY,cAAc,EAAE;AACrD,UAAI,WAAW;AACb,cAAM,OAAO,aAAa,SAAS;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAEA,WAAS,6BAA6B,QAAa,QAAa;AAC9D,UAAM,SAAS,OAAO,OAAO,MAAM,EAAE;AAAA,MACnC,CAAC,MACC,KACA,EAAE,SAAS,WACX,OAAO,EAAE,aAAa,YACtB,EAAE,SAAS,SAAS,MAAM;AAAA,IAC9B;AACA,QAAI,OAAO,WAAW,EAAG,QAAO;AAChC,QAAI,OAAO,WAAW,YAAY;AAChC,YAAM,SAAS,OAAO,KAAK,CAAC,MAAW,OAAO,EAAE,QAAQ,CAAC;AACzD,UAAI,OAAQ,QAAO;AAAA,IACrB;AACA,UAAM,OACJ,OAAO,KAAK,CAAC,MAAW,oBAAoB,KAAK,EAAE,QAAQ,CAAC,KAC5D,OAAO,KAAK,CAAC,MAAW,oBAAoB,KAAK,EAAE,QAAQ,CAAC;AAC9D,WAAO,QAAQ,OAAO,CAAC;AAAA,EACzB;AACA,QAAM,SAAiB;AAAA,IACrB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB,SAAS;AACvB,eAAS;AAAA,IACX;AAAA,IACA,MAAM,UAAU,MAAM,IAAI,EAAE,KAAK,QAAQ,MAAM,IAAI,EAAE,YAAY,MAAM,GAAG;AACxE,UAAI,CAAC,QAAQ,KAAK,EAAE,GAAG;AACrB,eAAO;AAAA,MACT;AACA,UAAI,GAAG,SAAS,cAAc,GAAG;AAC/B,eAAO;AAAA,MACT;AACA,UAAI,CAAC,KAAK,SAAS,cAAc,GAAG;AAClC,eAAO;AAAA,MACT;AAEA,0BAAoB,IAAI,IAAI,IAAI;AAChC,UAAI,QAAQ;AACV,YAAI,CAAC,OAAO;AACV,gBAAM,QAAQ,sBAAsB,EAAE;AAAA,QACxC;AAEA,eAAO,KAAK,QAAQ,gBAAgBA,YAAW,kBAAkB,CAAC;AAAA,MACpE;AAAA,IACF;AAAA;AAAA;AAAA,IAGA,eAAe,OAAO,QAAQ;AAC5B,YAAM,MAAMA,YAAW,kBAAkB;AACzC,UAAI,CAAC,IAAK;AACV,YAAM,SAAS,6BAA6B,QAAQ,MAAS;AAC7D,UAAI,QAAQ;AACV,cAAM,UACJ,OAAO,OAAO,WAAW,WACrB,OAAO,SACP,OAAO,QAAQ,SAAS,KAAK;AACnC,eAAO,SAAS,UAAU,UAAU,OAAO,MAAM;AAAA,MACnD,OAAO;AAAA,MAEP;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;","names":["styleRules","node","key","value","styleCache"]}
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts","../src/atomizer/index.ts","../src/atomizer/css-tree.ts","../src/css-js-logger.ts","../src/evaluate.ts","../src/runtime.ts","../src/print.ts","../src/string.ts","../src/style-cache.ts","../src/style-object.ts"],"sourcesContent":["import babel from \"@babel/core\";\nimport { addNamed } from \"@babel/helper-module-imports\";\nimport { Plugin, ViteDevServer } from \"vite\";\nimport { atomizeStyleRules } from \"./atomizer/index.js\";\nimport { cssJsLogger } from \"./css-js-logger.js\";\nimport { evaluateBabelExpression } from \"./evaluate.js\";\nimport { createStyleCache, StyleCache } from \"./style-cache.js\";\nimport {\n evaluateMacros,\n evaluateMedia,\n flattenStyleObject,\n} from \"./style-object.js\";\n\ntype ImportDeclaration = {\n source: string;\n specifiers: Array<{ imported: string; local: string }>;\n};\n\nfunction babelPluginGetCssJsImports({\n onFoundPotentialImport,\n}: {\n onFoundPotentialImport: (potential: ImportDeclaration) => void;\n}): babel.PluginItem {\n return {\n name: \"find-css-js-imports\",\n visitor: {\n ImportDeclaration(path) {\n if (path.node.source.value.includes(\".css\")) {\n onFoundPotentialImport({\n source: path.node.source.value,\n specifiers: path.node.specifiers.map((specifier) => ({\n imported:\n specifier.type === \"ImportSpecifier\"\n ? specifier.imported.type === \"StringLiteral\"\n ? specifier.imported.value\n : specifier.imported.name\n : specifier.local.name,\n local: specifier.local.name,\n })),\n });\n }\n },\n },\n };\n}\n\nfunction babelPluginReplaceCssProp({\n config,\n initialKnownConstants,\n styleObjectToClassNames,\n keyframesObjectToAnimationName,\n}: {\n config: PluginConfig;\n initialKnownConstants: Record<string, any>;\n styleObjectToClassNames: (styleObject: any) => string;\n keyframesObjectToAnimationName: (keyframesObject: any) => string;\n}): babel.PluginItem {\n let localCssFunctionName: string | undefined;\n let localKeyframesFunctionName: string | undefined;\n let localStyledFunctionName: string | undefined;\n let localVariantsFunctionName: string | undefined;\n\n const jsxClassProp = config.jsxClassProp ?? \"className\";\n\n let knownConstants = {\n ...initialKnownConstants,\n };\n\n return {\n name: \"replace-css-prop\",\n visitor: {\n // Statically analyze global constants and register them in case they are used in css() / keyframes()\n VariableDeclaration: {\n exit(path) {\n const parent = path.parentPath;\n const isTopLevel =\n parent.isProgram() ||\n (parent.isExportNamedDeclaration() &&\n parent.parentPath.isProgram());\n\n if (!isTopLevel) return;\n const node = path.node;\n\n if (node.kind !== \"const\") return;\n\n for (let declarator of node.declarations) {\n const init = evaluateBabelExpression(\n declarator.init,\n knownConstants,\n );\n if (init.confident) {\n const id = declarator.id;\n if (id.type === \"Identifier\") {\n // console.log(\n // `[FOUND] ${id.name} = ${JSON.stringify(init.value, null, 2)}`,\n // );\n knownConstants[id.name] = init.value;\n }\n }\n }\n },\n },\n ImportDeclaration(path) {\n if (path.node.source.value !== config.moduleName) return;\n const cssFunctionSpecifier = path.node.specifiers.find((specifier) => {\n return (\n specifier.type === \"ImportSpecifier\" &&\n specifier.imported.type === \"Identifier\" &&\n specifier.imported.name === \"css\"\n );\n });\n if (cssFunctionSpecifier) {\n localCssFunctionName = cssFunctionSpecifier.local.name;\n }\n const keyframesFunctionSpecifier = path.node.specifiers.find(\n (specifier) => {\n return (\n specifier.type === \"ImportSpecifier\" &&\n specifier.imported.type === \"Identifier\" &&\n specifier.imported.name === \"keyframes\"\n );\n },\n );\n if (keyframesFunctionSpecifier) {\n localKeyframesFunctionName = keyframesFunctionSpecifier.local.name;\n }\n const styledFunctionSpecifier = path.node.specifiers.find(\n (specifier) => {\n return (\n specifier.type === \"ImportSpecifier\" &&\n specifier.imported.type === \"Identifier\" &&\n specifier.imported.name === \"styled\"\n );\n },\n );\n if (styledFunctionSpecifier) {\n localStyledFunctionName = styledFunctionSpecifier.local.name;\n }\n const variantsFunctionSpecifier = path.node.specifiers.find(\n (specifier) => {\n return (\n specifier.type === \"ImportSpecifier\" &&\n specifier.imported.type === \"Identifier\" &&\n specifier.imported.name === \"variants\"\n );\n },\n );\n if (variantsFunctionSpecifier) {\n localVariantsFunctionName = variantsFunctionSpecifier.local.name;\n }\n },\n CallExpression: {\n exit(path) {\n if (\n babel.types.isIdentifier(path.node.callee, {\n name: localKeyframesFunctionName,\n })\n ) {\n const args = path.node.arguments;\n if (args.length !== 1) return;\n const firstArg = args[0];\n if (firstArg.type !== \"ObjectExpression\") return;\n\n const styleObjectResult = evaluateBabelExpression(\n firstArg,\n knownConstants,\n );\n let styleObject = styleObjectResult.value;\n if (!styleObjectResult.confident) {\n throw new Error(\n \"COULD NOT EVALUATE KEYFRAMES: L\" + firstArg.loc?.start.line,\n );\n }\n\n const animationName = keyframesObjectToAnimationName(styleObject);\n\n path.replaceWith({\n type: \"StringLiteral\",\n value: animationName,\n });\n }\n\n if (\n babel.types.isIdentifier(path.node.callee, {\n name: localCssFunctionName,\n })\n ) {\n const args = path.node.arguments;\n if (args.length !== 1) return;\n const firstArg = args[0];\n if (firstArg.type !== \"ObjectExpression\") return;\n\n const styleObjectResult = evaluateBabelExpression(\n firstArg,\n knownConstants,\n );\n let styleObject = styleObjectResult.value;\n if (!styleObjectResult.confident) {\n throw new Error(\n \"COULD NOT EVALUATE CSS: L\" + firstArg.loc?.start.line,\n );\n }\n\n const classNames = styleObjectToClassNames(styleObject);\n\n path.replaceWith({\n type: \"StringLiteral\",\n value: classNames,\n });\n }\n\n if (\n babel.types.isIdentifier(path.node.callee, {\n name: localStyledFunctionName,\n })\n ) {\n const args = path.node.arguments;\n if (args.length !== 2) return;\n const secondArg = args[1];\n if (secondArg.type !== \"ObjectExpression\") return;\n\n const getPropertyKeyName = (\n prop: babel.types.ObjectExpression[\"properties\"][number],\n ): string | undefined => {\n if (prop.type !== \"ObjectProperty\") return undefined;\n const key = prop.key;\n if (key.type === \"Identifier\") return key.name;\n if (key.type === \"StringLiteral\") return key.value;\n return undefined;\n };\n\n const evaluateToClassNames = (\n node: babel.types.Expression,\n what: string,\n ) => {\n const result = evaluateBabelExpression(node, knownConstants);\n if (!result.confident) {\n throw new Error(\n `COULD NOT EVALUATE ${what}: L` + node.loc?.start.line,\n );\n }\n return styleObjectToClassNames(result.value);\n };\n\n // Separate the base styles from the `variants` / `defaultVariants`\n // keys, which get transformed independently.\n const baseProperties: babel.types.ObjectExpression[\"properties\"] =\n [];\n let variantsProperty: babel.types.ObjectProperty | undefined;\n let defaultVariantsProperty:\n | babel.types.ObjectExpression[\"properties\"][number]\n | undefined;\n\n for (const prop of secondArg.properties) {\n const keyName = getPropertyKeyName(prop);\n if (keyName === \"variants\" && prop.type === \"ObjectProperty\") {\n variantsProperty = prop;\n } else if (keyName === \"defaultVariants\") {\n defaultVariantsProperty = prop;\n } else {\n baseProperties.push(prop);\n }\n }\n\n const newProperties: babel.types.ObjectExpression[\"properties\"] =\n [];\n\n // base: everything that isn't `variants` / `defaultVariants`\n const baseClassNames = evaluateToClassNames(\n babel.types.objectExpression(baseProperties),\n \"STYLED\",\n );\n newProperties.push(\n babel.types.objectProperty(\n babel.types.identifier(\"base\"),\n babel.types.stringLiteral(baseClassNames),\n ),\n );\n\n // variants: { variant: { value: styleObject } } -> { variant: { value: classNames } }\n if (variantsProperty) {\n if (variantsProperty.value.type === \"ObjectExpression\") {\n const newVariantGroups: babel.types.ObjectExpression[\"properties\"] =\n [];\n for (const group of variantsProperty.value.properties) {\n if (\n group.type !== \"ObjectProperty\" ||\n group.value.type !== \"ObjectExpression\"\n ) {\n newVariantGroups.push(group);\n continue;\n }\n const newVariantValues: babel.types.ObjectExpression[\"properties\"] =\n [];\n for (const variant of group.value.properties) {\n if (\n variant.type !== \"ObjectProperty\" ||\n variant.value.type !== \"ObjectExpression\"\n ) {\n newVariantValues.push(variant);\n continue;\n }\n const variantClassNames = evaluateToClassNames(\n variant.value,\n \"STYLED VARIANT\",\n );\n newVariantValues.push(\n babel.types.objectProperty(\n variant.key,\n babel.types.stringLiteral(variantClassNames),\n variant.computed,\n ),\n );\n }\n newVariantGroups.push(\n babel.types.objectProperty(\n group.key,\n babel.types.objectExpression(newVariantValues),\n group.computed,\n ),\n );\n }\n newProperties.push(\n babel.types.objectProperty(\n babel.types.identifier(\"variants\"),\n babel.types.objectExpression(newVariantGroups),\n variantsProperty.computed,\n ),\n );\n } else {\n newProperties.push(variantsProperty);\n }\n }\n\n // defaultVariants: passed through unchanged\n if (defaultVariantsProperty) {\n newProperties.push(defaultVariantsProperty);\n }\n\n args[1] = babel.types.objectExpression(newProperties);\n }\n\n if (\n babel.types.isIdentifier(path.node.callee, {\n name: localVariantsFunctionName,\n })\n ) {\n const args = path.node.arguments;\n if (args.length !== 1) return;\n const firstArg = args[0];\n if (firstArg.type !== \"ObjectExpression\") return;\n\n // { name: styleObject } -> { name: classNames }\n const newProperties: babel.types.ObjectExpression[\"properties\"] =\n [];\n for (const prop of firstArg.properties) {\n if (\n prop.type !== \"ObjectProperty\" ||\n prop.value.type !== \"ObjectExpression\"\n ) {\n newProperties.push(prop);\n continue;\n }\n const styleObjectResult = evaluateBabelExpression(\n prop.value,\n knownConstants,\n );\n if (!styleObjectResult.confident) {\n throw new Error(\n \"COULD NOT EVALUATE VARIANTS: L\" + prop.value.loc?.start.line,\n );\n }\n const classNames = styleObjectToClassNames(\n styleObjectResult.value,\n );\n newProperties.push(\n babel.types.objectProperty(\n prop.key,\n babel.types.stringLiteral(classNames),\n prop.computed,\n ),\n );\n }\n\n path.replaceWith(babel.types.objectExpression(newProperties));\n }\n },\n },\n JSXAttribute(path, state) {\n if (\n path.node.name &&\n path.node.name.type === \"JSXIdentifier\" &&\n path.node.name.name === \"css\"\n ) {\n const value = path.node.value;\n if (value?.type !== \"JSXExpressionContainer\") return;\n\n const expression = value.expression;\n\n switch (expression.type) {\n case \"ObjectExpression\": {\n const styleObjectResult = evaluateBabelExpression(\n expression,\n knownConstants,\n );\n let styleObject = styleObjectResult.value;\n if (!styleObjectResult.confident) {\n const badNode = styleObjectResult.badNode;\n if (badNode) {\n const { start, end } = badNode;\n const rawCode = state.file.code.slice(start, end);\n console.error(`COULD NOT EVALUATE CSS: \\`${rawCode}\\``);\n return;\n } else {\n console.error(\n \"COULD NOT EVALUATE CSS: L\" + expression.loc?.start.line,\n );\n return;\n }\n }\n const classNames = styleObjectToClassNames(styleObject);\n\n path.node.name.name = jsxClassProp;\n path.node.value = {\n type: \"StringLiteral\",\n value: classNames,\n };\n break;\n }\n case \"ArrayExpression\": {\n const elements = expression.elements;\n const mergeClassNamesId = addNamed(\n path,\n \"mergeClassNames\",\n config.moduleName || \"\",\n );\n\n const cleanedElements: babel.types.Expression[] = [];\n\n for (const element of elements) {\n if (element) {\n // if (element.type !== \"SpreadElement\") {\n // cleanedElements.push(element);\n // }\n if (element.type === \"ObjectExpression\") {\n const styleObjectResult = evaluateBabelExpression(\n element,\n knownConstants,\n );\n if (styleObjectResult.confident) {\n let styleObject = styleObjectResult.value;\n const classNames = styleObjectToClassNames(styleObject);\n cleanedElements.push(\n babel.types.stringLiteral(classNames),\n );\n }\n } else if (\n element.type === \"LogicalExpression\" &&\n element.operator === \"&&\" &&\n element.right.type === \"ObjectExpression\"\n ) {\n const styleObjectResult = evaluateBabelExpression(\n element.right,\n knownConstants,\n );\n if (styleObjectResult.confident) {\n let styleObject = styleObjectResult.value;\n const classNames = styleObjectToClassNames(styleObject);\n cleanedElements.push(\n babel.types.logicalExpression(\n \"&&\",\n element.left,\n babel.types.stringLiteral(classNames),\n ),\n );\n }\n } else if (\n element.type === \"ConditionalExpression\" &&\n element.consequent.type === \"ObjectExpression\" &&\n element.alternate.type === \"ObjectExpression\"\n ) {\n const consequentObject = evaluateBabelExpression(\n element.consequent,\n knownConstants,\n );\n const alternateObject = evaluateBabelExpression(\n element.alternate,\n knownConstants,\n );\n if (\n consequentObject.confident &&\n alternateObject.confident\n ) {\n const classNames = styleObjectToClassNames(\n consequentObject.value,\n );\n const alternateClassNames = styleObjectToClassNames(\n alternateObject.value,\n );\n cleanedElements.push(\n babel.types.conditionalExpression(\n element.test,\n babel.types.stringLiteral(classNames),\n babel.types.stringLiteral(alternateClassNames),\n ),\n );\n }\n } else if (element.type !== \"SpreadElement\") {\n cleanedElements.push(element);\n }\n }\n }\n\n path.node.name.name = jsxClassProp;\n value.expression = babel.types.callExpression(mergeClassNamesId, [\n babel.types.arrayExpression(cleanedElements),\n ]);\n\n break;\n }\n default: {\n path.node.name.name = jsxClassProp;\n }\n }\n }\n },\n },\n };\n}\n\nexport type PluginConfig = {\n moduleName: string;\n jsxClassProp?: string;\n media?: Record<string, string>;\n macros?: Record<string, (value: string) => any>;\n};\n\nconst styleCache = createStyleCache();\nexport function vitePluginCss(\n config: PluginConfig = { moduleName: \"@hypergood/css-core\" },\n): Plugin[] {\n const { plugin: generationPlugin, reload: reloadStyles } =\n createGenerationPlugin(styleCache);\n\n let devServer: ViteDevServer | null = null;\n const { processedFiles, transform: registerCssJsFiles } = cssJsLogger();\n\n return [\n generationPlugin,\n {\n name: \"hypercss:process\",\n\n // Capture the dev server instance\n configureServer(server) {\n devServer = server;\n },\n\n // `css={...}` is compiled to a literal `class=\"...\"` string at transform\n // time, so the markup is only as fresh as the transformed module the\n // renderer used. `hotUpdate` runs per-environment, but a non-standard SSR\n // environment (e.g. Nitro) may not re-transform on its own — leaving the\n // server-rendered class stale until a restart. Explicitly invalidate the\n // changed file in *every* environment so client and SSR copies refresh\n // together.\n hotUpdate(ctx) {\n const cleanFile = ctx.file.split(\"?\")[0]!;\n if (!/\\.[jt]sx?$/.test(cleanFile)) return;\n\n const server = ctx.server ?? devServer;\n if (!server?.environments) return;\n\n for (const env of Object.values(server.environments)) {\n for (const mod of env.moduleGraph.getModulesByFile(cleanFile) ??\n []) {\n env.moduleGraph.invalidateModule(mod);\n }\n }\n },\n\n // Run before other plugins (like the default JSX transform)\n enforce: \"pre\",\n\n async transform(code, id) {\n const cleanId = id.split(\"?\")[0]!;\n await registerCssJsFiles.bind(this)(code, id, devServer);\n const rulesCount = styleCache.getLength();\n if (!/\\.[jt]sx?$/.test(cleanId)) {\n return null;\n }\n if (id.includes(\"node_modules\")) {\n return null;\n }\n\n if (!code.includes(\"css\")) {\n return null;\n }\n\n const isTypeScript =\n cleanId.endsWith(\".tsx\") || cleanId.endsWith(\".ts\");\n\n const cssJsImportDeclarations: ImportDeclaration[] = [];\n\n const getImportedConstants = async () => {\n await babel.transformAsync(code, {\n filename: id,\n sourceFileName: id,\n sourceMaps: true,\n parserOpts: {\n sourceType: \"module\",\n plugins: [\n \"jsx\",\n // Add TypeScript support for .tsx files\n ...(isTypeScript ? [\"typescript\" as const] : []),\n ],\n },\n plugins: [\n babelPluginGetCssJsImports({\n onFoundPotentialImport: (dec) => {\n cssJsImportDeclarations.push(dec);\n },\n }),\n ],\n // Don't transform anything else, just run our plugin\n configFile: false,\n babelrc: false,\n });\n const importedConstants: Record<string, unknown> = {};\n\n for (const declaration of cssJsImportDeclarations) {\n const resolvedId = (await this.resolve(declaration.source, id))?.id;\n const resolvedPath = resolvedId?.split(\"?\")[0]!;\n\n const module = processedFiles.get(resolvedPath);\n\n if (module) {\n for (const specifier of declaration.specifiers) {\n importedConstants[specifier.local] = module[specifier.imported];\n }\n }\n }\n return importedConstants;\n };\n\n try {\n const importedConstants: Record<string, unknown> =\n await getImportedConstants();\n\n let result = await babel.transformAsync(code, {\n filename: id,\n sourceFileName: id,\n sourceMaps: true,\n parserOpts: {\n sourceType: \"module\",\n plugins: [\n \"jsx\",\n // Add TypeScript support for .tsx files\n ...(isTypeScript ? [\"typescript\" as const] : []),\n ],\n },\n plugins: [\n babelPluginReplaceCssProp({\n config,\n initialKnownConstants: importedConstants,\n keyframesObjectToAnimationName: (keyframes) => {\n const newKeyframes = Object.fromEntries(\n Object.entries(keyframes).map(\n ([key, styleObject]: [key: string, value: any]) => {\n if (config.macros) {\n styleObject = evaluateMacros(\n styleObject,\n config.macros,\n );\n }\n if (config.media) {\n styleObject = evaluateMedia(\n styleObject,\n config.media,\n );\n }\n const styleRules = flattenStyleObject(styleObject);\n const optimized = atomizeStyleRules(styleRules);\n return [key, optimized];\n },\n ),\n );\n\n return styleCache.getAnimationName(newKeyframes);\n },\n styleObjectToClassNames: (styleObject) => {\n if (config.macros) {\n styleObject = evaluateMacros(styleObject, config.macros);\n }\n if (config.media) {\n styleObject = evaluateMedia(styleObject, config.media);\n }\n const styleRules = flattenStyleObject(styleObject);\n const optimized = atomizeStyleRules(styleRules);\n const classNames = styleCache.getClassNames(optimized);\n return classNames;\n },\n }),\n ],\n // Don't transform anything else, just run our plugin\n configFile: false,\n babelrc: false,\n });\n\n if (result && result.code) {\n if (styleCache.getLength() > rulesCount) {\n void reloadStyles();\n }\n return {\n code: result.code,\n map: result.map,\n };\n }\n } catch (error: any) {\n this.error(`Failed to transform ${id}: ${error.message}`);\n }\n\n return null;\n },\n },\n ];\n}\n\nconst CSS_REPLACE_ME = \"@hypercss;\";\nfunction createGenerationPlugin(styleCache: StyleCache) {\n let modulesToInvalidate = new Map<string, string>();\n let server: ViteDevServer;\n\n async function reload() {\n if (!server || modulesToInvalidate.size === 0) {\n return;\n }\n\n // In Vite 6+/8 every environment (client, ssr, and any custom ones such\n // as Nitro's) keeps its own module graph. The deprecated\n // `server.moduleGraph` / `server.reloadModule` only ever touch the client\n // graph, so a stale SSR copy of the generated stylesheet would survive\n // until a full dev-server restart. Invalidate in every environment.\n const environments = server.environments\n ? Object.values(server.environments)\n : [];\n\n for (const [id] of modulesToInvalidate.entries()) {\n if (environments.length > 0) {\n for (const env of environments) {\n const mod = env.moduleGraph.getModuleById(id);\n if (mod) env.moduleGraph.invalidateModule(mod);\n }\n } else {\n // Legacy (Vite <6) fallback.\n const mod = server.moduleGraph.getModuleById(id);\n if (mod) server.moduleGraph.invalidateModule(mod);\n }\n\n // Push the regenerated CSS to the browser. HMR only targets the client,\n // so use the legacy client module node `reloadModule` expects.\n const clientMod = server.moduleGraph.getModuleById(id);\n if (clientMod) {\n await server.reloadModule(clientMod);\n }\n }\n }\n\n function pickCssAssetFromRollupBundle(bundle: any, choose: any) {\n const assets = Object.values(bundle).filter(\n (a: any) =>\n a &&\n a.type === \"asset\" &&\n typeof a.fileName === \"string\" &&\n a.fileName.endsWith(\".css\"),\n );\n if (assets.length === 0) return null;\n if (typeof choose === \"function\") {\n const chosen = assets.find((a: any) => choose(a.fileName));\n if (chosen) return chosen;\n }\n const best =\n assets.find((a: any) => /(^|\\/)index\\.css$/.test(a.fileName)) ||\n assets.find((a: any) => /(^|\\/)style\\.css$/.test(a.fileName));\n return best || assets[0];\n }\n const plugin: Plugin = {\n name: \"hypercss:generate\",\n enforce: \"pre\",\n configureServer(_server) {\n server = _server;\n },\n async transform(code, id, { ssr: isSSR = false } = { moduleType: \"jsx\" }) {\n if (!/\\.css/.test(id)) {\n return null;\n }\n if (id.includes(\"node_modules\")) {\n return null;\n }\n if (!code.includes(CSS_REPLACE_ME)) {\n return null;\n }\n\n modulesToInvalidate.set(id, code);\n if (server) {\n if (!isSSR) {\n await server?.waitForRequestsIdle?.(id);\n }\n\n return code.replace(CSS_REPLACE_ME, styleCache.processStyleRules());\n }\n },\n // Rollup/Vite: append to an existing CSS asset during generateBundle\n // Note: some bundlers/plugins may mutate CSS assets later; we also guard in writeBundle.\n generateBundle(_opts, bundle) {\n const css = styleCache.processStyleRules();\n if (!css) return;\n const target = pickCssAssetFromRollupBundle(bundle, undefined) as any;\n if (target) {\n const current =\n typeof target.source === \"string\"\n ? target.source\n : target.source?.toString() || \"\";\n target.source = current ? current + \"\\n\" + css : css;\n } else {\n // Defer to writeBundle to append or emit fallback file\n }\n },\n };\n\n return {\n plugin,\n reload,\n };\n}\n","import * as csstree from \"css-tree\";\nimport { StyleRule } from \"../style-rule.js\";\nimport { evaluateLexerNode, LexerNode } from \"./css-tree.js\";\nimport { AtomizerFn } from \"./types.js\";\n\nconst atomizers: Record<string, AtomizerFn> = {\n animation: (value) => {\n const ast = csstree.parse(value, { context: \"value\" });\n const matchResult = csstree.lexer.matchProperty(\"animation\", ast);\n const match = matchResult.matched?.match;\n\n // console.log({ match: JSON.stringify(match) });\n\n if (!match) return undefined;\n\n const animationNames: LexerNode[] = [];\n const animationDurations: LexerNode[] = [];\n const animationDelays: LexerNode[] = [];\n const timingFunctions: LexerNode[] = [];\n const iterations: LexerNode[] = [];\n const fillModes: LexerNode[] = [];\n const playStates: LexerNode[] = [];\n\n for (const singleAnimation of match) {\n const keyframesName = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"keyframes-name\",\n );\n if (keyframesName) {\n animationNames.push(keyframesName);\n }\n const duration = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"animation-duration\",\n );\n if (duration) {\n animationDurations.push(duration);\n }\n const easing = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"easing-function\",\n );\n if (easing) {\n timingFunctions.push(easing);\n }\n const delay = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"animation-delay\",\n );\n if (delay) {\n animationDelays.push(delay);\n }\n const count = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"single-animation-iteration-count\",\n );\n if (count) {\n iterations.push(count);\n }\n const fillMode = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"single-animation-fill-mode\",\n );\n if (fillMode) {\n fillModes.push(fillMode);\n }\n const playState = singleAnimation.match?.find(\n (n) => n.syntax?.name === \"single-animation-play-state\",\n );\n if (playState) {\n playStates.push(playState);\n }\n }\n\n return {\n \"animation-name\":\n animationNames.map(evaluateLexerNode).join(\",\") || undefined,\n \"animation-iteration-count\":\n iterations.map(evaluateLexerNode).join(\",\") || undefined,\n \"animation-delay\":\n animationDelays.map(evaluateLexerNode).join(\",\") || undefined,\n \"animation-duration\":\n animationDurations.map(evaluateLexerNode).join(\",\") || undefined,\n \"animation-timing-function\":\n timingFunctions.map(evaluateLexerNode).join(\",\") || undefined,\n \"animation-fill-mode\":\n fillModes.map(evaluateLexerNode).join(\",\") || undefined,\n \"animation-play-state\":\n playStates.map(evaluateLexerNode).join(\",\") || undefined,\n };\n },\n border: (value) => {\n const ast = csstree.parse(value, { context: \"value\" });\n const matchResult = csstree.lexer.matchProperty(\"border\", ast);\n const match = matchResult.matched?.match;\n\n if (!match) return;\n\n const lineWidth = match.find((t) => t.syntax?.name === \"line-width\");\n const lineStyle = match.find((t) => t.syntax?.name === \"line-style\");\n const color = match.find((t) => t.syntax?.name === \"color\");\n\n const lineWidthString = evaluateLexerNode(lineWidth);\n const lineStyleString = evaluateLexerNode(lineStyle);\n const colorString = evaluateLexerNode(color);\n\n return {\n \"border-bottom-style\": lineStyleString,\n \"border-left-style\": lineStyleString,\n \"border-right-style\": lineStyleString,\n \"border-top-style\": lineStyleString,\n \"border-bottom-color\": colorString,\n \"border-left-color\": colorString,\n \"border-right-color\": colorString,\n \"border-top-color\": colorString,\n \"border-bottom-width\": lineWidthString,\n \"border-left-width\": lineWidthString,\n \"border-right-width\": lineWidthString,\n \"border-top-width\": lineWidthString,\n };\n },\n \"border-radius\": (value) => {\n const ast = csstree.parse(value, { context: \"value\" });\n const matchResult = csstree.lexer.matchProperty(\"border-radius\", ast);\n const match = matchResult.matched?.match;\n if (!match) return undefined;\n\n const slashIndex = match.findIndex(\n (n) => n.syntax?.type === \"Token\" && n.syntax.value === \"/\",\n );\n const horizontalRadiiNodes =\n slashIndex === -1 ? match : match.slice(0, slashIndex);\n let verticalRadiiNodes =\n slashIndex === -1 ? match : match.slice(slashIndex + 1);\n if (!verticalRadiiNodes.length) {\n verticalRadiiNodes = horizontalRadiiNodes;\n }\n\n const horizontalRadiiStrings = horizontalRadiiNodes.map(evaluateLexerNode);\n const verticalRadiiStrings = verticalRadiiNodes.map(evaluateLexerNode);\n\n const horizontalRadii = expandRadii(horizontalRadiiStrings);\n const verticalRadii = expandRadii(verticalRadiiStrings);\n\n return {\n \"border-top-left-radius\": `${horizontalRadii.topLeft} ${verticalRadii.topLeft}`,\n \"border-top-right-radius\": `${horizontalRadii.topRight} ${verticalRadii.topRight}`,\n \"border-bottom-left-radius\": `${horizontalRadii.bottomLeft} ${verticalRadii.bottomLeft}`,\n \"border-bottom-right-radius\": `${horizontalRadii.bottomRight} ${verticalRadii.bottomRight}`,\n };\n },\n margin: (value) => {\n const ast = csstree.parse(value, { context: \"value\" });\n const matchResult = csstree.lexer.matchProperty(\"margin\", ast);\n const match = matchResult.matched?.match;\n if (!match) return undefined;\n\n const sizeStrings = match.map(evaluateLexerNode);\n const sizes = expandSizing(sizeStrings);\n\n return {\n \"margin-top\": sizes.top,\n \"margin-right\": sizes.right,\n \"margin-bottom\": sizes.bottom,\n \"margin-left\": sizes.left,\n };\n },\n padding: (value) => {\n const ast = csstree.parse(value, { context: \"value\" });\n const matchResult = csstree.lexer.matchProperty(\"padding\", ast);\n const match = matchResult.matched?.match;\n if (!match) return undefined;\n\n const sizeStrings = match.map(evaluateLexerNode);\n\n const sizes = expandSizing(sizeStrings);\n\n return {\n \"padding-top\": sizes.top,\n \"padding-right\": sizes.right,\n \"padding-bottom\": sizes.bottom,\n \"padding-left\": sizes.left,\n };\n },\n};\n\nfunction createDefaultAtomizer(property: string) {\n const atomizer: AtomizerFn = (value) => {\n const ast = csstree.parse(value, { context: \"value\" });\n const matchResult = csstree.lexer.matchProperty(property, ast);\n // if (property === \"color\") {\n // console.log(JSON.stringify(matchResult));\n // }\n const lexxed = evaluateLexerNode(matchResult.matched);\n\n return {\n [property]: lexxed,\n };\n };\n return atomizer;\n}\n\nfunction expandRadii(radii: string[]): {\n topLeft: string;\n topRight: string;\n bottomLeft: string;\n bottomRight: string;\n} {\n const [r1, r2, r3, r4] = radii;\n switch (radii.length) {\n case 1:\n return {\n topLeft: r1,\n topRight: r1,\n bottomLeft: r1,\n bottomRight: r1,\n };\n case 2:\n return {\n topLeft: r1,\n topRight: r2,\n bottomLeft: r2,\n bottomRight: r1,\n };\n case 3:\n return {\n topLeft: r1,\n topRight: r2,\n bottomLeft: r2,\n bottomRight: r3,\n };\n default:\n return {\n topLeft: r1,\n topRight: r2,\n bottomLeft: r4,\n bottomRight: r3,\n };\n }\n}\nfunction expandSizing(sizes: string[]): {\n top: string;\n right: string;\n bottom: string;\n left: string;\n} {\n const [r1, r2, r3, r4] = sizes;\n switch (sizes.length) {\n case 1:\n return {\n top: r1,\n right: r1,\n bottom: r1,\n left: r1,\n };\n case 2:\n return {\n top: r1,\n right: r2,\n bottom: r1,\n left: r2,\n };\n case 3:\n return {\n top: r1,\n right: r2,\n bottom: r3,\n left: r2,\n };\n default:\n return {\n top: r1,\n right: r2,\n bottom: r3,\n left: r4,\n };\n }\n}\n\nexport function atomizeStyleRules(styleRules: StyleRule[]): StyleRule[] {\n return styleRules.flatMap((rule) => {\n const atomizer =\n atomizers[rule.property] || createDefaultAtomizer(rule.property);\n if (!atomizer) return [rule];\n\n const atomized = atomizer(rule.value);\n if (!atomized) return [rule];\n\n return Object.entries(atomized)\n .filter(([key, value]) => value !== undefined)\n .map(([key, value]) => ({\n ...rule,\n property: key,\n value: value!,\n }));\n });\n}\n","import { CssNode } from \"css-tree\";\n\nexport interface LexerNode {\n syntax: {\n type: \"Type\" | \"Property\" | \"Keyword\" | \"Token\";\n name?: SyntaxName;\n value?: string;\n } | null;\n token?: string;\n node?: CssNode;\n match?: LexerNode[];\n}\n\ndeclare module \"css-tree\" {\n interface LexerMatchResult {\n matched: LexerNode | null;\n iterations: number;\n getTrace(node: CssNode): Array<{ type: string; name: string }> | null;\n isType(node: CssNode | null, type: string): boolean;\n isProperty(node: CssNode | null, property: string): boolean;\n isKeyword(node: CssNode | null): boolean;\n }\n}\n\nexport function evaluateLexerNode(node: LexerNode | null | undefined): string {\n if (!node) return \"\";\n switch (node.syntax?.name) {\n case \"named-color\":\n return evaluateNamedColor(node);\n }\n // if (node.node && node.node.type === \"Operator\") {\n // return node.node.value;\n // }\n if (node.token) {\n return node.token;\n }\n return node.match?.map(evaluateLexerNode).join(\" \") || \"\";\n}\n\nexport function evaluateNamedColor(node: LexerNode) {\n const name = node.match?.[0].token || \"\";\n if (name.toLowerCase() in NAMED_COLOR_MAP) {\n return NAMED_COLOR_MAP[name.toLowerCase()];\n }\n return name;\n}\n\n/**\n * Choose the shortest option between hex and named color, prioritize hex color if both are the same length, prioritize gray over grey\n */\nconst NAMED_COLOR_MAP: Record<string, string> = {\n aliceblue: \"#f0f8ff\",\n antiquewhite: \"#faebd7\",\n aqua: \"#0ff\",\n aquamarine: \"#7fffd4\",\n \"#f0ffff\": \"azure\",\n \"#f5f5dc\": \"beige\",\n \"#ffe4c4\": \"bisque\",\n black: \"#000\",\n blanchedalmond: \"#ffebcd\",\n blue: \"#00f\",\n blueviolet: \"#8a2be2\",\n \"#a52a2a\": \"brown\",\n burlywood: \"#deb887\",\n cadetblue: \"#5f9ea0\",\n chartreuse: \"#7fff00\",\n chocolate: \"#d2691e\",\n \"#ff7f50\": \"coral\",\n cornflowerblue: \"#6495ed\",\n cornsilk: \"#fff8dc\",\n crimson: \"#dc143c\",\n cyan: \"#0ff\",\n darkblue: \"#00008b\",\n darkcyan: \"#008b8b\",\n darkgoldenrod: \"#b8860b\",\n darkgray: \"#a9a9a9\",\n darkgreen: \"#006400\",\n darkgrey: \"#a9a9a9\",\n darkkhaki: \"#bdb76b\",\n darkmagenta: \"#8b008b\",\n darkolivegreen: \"#556b2f\",\n darkorange: \"#ff8c00\",\n darkorchid: \"#9932cc\",\n darkred: \"#8b0000\",\n darksalmon: \"#e9967a\",\n darkseagreen: \"#8fbc8f\",\n darkslateblue: \"#483d8b\",\n darkslategray: \"#2f4f4f\",\n darkslategrey: \"#2f4f4f\",\n darkturquoise: \"#00ced1\",\n darkviolet: \"#9400d3\",\n deeppink: \"#ff1493\",\n deepskyblue: \"#00bfff\",\n dimgray: \"#696969\",\n dimgrey: \"#696969\",\n dodgerblue: \"#1e90ff\",\n firebrick: \"#b22222\",\n floralwhite: \"#fffaf0\",\n forestgreen: \"#228b22\",\n fuchsia: \"#f0f\",\n gainsboro: \"#dcdcdc\",\n ghostwhite: \"#f8f8ff\",\n \"#ffd700\": \"gold\",\n goldenrod: \"#daa520\",\n \"#808080\": \"gray\",\n \"#008000\": \"green\",\n greenyellow: \"#adff2f\",\n grey: \"gray\",\n honeydew: \"#f0fff0\",\n hotpink: \"#ff69b4\",\n indianred: \"#cd5c5c\",\n \"#4b0082\": \"indigo\",\n \"#fffff0\": \"ivory\",\n \"#f0e68c\": \"khaki\",\n lavender: \"#e6e6fa\",\n lavenderblush: \"#fff0f5\",\n lawngreen: \"#7cfc00\",\n lemonchiffon: \"#fffacd\",\n lightblue: \"#add8e6\",\n lightcoral: \"#f08080\",\n lightcyan: \"#e0ffff\",\n lightgoldenrodyellow: \"#fafad2\",\n lightgray: \"#d3d3d3\",\n lightgreen: \"#90ee90\",\n lightgrey: \"#d3d3d3\",\n lightpink: \"#ffb6c1\",\n lightsalmon: \"#ffa07a\",\n lightseagreen: \"#20b2aa\",\n lightskyblue: \"#87cefa\",\n lightslategray: \"#789\",\n lightslategrey: \"#789\",\n lightsteelblue: \"#b0c4de\",\n lightyellow: \"#ffffe0\",\n lime: \"#0f0\",\n limegreen: \"#32cd32\",\n \"#faf0e6\": \"linen\",\n magenta: \"#ff00ff\",\n \"#800000\": \"maroon\",\n mediumaquamarine: \"#66cdaa\",\n mediumblue: \"#0000cd\",\n mediumorchid: \"#ba55d3\",\n mediumpurple: \"#9370db\",\n mediumseagreen: \"#3cb371\",\n mediumslateblue: \"#7b68ee\",\n mediumspringgreen: \"#00fa9a\",\n mediumturquoise: \"#48d1cc\",\n mediumvioletred: \"#c71585\",\n midnightblue: \"#191970\",\n mintcream: \"#f5fffa\",\n mistyrose: \"#ffe4e1\",\n moccasin: \"#ffe4b5\",\n navajowhite: \"#ffdead\",\n \"#000080\": \"navy\",\n oldlace: \"#fdf5e6\",\n \"#808000\": \"olive\",\n olivedrab: \"#6b8e23\",\n \"#ffa500\": \"orange\",\n orangered: \"#ff4500\",\n \"#da70d6\": \"orchid\",\n palegoldenrod: \"#eee8aa\",\n palegreen: \"#98fb98\",\n paleturquoise: \"#afeeee\",\n palevioletred: \"#db7093\",\n papayawhip: \"#ffefd5\",\n peachpuff: \"#ffdab9\",\n \"#cd853f\": \"peru\",\n \"#ffc0cb\": \"pink\",\n \"#dda0dd\": \"plum\",\n powderblue: \"#b0e0e6\",\n \"#800080\": \"purple\",\n rebeccapurple: \"#639\",\n \"#f00\": \"red\",\n rosybrown: \"#bc8f8f\",\n royalblue: \"#4169e1\",\n saddlebrown: \"#8b4513\",\n \"#fa8072\": \"salmon\",\n sandybrown: \"#f4a460\",\n seagreen: \"#2e8b57\",\n seashell: \"#fff5ee\",\n \"#a0522d\": \"sienna\",\n \"#c0c0c0\": \"silver\",\n skyblue: \"#87ceeb\",\n slateblue: \"#6a5acd\",\n slategray: \"#708090\",\n slategrey: \"#708090\",\n \"#fffafa\": \"snow\",\n springgreen: \"#00ff7f\",\n steelblue: \"#4682b4\",\n \"#d2b48c\": \"tan\",\n \"#008080\": \"teal\",\n thistle: \"#d8bfd8\",\n \"#ff634\": \"tomato\",\n turquoise: \"#40e0d0\",\n \"#ee82ee\": \"violet\",\n \"#f5deb3\": \"wheat\",\n white: \"#fff\",\n whitesmoke: \"#f5f5f5\",\n yellow: \"#ff0\",\n yellowgreen: \"#9acd32\",\n};\n\ntype SyntaxPropertyName = \"animation-duration\" | \"animation-delay\";\n\nexport type SyntaxName =\n | SyntaxPropertyName\n | \"abs()\"\n | \"absolute-size\"\n | \"acos()\"\n | \"alpha-value\"\n | \"an+b\"\n | \"anchor()\"\n | \"anchor-name\"\n | \"anchor-side\"\n | \"anchor-size\"\n | \"anchor-size()\"\n | \"angle-percentage\"\n | \"angular-color-hint\"\n | \"angular-color-stop\"\n | \"angular-color-stop-list\"\n | \"animateable-feature\"\n | \"asin()\"\n | \"atan()\"\n | \"atan2()\"\n | \"attachment\"\n | \"attr()\"\n | \"attr-matcher\"\n | \"attr-modifier\"\n | \"attr-type\"\n | \"attribute-selector\"\n | \"auto-repeat\"\n | \"auto-track-list\"\n | \"axis\"\n | \"baseline-position\"\n | \"basic-shape\"\n | \"basic-shape-rect\"\n | \"bg-clip\"\n | \"bg-image\"\n | \"bg-layer\"\n | \"bg-position\"\n | \"bg-size\"\n | \"blend-mode\"\n | \"blur()\"\n | \"brightness()\"\n | \"calc()\"\n | \"calc-constant\"\n | \"calc-product\"\n | \"calc-size()\"\n | \"calc-size-basis\"\n | \"calc-sum\"\n | \"calc-value\"\n | \"cf-final-image\"\n | \"cf-mixing-image\"\n | \"circle()\"\n | \"clamp()\"\n | \"class-selector\"\n | \"clip-source\"\n | \"color\"\n | \"color()\"\n | \"color-base\"\n | \"color-function\"\n | \"color-interpolation-method\"\n | \"color-mix()\"\n | \"color-stop\"\n | \"color-stop-angle\"\n | \"color-stop-length\"\n | \"color-stop-list\"\n | \"colorspace-params\"\n | \"combinator\"\n | \"common-lig-values\"\n | \"compat-auto\"\n | \"compat-special\"\n | \"complex-selector\"\n | \"complex-selector-list\"\n | \"composite-style\"\n | \"compositing-operator\"\n | \"compound-selector\"\n | \"compound-selector-list\"\n | \"conic-gradient()\"\n | \"conic-gradient-syntax\"\n | \"container-condition\"\n | \"container-name\"\n | \"container-query\"\n | \"content-distribution\"\n | \"content-list\"\n | \"content-position\"\n | \"content-replacement\"\n | \"contextual-alt-values\"\n | \"contrast()\"\n | \"coord-box\"\n | \"cos()\"\n | \"counter\"\n | \"counter()\"\n | \"counter-name\"\n | \"counter-style\"\n | \"counter-style-name\"\n | \"counters()\"\n | \"cross-fade()\"\n | \"cubic-bezier()\"\n | \"cubic-bezier-easing-function\"\n | \"cursor-predefined\"\n | \"custom-color-space\"\n | \"custom-params\"\n | \"dasharray\"\n | \"dashndashdigit-ident\"\n | \"deprecated-system-color\"\n | \"discretionary-lig-values\"\n | \"display-box\"\n | \"display-inside\"\n | \"display-internal\"\n | \"display-legacy\"\n | \"display-listitem\"\n | \"display-outside\"\n | \"drop-shadow()\"\n | \"easing-function\"\n | \"east-asian-variant-values\"\n | \"east-asian-width-values\"\n | \"element()\"\n | \"ellipse()\"\n | \"env()\"\n | \"exp()\"\n | \"explicit-track-list\"\n | \"family-name\"\n | \"feature-tag-value\"\n | \"feature-type\"\n | \"feature-value-block\"\n | \"feature-value-block-list\"\n | \"feature-value-declaration\"\n | \"feature-value-declaration-list\"\n | \"feature-value-name\"\n | \"filter-function\"\n | \"filter-value-list\"\n | \"final-bg-layer\"\n | \"fit-content()\"\n | \"fixed-breadth\"\n | \"fixed-repeat\"\n | \"fixed-size\"\n | \"font-stretch-absolute\"\n | \"font-variant-css2\"\n | \"font-weight-absolute\"\n | \"font-width-css3\"\n | \"form-control-identifier\"\n | \"frequency-percentage\"\n | \"generic-complete\"\n | \"general-enclosed\"\n | \"generic-family\"\n | \"generic-incomplete\"\n | \"geometry-box\"\n | \"gradient\"\n | \"grayscale()\"\n | \"grid-line\"\n | \"historical-lig-values\"\n | \"hsl()\"\n | \"hsla()\"\n | \"hue\"\n | \"hue-interpolation-method\"\n | \"hue-rotate()\"\n | \"hwb()\"\n | \"hypot()\"\n | \"id-selector\"\n | \"image\"\n | \"image()\"\n | \"image-set()\"\n | \"image-set-option\"\n | \"image-src\"\n | \"image-tags\"\n | \"inflexible-breadth\"\n | \"inset()\"\n | \"integer\"\n | \"invert()\"\n | \"keyframe-block\"\n | \"keyframe-selector\"\n | \"keyframes-name\"\n | \"lab()\"\n | \"layer()\"\n | \"layer-name\"\n | \"lch()\"\n | \"leader()\"\n | \"leader-type\"\n | \"length-percentage\"\n | \"light-dark()\"\n | \"line-name-list\"\n | \"line-names\"\n | \"line-style\"\n | \"line-width\"\n | \"linear()\"\n | \"linear-color-hint\"\n | \"linear-color-stop\"\n | \"linear-easing-function\"\n | \"linear-gradient()\"\n | \"linear-gradient-syntax\"\n | \"log()\"\n | \"mask-layer\"\n | \"mask-position\"\n | \"mask-reference\"\n | \"mask-source\"\n | \"masking-mode\"\n | \"matrix()\"\n | \"matrix3d()\"\n | \"max()\"\n | \"media-and\"\n | \"media-condition\"\n | \"media-condition-without-or\"\n | \"media-feature\"\n | \"media-in-parens\"\n | \"media-not\"\n | \"media-or\"\n | \"media-query\"\n | \"media-query-list\"\n | \"media-type\"\n | \"mf-boolean\"\n | \"mf-name\"\n | \"mf-plain\"\n | \"mf-range\"\n | \"mf-value\"\n | \"min()\"\n | \"minmax()\"\n | \"mod()\"\n | \"n-dimension\"\n | \"name-repeat\"\n | \"named-color\"\n | \"namespace-prefix\"\n | \"ndash-dimension\"\n | \"ndashdigit-dimension\"\n | \"ndashdigit-ident\"\n | \"ns-prefix\"\n | \"number-percentage\"\n | \"numeric-figure-values\"\n | \"numeric-fraction-values\"\n | \"numeric-spacing-values\"\n | \"offset-path\"\n | \"oklab()\"\n | \"oklch()\"\n | \"opacity()\"\n | \"opacity-value\"\n | \"outline-line-style\"\n | \"outline-radius\"\n | \"overflow-position\"\n | \"page-body\"\n | \"page-margin-box\"\n | \"page-margin-box-type\"\n | \"page-selector\"\n | \"page-selector-list\"\n | \"page-size\"\n | \"paint\"\n | \"paint()\"\n | \"paint-box\"\n | \"palette-identifier\"\n | \"palette-mix()\"\n | \"path()\"\n | \"perspective()\"\n | \"polar-color-space\"\n | \"polygon()\"\n | \"position\"\n | \"position-area\"\n | \"pow()\"\n | \"predefined-rgb\"\n | \"predefined-rgb-params\"\n | \"pseudo-class-selector\"\n | \"pseudo-element-selector\"\n | \"pseudo-page\"\n | \"query-in-parens\"\n | \"quote\"\n | \"radial-extent\"\n | \"radial-gradient()\"\n | \"radial-gradient-syntax\"\n | \"radial-shape\"\n | \"radial-size\"\n | \"ratio\"\n | \"ray()\"\n | \"ray-size\"\n | \"rect()\"\n | \"rectangular-color-space\"\n | \"relative-selector\"\n | \"relative-selector-list\"\n | \"relative-size\"\n | \"rem()\"\n | \"repeat-style\"\n | \"repeating-conic-gradient()\"\n | \"repeating-linear-gradient()\"\n | \"repeating-radial-gradient()\"\n | \"reversed-counter-name\"\n | \"rgb()\"\n | \"rgba()\"\n | \"rotate()\"\n | \"rotate3d()\"\n | \"rotateX()\"\n | \"rotateY()\"\n | \"rotateZ()\"\n | \"round()\"\n | \"rounding-strategy\"\n | \"saturate()\"\n | \"scale()\"\n | \"scale3d()\"\n | \"scaleX()\"\n | \"scaleY()\"\n | \"scaleZ()\"\n | \"scope-end\"\n | \"scope-start\"\n | \"scroll()\"\n | \"scroller\"\n | \"scroll-state-feature\"\n | \"scroll-state-in-parens\"\n | \"scroll-state-query\"\n | \"selector-list\"\n | \"self-position\"\n | \"sepia()\"\n | \"shadow\"\n | \"shadow-t\"\n | \"shape\"\n | \"shape-box\"\n | \"side-or-corner\"\n | \"sign()\"\n | \"signed-integer\"\n | \"signless-integer\"\n | \"sin()\"\n | \"single-animation\"\n | \"single-animation-composition\"\n | \"single-animation-direction\"\n | \"single-animation-fill-mode\"\n | \"single-animation-iteration-count\"\n | \"single-animation-play-state\"\n | \"single-animation-timeline\"\n | \"single-transition\"\n | \"single-transition-property\"\n | \"size\"\n | \"size-feature\"\n | \"skew()\"\n | \"skewX()\"\n | \"skewY()\"\n | \"sqrt()\"\n | \"step-position\"\n | \"step-easing-function\"\n | \"steps()\"\n | \"style-feature\"\n | \"style-in-parens\"\n | \"style-query\"\n | \"subclass-selector\"\n | \"supports-condition\"\n | \"supports-decl\"\n | \"supports-feature\"\n | \"supports-in-parens\"\n | \"supports-selector-fn\"\n | \"symbol\"\n | \"symbols()\"\n | \"symbols-type\"\n | \"system-color\"\n | \"system-family-name\"\n | \"tan()\"\n | \"target\"\n | \"target-counter()\"\n | \"target-counters()\"\n | \"target-text()\"\n | \"text-edge\"\n | \"time-percentage\"\n | \"timeline-range-name\"\n | \"track-breadth\"\n | \"track-list\"\n | \"track-repeat\"\n | \"track-size\"\n | \"transform-function\"\n | \"transform-list\"\n | \"transition-behavior-value\"\n | \"translate()\"\n | \"translate3d()\"\n | \"translateX()\"\n | \"translateY()\"\n | \"translateZ()\"\n | \"try-size\"\n | \"try-tactic\"\n | \"type-or-unit\"\n | \"type-selector\"\n | \"var()\"\n | \"view()\"\n | \"viewport-length\"\n | \"visual-box\"\n | \"wq-name\"\n | \"xywh()\"\n | \"xyz\"\n | \"xyz-params\";\n","import type { ViteDevServer } from \"vite\";\n\nconst CSS_JS_REGEX = /\\.css\\.[jt]s/;\nconst IMPORT_REGEX =\n /import\\s+(?:[\\s\\S]*?\\s+from\\s+)?['\"]([^'\"]+\\.css(?:\\.[jt]s)?)['\"]/g;\n\nexport function cssJsLogger() {\n const processedFiles = new Map<string, Record<string, unknown>>();\n\n async function transform(\n code: string,\n id: string,\n devServer: ViteDevServer | null,\n ) {\n if (!devServer) return null;\n\n // Skip the .css.ts files themselves - we'll process them from their importers\n const cleanId = id.split(\"?\")[0];\n // if (CSS_JS_REGEX.test(cleanId)) return null;\n\n // Only check JS/TS files for imports\n if (!/\\.[jt]sx?$/.test(cleanId)) return null;\n\n const imports: string[] = [];\n let match;\n while ((match = IMPORT_REGEX.exec(code)) !== null) {\n imports.push(match[1]);\n }\n\n for (const specifier of imports) {\n // Get the import specifier\n if (!specifier) continue;\n\n if (!specifier.includes(\".css\")) continue;\n\n // Resolve the full path\n const resolved = await this.resolve(specifier, id);\n if (!resolved) continue;\n\n const resolvedPath = resolved.id.split(\"?\")[0];\n\n if (!CSS_JS_REGEX.test(resolvedPath)) continue;\n\n try {\n // Now it's safe to load - the module has already been transformed\n const moduleExports = await devServer.ssrLoadModule(resolvedPath);\n processedFiles.set(resolvedPath, moduleExports);\n } catch (error) {\n console.error(`\\n❌ Error processing ${resolvedPath}:`, error);\n }\n }\n\n return null;\n }\n\n return { processedFiles, transform };\n}\n","export type EvaluationResult = {\n confident: boolean;\n value: any;\n badNode?: babel.types.Node | null | undefined;\n};\n\nconst UNKNOWN = (badNode?: babel.types.Node | null | undefined) =>\n ({\n confident: false,\n value: undefined,\n badNode,\n }) as EvaluationResult;\nconst known = (value: any) => ({\n confident: true,\n value,\n});\n\nexport function evaluateBabelExpression(\n node: babel.types.Node | null | undefined,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n if (!node) return UNKNOWN(node);\n switch (node.type) {\n case \"ArrayExpression\":\n return evaluateArrayExpression(node, knownConstants);\n case \"BinaryExpression\":\n return evaluateBinaryExpression(node, knownConstants);\n case \"Identifier\":\n return evaluateIdentifier(node, knownConstants);\n case \"MemberExpression\":\n return evaluateMemberExpression(node, knownConstants);\n case \"NullLiteral\":\n return evaluateNullLiteral(node);\n case \"NumericLiteral\":\n return evaluateNumericLiteral(node);\n case \"ObjectExpression\":\n return evaluateObjectExpression(node, knownConstants);\n case \"StringLiteral\":\n return evaluateStringLiteral(node);\n case \"TemplateLiteral\":\n return evaluateTemplateLiteral(node, knownConstants);\n case \"UnaryExpression\":\n return evaluateUnaryExpression(node, knownConstants);\n default:\n return UNKNOWN(node);\n }\n}\n\nfunction evaluateArrayExpression(\n node: babel.types.ArrayExpression,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n const elements: any[] = [];\n for (const item of node.elements) {\n if (!item) return UNKNOWN(node);\n if (item.type === \"SpreadElement\") {\n const spreadElements = evaluateBabelExpression(\n item.argument,\n knownConstants,\n );\n if (spreadElements.confident) {\n elements.push(...spreadElements.value);\n continue;\n } else {\n return UNKNOWN(spreadElements.badNode);\n }\n }\n const result = evaluateBabelExpression(item, knownConstants);\n if (result.confident) {\n elements.push(result.value);\n } else {\n return UNKNOWN(result.badNode);\n }\n }\n\n return known(elements);\n}\n\nfunction evaluateBinaryExpression(\n node: babel.types.BinaryExpression,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n const left = evaluateBabelExpression(node.left, knownConstants);\n const right = evaluateBabelExpression(node.right, knownConstants);\n\n if (!left.confident) return UNKNOWN(left.badNode);\n if (!right.confident) return UNKNOWN(right.badNode);\n\n switch (node.operator) {\n case \"+\":\n return known(left.value + right.value);\n case \"-\":\n return known(left.value - right.value);\n case \"/\":\n return known(left.value / right.value);\n case \"%\":\n return known(left.value % right.value);\n case \"*\":\n return known(left.value * right.value);\n case \"**\":\n return known(left.value ** right.value);\n case \"&\":\n return known(left.value & right.value);\n case \"|\":\n return known(left.value | right.value);\n case \">>\":\n return known(left.value >> right.value);\n case \">>>\":\n return known(left.value >>> right.value);\n case \"<<\":\n return known(left.value << right.value);\n case \"^\":\n return known(left.value ^ right.value);\n case \"==\":\n return known(left.value == right.value);\n case \"===\":\n return known(left.value === right.value);\n case \"!=\":\n return known(left.value != right.value);\n case \"!==\":\n return known(left.value !== right.value);\n case \"in\":\n return known(left.value in right.value);\n case \"instanceof\":\n return known(left.value instanceof right.value);\n case \">\":\n return known(left.value > right.value);\n case \"<\":\n return known(left.value < right.value);\n case \">=\":\n return known(left.value >= right.value);\n case \"<=\":\n return known(left.value <= right.value);\n default:\n return UNKNOWN(node);\n }\n}\n\nfunction evaluateIdentifier(\n node: babel.types.Identifier,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n if (node.name in knownConstants) {\n return known(knownConstants[node.name]);\n }\n if (node.name === \"undefined\") {\n return known(undefined);\n }\n return UNKNOWN(node);\n}\n\nfunction evaluateMemberExpression(\n node: babel.types.MemberExpression,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n const obj = evaluateBabelExpression(node.object, knownConstants);\n\n const propertyNode = node.property;\n let property: EvaluationResult;\n if (node.computed) {\n property = evaluateBabelExpression(propertyNode, knownConstants);\n } else {\n if (propertyNode.type === \"Identifier\") {\n property = known(propertyNode.name);\n } else {\n return UNKNOWN(node);\n }\n }\n\n if (!obj.confident || !property.confident) return UNKNOWN(node);\n\n return known(obj.value[property.value]);\n}\n\nfunction evaluateNullLiteral(node: babel.types.NullLiteral): EvaluationResult {\n return known(null);\n}\n\nfunction evaluateNumericLiteral(\n node: babel.types.NumericLiteral,\n): EvaluationResult {\n return known(node.value);\n}\n\nfunction evaluateObjectExpression(\n node: babel.types.ObjectExpression,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n let result: any = {};\n\n for (const property of node.properties) {\n switch (property.type) {\n case \"ObjectMethod\":\n return UNKNOWN(property);\n case \"SpreadElement\": {\n const values = evaluateBabelExpression(\n property.argument,\n knownConstants,\n );\n if (values.confident) {\n result = {\n ...result,\n ...values.value,\n };\n continue;\n } else {\n return UNKNOWN(property);\n }\n }\n case \"ObjectProperty\": {\n const keyNode = property.key;\n let key: EvaluationResult;\n if (property.computed) {\n key = evaluateBabelExpression(keyNode, knownConstants);\n } else {\n if (keyNode.type === \"StringLiteral\") {\n key = known(keyNode.value);\n } else if (keyNode.type === \"Identifier\") {\n key = known(keyNode.name);\n } else {\n return UNKNOWN(property);\n }\n }\n const value = evaluateBabelExpression(property.value, knownConstants);\n if (!key || !key.confident || !value.confident)\n return UNKNOWN(property);\n result[key.value] = value.value;\n }\n }\n }\n\n return known(result);\n}\n\nfunction evaluateStringLiteral(\n node: babel.types.StringLiteral,\n): EvaluationResult {\n return known(node.value);\n}\n\nfunction evaluateTemplateLiteral(\n node: babel.types.TemplateLiteral,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n const quasisAsStrings = node.quasis.map((q) => q.value.cooked ?? q.value.raw);\n const expressions = node.expressions.map((e) =>\n evaluateBabelExpression(e, knownConstants),\n );\n if (expressions.some((e) => !e.confident)) {\n return UNKNOWN(node);\n }\n const expressionValues = expressions.map((e) => e.value);\n let result = \"\";\n for (let i = 0; i < quasisAsStrings.length; i++) {\n result += quasisAsStrings[i];\n if (i < expressionValues.length) {\n let value = expressionValues[i];\n result += value;\n }\n }\n return known(result);\n}\n\nfunction evaluateUnaryExpression(\n node: babel.types.UnaryExpression,\n knownConstants: Record<string, any>,\n): EvaluationResult {\n const argument = evaluateBabelExpression(node.argument, knownConstants);\n\n if (!argument.confident) return UNKNOWN(argument.badNode);\n\n switch (node.operator) {\n case \"+\":\n return known(+argument.value);\n case \"-\":\n return known(-argument.value);\n case \"void\":\n return known(void argument.value);\n case \"!\":\n return known(!argument.value);\n case \"~\":\n return known(~argument.value);\n case \"typeof\":\n return known(typeof argument.value);\n default:\n return UNKNOWN(node);\n }\n}\n","import type { CSSProperties } from \"./css-properties.js\";\n\nexport type {\n CSSProp,\n CSSProperties,\n CSSPropItem,\n CSSValue,\n} from \"./css-properties.js\";\n\n/**\n * The style object accepted by `styled()`: top-level CSS properties plus the\n * optional `variants` and `defaultVariants` keys.\n */\nexport type StyledStyleObject = CSSProperties & {\n variants?: Record<string, Record<string, CSSProperties>>;\n defaultVariants?: Record<string, string | number | boolean>;\n};\n\nexport function css(styleObject: CSSProperties): string {\n throw new Error(\"RAHHH\");\n}\n\nexport function keyframes(styleObject: Record<string, CSSProperties>): string {\n throw new Error(\"RAHHH\");\n}\n\nexport function styled(component: any, styleObject: StyledStyleObject): any {\n throw new Error(\"RAHHH\");\n}\n\nexport function variants<\n T extends Record<string, Record<string, CSSProperties>>,\n>(variantsObject: T): { [K in keyof T]: string } {\n throw new Error(\"RAHHH\");\n}\n\nexport function mergeClassNames(\n classNames: Array<string | boolean | null | undefined>,\n): string {\n let cleanNames = classNames\n .filter((element) => typeof element === \"string\")\n .join(\" \")\n .split(/\\s+/);\n\n let classMap = Object.create(null) as Record<string, string>;\n for (let className of cleanNames) {\n if (className.startsWith(\"x\") && className.includes(\"-\")) {\n classMap[className.split(\"-\")[0]!] = className;\n } else {\n classMap[className] = className;\n }\n }\n\n return Object.values(classMap).join(\" \");\n}\n","import { AnimationRules, StyleRule } from \"./style-rule.js\";\n\nexport function printStyleSheet({\n animations,\n getAnimationName,\n styleRules,\n styleRuleToClassName,\n}: {\n animations: AnimationRules[];\n getAnimationName: (rule: AnimationRules) => string;\n styleRules: StyleRule[];\n styleRuleToClassName: (styleRule: StyleRule) => string;\n}) {\n const keyframesSection = animations.map((animation) => {\n return `@keyframes ${getAnimationName(animation)} {\n${Object.entries(animation)\n .map(\n ([key, styleRules]) => ` ${key} {\n${styleRules.map((rule) => ` ${rule.property}: ${rule.value};`).join(\"\\n\")}\n }`,\n )\n .join(\"\\n\")}\n}`;\n });\n\n const tree = groupStyleRules(styleRules, []);\n const rulesSection = renderStyleRuleNode(tree, styleRuleToClassName);\n return keyframesSection + \"\\n\" + rulesSection;\n}\n\nfunction renderStyleRuleNode(\n node: StyleRuleNode,\n styleRuleToClassName: (styleRule: StyleRule) => string,\n indent = 0,\n): string {\n const rulesSection = node.rules\n .sort((a, b) => a.value.localeCompare(b.value))\n .sort((a, b) => a.property.localeCompare(b.property))\n .sort((a, b) => a.selector.length - b.selector.length)\n .sort((a, b) => a.atRules.length - b.atRules.length)\n .map((rule) => {\n const className = styleRuleToClassName(rule);\n return `${space(indent)}${rule.selector.replaceAll(\"&\", \".\" + className)} { ${rule.property}: ${rule.value} }`;\n })\n .join(\"\\n\");\n\n const childrenSection = node.children\n .map((node) => {\n return `${space(indent)}${node.atRule} {\n${renderStyleRuleNode(node, styleRuleToClassName, indent + 1)}\n${space(indent)}}`;\n })\n .join(\"\\n\");\n\n return [rulesSection, childrenSection].filter(Boolean).join(\"\\n\\n\");\n}\n\nfunction space(indent = 0) {\n return \"\".padEnd(indent * 2, \" \");\n}\n\ntype StyleRuleNode = {\n atRule: string | undefined;\n rules: StyleRule[];\n children: StyleRuleNode[];\n};\n\nfunction groupStyleRules(styleRules: StyleRule[], atRulesSoFar: string[]) {\n const matchingStyleRules = styleRules.filter(\n (r) => r.atRules.length === atRulesSoFar.length,\n );\n\n const nextAtRulesArr = styleRules\n .map((r) => r.atRules[atRulesSoFar.length])\n .filter(Boolean);\n\n const nextAtRulesSet = new Set(nextAtRulesArr);\n\n const node: StyleRuleNode = {\n atRule: atRulesSoFar.length\n ? atRulesSoFar[atRulesSoFar.length - 1]\n : undefined,\n rules: matchingStyleRules,\n children: [...nextAtRulesSet].map((atRule) =>\n groupStyleRules(\n styleRules.filter((r) => r.atRules[atRulesSoFar.length] === atRule),\n [...atRulesSoFar, atRule],\n ),\n ),\n };\n\n return node;\n}\n","// Started with letters first because I think it looks better\nconst ALPHABET = \"abcdefghijklmnopqrstuvwxyz0123456789\";\nconst ALPHABET_LENGTH = ALPHABET.length;\n\nfunction toChar63(number: number) {\n return ALPHABET[number - 1];\n}\n\n/**\n * Oops it's actually base 36, limited to lowercase letters and numbers for\n * better compression.\n */\nexport function toBase64ish(number: number): string {\n let string = \"\";\n let _number = number;\n\n while (_number > 0) {\n string = string + toChar63(_number % ALPHABET_LENGTH || ALPHABET_LENGTH);\n _number = Math.floor((_number - 1) / ALPHABET_LENGTH);\n }\n\n return string;\n}\n\n/** Returns the given value converted to camel-case. */\nexport const toCamelCase = (value: string) =>\n !/[A-Z]/.test(value)\n ? value.replace(/-[^]/g, (capital) => capital[1].toUpperCase())\n : value;\n\n/** Returns the given value converted to kebab-case. */\nexport const toKebabCase = (value: string) =>\n // ignore kebab-like values\n value.includes(\"-\")\n ? value\n : // replace any upper-case letter with a dash and the lower-case variant\n value.replace(/[A-Z]/g, (capital) => \"-\" + capital.toLowerCase());\n","import { mergeClassNames } from \"./index.js\";\nimport { printStyleSheet } from \"./print.js\";\nimport { toBase64ish } from \"./string.js\";\nimport { AnimationRules, StyleRule } from \"./style-rule.js\";\n\nfunction dedupeRules(rules: StyleRule[]) {\n return rules.filter((r, i, all) => {\n const firstIndex = all.findIndex(\n (r2) => r2.property === r.property && r2.value === r.value,\n );\n if (firstIndex === i) return true;\n return false;\n });\n}\n\nfunction dedupeAnimations(rules: AnimationRules[]) {\n return rules.filter((r, i, all) => {\n const firstIndex = all.findIndex(\n (r2) => JSON.stringify(r2) === JSON.stringify(r),\n );\n if (firstIndex === i) return true;\n return false;\n });\n}\n\nfunction createAnimationNameCache() {\n let cacheIndex = 1;\n let keyframesHashToAnimationName = new Map<string, string>();\n\n function createAnimationName() {\n return \"x\" + toBase64ish(cacheIndex++);\n }\n\n function getAnimationName(rule: AnimationRules) {\n const propertyHash = JSON.stringify(rule);\n\n let propertySegment = keyframesHashToAnimationName.get(propertyHash);\n if (!propertySegment) {\n propertySegment = createAnimationName();\n keyframesHashToAnimationName.set(propertyHash, propertySegment);\n }\n\n return propertySegment;\n }\n\n return { getAnimationName };\n}\n\nfunction createPropertyClassSegmentCache() {\n let propertyCacheIndex = 1;\n let propertyHashToClassSegment = new Map<string, string>();\n\n function createPropertyClassSegment() {\n return toBase64ish(propertyCacheIndex++);\n }\n\n function getPropertyClassSegment(rule: StyleRule) {\n let { selector, property, atRules } = rule;\n const propertyHash = [selector, property, ...atRules].join(\" $ \");\n\n let propertySegment = propertyHashToClassSegment.get(propertyHash);\n if (!propertySegment) {\n propertySegment = createPropertyClassSegment();\n propertyHashToClassSegment.set(propertyHash, propertySegment);\n }\n\n return propertySegment;\n }\n\n return { getPropertyClassSegment };\n}\n\nfunction createValueClassSegmentCache() {\n let valueCacheIndices = new Map<string, number>();\n function getValueCacheIndex(propertyHash: string) {\n return valueCacheIndices.get(propertyHash) || 1;\n }\n function incrementValueCacheIndex(propertyHash: string) {\n valueCacheIndices.set(propertyHash, getValueCacheIndex(propertyHash) + 1);\n }\n let valueClassSegmentCache: {\n [propertyClassSegment: string]: {\n [valueHash: string]: string;\n };\n } = {};\n function getValueClassSegmentFromCache(\n propertyHash: string,\n valueHash: string,\n ): string | undefined {\n return valueClassSegmentCache[propertyHash]?.[valueHash];\n }\n function setValueClassSegment(\n propertyHash: string,\n valueHash: string,\n valueClassSegment: string,\n ) {\n if (!valueClassSegmentCache[propertyHash]) {\n valueClassSegmentCache[propertyHash] = {};\n }\n valueClassSegmentCache[propertyHash][valueHash] = valueClassSegment;\n }\n function createValueClassSegment(propertyHash: string) {\n const idx = getValueCacheIndex(propertyHash);\n const valueClassSegment = toBase64ish(idx);\n incrementValueCacheIndex(propertyHash);\n return valueClassSegment;\n }\n\n function getValueClassSegment(rule: StyleRule, propertyHash: string) {\n let { value } = rule;\n\n const valueHash = value;\n let valueClassSegment = getValueClassSegmentFromCache(\n propertyHash,\n valueHash,\n );\n if (!valueClassSegment) {\n valueClassSegment = createValueClassSegment(propertyHash);\n setValueClassSegment(propertyHash, valueHash, valueClassSegment);\n }\n return valueClassSegment;\n }\n\n return { getValueClassSegment };\n}\n\nexport function createStyleCache() {\n let rules: StyleRule[] = [];\n let animations: AnimationRules[] = [];\n\n const { getPropertyClassSegment } = createPropertyClassSegmentCache();\n const { getValueClassSegment } = createValueClassSegmentCache();\n const { getAnimationName } = createAnimationNameCache();\n\n function styleRuleToClassName(rule: StyleRule) {\n let propertyClassSegment = getPropertyClassSegment(rule);\n let valueClassSegment = getValueClassSegment(rule, propertyClassSegment);\n\n const className = \"x\" + propertyClassSegment + \"-\" + valueClassSegment;\n\n return className;\n }\n\n return {\n getLength: () => rules.length,\n addRules: (r: StyleRule[]) => {\n rules.push(...r);\n rules = dedupeRules(rules);\n },\n getClassNames: (r: StyleRule[]) => {\n rules.push(...r);\n rules = dedupeRules(rules);\n return mergeClassNames(r.map(styleRuleToClassName));\n },\n getAnimationName: (keyframe: AnimationRules) => {\n animations.push(keyframe);\n animations = dedupeAnimations(animations);\n return getAnimationName(keyframe);\n },\n processStyleRules: () => {\n return printStyleSheet({\n animations,\n getAnimationName,\n styleRules: rules,\n styleRuleToClassName,\n });\n },\n };\n}\n\nexport type StyleCache = ReturnType<typeof createStyleCache>;\n","import { toKebabCase } from \"./string.js\";\nimport { StyleRule } from \"./style-rule.js\";\n\nexport type StyleObject = {\n [key in string]: string | number | StyleObject;\n};\n\nexport type KeyframesObject = {\n [key in string]: StyleObject;\n};\n\nfunction joinSingleSelector(a: string, b: string) {\n if (!b.includes(\"&\")) {\n if (b.includes(\" \")) {\n b = `& ${b}`;\n } else {\n if (/^[a-zA-Z]/.test(b) || b.startsWith(\"*\")) {\n b = `& ${b}`;\n } else {\n b = `&${b}`;\n }\n }\n }\n const selector = b.replaceAll(\"&\", a);\n\n return selector;\n}\n\nexport function joinSelectors(a: string, bs: string): string[] {\n const bsArray = bs.split(/,\\s*/);\n return bsArray.map((b) => joinSingleSelector(a, b.trim()));\n}\n\nexport type MacroFn = (arg: any) => void;\nexport type Macros = Record<string, (arg: any) => StyleObject>;\n\nexport function evaluateMacros(\n cssObj: StyleObject,\n macros: Macros,\n usedMacroKeys: string[] = [],\n) {\n return Object.fromEntries(\n Object.entries(cssObj).flatMap(([key, value]) => {\n const macro = macros[key];\n if (!macro || usedMacroKeys.includes(key)) {\n return [\n [\n key,\n typeof value === \"object\"\n ? evaluateMacros(value, macros, usedMacroKeys)\n : value,\n ],\n ];\n }\n const macrofied = macro(value);\n return Object.entries(macrofied).map(([key, value]) => [\n key,\n typeof value === \"object\"\n ? evaluateMacros(value, macros, [...usedMacroKeys, key])\n : value,\n ]);\n }),\n );\n}\n\nexport type Media = Record<string, string>;\n\nexport function evaluateMedia(cssObj: StyleObject, media: Media) {\n return Object.fromEntries(\n Object.entries(cssObj).map(([key, value]) => {\n value = typeof value === \"object\" ? evaluateMedia(value, media) : value;\n if (key.startsWith(\"@\")) {\n const thisMedia = media[key.slice(1)];\n if (thisMedia) {\n const newKey = `@media ${thisMedia}`;\n return [newKey, value];\n }\n }\n return [key, value];\n }),\n );\n}\n\nexport function flattenStyleObject(\n cssObj: StyleObject,\n selector = \"&\",\n atRules: string[] = [],\n): StyleRule[] {\n return Object.entries(cssObj).flatMap(([key, value]) => {\n if (typeof value === \"object\") {\n if (key.startsWith(\"@\")) {\n let newAtRule = key;\n return flattenStyleObject(value, selector, [...atRules, newAtRule]);\n }\n\n let nextSelectors = joinSelectors(selector, key);\n return nextSelectors.flatMap((nextSelector) => {\n return flattenStyleObject(value as StyleObject, nextSelector, atRules);\n });\n }\n\n const property = toKebabCase(key);\n\n if (typeof value === \"number\") {\n if (unitlessProps[property]) {\n value = value.toString();\n } else {\n value = value + \"px\";\n }\n }\n\n value = value.trim();\n let important = false;\n if (value.endsWith(\"!important\")) {\n important = true;\n value = value.slice(0, value.length - \"!important\".length);\n }\n\n return [\n {\n selector,\n property,\n value,\n atRules,\n important,\n },\n ];\n });\n}\n\n/** CSS Properties whose number values should not be auto-converted to pixels. */\nexport const unitlessProps: Record<string, number> = {\n \"animation-iteration-count\": 1,\n \"aspect-ratio\": 1,\n \"border-image-outset\": 1,\n \"border-image-slice\": 1,\n \"border-Image-width\": 1,\n \"box-flex\": 1,\n \"box-flex-group\": 1,\n \"box-ordinal-group\": 1,\n \"column-count\": 1,\n columns: 1,\n flex: 1,\n \"flex-grow\": 1,\n \"flex-positive\": 1,\n \"flex-shrink\": 1,\n \"flex-negative\": 1,\n \"flex-order\": 1,\n \"grid-row\": 1,\n \"grid-row-end\": 1,\n \"grid-row-span\": 1,\n \"grid-row-start\": 1,\n \"grid-column\": 1,\n \"grid-column-end\": 1,\n \"grid-column-span\": 1,\n \"grid-column-start\": 1,\n \"ms-grid-row\": 1,\n \"ms-grid-row-span\": 1,\n \"ms-grid-column\": 1,\n \"ms-grid-column-span\": 1,\n \"font-weight\": 1,\n \"line-height\": 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n \"tab-size\": 1,\n widows: 1,\n \"z-index\": 1,\n zoom: 1,\n \"-webkit-line-clamp\": 1,\n\n // SVG-related properties\n \"fill-opacity\": 1,\n \"flood-opacity\": 1,\n \"stop-opacity\": 1,\n \"stroke-dasharray\": 1,\n \"stroke-dashoffset\": 1,\n \"stroke-miterlimit\": 1,\n \"stroke-opacity\": 1,\n \"stroke-width\": 1,\n};\n"],"mappings":"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","names":["styleRules","node","key","value","styleCache"]}
|