@mochi-css/config 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +136 -0
- package/dist/index.d.mts +93 -0
- package/dist/index.d.ts +93 -0
- package/dist/index.js +540 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +505 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["filter: TransformationFilter<Data, Args>","fileFilter: TransformationFilter<FileTransformData, [FileTransformOptions]>","plugins: MochiPlugin[]","resolved: Config","MochiCSS","results: StyledCall[]","ast: SWC.Module","callsWithOffset: { entry: StyledCall; offset: number }[]","DUMMY_SPAN: SWC.Span"],"sources":["../src/merge.ts","../src/plugin/TransformationPipeline.ts","../src/plugin/globEx.ts","../src/plugin/Context.ts","../src/config/index.ts","../../vanilla/dist/index.mjs","../src/styledIdTransform.ts","../src/styledIdPlugin.ts"],"sourcesContent":["export function mergeArrays<T>(a: T[] | undefined, b: T[] | undefined): T[] | undefined {\n if (a !== undefined && b !== undefined) return a.concat(b)\n return a ?? b\n}\n\ntype Callback<T extends unknown[]> = (...args: T) => void\n\nexport function mergeCallbacks<T extends unknown[]>(\n a: Callback<T> | undefined,\n b: Callback<T> | undefined,\n): Callback<T> | undefined {\n if (a !== undefined && b !== undefined)\n return (...args: T) => {\n a(...args)\n b(...args)\n }\n return a ?? b\n}\n","type Transformation<T, Args extends unknown[]> = (value: T, ...args: Args) => T | Promise<T>\n\nexport interface TransformationHookProvider<T, Args extends unknown[] = [], Data = void> {\n registerTransformation(transformation: Transformation<T, Args>, data: Data): void\n}\n\nexport interface TransformationUser<T, Args extends unknown[] = []> {\n transform(value: T, ...args: Args): Promise<T>\n}\n\nexport class TransformationPipeline<T, Args extends unknown[] = []>\n implements TransformationHookProvider<T, Args>, TransformationUser<T, Args>\n{\n private readonly transformations: Transformation<T, Args>[] = []\n\n registerTransformation(transformation: Transformation<T, Args>): void {\n this.transformations.push(transformation)\n }\n\n async transform(value: T, ...args: Args): Promise<T> {\n let ret = value\n\n for (const transformation of this.transformations) {\n ret = await transformation(ret, ...args)\n }\n\n return ret\n }\n\n getTransformations() {\n return [...this.transformations]\n }\n}\n\nexport function makePipeline<T, Args extends unknown[] = []>(transformations: Transformation<T, Args>[]) {\n const ret = new TransformationPipeline<T, Args>()\n\n for (const transformation of transformations) {\n ret.registerTransformation(transformation)\n }\n\n return ret\n}\n\ntype TransformationWithContext<T, Args extends unknown[], Data> = { fn: Transformation<T, Args>; ctx: Data }\n\nexport type TransformationFilter<Data, Args extends unknown[]> = (this: void, data: Data, ...args: Args) => boolean\n\nexport class FilteredTransformationPipeline<T, Data, Args extends unknown[] = []>\n implements TransformationHookProvider<T, Args, Data>, TransformationUser<T, Args>\n{\n private readonly transformations: TransformationWithContext<T, Args, Data>[] = []\n\n constructor(private filter: TransformationFilter<Data, Args>) {}\n\n registerTransformation(transformation: Transformation<T, Args>, data: Data): void {\n this.transformations.push({ fn: transformation, ctx: data })\n }\n\n async transform(value: T, ...args: Args): Promise<T> {\n let ret = value\n\n for (const transformation of this.transformations) {\n if (!this.filter(transformation.ctx, ...args)) continue\n\n ret = await transformation.fn(ret, ...args)\n }\n\n return ret\n }\n\n getTransformations() {\n return [...this.transformations]\n }\n}\n\nexport function makeFilteredPipeline<T, Data, Args extends unknown[] = []>(\n filter: TransformationFilter<Data, Args>,\n transformations: TransformationWithContext<T, Args, Data>[],\n) {\n const ret = new FilteredTransformationPipeline<T, Data, Args>(filter)\n\n for (const transformation of transformations) {\n ret.registerTransformation(transformation.fn, transformation.ctx)\n }\n\n return ret\n}\n","function escapeRegexLiteral(s: string): string {\n return s.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n}\n\nfunction globToRegexBody(pattern: string): string {\n let result = \"\"\n let i = 0\n while (i < pattern.length) {\n const char = pattern.charAt(i)\n if (char === \"*\" && pattern.charAt(i + 1) === \"*\") {\n result += \".*\"\n i += 2\n if (pattern.charAt(i) === \"/\") i++\n } else if (char === \"*\") {\n result += \"[^/]*\"\n i++\n } else if (char === \"?\") {\n result += \"[^/]\"\n i++\n } else if (char === \"{\") {\n const end = pattern.indexOf(\"}\", i)\n if (end !== -1) {\n const alts = pattern\n .slice(i + 1, end)\n .split(\",\")\n .map(escapeRegexLiteral)\n result += `(${alts.join(\"|\")})`\n i = end + 1\n } else {\n result += \"\\\\{\"\n i++\n }\n } else {\n result += /[.+^$|()[\\]\\\\]/.test(char) ? `\\\\${char}` : char\n i++\n }\n }\n return result\n}\n\n/**\n * Converts a Turbopack loader filter glob pattern to a RegExp.\n * - No `/` in pattern → matches filename only (anchored to last path segment)\n * - Contains `/` → matches against the full project-relative path\n */\nexport function globExToRegex(pattern: string): RegExp {\n const isPathPattern = pattern.includes(\"/\")\n const body = globToRegexBody(pattern)\n return isPathPattern ? new RegExp(body) : new RegExp(`(?:^|/)${body}$`)\n}\n","import {\n FilteredTransformationPipeline,\n TransformationFilter,\n TransformationHookProvider,\n} from \"./TransformationPipeline\"\nimport { globExToRegex } from \"./globEx\"\nimport type { AstPostProcessor } from \"@mochi-css/builder\"\n\ntype FileTransformOptions = {\n filePath: string\n}\n\ntype FileTransformData = {\n filter?: string\n}\n\nconst fileFilterRegexCache = new Map<string, RegExp>()\n\nfunction getRegexForFilter(filter: string): RegExp {\n let regex = fileFilterRegexCache.get(filter)\n if (regex) return regex\n regex = globExToRegex(filter)\n fileFilterRegexCache.set(filter, regex)\n return regex\n}\n\nconst fileFilter: TransformationFilter<FileTransformData, [FileTransformOptions]> = ({ filter }, { filePath }) => {\n return filter === undefined || getRegexForFilter(filter).test(filePath)\n}\n\ntype FileTransformationHookProvider = TransformationHookProvider<string, [FileTransformOptions], FileTransformData>\nfunction makeFilePipeline(): FilteredTransformationPipeline<string, FileTransformData, [FileTransformOptions]> {\n return new FilteredTransformationPipeline<string, FileTransformData, [FileTransformOptions]>(fileFilter)\n}\n\nexport interface AnalysisTransformHookProvider {\n register(hook: AstPostProcessor): void\n}\n\nclass AnalysisHookCollector implements AnalysisTransformHookProvider {\n private readonly hooks: AstPostProcessor[] = []\n\n register(hook: AstPostProcessor): void {\n this.hooks.push(hook)\n }\n\n getHooks(): AstPostProcessor[] {\n return [...this.hooks]\n }\n}\n\nexport interface PluginContext {\n readonly sourceTransform: FileTransformationHookProvider\n readonly analysisTransform: AnalysisTransformHookProvider\n}\n\nexport class FullContext implements PluginContext {\n readonly sourceTransform = makeFilePipeline()\n readonly analysisTransform = new AnalysisHookCollector()\n\n public getAnalysisHooks(): AstPostProcessor[] {\n return this.analysisTransform.getHooks()\n }\n}\n","import { OnDiagnostic, RootEntry, StyleExtractor } from \"@mochi-css/builder\"\nimport { makePipeline, Plugin } from \"@/plugin\"\nimport { mergeArrays, mergeCallbacks } from \"@/merge\"\nimport path from \"path\"\nimport fs from \"fs\"\nimport { createJiti } from \"jiti\"\n\nexport interface Config {\n roots: RootEntry[]\n extractors: StyleExtractor[]\n splitCss: boolean\n onDiagnostic?: OnDiagnostic\n plugins: Plugin<Config>[]\n tmpDir?: string\n debug?: boolean\n}\n\nexport type MochiPlugin = Plugin<Config>\n\nexport function defineConfig(config: Partial<Config>): Partial<Config> {\n return config\n}\n\nexport async function resolveConfig(\n fileConfig: Partial<Config>,\n inlineConfig?: Partial<Config>,\n defaults?: Partial<Config>,\n): Promise<Config> {\n const plugins: MochiPlugin[] = mergeArrays(fileConfig.plugins, inlineConfig?.plugins) ?? defaults?.plugins ?? []\n\n const resolved: Config = {\n roots: mergeArrays(fileConfig.roots, inlineConfig?.roots) ?? defaults?.roots ?? [],\n extractors: mergeArrays(fileConfig.extractors, inlineConfig?.extractors) ?? defaults?.extractors ?? [],\n splitCss: inlineConfig?.splitCss ?? fileConfig.splitCss ?? defaults?.splitCss ?? false,\n onDiagnostic: mergeCallbacks(fileConfig.onDiagnostic, inlineConfig?.onDiagnostic),\n plugins,\n tmpDir: inlineConfig?.tmpDir ?? fileConfig.tmpDir ?? defaults?.tmpDir,\n debug: inlineConfig?.debug ?? fileConfig.debug ?? defaults?.debug,\n }\n\n return await makePipeline(\n plugins.map((plugin) => plugin.onConfigResolved).filter((c) => c !== undefined),\n ).transform(resolved)\n}\n\nconst configName = \"mochi.config\"\nconst extensions = [\"mts\", \"cts\", \"ts\", \"mjs\", \"cjs\", \"js\"]\n\nconst CONFIG_FILE_NAMES = extensions.map((ext: string) => `${configName}.${ext}`)\n\nexport async function loadConfig(cwd?: string): Promise<Partial<Config>> {\n const dir = cwd ?? process.cwd()\n const configFile = CONFIG_FILE_NAMES.map((name) => path.resolve(dir, name)).find((p) => fs.existsSync(p))\n\n if (!configFile) {\n return {}\n }\n\n const jiti = createJiti(import.meta.url)\n const mod = await jiti.import(configFile)\n const config =\n mod != null && typeof mod === \"object\" && \"default\" in mod ? (mod as { default: unknown }).default : mod\n\n if (config == null || typeof config !== \"object\") {\n return {}\n }\n\n return config as Config\n}\n","import clsx from \"clsx\";\n\n//#region src/token.ts\n/**\n* Represents a CSS custom property (design token) with type information.\n* Provides convenient access to both the variable name and its `var()` reference.\n* @template T - The expected value type of the token (for type checking)\n* @example\n* const primaryColor = new Token<string>('primary-color')\n* primaryColor.variable // '--primary-color'\n* primaryColor.value // 'var(--primary-color)'\n*/\nvar Token = class {\n\t/**\n\t* Creates a new CSS token.\n\t* @param name - The token name (without the `--` prefix)\n\t*/\n\tconstructor(name) {\n\t\tthis.name = name;\n\t}\n\t/**\n\t* Gets the CSS custom property name (with `--` prefix).\n\t* Use this when defining the variable.\n\t*/\n\tget variable() {\n\t\treturn `--${this.name}`;\n\t}\n\t/**\n\t* Gets the CSS `var()` reference to this token.\n\t* Use this when consuming the variable value.\n\t*/\n\tget value() {\n\t\treturn `var(${this.variable})`;\n\t}\n\t/**\n\t* Returns the variable name for string coercion.\n\t*/\n\ttoString() {\n\t\treturn this.variable;\n\t}\n};\n/**\n* Creates a new CSS design token.\n* @template T - The expected value type of the token\n* @param name - The token name (without the `--` prefix)\n* @returns A new Token instance\n* @example\n* const spacing = createToken<number>('spacing-md')\n* // Use in styles: { gap: spacing.value }\n*/\nfunction createToken(name) {\n\treturn new Token(name);\n}\n\n//#endregion\n//#region src/propertyUnits.generated.ts\nconst propertyUnits = {\n\tanimation: \"ms\",\n\tanimationDelay: \"ms\",\n\tanimationDuration: \"ms\",\n\tanimationRange: \"px\",\n\tanimationRangeCenter: \"px\",\n\tanimationRangeEnd: \"px\",\n\tanimationRangeStart: \"px\",\n\tbackground: \"px\",\n\tbackgroundPosition: \"px\",\n\tbackgroundPositionBlock: \"px\",\n\tbackgroundPositionInline: \"px\",\n\tbackgroundPositionX: \"px\",\n\tbackgroundPositionY: \"px\",\n\tbackgroundSize: \"px\",\n\tbackgroundTbd: \"px\",\n\tbaselineShift: \"px\",\n\tblockSize: \"px\",\n\tblockStep: \"px\",\n\tblockStepSize: \"px\",\n\tborder: \"px\",\n\tborderBlock: \"px\",\n\tborderBlockClip: \"px\",\n\tborderBlockEnd: \"px\",\n\tborderBlockEndClip: \"px\",\n\tborderBlockEndRadius: \"px\",\n\tborderBlockEndWidth: \"px\",\n\tborderBlockStart: \"px\",\n\tborderBlockStartClip: \"px\",\n\tborderBlockStartRadius: \"px\",\n\tborderBlockStartWidth: \"px\",\n\tborderBlockWidth: \"px\",\n\tborderBottom: \"px\",\n\tborderBottomClip: \"px\",\n\tborderBottomLeftRadius: \"px\",\n\tborderBottomRadius: \"px\",\n\tborderBottomRightRadius: \"px\",\n\tborderBottomWidth: \"px\",\n\tborderClip: \"px\",\n\tborderEndEndRadius: \"px\",\n\tborderEndStartRadius: \"px\",\n\tborderImage: \"%\",\n\tborderImageOutset: \"px\",\n\tborderImageSlice: \"%\",\n\tborderImageWidth: \"px\",\n\tborderInline: \"px\",\n\tborderInlineClip: \"px\",\n\tborderInlineEnd: \"px\",\n\tborderInlineEndClip: \"px\",\n\tborderInlineEndRadius: \"px\",\n\tborderInlineEndWidth: \"px\",\n\tborderInlineStart: \"px\",\n\tborderInlineStartClip: \"px\",\n\tborderInlineStartRadius: \"px\",\n\tborderInlineStartWidth: \"px\",\n\tborderInlineWidth: \"px\",\n\tborderLeft: \"px\",\n\tborderLeftClip: \"px\",\n\tborderLeftRadius: \"px\",\n\tborderLeftWidth: \"px\",\n\tborderLimit: \"px\",\n\tborderRadius: \"px\",\n\tborderRight: \"px\",\n\tborderRightClip: \"px\",\n\tborderRightRadius: \"px\",\n\tborderRightWidth: \"px\",\n\tborderSpacing: \"px\",\n\tborderStartEndRadius: \"px\",\n\tborderStartStartRadius: \"px\",\n\tborderTop: \"px\",\n\tborderTopClip: \"px\",\n\tborderTopLeftRadius: \"px\",\n\tborderTopRadius: \"px\",\n\tborderTopRightRadius: \"px\",\n\tborderTopWidth: \"px\",\n\tborderWidth: \"px\",\n\tbottom: \"px\",\n\tboxShadow: \"px\",\n\tboxShadowBlur: \"px\",\n\tboxShadowOffset: \"px\",\n\tboxShadowSpread: \"px\",\n\tcolumnGap: \"px\",\n\tcolumnHeight: \"px\",\n\tcolumnRule: \"px\",\n\tcolumnRuleEdgeInset: \"px\",\n\tcolumnRuleEdgeInsetEnd: \"px\",\n\tcolumnRuleEdgeInsetStart: \"px\",\n\tcolumnRuleInset: \"px\",\n\tcolumnRuleInsetEnd: \"px\",\n\tcolumnRuleInsetStart: \"px\",\n\tcolumnRuleInteriorInset: \"px\",\n\tcolumnRuleInteriorInsetEnd: \"px\",\n\tcolumnRuleInteriorInsetStart: \"px\",\n\tcolumnRuleWidth: \"px\",\n\tcolumns: \"px\",\n\tcolumnWidth: \"px\",\n\tcontainIntrinsicBlockSize: \"px\",\n\tcontainIntrinsicHeight: \"px\",\n\tcontainIntrinsicInlineSize: \"px\",\n\tcontainIntrinsicSize: \"px\",\n\tcontainIntrinsicWidth: \"px\",\n\tcorner: \"px\",\n\tcornerBlockEnd: \"px\",\n\tcornerBlockStart: \"px\",\n\tcornerBottom: \"px\",\n\tcornerBottomLeft: \"px\",\n\tcornerBottomRight: \"px\",\n\tcornerEndEnd: \"px\",\n\tcornerEndStart: \"px\",\n\tcornerInlineEnd: \"px\",\n\tcornerInlineStart: \"px\",\n\tcornerLeft: \"px\",\n\tcornerRight: \"px\",\n\tcornerStartEnd: \"px\",\n\tcornerStartStart: \"px\",\n\tcornerTop: \"px\",\n\tcornerTopLeft: \"px\",\n\tcornerTopRight: \"px\",\n\tcx: \"px\",\n\tcy: \"px\",\n\tfillOpacity: \"%\",\n\tfillPosition: \"px\",\n\tfillSize: \"px\",\n\tflex: \"px\",\n\tflexBasis: \"px\",\n\tfloatOffset: \"px\",\n\tfloodOpacity: \"%\",\n\tflowTolerance: \"px\",\n\tfont: \"deg\",\n\tfontSize: \"px\",\n\tfontStretch: \"%\",\n\tfontStyle: \"deg\",\n\tfontWidth: \"%\",\n\tgap: \"px\",\n\tgrid: \"px\",\n\tgridAutoColumns: \"px\",\n\tgridAutoRows: \"px\",\n\tgridColumnGap: \"px\",\n\tgridGap: \"px\",\n\tgridRowGap: \"px\",\n\tgridTemplate: \"px\",\n\tgridTemplateColumns: \"px\",\n\tgridTemplateRows: \"px\",\n\theight: \"px\",\n\thyphenateLimitZone: \"px\",\n\timageOrientation: \"deg\",\n\timageResolution: \"dppx\",\n\tinitialLetterWrap: \"px\",\n\tinlineSize: \"px\",\n\tinset: \"px\",\n\tinsetBlock: \"px\",\n\tinsetBlockEnd: \"px\",\n\tinsetBlockStart: \"px\",\n\tinsetInline: \"px\",\n\tinsetInlineEnd: \"px\",\n\tinsetInlineStart: \"px\",\n\tinterestDelay: \"ms\",\n\tinterestDelayEnd: \"ms\",\n\tinterestDelayStart: \"ms\",\n\titemFlow: \"px\",\n\tleft: \"px\",\n\tletterSpacing: \"px\",\n\tlineHeight: \"px\",\n\tlineHeightStep: \"px\",\n\tlinePadding: \"px\",\n\tmargin: \"px\",\n\tmarginBlock: \"px\",\n\tmarginBlockEnd: \"px\",\n\tmarginBlockStart: \"px\",\n\tmarginBottom: \"px\",\n\tmarginInline: \"px\",\n\tmarginInlineEnd: \"px\",\n\tmarginInlineStart: \"px\",\n\tmarginLeft: \"px\",\n\tmarginRight: \"px\",\n\tmarginTop: \"px\",\n\tmask: \"px\",\n\tmaskBorder: \"%\",\n\tmaskBorderOutset: \"px\",\n\tmaskBorderSlice: \"%\",\n\tmaskBorderWidth: \"px\",\n\tmaskPosition: \"px\",\n\tmaskSize: \"px\",\n\tmaxBlockSize: \"px\",\n\tmaxHeight: \"px\",\n\tmaxInlineSize: \"px\",\n\tmaxWidth: \"px\",\n\tminBlockSize: \"px\",\n\tminHeight: \"px\",\n\tminInlineSize: \"px\",\n\tminWidth: \"px\",\n\tobjectPosition: \"px\",\n\toffset: \"px\",\n\toffsetAnchor: \"px\",\n\toffsetDistance: \"px\",\n\toffsetPosition: \"px\",\n\toffsetRotate: \"deg\",\n\topacity: \"%\",\n\toutline: \"px\",\n\toutlineOffset: \"px\",\n\toutlineWidth: \"px\",\n\toverflowClipMargin: \"px\",\n\toverflowClipMarginBlock: \"px\",\n\toverflowClipMarginBlockEnd: \"px\",\n\toverflowClipMarginBlockStart: \"px\",\n\toverflowClipMarginBottom: \"px\",\n\toverflowClipMarginInline: \"px\",\n\toverflowClipMarginInlineEnd: \"px\",\n\toverflowClipMarginInlineStart: \"px\",\n\toverflowClipMarginLeft: \"px\",\n\toverflowClipMarginRight: \"px\",\n\toverflowClipMarginTop: \"px\",\n\tpadding: \"px\",\n\tpaddingBlock: \"px\",\n\tpaddingBlockEnd: \"px\",\n\tpaddingBlockStart: \"px\",\n\tpaddingBottom: \"px\",\n\tpaddingInline: \"px\",\n\tpaddingInlineEnd: \"px\",\n\tpaddingInlineStart: \"px\",\n\tpaddingLeft: \"px\",\n\tpaddingRight: \"px\",\n\tpaddingTop: \"px\",\n\tpause: \"ms\",\n\tpauseAfter: \"ms\",\n\tpauseBefore: \"ms\",\n\tperspective: \"px\",\n\tperspectiveOrigin: \"px\",\n\tr: \"px\",\n\trest: \"ms\",\n\trestAfter: \"ms\",\n\trestBefore: \"ms\",\n\tright: \"px\",\n\trotate: \"deg\",\n\trowGap: \"px\",\n\trowRule: \"px\",\n\trowRuleEdgeInset: \"px\",\n\trowRuleEdgeInsetEnd: \"px\",\n\trowRuleEdgeInsetStart: \"px\",\n\trowRuleInset: \"px\",\n\trowRuleInsetEnd: \"px\",\n\trowRuleInsetStart: \"px\",\n\trowRuleInteriorInset: \"px\",\n\trowRuleInteriorInsetEnd: \"px\",\n\trowRuleInteriorInsetStart: \"px\",\n\trowRuleWidth: \"px\",\n\trule: \"px\",\n\truleEdgeInset: \"px\",\n\truleInset: \"px\",\n\truleInsetEnd: \"px\",\n\truleInsetStart: \"px\",\n\truleInteriorInset: \"px\",\n\truleWidth: \"px\",\n\trx: \"px\",\n\try: \"px\",\n\tscale: \"%\",\n\tscrollMargin: \"px\",\n\tscrollMarginBlock: \"px\",\n\tscrollMarginBlockEnd: \"px\",\n\tscrollMarginBlockStart: \"px\",\n\tscrollMarginBottom: \"px\",\n\tscrollMarginInline: \"px\",\n\tscrollMarginInlineEnd: \"px\",\n\tscrollMarginInlineStart: \"px\",\n\tscrollMarginLeft: \"px\",\n\tscrollMarginRight: \"px\",\n\tscrollMarginTop: \"px\",\n\tscrollPadding: \"px\",\n\tscrollPaddingBlock: \"px\",\n\tscrollPaddingBlockEnd: \"px\",\n\tscrollPaddingBlockStart: \"px\",\n\tscrollPaddingBottom: \"px\",\n\tscrollPaddingInline: \"px\",\n\tscrollPaddingInlineEnd: \"px\",\n\tscrollPaddingInlineStart: \"px\",\n\tscrollPaddingLeft: \"px\",\n\tscrollPaddingRight: \"px\",\n\tscrollPaddingTop: \"px\",\n\tshapeImageThreshold: \"%\",\n\tshapeMargin: \"px\",\n\tshapePadding: \"px\",\n\tstopOpacity: \"%\",\n\tstrokeDasharray: \"px\",\n\tstrokeDashcorner: \"px\",\n\tstrokeDashCorner: \"px\",\n\tstrokeDashoffset: \"px\",\n\tstrokeOpacity: \"%\",\n\tstrokePosition: \"px\",\n\tstrokeSize: \"px\",\n\tstrokeWidth: \"px\",\n\ttabSize: \"px\",\n\ttextDecoration: \"px\",\n\ttextDecorationInset: \"px\",\n\ttextDecorationThickness: \"px\",\n\ttextIndent: \"px\",\n\ttextShadow: \"px\",\n\ttextSizeAdjust: \"%\",\n\ttextUnderlineOffset: \"px\",\n\ttimelineTrigger: \"px\",\n\ttimelineTriggerExitRange: \"px\",\n\ttimelineTriggerExitRangeEnd: \"px\",\n\ttimelineTriggerExitRangeStart: \"px\",\n\ttimelineTriggerRange: \"px\",\n\ttimelineTriggerRangeEnd: \"px\",\n\ttimelineTriggerRangeStart: \"px\",\n\ttop: \"px\",\n\ttransformOrigin: \"px\",\n\ttransition: \"ms\",\n\ttransitionDelay: \"ms\",\n\ttransitionDuration: \"ms\",\n\ttranslate: \"px\",\n\tverticalAlign: \"px\",\n\tviewTimeline: \"px\",\n\tviewTimelineInset: \"px\",\n\tvoiceDuration: \"ms\",\n\tvoicePitch: \"Hz\",\n\tvoiceRange: \"Hz\",\n\tvoiceRate: \"%\",\n\twidth: \"px\",\n\twordSpacing: \"px\",\n\tx: \"px\",\n\ty: \"px\",\n\tzoom: \"%\"\n};\n\n//#endregion\n//#region src/knownProperties.generated.ts\nconst knownPropertyNames = new Set([\n\t\"accentColor\",\n\t\"alignContent\",\n\t\"alignItems\",\n\t\"alignSelf\",\n\t\"alignmentBaseline\",\n\t\"all\",\n\t\"anchorName\",\n\t\"anchorScope\",\n\t\"animation\",\n\t\"animationComposition\",\n\t\"animationDelay\",\n\t\"animationDirection\",\n\t\"animationDuration\",\n\t\"animationFillMode\",\n\t\"animationIterationCount\",\n\t\"animationName\",\n\t\"animationPlayState\",\n\t\"animationRange\",\n\t\"animationRangeCenter\",\n\t\"animationRangeEnd\",\n\t\"animationRangeStart\",\n\t\"animationTimeline\",\n\t\"animationTimingFunction\",\n\t\"animationTrigger\",\n\t\"appearance\",\n\t\"aspectRatio\",\n\t\"backdropFilter\",\n\t\"backfaceVisibility\",\n\t\"background\",\n\t\"backgroundAttachment\",\n\t\"backgroundBlendMode\",\n\t\"backgroundClip\",\n\t\"backgroundColor\",\n\t\"backgroundImage\",\n\t\"backgroundOrigin\",\n\t\"backgroundPosition\",\n\t\"backgroundPositionBlock\",\n\t\"backgroundPositionInline\",\n\t\"backgroundPositionX\",\n\t\"backgroundPositionY\",\n\t\"backgroundRepeat\",\n\t\"backgroundRepeatBlock\",\n\t\"backgroundRepeatInline\",\n\t\"backgroundRepeatX\",\n\t\"backgroundRepeatY\",\n\t\"backgroundSize\",\n\t\"backgroundTbd\",\n\t\"baselineShift\",\n\t\"baselineSource\",\n\t\"blockEllipsis\",\n\t\"blockSize\",\n\t\"blockStep\",\n\t\"blockStepAlign\",\n\t\"blockStepInsert\",\n\t\"blockStepRound\",\n\t\"blockStepSize\",\n\t\"bookmarkLabel\",\n\t\"bookmarkLevel\",\n\t\"bookmarkState\",\n\t\"border\",\n\t\"borderBlock\",\n\t\"borderBlockClip\",\n\t\"borderBlockColor\",\n\t\"borderBlockEnd\",\n\t\"borderBlockEndClip\",\n\t\"borderBlockEndColor\",\n\t\"borderBlockEndRadius\",\n\t\"borderBlockEndStyle\",\n\t\"borderBlockEndWidth\",\n\t\"borderBlockStart\",\n\t\"borderBlockStartClip\",\n\t\"borderBlockStartColor\",\n\t\"borderBlockStartRadius\",\n\t\"borderBlockStartStyle\",\n\t\"borderBlockStartWidth\",\n\t\"borderBlockStyle\",\n\t\"borderBlockWidth\",\n\t\"borderBottom\",\n\t\"borderBottomClip\",\n\t\"borderBottomColor\",\n\t\"borderBottomLeftRadius\",\n\t\"borderBottomRadius\",\n\t\"borderBottomRightRadius\",\n\t\"borderBottomStyle\",\n\t\"borderBottomWidth\",\n\t\"borderBoundary\",\n\t\"borderClip\",\n\t\"borderCollapse\",\n\t\"borderColor\",\n\t\"borderEndEndRadius\",\n\t\"borderEndStartRadius\",\n\t\"borderImage\",\n\t\"borderImageOutset\",\n\t\"borderImageRepeat\",\n\t\"borderImageSlice\",\n\t\"borderImageSource\",\n\t\"borderImageWidth\",\n\t\"borderInline\",\n\t\"borderInlineClip\",\n\t\"borderInlineColor\",\n\t\"borderInlineEnd\",\n\t\"borderInlineEndClip\",\n\t\"borderInlineEndColor\",\n\t\"borderInlineEndRadius\",\n\t\"borderInlineEndStyle\",\n\t\"borderInlineEndWidth\",\n\t\"borderInlineStart\",\n\t\"borderInlineStartClip\",\n\t\"borderInlineStartColor\",\n\t\"borderInlineStartRadius\",\n\t\"borderInlineStartStyle\",\n\t\"borderInlineStartWidth\",\n\t\"borderInlineStyle\",\n\t\"borderInlineWidth\",\n\t\"borderLeft\",\n\t\"borderLeftClip\",\n\t\"borderLeftColor\",\n\t\"borderLeftRadius\",\n\t\"borderLeftStyle\",\n\t\"borderLeftWidth\",\n\t\"borderLimit\",\n\t\"borderRadius\",\n\t\"borderRight\",\n\t\"borderRightClip\",\n\t\"borderRightColor\",\n\t\"borderRightRadius\",\n\t\"borderRightStyle\",\n\t\"borderRightWidth\",\n\t\"borderShape\",\n\t\"borderSpacing\",\n\t\"borderStartEndRadius\",\n\t\"borderStartStartRadius\",\n\t\"borderStyle\",\n\t\"borderTop\",\n\t\"borderTopClip\",\n\t\"borderTopColor\",\n\t\"borderTopLeftRadius\",\n\t\"borderTopRadius\",\n\t\"borderTopRightRadius\",\n\t\"borderTopStyle\",\n\t\"borderTopWidth\",\n\t\"borderWidth\",\n\t\"bottom\",\n\t\"boxDecorationBreak\",\n\t\"boxShadow\",\n\t\"boxShadowBlur\",\n\t\"boxShadowColor\",\n\t\"boxShadowOffset\",\n\t\"boxShadowPosition\",\n\t\"boxShadowSpread\",\n\t\"boxSizing\",\n\t\"boxSnap\",\n\t\"breakAfter\",\n\t\"breakBefore\",\n\t\"breakInside\",\n\t\"captionSide\",\n\t\"caret\",\n\t\"caretAnimation\",\n\t\"caretColor\",\n\t\"caretShape\",\n\t\"clear\",\n\t\"clip\",\n\t\"clipPath\",\n\t\"clipRule\",\n\t\"color\",\n\t\"colorAdjust\",\n\t\"colorInterpolation\",\n\t\"colorInterpolationFilters\",\n\t\"colorScheme\",\n\t\"columnCount\",\n\t\"columnFill\",\n\t\"columnGap\",\n\t\"columnHeight\",\n\t\"columnRule\",\n\t\"columnRuleBreak\",\n\t\"columnRuleColor\",\n\t\"columnRuleEdgeInset\",\n\t\"columnRuleEdgeInsetEnd\",\n\t\"columnRuleEdgeInsetStart\",\n\t\"columnRuleInset\",\n\t\"columnRuleInsetEnd\",\n\t\"columnRuleInsetStart\",\n\t\"columnRuleInteriorInset\",\n\t\"columnRuleInteriorInsetEnd\",\n\t\"columnRuleInteriorInsetStart\",\n\t\"columnRuleStyle\",\n\t\"columnRuleWidth\",\n\t\"columnSpan\",\n\t\"columnWidth\",\n\t\"columnWrap\",\n\t\"columns\",\n\t\"contain\",\n\t\"containIntrinsicBlockSize\",\n\t\"containIntrinsicHeight\",\n\t\"containIntrinsicInlineSize\",\n\t\"containIntrinsicSize\",\n\t\"containIntrinsicWidth\",\n\t\"container\",\n\t\"containerName\",\n\t\"containerType\",\n\t\"content\",\n\t\"contentVisibility\",\n\t\"continue\",\n\t\"copyInto\",\n\t\"corner\",\n\t\"cornerBlockEnd\",\n\t\"cornerBlockEndShape\",\n\t\"cornerBlockStart\",\n\t\"cornerBlockStartShape\",\n\t\"cornerBottom\",\n\t\"cornerBottomLeft\",\n\t\"cornerBottomLeftShape\",\n\t\"cornerBottomRight\",\n\t\"cornerBottomRightShape\",\n\t\"cornerBottomShape\",\n\t\"cornerEndEnd\",\n\t\"cornerEndEndShape\",\n\t\"cornerEndStart\",\n\t\"cornerEndStartShape\",\n\t\"cornerInlineEnd\",\n\t\"cornerInlineEndShape\",\n\t\"cornerInlineStart\",\n\t\"cornerInlineStartShape\",\n\t\"cornerLeft\",\n\t\"cornerLeftShape\",\n\t\"cornerRight\",\n\t\"cornerRightShape\",\n\t\"cornerShape\",\n\t\"cornerStartEnd\",\n\t\"cornerStartEndShape\",\n\t\"cornerStartStart\",\n\t\"cornerStartStartShape\",\n\t\"cornerTop\",\n\t\"cornerTopLeft\",\n\t\"cornerTopLeftShape\",\n\t\"cornerTopRight\",\n\t\"cornerTopRightShape\",\n\t\"cornerTopShape\",\n\t\"counterIncrement\",\n\t\"counterReset\",\n\t\"counterSet\",\n\t\"cue\",\n\t\"cueAfter\",\n\t\"cueBefore\",\n\t\"cursor\",\n\t\"cx\",\n\t\"cy\",\n\t\"d\",\n\t\"direction\",\n\t\"display\",\n\t\"dominantBaseline\",\n\t\"dynamicRangeLimit\",\n\t\"emptyCells\",\n\t\"eventTrigger\",\n\t\"eventTriggerName\",\n\t\"eventTriggerSource\",\n\t\"fieldSizing\",\n\t\"fill\",\n\t\"fillBreak\",\n\t\"fillColor\",\n\t\"fillImage\",\n\t\"fillOpacity\",\n\t\"fillOrigin\",\n\t\"fillPosition\",\n\t\"fillRepeat\",\n\t\"fillRule\",\n\t\"fillSize\",\n\t\"filter\",\n\t\"flex\",\n\t\"flexBasis\",\n\t\"flexDirection\",\n\t\"flexFlow\",\n\t\"flexGrow\",\n\t\"flexShrink\",\n\t\"flexWrap\",\n\t\"float\",\n\t\"floatDefer\",\n\t\"floatOffset\",\n\t\"floatReference\",\n\t\"floodColor\",\n\t\"floodOpacity\",\n\t\"flowFrom\",\n\t\"flowInto\",\n\t\"flowTolerance\",\n\t\"font\",\n\t\"fontFamily\",\n\t\"fontFeatureSettings\",\n\t\"fontKerning\",\n\t\"fontLanguageOverride\",\n\t\"fontOpticalSizing\",\n\t\"fontPalette\",\n\t\"fontSize\",\n\t\"fontSizeAdjust\",\n\t\"fontStretch\",\n\t\"fontStyle\",\n\t\"fontSynthesis\",\n\t\"fontSynthesisPosition\",\n\t\"fontSynthesisSmallCaps\",\n\t\"fontSynthesisStyle\",\n\t\"fontSynthesisWeight\",\n\t\"fontVariant\",\n\t\"fontVariantAlternates\",\n\t\"fontVariantCaps\",\n\t\"fontVariantEastAsian\",\n\t\"fontVariantEmoji\",\n\t\"fontVariantLigatures\",\n\t\"fontVariantNumeric\",\n\t\"fontVariantPosition\",\n\t\"fontVariationSettings\",\n\t\"fontWeight\",\n\t\"fontWidth\",\n\t\"footnoteDisplay\",\n\t\"footnotePolicy\",\n\t\"forcedColorAdjust\",\n\t\"gap\",\n\t\"glyphOrientationVertical\",\n\t\"grid\",\n\t\"gridArea\",\n\t\"gridAutoColumns\",\n\t\"gridAutoFlow\",\n\t\"gridAutoRows\",\n\t\"gridColumn\",\n\t\"gridColumnEnd\",\n\t\"gridColumnGap\",\n\t\"gridColumnStart\",\n\t\"gridGap\",\n\t\"gridRow\",\n\t\"gridRowEnd\",\n\t\"gridRowGap\",\n\t\"gridRowStart\",\n\t\"gridTemplate\",\n\t\"gridTemplateAreas\",\n\t\"gridTemplateColumns\",\n\t\"gridTemplateRows\",\n\t\"hangingPunctuation\",\n\t\"height\",\n\t\"hyphenateCharacter\",\n\t\"hyphenateLimitChars\",\n\t\"hyphenateLimitLast\",\n\t\"hyphenateLimitLines\",\n\t\"hyphenateLimitZone\",\n\t\"hyphens\",\n\t\"imageOrientation\",\n\t\"imageRendering\",\n\t\"imageResolution\",\n\t\"initialLetter\",\n\t\"initialLetterAlign\",\n\t\"initialLetterWrap\",\n\t\"inlineSize\",\n\t\"inlineSizing\",\n\t\"inputSecurity\",\n\t\"inset\",\n\t\"insetBlock\",\n\t\"insetBlockEnd\",\n\t\"insetBlockStart\",\n\t\"insetInline\",\n\t\"insetInlineEnd\",\n\t\"insetInlineStart\",\n\t\"interactivity\",\n\t\"interestDelay\",\n\t\"interestDelayEnd\",\n\t\"interestDelayStart\",\n\t\"interpolateSize\",\n\t\"isolation\",\n\t\"itemCross\",\n\t\"itemDirection\",\n\t\"itemFlow\",\n\t\"itemPack\",\n\t\"itemTrack\",\n\t\"itemWrap\",\n\t\"justifyContent\",\n\t\"justifyItems\",\n\t\"justifySelf\",\n\t\"left\",\n\t\"letterSpacing\",\n\t\"lightingColor\",\n\t\"lineBreak\",\n\t\"lineClamp\",\n\t\"lineFitEdge\",\n\t\"lineGrid\",\n\t\"lineHeight\",\n\t\"lineHeightStep\",\n\t\"linePadding\",\n\t\"lineSnap\",\n\t\"linkParameters\",\n\t\"listStyle\",\n\t\"listStyleImage\",\n\t\"listStylePosition\",\n\t\"listStyleType\",\n\t\"margin\",\n\t\"marginBlock\",\n\t\"marginBlockEnd\",\n\t\"marginBlockStart\",\n\t\"marginBottom\",\n\t\"marginBreak\",\n\t\"marginInline\",\n\t\"marginInlineEnd\",\n\t\"marginInlineStart\",\n\t\"marginLeft\",\n\t\"marginRight\",\n\t\"marginTop\",\n\t\"marginTrim\",\n\t\"marker\",\n\t\"markerEnd\",\n\t\"markerMid\",\n\t\"markerSide\",\n\t\"markerStart\",\n\t\"mask\",\n\t\"maskBorder\",\n\t\"maskBorderMode\",\n\t\"maskBorderOutset\",\n\t\"maskBorderRepeat\",\n\t\"maskBorderSlice\",\n\t\"maskBorderSource\",\n\t\"maskBorderWidth\",\n\t\"maskClip\",\n\t\"maskComposite\",\n\t\"maskImage\",\n\t\"maskMode\",\n\t\"maskOrigin\",\n\t\"maskPosition\",\n\t\"maskRepeat\",\n\t\"maskSize\",\n\t\"maskType\",\n\t\"mathDepth\",\n\t\"mathShift\",\n\t\"mathStyle\",\n\t\"maxBlockSize\",\n\t\"maxHeight\",\n\t\"maxInlineSize\",\n\t\"maxLines\",\n\t\"maxWidth\",\n\t\"minBlockSize\",\n\t\"minHeight\",\n\t\"minInlineSize\",\n\t\"minIntrinsicSizing\",\n\t\"minWidth\",\n\t\"mixBlendMode\",\n\t\"navDown\",\n\t\"navLeft\",\n\t\"navRight\",\n\t\"navUp\",\n\t\"objectFit\",\n\t\"objectPosition\",\n\t\"objectViewBox\",\n\t\"offset\",\n\t\"offsetAnchor\",\n\t\"offsetDistance\",\n\t\"offsetPath\",\n\t\"offsetPosition\",\n\t\"offsetRotate\",\n\t\"opacity\",\n\t\"order\",\n\t\"orphans\",\n\t\"outline\",\n\t\"outlineColor\",\n\t\"outlineOffset\",\n\t\"outlineStyle\",\n\t\"outlineWidth\",\n\t\"overflow\",\n\t\"overflowAnchor\",\n\t\"overflowBlock\",\n\t\"overflowClipMargin\",\n\t\"overflowClipMarginBlock\",\n\t\"overflowClipMarginBlockEnd\",\n\t\"overflowClipMarginBlockStart\",\n\t\"overflowClipMarginBottom\",\n\t\"overflowClipMarginInline\",\n\t\"overflowClipMarginInlineEnd\",\n\t\"overflowClipMarginInlineStart\",\n\t\"overflowClipMarginLeft\",\n\t\"overflowClipMarginRight\",\n\t\"overflowClipMarginTop\",\n\t\"overflowInline\",\n\t\"overflowWrap\",\n\t\"overflowX\",\n\t\"overflowY\",\n\t\"overlay\",\n\t\"overscrollBehavior\",\n\t\"overscrollBehaviorBlock\",\n\t\"overscrollBehaviorInline\",\n\t\"overscrollBehaviorX\",\n\t\"overscrollBehaviorY\",\n\t\"padding\",\n\t\"paddingBlock\",\n\t\"paddingBlockEnd\",\n\t\"paddingBlockStart\",\n\t\"paddingBottom\",\n\t\"paddingInline\",\n\t\"paddingInlineEnd\",\n\t\"paddingInlineStart\",\n\t\"paddingLeft\",\n\t\"paddingRight\",\n\t\"paddingTop\",\n\t\"page\",\n\t\"pageBreakAfter\",\n\t\"pageBreakBefore\",\n\t\"pageBreakInside\",\n\t\"paintOrder\",\n\t\"pause\",\n\t\"pauseAfter\",\n\t\"pauseBefore\",\n\t\"perspective\",\n\t\"perspectiveOrigin\",\n\t\"placeContent\",\n\t\"placeItems\",\n\t\"placeSelf\",\n\t\"pointerEvents\",\n\t\"pointerTimeline\",\n\t\"pointerTimelineAxis\",\n\t\"pointerTimelineName\",\n\t\"position\",\n\t\"positionAnchor\",\n\t\"positionArea\",\n\t\"positionTry\",\n\t\"positionTryFallbacks\",\n\t\"positionTryOrder\",\n\t\"positionVisibility\",\n\t\"printColorAdjust\",\n\t\"quotes\",\n\t\"r\",\n\t\"readingFlow\",\n\t\"readingOrder\",\n\t\"regionFragment\",\n\t\"resize\",\n\t\"rest\",\n\t\"restAfter\",\n\t\"restBefore\",\n\t\"right\",\n\t\"rotate\",\n\t\"rowGap\",\n\t\"rowRule\",\n\t\"rowRuleBreak\",\n\t\"rowRuleColor\",\n\t\"rowRuleEdgeInset\",\n\t\"rowRuleEdgeInsetEnd\",\n\t\"rowRuleEdgeInsetStart\",\n\t\"rowRuleInset\",\n\t\"rowRuleInsetEnd\",\n\t\"rowRuleInsetStart\",\n\t\"rowRuleInteriorInset\",\n\t\"rowRuleInteriorInsetEnd\",\n\t\"rowRuleInteriorInsetStart\",\n\t\"rowRuleStyle\",\n\t\"rowRuleWidth\",\n\t\"rubyAlign\",\n\t\"rubyMerge\",\n\t\"rubyOverhang\",\n\t\"rubyPosition\",\n\t\"rule\",\n\t\"ruleBreak\",\n\t\"ruleColor\",\n\t\"ruleEdgeInset\",\n\t\"ruleInset\",\n\t\"ruleInsetEnd\",\n\t\"ruleInsetStart\",\n\t\"ruleInteriorInset\",\n\t\"ruleOverlap\",\n\t\"ruleStyle\",\n\t\"ruleWidth\",\n\t\"rx\",\n\t\"ry\",\n\t\"scale\",\n\t\"scrollBehavior\",\n\t\"scrollInitialTarget\",\n\t\"scrollMargin\",\n\t\"scrollMarginBlock\",\n\t\"scrollMarginBlockEnd\",\n\t\"scrollMarginBlockStart\",\n\t\"scrollMarginBottom\",\n\t\"scrollMarginInline\",\n\t\"scrollMarginInlineEnd\",\n\t\"scrollMarginInlineStart\",\n\t\"scrollMarginLeft\",\n\t\"scrollMarginRight\",\n\t\"scrollMarginTop\",\n\t\"scrollMarkerGroup\",\n\t\"scrollPadding\",\n\t\"scrollPaddingBlock\",\n\t\"scrollPaddingBlockEnd\",\n\t\"scrollPaddingBlockStart\",\n\t\"scrollPaddingBottom\",\n\t\"scrollPaddingInline\",\n\t\"scrollPaddingInlineEnd\",\n\t\"scrollPaddingInlineStart\",\n\t\"scrollPaddingLeft\",\n\t\"scrollPaddingRight\",\n\t\"scrollPaddingTop\",\n\t\"scrollSnapAlign\",\n\t\"scrollSnapStop\",\n\t\"scrollSnapType\",\n\t\"scrollTargetGroup\",\n\t\"scrollTimeline\",\n\t\"scrollTimelineAxis\",\n\t\"scrollTimelineName\",\n\t\"scrollbarColor\",\n\t\"scrollbarGutter\",\n\t\"scrollbarWidth\",\n\t\"shapeImageThreshold\",\n\t\"shapeInside\",\n\t\"shapeMargin\",\n\t\"shapeOutside\",\n\t\"shapePadding\",\n\t\"shapeRendering\",\n\t\"shapeSubtract\",\n\t\"sliderOrientation\",\n\t\"spatialNavigationAction\",\n\t\"spatialNavigationContain\",\n\t\"spatialNavigationFunction\",\n\t\"speak\",\n\t\"speakAs\",\n\t\"stopColor\",\n\t\"stopOpacity\",\n\t\"stringSet\",\n\t\"stroke\",\n\t\"strokeAlign\",\n\t\"strokeAlignment\",\n\t\"strokeBreak\",\n\t\"strokeColor\",\n\t\"strokeDashCorner\",\n\t\"strokeDashJustify\",\n\t\"strokeDashadjust\",\n\t\"strokeDasharray\",\n\t\"strokeDashcorner\",\n\t\"strokeDashoffset\",\n\t\"strokeImage\",\n\t\"strokeLinecap\",\n\t\"strokeLinejoin\",\n\t\"strokeMiterlimit\",\n\t\"strokeOpacity\",\n\t\"strokeOrigin\",\n\t\"strokePosition\",\n\t\"strokeRepeat\",\n\t\"strokeSize\",\n\t\"strokeWidth\",\n\t\"tabSize\",\n\t\"tableLayout\",\n\t\"textAlign\",\n\t\"textAlignAll\",\n\t\"textAlignLast\",\n\t\"textAnchor\",\n\t\"textAutospace\",\n\t\"textBox\",\n\t\"textBoxEdge\",\n\t\"textBoxTrim\",\n\t\"textCombineUpright\",\n\t\"textDecoration\",\n\t\"textDecorationColor\",\n\t\"textDecorationInset\",\n\t\"textDecorationLine\",\n\t\"textDecorationSkip\",\n\t\"textDecorationSkipBox\",\n\t\"textDecorationSkipInk\",\n\t\"textDecorationSkipSelf\",\n\t\"textDecorationSkipSpaces\",\n\t\"textDecorationStyle\",\n\t\"textDecorationThickness\",\n\t\"textEmphasis\",\n\t\"textEmphasisColor\",\n\t\"textEmphasisPosition\",\n\t\"textEmphasisSkip\",\n\t\"textEmphasisStyle\",\n\t\"textGroupAlign\",\n\t\"textIndent\",\n\t\"textJustify\",\n\t\"textOrientation\",\n\t\"textOverflow\",\n\t\"textRendering\",\n\t\"textShadow\",\n\t\"textSizeAdjust\",\n\t\"textSpacing\",\n\t\"textSpacingTrim\",\n\t\"textTransform\",\n\t\"textUnderlineOffset\",\n\t\"textUnderlinePosition\",\n\t\"textWrap\",\n\t\"textWrapMode\",\n\t\"textWrapStyle\",\n\t\"timelineScope\",\n\t\"timelineTrigger\",\n\t\"timelineTriggerExitRange\",\n\t\"timelineTriggerExitRangeEnd\",\n\t\"timelineTriggerExitRangeStart\",\n\t\"timelineTriggerName\",\n\t\"timelineTriggerRange\",\n\t\"timelineTriggerRangeEnd\",\n\t\"timelineTriggerRangeStart\",\n\t\"timelineTriggerSource\",\n\t\"top\",\n\t\"touchAction\",\n\t\"transform\",\n\t\"transformBox\",\n\t\"transformOrigin\",\n\t\"transformStyle\",\n\t\"transition\",\n\t\"transitionBehavior\",\n\t\"transitionDelay\",\n\t\"transitionDuration\",\n\t\"transitionProperty\",\n\t\"transitionTimingFunction\",\n\t\"translate\",\n\t\"triggerScope\",\n\t\"unicodeBidi\",\n\t\"userSelect\",\n\t\"vectorEffect\",\n\t\"verticalAlign\",\n\t\"viewTimeline\",\n\t\"viewTimelineAxis\",\n\t\"viewTimelineInset\",\n\t\"viewTimelineName\",\n\t\"viewTransitionClass\",\n\t\"viewTransitionGroup\",\n\t\"viewTransitionName\",\n\t\"viewTransitionScope\",\n\t\"visibility\",\n\t\"voiceBalance\",\n\t\"voiceDuration\",\n\t\"voiceFamily\",\n\t\"voicePitch\",\n\t\"voiceRange\",\n\t\"voiceRate\",\n\t\"voiceStress\",\n\t\"voiceVolume\",\n\t\"whiteSpace\",\n\t\"whiteSpaceCollapse\",\n\t\"whiteSpaceTrim\",\n\t\"widows\",\n\t\"width\",\n\t\"willChange\",\n\t\"wordBreak\",\n\t\"wordSpaceTransform\",\n\t\"wordSpacing\",\n\t\"wordWrap\",\n\t\"wrapAfter\",\n\t\"wrapBefore\",\n\t\"wrapFlow\",\n\t\"wrapInside\",\n\t\"wrapThrough\",\n\t\"writingMode\",\n\t\"x\",\n\t\"y\",\n\t\"zIndex\",\n\t\"zoom\"\n]);\n\n//#endregion\n//#region src/props.ts\n/**\n* Converts a kebab-case string to camelCase.\n*/\nfunction kebabToCamel(str) {\n\treturn str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n}\n/**\n* Converts a camelCase string to kebab-case.\n*/\nfunction camelToKebab(str) {\n\treturn str.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase());\n}\nfunction getUnitForProperty(propertyName) {\n\treturn propertyName in propertyUnits ? propertyUnits[propertyName] : void 0;\n}\n/**\n* Converts a CSS-like value to its string representation.\n* For properties with known units, numbers are automatically suffixed.\n*/\nfunction formatValue(value, propertyName, maxDepth = 10) {\n\tif (maxDepth <= 0) return \"\";\n\tif (typeof value === \"string\") return value;\n\tif (typeof value === \"number\") {\n\t\tconst unit = getUnitForProperty(propertyName);\n\t\tif (unit === \"%\") return `${value * 100}${unit}`;\n\t\tif (value === 0) return \"0\";\n\t\treturn unit ? `${value}${unit}` : value.toString();\n\t}\n\treturn formatValue(value.value, propertyName, maxDepth - 1);\n}\n/**\n* Checks if a property name is a CSS custom property (variable).\n*/\nfunction isCssVariableName(key) {\n\treturn key.startsWith(\"--\");\n}\n/**\n* Converts a CSS-like value to a string for use as a CSS variable value.\n* @param value - The value to convert (string, number, or wrapped value)\n* @param maxDepth - Maximum recursion depth for evaluating the value\n* @returns The string representation\n*/\nfunction asVar(value, maxDepth = 10) {\n\tif (maxDepth <= 0) return \"\";\n\tswitch (typeof value) {\n\t\tcase \"string\": return value;\n\t\tcase \"number\": return value.toString();\n\t\tdefault: return asVar(value.value, maxDepth - 1);\n\t}\n}\n/**\n* Checks if a property name is a known CSS property.\n*/\nfunction isKnownPropertyName(key) {\n\treturn knownPropertyNames.has(key);\n}\n/**\n* Converts a value to a CSS property string.\n* Automatically appends units to numeric values for properties that require them.\n* @param value - The value to convert\n* @param key - The CSS property name\n* @returns The formatted CSS value string\n*/\nfunction asKnownProp(value, key) {\n\treturn formatValue(value, key);\n}\n/**\n* Checks if a key represents a nested CSS selector.\n*/\nfunction isNestedSelector(key) {\n\treturn key.includes(\"&\");\n}\n/** Known at-rule prefixes that mochi-css recognizes */\nconst AT_RULE_PREFIXES = [\n\t\"@media \",\n\t\"@container \",\n\t\"@supports \",\n\t\"@layer \"\n];\n/**\n* Checks if a key represents a CSS at-rule (media, container, supports, layer).\n*/\nfunction isAtRuleKey(key) {\n\treturn AT_RULE_PREFIXES.some((p) => key.startsWith(p));\n}\n/**\n* Converts a SimpleStyleProps object to a CSS properties record.\n* Transforms camelCase property names to kebab-case and applies value converters.\n* @param props - The style properties object\n* @returns A record of CSS property names (kebab-case) to string values\n* @example\n* cssFromProps({ backgroundColor: 'blue', padding: 16 })\n* // { 'background-color': 'blue', 'padding': '16px' }\n*/\nfunction cssFromProps(props) {\n\treturn Object.fromEntries(Object.entries(props).map(([key, value]) => {\n\t\tif (value === void 0) return void 0;\n\t\tif (isCssVariableName(key)) return [key, asVar(value)];\n\t\tif (isKnownPropertyName(key)) return [camelToKebab(key), asKnownProp(value, key)];\n\t}).filter((v) => v !== void 0));\n}\n\n//#endregion\n//#region src/selector.ts\n/**\n* Immutable CSS selector builder that handles nested selectors and CSS at-rules.\n* Uses the `&` character as a placeholder for parent selector substitution.\n*\n* @example\n* const selector = new MochiSelector(['.button'])\n* selector.extend('&:hover').cssSelector // '.button:hover'\n* selector.wrap('@media (min-width: 768px)').atRules // ['@media (min-width: 768px)']\n*/\nvar MochiSelector = class MochiSelector {\n\t/**\n\t* Creates a new MochiSelector instance.\n\t* @param cssSelectors - Array of CSS selectors (may contain `&` placeholders)\n\t* @param atRules - Array of full CSS at-rule strings e.g. `\"@media (min-width: 768px)\"`\n\t*/\n\tconstructor(cssSelectors = [], atRules = []) {\n\t\tthis.cssSelectors = cssSelectors;\n\t\tthis.atRules = atRules;\n\t}\n\t/**\n\t* Gets the combined CSS selector string.\n\t* Multiple selectors are joined with commas.\n\t* @returns The CSS selector, or \"*\" if no selectors are defined\n\t*/\n\tget cssSelector() {\n\t\tif (this.cssSelectors.length === 0) return \"*\";\n\t\treturn this.cssSelectors.join(\", \");\n\t}\n\t/**\n\t* Substitutes all `&` placeholders with the given root selector.\n\t* @param root - The selector to replace `&` with\n\t* @returns A new MochiSelector with substituted selectors\n\t*/\n\tsubstitute(root) {\n\t\treturn new MochiSelector(this.cssSelectors.map((selector) => selector.replace(/&/g, root)), this.atRules);\n\t}\n\t/**\n\t* Extends this selector by nesting a child selector.\n\t* The `&` in the child selector is replaced with each parent selector.\n\t* @param child - The child selector pattern (must contain `&`)\n\t* @returns A new MochiSelector with the extended selectors\n\t* @example\n\t* new MochiSelector(['.btn']).extend('&:hover') // '.btn:hover'\n\t* new MochiSelector(['.btn']).extend('& .icon') // '.btn .icon'\n\t*/\n\textend(child) {\n\t\tif (!isNestedSelector(child)) return this;\n\t\tconst children = MochiSelector.split(child);\n\t\treturn new MochiSelector(this.cssSelectors.flatMap((parentSelector) => children.map((childSelector) => {\n\t\t\treturn childSelector.replace(/&/g, parentSelector);\n\t\t})), this.atRules);\n\t}\n\t/**\n\t* Wraps this selector with a CSS at-rule.\n\t* @param atRule - The full at-rule string (e.g. `\"@media (min-width: 768px)\"`)\n\t* @returns A new MochiSelector with the added at-rule, or unchanged if not a known at-rule\n\t* @example\n\t* selector.wrap('@media (min-width: 768px)') // Adds media query\n\t* selector.wrap('@container sidebar (min-width: 300px)') // Adds container query\n\t*/\n\twrap(atRule) {\n\t\tif (!isAtRuleKey(atRule)) return this;\n\t\treturn new MochiSelector(this.cssSelectors, [...this.atRules, atRule]);\n\t}\n\t/**\n\t* Splits a comma-separated selector string into individual selectors.\n\t* @param selector - The selector string to split\n\t* @returns Array of individual selector strings\n\t*/\n\tstatic split(selector) {\n\t\treturn [selector];\n\t}\n};\n\n//#endregion\n//#region src/hash.ts\n/**\n* Hashing utilities for generating short, deterministic class names.\n* Uses djb2 algorithm for fast string hashing.\n* @module hash\n*/\n/** Characters used for base-62 encoding (css-name safe variant of base-64) */\nconst hashBase = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\";\nconst base = 64;\n/**\n* Converts a number to a base-62 string representation.\n* @param num - The number to convert\n* @param maxLength - Optional maximum length of the output string\n* @returns Base-62 encoded string representation of the number\n*/\nfunction numberToBase62(num, maxLength) {\n\tlet out = \"\";\n\twhile (num > 0 && out.length < (maxLength ?? Infinity)) {\n\t\tout = hashBase[num % base] + out;\n\t\tnum = Math.floor(num / base);\n\t}\n\treturn out.length > 0 ? out : \"0\";\n}\n/**\n* Generates a short hash string from input using the djb2 algorithm.\n* Used to create unique, deterministic CSS class names from style content.\n* @param input - The string to hash\n* @param length - Maximum length of the hash output (default: 8)\n* @returns A short, css-safe hash string\n* @example\n* shortHash(\"color: red;\") // Returns something like \"A1b2C3d4\"\n*/\nfunction shortHash(input, length = 8) {\n\tlet h = 5381;\n\tfor (let i = 0; i < input.length; i++) h = h * 33 ^ input.charCodeAt(i);\n\th >>>= 0;\n\treturn numberToBase62(h, length);\n}\n\n//#endregion\n//#region src/compare.ts\n/**\n* String comparison utilities for deterministic sorting.\n* Used internally to ensure consistent CSS output order.\n* @module compare\n*/\n/**\n* Compares two strings lexicographically.\n*/\nfunction compareString(a, b) {\n\treturn a < b ? -1 : a === b ? 0 : 1;\n}\n/**\n* Compares two tuples by their first element (string key).\n* Useful for sorting Object.entries() results.\n*/\nfunction compareStringKey(a, b) {\n\treturn compareString(a[0], b[0]);\n}\n/**\n* Creates a comparator function for objects with a specific string property.\n* @param name - The property name to compare by\n* @returns A comparator function that compares objects by the specified property\n* @example\n* const items = [{ key: 'b' }, { key: 'a' }]\n* items.sort(stringPropComparator('key')) // [{ key: 'a' }, { key: 'b' }]\n*/\nfunction stringPropComparator(name) {\n\treturn (a, b) => compareString(a[name], b[name]);\n}\n\n//#endregion\n//#region src/cssObject.ts\n/**\n* Represents a single CSS rule block with properties and a selector.\n* Handles conversion to CSS string format and hash generation.\n*/\nvar CssObjectSubBlock = class CssObjectSubBlock {\n\t/**\n\t* Creates a new CSS sub-block.\n\t* @param cssProps - Map of CSS property names (kebab-case) to values\n\t* @param selector - The selector this block applies to\n\t*/\n\tconstructor(cssProps, selector) {\n\t\tthis.cssProps = cssProps;\n\t\tthis.selector = selector;\n\t}\n\t/**\n\t* Computes a deterministic hash of this block's CSS content.\n\t* Used for generating unique class names.\n\t*/\n\tget hash() {\n\t\treturn shortHash(this.asCssString(\"&\"));\n\t}\n\t/**\n\t* Converts this block to a CSS string.\n\t* Handles at-rule wrapping (media, container, supports, layer) if present.\n\t* Multiple at-rules are nested in order.\n\t* @param root - The root selector to substitute for `&`\n\t* @returns Formatted CSS string\n\t*/\n\tasCssString(root) {\n\t\tconst selector = this.selector.substitute(root);\n\t\tconst atRules = selector.atRules;\n\t\tconst innerIndent = \" \".repeat(atRules.length);\n\t\tconst props = Object.entries(this.cssProps).toSorted(compareStringKey).map(([k, v]) => `${innerIndent} ${k}: ${v};\\n`).join(\"\");\n\t\tlet result = `${innerIndent}${selector.cssSelector} {\\n${props}${innerIndent}}`;\n\t\tfor (let i = atRules.length - 1; i >= 0; i--) {\n\t\t\tconst outerIndent = \" \".repeat(i);\n\t\t\tresult = `${outerIndent}${atRules[i]} {\\n${result}\\n${outerIndent}}`;\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\t* Parses StyleProps into an array of CSS sub-blocks.\n\t* Recursively processes nested selectors and media queries.\n\t* Output order is deterministic for consistent hash generation.\n\t*\n\t* @param props - The style properties to parse\n\t* @param selector - The parent selector context (defaults to `&`)\n\t* @returns Non-empty array of sub-blocks (main block first, then nested)\n\t*/\n\tstatic fromProps(props, selector) {\n\t\tselector ??= new MochiSelector([\"&\"]);\n\t\tconst cssProps = {};\n\t\tconst propsToProcess = [];\n\t\tfor (const [key, value] of Object.entries(props)) {\n\t\t\tif (value === void 0) continue;\n\t\t\tif (isCssVariableName(key)) {\n\t\t\t\tcssProps[key] = asVar(value);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (isKnownPropertyName(key)) {\n\t\t\t\tcssProps[camelToKebab(key)] = asKnownProp(value, key);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (isNestedSelector(key)) {\n\t\t\t\tpropsToProcess.push({\n\t\t\t\t\tkey,\n\t\t\t\t\tprops: value,\n\t\t\t\t\tselector: selector.extend(key)\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (isAtRuleKey(key)) {\n\t\t\t\tpropsToProcess.push({\n\t\t\t\t\tkey,\n\t\t\t\t\tprops: value,\n\t\t\t\t\tselector: selector.wrap(key)\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (process.env[\"NODE_ENV\"] !== \"production\") console.warn(`[mochi-css] Unknown style property \"${key}\" will be ignored`);\n\t\t}\n\t\treturn [new CssObjectSubBlock(cssProps, selector), ...propsToProcess.toSorted(stringPropComparator(\"key\")).flatMap(({ props: props$1, selector: selector$1 }) => CssObjectSubBlock.fromProps(props$1, selector$1))];\n\t}\n};\n/**\n* Represents an abstract CSS block definition.\n* Contains one or more sub-blocks for nested selectors and media queries.\n*/\nvar CssObjectBlock = class {\n\t/** The generated unique class name for this block */\n\tclassName;\n\t/** All sub-blocks (main styles and nested/media rules) */\n\tsubBlocks = [];\n\t/**\n\t* Creates a new CSS block from style properties.\n\t* Generates a unique class name based on the content hash, or uses the provided class name.\n\t* @param styles - The style properties to compile\n\t* @param className - Optional stable class name; if omitted, a content-hash-based name is generated\n\t*/\n\tconstructor(styles, className) {\n\t\tconst blocks = CssObjectSubBlock.fromProps(styles);\n\t\tthis.className = className ?? \"c\" + shortHash(blocks.map((b) => b.hash).join(\"+\"));\n\t\tthis.subBlocks = blocks;\n\t}\n\t/**\n\t* Gets the CSS class selector for this block.\n\t*/\n\tget selector() {\n\t\treturn `.${this.className}`;\n\t}\n\t/**\n\t* Converts style block to a CSS string.\n\t* @param root - The root selector to scope styles to\n\t* @returns Complete CSS string for this block\n\t*/\n\tasCssString(root) {\n\t\treturn this.subBlocks.map((b) => b.asCssString(new MochiSelector([root]).extend(`&.${this.className}`).cssSelector)).join(\"\\n\\n\");\n\t}\n};\n/**\n* Complete CSS object representation with main and variant styles.\n*\n* @template V - The variant definitions type\n*\n* @example\n* const obj = new CSSObject({\n* color: 'blue',\n* variants: {\n* size: {\n* small: { fontSize: 12 },\n* large: { fontSize: 18 }\n* }\n* },\n* defaultVariants: { size: 'small' }\n* })\n* obj.asCssString() // Returns complete CSS with all variants\n*/\nvar CSSObject = class {\n\t/** The main style block (non-variant styles) */\n\tmainBlock;\n\t/** Compiled blocks for each variant option */\n\tvariantBlocks;\n\t/** Default variant selections */\n\tvariantDefaults;\n\t/** Compound variant conditions and their parsed sub-blocks */\n\tcompoundVariants;\n\t/**\n\t* Creates a new CSSObject from style props.\n\t* Compiles main styles and all variant options into CSS blocks.\n\t* @param props - Base style props plus variant definitions\n\t* @param props.variants - Named variant groups, each mapping variant values to style props\n\t* @param props.defaultVariants - Default value for each variant when none is provided at runtime\n\t* @param props.compoundVariants - Style props applied when a specific combination of variants is active\n\t* @param className - Optional stable class name for the main block\n\t*/\n\tconstructor({ variants, defaultVariants, compoundVariants,...props }, className) {\n\t\tthis.mainBlock = new CssObjectBlock(props, className);\n\t\tthis.variantBlocks = {};\n\t\tthis.variantDefaults = defaultVariants ?? {};\n\t\tthis.compoundVariants = [];\n\t\tif (variants) for (const variantGroupName in variants) {\n\t\t\tthis.variantBlocks[variantGroupName] = {};\n\t\t\tconst variantGroup = variants[variantGroupName];\n\t\t\tfor (const variantItemName in variantGroup) this.variantBlocks[variantGroupName][variantItemName] = new CssObjectBlock(variantGroup[variantItemName] ?? {});\n\t\t}\n\t\tif (compoundVariants) for (const compound of compoundVariants) {\n\t\t\tconst { css: styles,...conditions } = compound;\n\t\t\tthis.compoundVariants.push({\n\t\t\t\tconditions,\n\t\t\t\tsubBlocks: CssObjectSubBlock.fromProps(styles)\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t* Serializes the entire CSS object to a CSS string.\n\t* Outputs main block first, then all variant blocks in sorted order.\n\t* @returns Complete CSS string ready for injection into a stylesheet\n\t*/\n\tasCssString() {\n\t\treturn [\n\t\t\tthis.mainBlock.asCssString(this.mainBlock.selector),\n\t\t\t...Object.entries(this.variantBlocks).toSorted(compareStringKey).flatMap(([_, b]) => Object.entries(b).toSorted(compareStringKey)).map(([_, b]) => b.asCssString(this.mainBlock.selector)),\n\t\t\t...this.compoundVariants.flatMap(({ conditions, subBlocks }) => {\n\t\t\t\tconst selectorParts = [];\n\t\t\t\tfor (const [variantName, optionName] of Object.entries(conditions).toSorted(compareStringKey)) {\n\t\t\t\t\tconst selector = this.variantBlocks[variantName]?.[optionName]?.selector;\n\t\t\t\t\tif (selector === void 0) return [];\n\t\t\t\t\tselectorParts.push(selector);\n\t\t\t\t}\n\t\t\t\tconst combinedSelector = `${this.mainBlock.selector}${selectorParts.join(\"\")}`;\n\t\t\t\treturn subBlocks.map((b) => b.asCssString(combinedSelector));\n\t\t\t})\n\t\t].join(\"\\n\\n\");\n\t}\n};\n\n//#endregion\n//#region src/css.ts\nconst MOCHI_CSS_TYPEOF = Symbol.for(\"mochi-css.MochiCSS\");\nfunction isMochiCSS(value) {\n\treturn typeof value === \"object\" && value !== null && value[\"$$typeof\"] === MOCHI_CSS_TYPEOF;\n}\n/**\n* Runtime representation of a CSS style definition with variant support.\n* Holds generated class names and provides methods to compute the final\n* className string based on selected variants.\n*\n* @template V - The variant definitions type mapping variant names to their options\n*\n* @example\n* const styles = MochiCSS.from(new CSSObject({\n* color: 'blue',\n* variants: { size: { small: { fontSize: 12 }, large: { fontSize: 18 } } }\n* }))\n* styles.variant({ size: 'large' }) // Returns combined class names\n*/\nvar MochiCSS = class MochiCSS {\n\t$$typeof = MOCHI_CSS_TYPEOF;\n\t/**\n\t* Creates a new MochiCSS instance.\n\t* @param classNames - Base class names to always include\n\t* @param variantClassNames - Mapping of variant names to option class names\n\t* @param defaultVariants - Default variant selections when not specified\n\t*/\n\tconstructor(classNames, variantClassNames, defaultVariants) {\n\t\tthis.classNames = classNames;\n\t\tthis.variantClassNames = variantClassNames;\n\t\tthis.defaultVariants = defaultVariants;\n\t}\n\t/**\n\t* Computes the final className string based on variant selections.\n\t* Compound variants are handled purely via CSS combined selectors,\n\t* so no runtime matching is needed here.\n\t* @param props - Variant selections\n\t* @returns Combined className string for use in components\n\t*/\n\tvariant(props) {\n\t\tconst keys = new Set([...Object.keys(props), ...Object.keys(this.defaultVariants)].filter((k) => k in this.variantClassNames));\n\t\treturn clsx(this.classNames, ...keys.values().map((k) => {\n\t\t\tconst variantGroup = this.variantClassNames[k];\n\t\t\tif (!variantGroup) return false;\n\t\t\tconst variantKey = ((k in props ? props[k] : void 0) ?? this.defaultVariants[k])?.toString();\n\t\t\tif (variantKey == null) return false;\n\t\t\tconst selectedClassname = variantGroup[variantKey];\n\t\t\tif (selectedClassname !== void 0) return selectedClassname;\n\t\t\tconst defaultKey = this.defaultVariants[k];\n\t\t\tif (defaultKey == null) return false;\n\t\t\treturn variantGroup[defaultKey.toString()];\n\t\t}));\n\t}\n\t/**\n\t* Returns the CSS selector for this style (e.g. `.abc123`).\n\t* Useful for targeting this component from another style.\n\t*/\n\tget selector() {\n\t\treturn this.classNames.map((n) => `.${n}`).join();\n\t}\n\ttoString() {\n\t\treturn this.selector;\n\t}\n\t/**\n\t* Creates a MochiCSS instance from a CSSObject.\n\t* Extracts class names from the compiled CSS blocks.\n\t* @template V - The variant definitions type\n\t* @param object - The compiled CSSObject to extract from\n\t* @returns A new MochiCSS instance with the extracted class names\n\t*/\n\tstatic from(object) {\n\t\treturn new MochiCSS([object.mainBlock.className], Object.fromEntries(Object.entries(object.variantBlocks).map(([key, variantOptions]) => {\n\t\t\treturn [key, Object.fromEntries(Object.entries(variantOptions).map(([optionKey, block]) => {\n\t\t\t\treturn [optionKey, block.className];\n\t\t\t}))];\n\t\t})), object.variantDefaults);\n\t}\n};\n/**\n* Creates a CSS style definition.\n* The primary API for defining styles in Mochi-CSS.\n*\n* @template V - Tuple of variant definition types\n* @param props - One or more style objects or existing MochiCSS instances to merge\n* @returns A MochiCSS instance with all styles and variants combined\n*\n* @example\n* // Simple usage\n* const button = css({ padding: 8, borderRadius: 4 })\n*\n* @example\n* // With variants\n* const button = css({\n* padding: 8,\n* variants: {\n* size: {\n* small: { padding: 4 },\n* large: { padding: 16 }\n* }\n* },\n* defaultVariants: { size: 'small' }\n* })\n* button.variant({ size: 'large' }) // Get class names for large size\n*\n* @example\n* // Merging multiple styles\n* const combined = css(baseStyles, additionalStyles)\n*/\nconst emptyMochiCSS = new MochiCSS([], {}, {});\n/**\n* Merges multiple MochiCSS instances into a single one, combining their\n* class names, variant class names, and default variants.\n* @param instances - The MochiCSS instances to merge\n* @returns A new MochiCSS instance with all styles combined\n*/\nfunction mergeMochiCss(instances) {\n\tif (instances.length === 0) return emptyMochiCSS;\n\treturn new MochiCSS(instances.flatMap((c) => c.classNames), instances.reduce((a, b) => Object.assign(a, b.variantClassNames), {}), instances.reduce((a, b) => Object.assign(a, b.defaultVariants), {}));\n}\nfunction css(...props) {\n\tconst cssToMerge = [];\n\tfor (const p of props) {\n\t\tif (p == null) continue;\n\t\tif (typeof p === \"string\") {\n\t\t\tcssToMerge.push(new MochiCSS([p], {}, {}));\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof p !== \"object\") continue;\n\t\tif (p instanceof MochiCSS) cssToMerge.push(p);\n\t\telse cssToMerge.push(MochiCSS.from(new CSSObject(p)));\n\t}\n\treturn mergeMochiCss(cssToMerge);\n}\n\n//#endregion\n//#region src/keyframesObject.ts\nvar KeyframesObject = class KeyframesObject {\n\tname;\n\tbody;\n\tconstructor(stops) {\n\t\tthis.body = KeyframesObject.generateBody(stops);\n\t\tthis.name = \"kf\" + shortHash(this.body);\n\t}\n\tasCssString() {\n\t\treturn `@keyframes ${this.name} {\\n${this.body}\\n}`;\n\t}\n\tstatic generateBody(stops) {\n\t\treturn Object.entries(stops).toSorted(compareStringKey).map(([stopKey, props]) => {\n\t\t\tconst cssProps = cssFromProps(props);\n\t\t\treturn ` ${stopKey} {\\n${Object.entries(cssProps).toSorted(compareStringKey).map(([k, v]) => ` ${k}: ${v};`).join(\"\\n\")}\\n }`;\n\t\t}).join(\"\\n\\n\");\n\t}\n};\n\n//#endregion\n//#region src/keyframes.ts\nvar MochiKeyframes = class MochiKeyframes {\n\tconstructor(name) {\n\t\tthis.name = name;\n\t}\n\ttoString() {\n\t\treturn this.name;\n\t}\n\tget value() {\n\t\treturn this.name;\n\t}\n\tstatic from(object) {\n\t\treturn new MochiKeyframes(object.name);\n\t}\n};\nfunction keyframes(stops) {\n\treturn MochiKeyframes.from(new KeyframesObject(stops));\n}\n\n//#endregion\n//#region src/globalCssObject.ts\n/**\n* CSS object model for global (non-scoped) styles.\n* Accepts a map of CSS selectors to style objects and serializes them\n* as plain CSS rules without class name scoping.\n*\n* @example\n* const obj = new GlobalCssObject({\n* body: { margin: 0 },\n* 'h1': { fontSize: 32 },\n* })\n* obj.asCssString() // \"body {\\n margin: 0;\\n}\\n\\nh1 {\\n font-size: 32px;\\n}\"\n*/\nvar GlobalCssObject = class {\n\trules;\n\tconstructor(styles) {\n\t\tthis.rules = Object.entries(styles).toSorted(compareStringKey).map(([selector, props]) => ({\n\t\t\tselector,\n\t\t\tsubBlocks: [...CssObjectSubBlock.fromProps(props)]\n\t\t}));\n\t}\n\tasCssString() {\n\t\treturn this.rules.flatMap(({ selector, subBlocks }) => subBlocks.map((b) => b.asCssString(selector))).join(\"\\n\\n\");\n\t}\n};\n\n//#endregion\n//#region src/globalCss.ts\n/**\n* Creates a global CSS definition.\n* Styles are not scoped to any class — they apply to all matching elements.\n*\n* @param styles - Map of CSS selectors to style objects\n*\n* @example\n* globalCss({\n* 'body': { margin: 0, padding: 0 },\n* '*, *::before, *::after': { boxSizing: 'border-box' },\n* })\n*/\nfunction globalCss(styles) {}\n\n//#endregion\n//#region src/query.ts\n/**\n* Wraps a condition in parentheses if not already wrapped.\n*/\nfunction wrapParens(condition) {\n\tconst trimmed = condition.trim();\n\tif (trimmed.startsWith(\"(\") && trimmed.endsWith(\")\")) return trimmed;\n\treturn `(${trimmed})`;\n}\nfunction mediaFn(condition) {\n\treturn `@media ${wrapParens(condition)}`;\n}\nmediaFn.and = function(...conditions) {\n\treturn `@media ${conditions.map(wrapParens).join(\" and \")}`;\n};\nmediaFn.or = function(...conditions) {\n\treturn `@media ${conditions.map(wrapParens).join(\", \")}`;\n};\nObject.defineProperties(mediaFn, {\n\tdark: {\n\t\tget: () => \"@media (prefers-color-scheme: dark)\",\n\t\tenumerable: true\n\t},\n\tlight: {\n\t\tget: () => \"@media (prefers-color-scheme: light)\",\n\t\tenumerable: true\n\t},\n\tmotion: {\n\t\tget: () => \"@media (prefers-reduced-motion: no-preference)\",\n\t\tenumerable: true\n\t},\n\tprint: {\n\t\tget: () => \"@media print\",\n\t\tenumerable: true\n\t}\n});\n/** Helper for constructing `@media` at-rule keys. */\nconst media = mediaFn;\nfunction containerFn(condition) {\n\treturn `@container ${wrapParens(condition)}`;\n}\ncontainerFn.named = function(name, condition) {\n\treturn `@container ${name} ${wrapParens(condition)}`;\n};\n/** Helper for constructing `@container` at-rule keys. */\nconst container = containerFn;\nfunction supportsFn(condition) {\n\treturn `@supports ${wrapParens(condition)}`;\n}\nsupportsFn.not = function(condition) {\n\treturn `@supports not ${wrapParens(condition)}`;\n};\nsupportsFn.and = function(...conditions) {\n\treturn `@supports ${conditions.map(wrapParens).join(\" and \")}`;\n};\nsupportsFn.or = function(...conditions) {\n\treturn `@supports ${conditions.map(wrapParens).join(\" or \")}`;\n};\n/** Helper for constructing `@supports` at-rule keys. */\nconst supports = supportsFn;\n\n//#endregion\nexport { CSSObject, CssObjectBlock, CssObjectSubBlock, GlobalCssObject, KeyframesObject, MochiCSS, MochiKeyframes, MochiSelector, Token, camelToKebab, container, createToken, css, cssFromProps, globalCss, isAtRuleKey, isMochiCSS, kebabToCamel, keyframes, media, mergeMochiCss, numberToBase62, shortHash, supports };\n//# sourceMappingURL=index.mjs.map","import * as SWC from \"@swc/core\"\nimport { shortHash } from \"@mochi-css/vanilla\"\n\nexport const STABLE_ID_RE = /^s-[0-9A-Za-z_-]+$/\n\nexport type StyledCall = {\n call: SWC.CallExpression\n varName: string | null\n}\n\nexport function collectStyledCalls(ast: SWC.Module): StyledCall[] {\n const results: StyledCall[] = []\n\n function visitExpr(expr: SWC.Expression, varName: string | null): void {\n if (expr.type === \"CallExpression\") {\n const callee = expr.callee\n const isStyled =\n (callee.type === \"Identifier\" && callee.value === \"styled\") ||\n (callee.type === \"MemberExpression\" &&\n callee.property.type === \"Identifier\" &&\n callee.property.value === \"styled\")\n if (isStyled) results.push({ call: expr, varName })\n for (const arg of expr.arguments) {\n visitExpr(arg.expression, null)\n }\n }\n }\n\n for (const item of ast.body) {\n if (item.type === \"VariableDeclaration\") {\n for (const d of item.declarations) {\n const name = d.id.type === \"Identifier\" ? d.id.value : null\n if (d.init) visitExpr(d.init, name)\n }\n } else if (item.type === \"ExportDeclaration\" && item.declaration.type === \"VariableDeclaration\") {\n for (const d of item.declaration.declarations) {\n const name = d.id.type === \"Identifier\" ? d.id.value : null\n if (d.init) visitExpr(d.init, name)\n }\n } else if (item.type === \"ExpressionStatement\") {\n visitExpr(item.expression, null)\n } else if (item.type === \"ExportDefaultExpression\") {\n visitExpr(item.expression, \"default\")\n }\n }\n\n return results\n}\n\n/**\n * Transforms source code to inject stable `s-` class IDs into every `styled()` call.\n * Idempotent: skips calls that already have an `s-` string as the last argument.\n */\nexport function transformStyledIds(source: string, filePath: string): string {\n if (!source.includes(\"styled\")) return source\n\n let ast: SWC.Module\n try {\n ast = SWC.parseSync(source, {\n syntax: \"typescript\",\n tsx: filePath.endsWith(\".tsx\"),\n target: \"es2022\",\n })\n } catch {\n return source\n }\n\n const calls = collectStyledCalls(ast)\n if (calls.length === 0) return source\n\n // Filter out calls that already have a stable s- id as the last arg\n const toInject = calls.filter((entry) => {\n const args = entry.call.arguments\n if (args.length === 0) return true\n const last = args[args.length - 1]\n return !(last?.expression.type === \"StringLiteral\" && STABLE_ID_RE.test(last.expression.value))\n })\n\n if (toInject.length === 0) return source\n\n // SWC BytePos values are globally accumulated across parseSync calls within the\n // same process (e.g. vitest). We must convert to local source offsets by computing\n // sourceGlobalBase = global position of source[0].\n //\n // Strategy: process calls in source order (ascending span.start), find each\n // \"styled(\" occurrence in the source with indexOf, and derive sourceGlobalBase\n // from the first call's known global position vs its local position in the source.\n const sortedAsc = [...toInject].sort((a, b) => a.call.span.start - b.call.span.start)\n let sourceGlobalBase = 0\n let searchFrom = 0\n const callsWithOffset: { entry: StyledCall; offset: number }[] = []\n for (const entry of sortedAsc) {\n const idx = source.indexOf(\"styled(\", searchFrom)\n if (idx < 0) continue\n if (callsWithOffset.length === 0) {\n // First call: derive sourceGlobalBase\n const callee = entry.call.callee\n const styledGlobal =\n callee.type === \"Identifier\" ? callee.span.start : (callee as SWC.MemberExpression).property.span.start\n sourceGlobalBase = styledGlobal - idx\n }\n callsWithOffset.push({ entry, offset: entry.call.span.end - sourceGlobalBase - 1 })\n searchFrom = idx + 1\n }\n\n // Sort descending by offset so earlier offsets stay valid after each insertion\n callsWithOffset.sort((a, b) => b.offset - a.offset)\n\n let result = source\n callsWithOffset.forEach(({ entry, offset }, i) => {\n const sortIdx = callsWithOffset.length - 1 - i\n const varName = entry.varName ?? String(sortIdx)\n const id = \"s-\" + shortHash(filePath + \":\" + varName)\n if (offset < 0 || offset >= result.length || result[offset] !== \")\") return\n result = result.slice(0, offset) + `, '${id}'` + result.slice(offset)\n })\n\n return result\n}\n","import * as SWC from \"@swc/core\"\nimport { shortHash } from \"@mochi-css/vanilla\"\nimport { transformStyledIds, collectStyledCalls, STABLE_ID_RE } from \"./styledIdTransform\"\nimport type { MochiPlugin } from \"@/config\"\n\nconst DUMMY_SPAN: SWC.Span = { start: 0, end: 0, ctxt: 0 }\n\nfunction hasStableId(call: SWC.CallExpression): boolean {\n const args = call.arguments\n if (args.length === 0) return false\n const last = args[args.length - 1]\n return last?.expression.type === \"StringLiteral\" && STABLE_ID_RE.test(last.expression.value)\n}\n\n/**\n * Returns a MochiPlugin that injects stable `s-` class IDs into every `styled()` call.\n * - Registers a `sourceTransform` for runtime source injection (Vite/Next `transform` hook).\n * - Registers an `analysisTransform` for CSS extraction via direct AST mutation.\n */\nexport function styledIdPlugin(): MochiPlugin {\n return {\n name: \"mochi-styled-ids\",\n onLoad(context) {\n context.sourceTransform.registerTransformation(\n (source, { filePath }) => transformStyledIds(source, filePath),\n { filter: \"*.{ts,tsx,js,jsx}\" },\n )\n\n context.analysisTransform.register((index) => {\n for (const [filePath, fileInfo] of index.files) {\n const calls = collectStyledCalls(fileInfo.ast)\n const toInject = calls.filter(({ call }) => !hasStableId(call))\n toInject.forEach(({ call, varName }, i) => {\n const id = \"s-\" + shortHash(filePath + \":\" + (varName ?? String(i)))\n call.arguments.push({\n spread: undefined,\n expression: { type: \"StringLiteral\", span: DUMMY_SPAN, value: id, raw: `'${id}'` },\n })\n })\n }\n })\n },\n }\n}\n"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mochi-css/config",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"repository": "git@github.com:Niikelion/mochi-css.git",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"module": "dist/index.mjs",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"/dist"
|
|
11
|
+
],
|
|
12
|
+
"exports": {
|
|
13
|
+
"import": {
|
|
14
|
+
"types": "./dist/index.d.mts",
|
|
15
|
+
"import": "./dist/index.mjs"
|
|
16
|
+
},
|
|
17
|
+
"require": {
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"require": "./dist/index.js"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc --noEmit && tsdown",
|
|
24
|
+
"test": "vitest",
|
|
25
|
+
"coverage": "vitest run --coverage",
|
|
26
|
+
"lint": "eslint src",
|
|
27
|
+
"lint:fix": "eslint src --fix",
|
|
28
|
+
"format": "prettier --write ."
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@mochi-css/vanilla": "^3.0.0",
|
|
32
|
+
"@swc/core": "^1.15.13",
|
|
33
|
+
"jiti": "^2.6.1"
|
|
34
|
+
},
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"@mochi-css/builder": "^3.0.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@gamedev-sensei/tsdown-config": "^2.1.0",
|
|
40
|
+
"@mochi-css/builder": "^3.0.0",
|
|
41
|
+
"@mochi-css/shared-config": "^2.0.0",
|
|
42
|
+
"@mochi-css/test": "^2.0.0",
|
|
43
|
+
"@swc/types": "^0.1.25",
|
|
44
|
+
"@types/node": "^24.8.1",
|
|
45
|
+
"dedent": "^1.7.2",
|
|
46
|
+
"eslint": "^9.39.2",
|
|
47
|
+
"prettier": "^3.8.1",
|
|
48
|
+
"typescript": "^5.9.3",
|
|
49
|
+
"vitest": "^4.0.15"
|
|
50
|
+
}
|
|
51
|
+
}
|