dispersa 0.4.0 → 0.4.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/shared/errors/index.ts","../src/shared/utils/token-utils.ts","../src/renderers/bundlers/utils.ts","../src/renderers/bundlers/js.ts","../src/renderers/bundlers/json.ts","../src/processing/processors/transforms/built-in/color-converter.ts","../src/processing/processors/transforms/built-in/dimension-converter.ts","../src/renderers/android.ts","../src/renderers/output-tree.ts","../src/renderers/css.ts","../src/renderers/bundlers/css.ts","../src/renderers/ios.ts","../src/renderers/js-module.ts","../src/renderers/json.ts","../src/renderers/tailwind.ts","../src/renderers/bundlers/tailwind.ts","../src/builders.ts"],"names":["formatHex8","formatHex","converter","r","g","b","css","indent","prettier","toSRGB","toP3","bundleAsJsModule","bundleAsJson"],"mappings":"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","file":"builders.cjs","sourcesContent":["/**\n * @fileoverview Custom error classes for Dispersa\n *\n * Error classes are intentionally kept as simple value objects with no\n * imports from utility modules. Suggestion formatting is done at call\n * sites to keep the error hierarchy dependency-free.\n */\n\n/**\n * Base error class for all Dispersa errors\n */\nexport class DispersaError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'DispersaError'\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n }\n }\n}\n\n/**\n * Thrown when a token reference cannot be resolved\n *\n * @param referenceName - The token name that could not be found\n * @param suggestions - Similar token names for \"did you mean?\" hints\n * @param message - Optional custom message (overrides auto-generated message)\n */\nexport class TokenReferenceError extends DispersaError {\n constructor(\n public referenceName: string,\n public suggestions: string[] = [],\n message?: string,\n ) {\n const hint = TokenReferenceError.formatHint(suggestions)\n super(\n message ??\n `Token reference resolution failed: '${referenceName}'. Token does not exist.${hint}`,\n )\n this.name = 'TokenReferenceError'\n }\n\n private static formatHint(suggestions: string[]): string {\n if (suggestions.length === 0) {\n return ''\n }\n if (suggestions.length === 1) {\n return ` Did you mean \"${suggestions[0]}\"?`\n }\n const quoted = suggestions.map((s) => `\"${s}\"`)\n const last = quoted.pop()!\n return ` Did you mean ${quoted.join(', ')} or ${last}?`\n }\n}\n\n/**\n * Thrown when a circular reference is detected\n */\nexport class CircularReferenceError extends DispersaError {\n constructor(\n public tokenName: string,\n public referencePath: string[],\n ) {\n super(\n `Token resolution failed: '${tokenName}'. Circular reference detected in path: ${referencePath.join(' -> ')}`,\n )\n this.name = 'CircularReferenceError'\n }\n}\n\n/**\n * Thrown when validation fails\n */\nexport class ValidationError extends DispersaError {\n constructor(\n message: string,\n public errors: { message: string; path?: string }[],\n ) {\n super(message)\n this.name = 'ValidationError'\n }\n}\n\n/**\n * Thrown when a color format cannot be parsed\n */\nexport class ColorParseError extends DispersaError {\n constructor(public colorValue: string) {\n super(`Color parsing failed: '${colorValue}'. Provide a valid CSS color or DTCG color object.`)\n this.name = 'ColorParseError'\n }\n}\n\n/**\n * Thrown when a dimension format is invalid\n */\nexport class DimensionFormatError extends DispersaError {\n constructor(public dimensionValue: string) {\n super(`Dimension parsing failed: '${dimensionValue}'. Provide a valid DTCG dimension object.`)\n this.name = 'DimensionFormatError'\n }\n}\n\n/**\n * Thrown when file operations fail\n */\nexport class FileOperationError extends DispersaError {\n constructor(\n public operation: 'read' | 'write',\n public filePath: string,\n public originalError: Error,\n ) {\n super(`Failed to ${operation} file: ${filePath}. ${originalError.message}`)\n this.name = 'FileOperationError'\n }\n}\n\n/**\n * Thrown when a build configuration is invalid\n */\nexport class ConfigurationError extends DispersaError {\n constructor(message: string) {\n super(message)\n this.name = 'ConfigurationError'\n }\n}\n\n/**\n * Thrown when base permutation cannot be determined\n */\nexport class BasePermutationError extends DispersaError {\n constructor(\n message = 'Base permutation determination failed. Define a default modifier in resolver.',\n ) {\n super(message)\n this.name = 'BasePermutationError'\n }\n}\n\n/**\n * Thrown when an unknown modifier or context is used\n *\n * @param modifierName - Name of the modifier that failed validation\n * @param contextValue - The invalid context value (if applicable)\n * @param availableValues - Valid options (context names or modifier names) for the error message\n */\nexport class ModifierError extends DispersaError {\n constructor(\n public modifierName: string,\n public contextValue?: string,\n public availableValues: string[] = [],\n ) {\n const available = availableValues.length > 0 ? ` Available: ${availableValues.join(', ')}.` : ''\n\n const message =\n contextValue != null && contextValue !== ''\n ? `Modifier validation failed: '${modifierName}'. Invalid context '${contextValue}'.${available}`\n : `Modifier validation failed: '${modifierName}'. Modifier not defined in resolver.${available}`\n super(message)\n this.name = 'ModifierError'\n }\n}\n","/**\n * @fileoverview Token utility functions\n */\n\nimport type { InternalResolvedTokens, ResolvedToken, ResolvedTokens } from '@tokens/types'\n\n/**\n * Format deprecation message for a token\n *\n * Generates a standardized deprecation message that can be used in comments,\n * descriptions, or warnings. Handles both boolean and string deprecation values.\n *\n * @param token - Token with optional deprecation information\n * @param description - Optional existing description to prepend deprecation info to\n * @param format - Output format: 'comment' for CSS comments, 'bracket' for [DEPRECATED] prefix\n * @returns Formatted deprecation message or description with deprecation prefix\n *\n * @example\n * ```typescript\n * // CSS comment format\n * formatDeprecationMessage(token, '', 'comment')\n * // Returns: \"DEPRECATED: Use new-token instead\"\n *\n * // Bracket format\n * formatDeprecationMessage(token, 'Primary color', 'bracket')\n * // Returns: \"[DEPRECATED: Use new-token instead] Primary color\"\n * ```\n */\nexport function formatDeprecationMessage(\n token: ResolvedToken,\n description: string = '',\n format: 'comment' | 'bracket' = 'bracket',\n): string {\n if (token.$deprecated == null || token.$deprecated === false) {\n return description\n }\n\n const deprecationMsg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n\n if (format === 'comment') {\n // CSS comment format: \"DEPRECATED: message\" or just \"DEPRECATED\"\n const msg = deprecationMsg ? ` ${deprecationMsg}` : ''\n return `DEPRECATED${msg}`\n } else {\n // Bracket format: \"[DEPRECATED: message]\" or \"[DEPRECATED]\"\n const msg = deprecationMsg ? `: ${deprecationMsg}` : ''\n const prefix = `[DEPRECATED${msg}]`\n return description ? `${prefix} ${description}` : prefix\n }\n}\n\n/**\n * Strip internal metadata from tokens before public output\n */\nexport function stripInternalTokenMetadata(tokens: InternalResolvedTokens): ResolvedTokens {\n const cleaned: ResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n const { _isAlias: _alias, _sourceModifier: _source, _sourceSet: _sourceSet, ...rest } = token\n cleaned[name] = rest\n }\n\n return cleaned\n}\n\n/**\n * Get sorted token entries for deterministic output ordering\n */\nexport function getSortedTokenEntries(\n tokens: ResolvedTokens,\n): Array<[name: string, token: ResolvedToken]> {\n return Object.entries(tokens).sort(([nameA], [nameB]) => nameA.localeCompare(nameB))\n}\n\n/**\n * Check if a value looks like a DTCG token (has `$value` or `$ref` property).\n *\n * This is the base structural check shared by parsers, validators, and resolvers.\n * Individual modules may wrap this in a type-guard to narrow to their own token types.\n */\nexport function isTokenLike(value: unknown): boolean {\n return typeof value === 'object' && value !== null && ('$value' in value || '$ref' in value)\n}\n\n/**\n * Extract a pure alias reference name from a string value.\n *\n * Returns the inner token name for \"{token.name}\" inputs and undefined otherwise.\n */\nexport function getPureAliasReferenceName(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined\n }\n const match = /^\\{([^}]+)\\}$/.exec(value)\n return match?.[1]?.trim()\n}\n","/**\n * @fileoverview Shared utilities for bundlers\n */\n\nimport type { ModifierInputs, ResolvedTokens } from '@config/index'\nimport type { MediaQueryFunction, SelectorFunction } from '@renderers/types'\nimport type { ResolverDocument } from '@resolution/resolution.types'\nimport { stripInternalTokenMetadata } from '@shared/utils/token-utils'\nimport type { InternalResolvedTokens } from '@tokens/types'\n\nfunction sanitizeDataAttributeName(value: string): string {\n // Attribute names are more constrained than token/modifier names.\n // Use a conservative whitelist to avoid generating invalid selectors.\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9_-]+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n}\n\nfunction escapeCssString(value: string): string {\n // Minimal escaping for use inside double-quoted CSS strings.\n // Prevents breaking out of the attribute selector value.\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\r?\\n/g, ' ')\n}\n\nexport function normalizeModifierInputs(inputs: Record<string, string>): Record<string, string> {\n const normalized: Record<string, string> = {}\n for (const [key, value] of Object.entries(inputs)) {\n normalized[key.toLowerCase()] = value.toLowerCase()\n }\n return normalized\n}\n\nexport function buildStablePermutationKey(\n modifierInputs: Record<string, string>,\n dimensions: string[],\n): string {\n return dimensions.map((dimension) => `${dimension}=${modifierInputs[dimension] ?? ''}`).join('|')\n}\n\n/**\n * Resolve a CSS selector (either string or function) to a string\n *\n * Handles both static string selectors and dynamic function-based selectors.\n * Falls back to default behavior if no selector is provided:\n * - Base permutation: ':root'\n * - Modifier permutation: '[data-{modifierName}=\"{context}\"]'\n *\n * @param selector - Selector as string or function\n * @param modifierName - Name of the modifier (e.g., 'theme')\n * @param context - Context value of the modifier (e.g., 'dark')\n * @param isBase - Whether this is the base permutation\n * @param allModifierInputs - All modifier inputs for this permutation\n * @returns Resolved CSS selector string\n */\nexport function resolveSelector(\n selector: string | SelectorFunction | undefined,\n modifierName: string,\n context: string,\n isBase: boolean,\n allModifierInputs: Record<string, string>,\n): string {\n if (typeof selector === 'function') {\n return selector(modifierName, context, isBase, allModifierInputs)\n }\n if (typeof selector === 'string') {\n return selector\n }\n // Default behavior\n if (isBase) {\n return ':root'\n }\n\n const attrName = sanitizeDataAttributeName(modifierName)\n const attrValue = escapeCssString(context)\n return `[data-${attrName}=\"${attrValue}\"]`\n}\n\n/**\n * Resolve a media query (either string or function) to a string\n *\n * Handles both static string media queries and dynamic function-based media queries.\n * Returns empty string if no media query is provided.\n *\n * @param mediaQuery - Media query as string or function\n * @param modifierName - Name of the modifier (e.g., 'breakpoint')\n * @param context - Context value of the modifier (e.g., 'mobile')\n * @param isBase - Whether this is the base permutation\n * @param allModifierInputs - All modifier inputs for this permutation\n * @returns Resolved media query string or empty string\n */\nexport function resolveMediaQuery(\n mediaQuery: string | MediaQueryFunction | undefined,\n modifierName: string,\n context: string,\n isBase: boolean,\n allModifierInputs: Record<string, string>,\n): string {\n if (typeof mediaQuery === 'function') {\n return mediaQuery(modifierName, context, isBase, allModifierInputs)\n }\n if (typeof mediaQuery === 'string') {\n return mediaQuery\n }\n // No default for media queries\n return ''\n}\n\n/**\n * Strip internal metadata from tokens before formatting\n * Removes all properties starting with underscore (_)\n */\nexport function stripInternalMetadata(tokens: InternalResolvedTokens): ResolvedTokens {\n return stripInternalTokenMetadata(tokens)\n}\n\n/**\n * Generate a clean key/label for a permutation\n *\n * For base permutation: returns \"base\"\n * For single-dimension diff: returns \"modifier-value\" (e.g., \"theme-dark\", \"brand-partner-a\")\n * For multi-dimension diff (fallback): returns full key (e.g., \"primary-web-comfortable-dark-standard\")\n */\nexport function generatePermutationKey(\n modifierInputs: Record<string, string>,\n resolver: ResolverDocument,\n isBase: boolean,\n): string {\n if (isBase) {\n return 'base'\n }\n\n const metadata = buildMetadata(resolver)\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const defaults = metadata.defaults\n\n // Find which modifier differs\n const differences: Array<{ name: string; value: string }> = []\n for (const dimension of metadata.dimensions) {\n const value = normalizedInputs[dimension]\n if (value !== undefined && value !== defaults[dimension]) {\n differences.push({ name: dimension, value })\n }\n }\n\n // If exactly one modifier differs, use clean format\n if (differences.length === 1 && differences[0]) {\n const diff = differences[0]\n return `${diff.name}-${diff.value}`\n }\n\n // Fallback: use full key (shouldn't happen with single-dimension permutations)\n return buildStablePermutationKey(normalizedInputs, metadata.dimensions)\n}\n\nexport function buildInMemoryOutputKey(params: {\n outputName: string\n extension: string\n modifierInputs: Record<string, string>\n resolver: ResolverDocument\n defaults: Record<string, string>\n}): string {\n const { outputName, extension, modifierInputs, resolver, defaults } = params\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const normalizedDefaults = normalizeModifierInputs(defaults)\n const isBase = Object.entries(normalizedDefaults).every(\n ([key, value]) => normalizedInputs[key] === value,\n )\n const permutationKey = generatePermutationKey(modifierInputs, resolver, isBase)\n return `${outputName}-${permutationKey}.${extension}`\n}\n\n/**\n * Build metadata for bundle formats\n */\nexport function buildMetadata(resolver: ResolverDocument): {\n dimensions: string[]\n defaults: Record<string, string>\n} {\n const metadata: {\n dimensions: string[]\n defaults: Record<string, string>\n } = {\n dimensions: [],\n defaults: {},\n }\n\n if (resolver.modifiers) {\n for (const [name, modifier] of Object.entries(resolver.modifiers)) {\n const normalizedName = name.toLowerCase()\n const defaultContext = modifier.default ?? Object.keys(modifier.contexts)[0] ?? ''\n metadata.dimensions.push(normalizedName)\n metadata.defaults[normalizedName] = defaultContext.toLowerCase()\n }\n }\n\n return metadata\n}\n\n/**\n * Resolve a resolver input to a ResolverDocument\n *\n * Handles both string paths (loaded from filesystem) and inline ResolverDocument objects.\n * This eliminates duplicate resolver loading logic across renderers.\n *\n * @param input - Either a file path string or an inline ResolverDocument object\n * @returns Resolved ResolverDocument ready for use\n */\nexport async function resolveResolverDocument(\n input: string | ResolverDocument,\n): Promise<ResolverDocument> {\n if (typeof input === 'string') {\n const { ResolverLoader } = await import('@adapters/filesystem/resolver-loader')\n const loader = new ResolverLoader({})\n return await loader.loadDocument(input)\n }\n return input\n}\n\n/**\n * Count how many modifiers differ between two inputs\n */\nexport function countModifierDifferences(\n currentInputs: Record<string, string>,\n baseInputs: Record<string, string>,\n): number {\n const normalizedCurrent = normalizeModifierInputs(currentInputs)\n const normalizedBase = normalizeModifierInputs(baseInputs)\n let count = 0\n for (const [key, value] of Object.entries(normalizedCurrent)) {\n if (value !== normalizedBase[key]) {\n count++\n }\n }\n return count\n}\n\n/**\n * Determine which modifier source this permutation represents\n * Returns source tag like \"theme-dark\" or \"platform-mobile\"\n */\nexport function getExpectedSource(\n currentInputs: Record<string, string>,\n baseInputs: Record<string, string>,\n): string {\n const normalizedCurrent = normalizeModifierInputs(currentInputs)\n const normalizedBase = normalizeModifierInputs(baseInputs)\n // Find which modifier differs\n for (const [key, value] of Object.entries(normalizedCurrent)) {\n if (value !== normalizedBase[key]) {\n return `${key}-${value}`\n }\n }\n return 'base'\n}\n\n/**\n * Extract modifier name and context from an expected source string\n * For example: \"theme-dark\" returns [\"theme\", \"dark\"]\n */\nexport function parseModifierSource(source: string): [modifierName: string, context: string] {\n const dashIndex = source.indexOf('-')\n if (dashIndex === -1) {\n return [source, '']\n }\n return [source.slice(0, dashIndex), source.slice(dashIndex + 1)]\n}\n\n/**\n * Filter tokens to only include those from a specific source\n */\nexport function filterTokensBySource(\n tokens: InternalResolvedTokens,\n expectedSource: string,\n): InternalResolvedTokens {\n const filtered: InternalResolvedTokens = {}\n const expected = expectedSource.toLowerCase()\n\n for (const [name, token] of Object.entries(tokens)) {\n const source =\n typeof token._sourceModifier === 'string' ? token._sourceModifier.toLowerCase() : ''\n\n // Check if token has the expected source (case-insensitive)\n if (source !== '' && source === expected) {\n filtered[name] = token\n }\n }\n\n return filtered\n}\n\n/**\n * Filter tokens to only include those originating from sets (not modifiers)\n *\n * Returns tokens that have no `_sourceModifier` tag, meaning they were defined\n * in the resolver's sets section and not overridden by any modifier context.\n */\nexport function filterTokensFromSets(tokens: InternalResolvedTokens): InternalResolvedTokens {\n const filtered: InternalResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n const hasModifierSource =\n typeof token._sourceModifier === 'string' && token._sourceModifier !== ''\n if (!hasModifierSource) {\n filtered[name] = token\n }\n }\n\n return filtered\n}\n\n/**\n * Resolve a filename for the modifier preset's base file.\n *\n * Unlike `resolveFileName`, this does not inject synthetic modifier values.\n * Instead it handles each filename mode with base-specific logic:\n *\n * - **Pattern string**: replaces all `{key}` placeholders with `\"base\"`, then\n * collapses consecutive `base` segments (e.g. `base-base` or `base/base`).\n * - **Plain string**: appends `-base` before the file extension.\n * - **Function**: calls with the actual default modifier inputs.\n *\n * @param fileName - Filename configuration (string, pattern, or function)\n * @param defaults - Default modifier inputs for the base permutation\n * @returns Resolved base filename\n */\nexport function resolveBaseFileName(\n fileName: string | ((modifierInputs: ModifierInputs) => string),\n defaults: ModifierInputs,\n): string {\n if (typeof fileName === 'function') {\n return fileName({ ...defaults, _base: 'true' })\n }\n\n if (/\\{.+?\\}/.test(fileName)) {\n const baseInputs = Object.fromEntries(Object.keys(defaults).map((k) => [k, 'base']))\n return collapseBaseSegments(interpolatePattern(fileName, baseInputs))\n }\n\n const extMatch = fileName.match(/(\\.[^.]+)$/)\n const extension = extMatch ? extMatch[1] : ''\n const baseName = extension ? fileName.slice(0, -extension.length) : fileName\n return `${baseName}-base${extension}`\n}\n\n/**\n * Collapse consecutive \"base\" segments separated by `-` or `/`.\n * For example `base-base/tokens.css` becomes `base/tokens.css`.\n */\nfunction collapseBaseSegments(value: string): string {\n let result = value\n let previous = ''\n while (result !== previous) {\n previous = result\n result = result.replace(/\\bbase([/-])base\\b/, 'base')\n }\n return result\n}\n\n/**\n * Interpolate pattern placeholders in a filename string\n *\n * Replaces {key} placeholders with values from modifierInputs.\n * For example, \"tokens-{theme}-{platform}.css\" with {theme: 'dark', platform: 'mobile'}\n * becomes \"tokens-dark-mobile.css\".\n *\n * @param pattern - Filename pattern with {key} placeholders\n * @param modifierInputs - Modifier values to interpolate\n * @returns Interpolated filename\n */\nexport function interpolatePattern(pattern: string, modifierInputs: ModifierInputs): string {\n let result = pattern\n\n for (const [key, value] of Object.entries(modifierInputs)) {\n result = result.replaceAll(`{${key}}`, value)\n }\n return result\n}\n\n/**\n * Generate filename for standalone renderer\n *\n * Supports three modes:\n * 1. Pattern string with {key} placeholders: \"tokens-{theme}-{platform}.css\"\n * 2. Function that receives modifierInputs: (inputs) => `tokens-${inputs.theme}.css`\n * 3. Plain string: applies default pattern with all modifiers\n *\n * @param fileName - Filename configuration (string or function)\n * @param modifierInputs - Modifier values for this permutation\n * @returns Resolved filename\n */\nexport function resolveFileName(\n fileName: string | ((modifierInputs: ModifierInputs) => string),\n modifierInputs: ModifierInputs,\n): string {\n // Function-based filename\n if (typeof fileName === 'function') {\n return fileName(modifierInputs)\n }\n\n // Pattern-based filename: check if it contains {key} placeholders\n if (/\\{.+?\\}/.test(fileName)) {\n return interpolatePattern(fileName, modifierInputs)\n }\n\n // Plain string: apply default pattern (backward compatible)\n // Extract file extension and base name\n const extMatch = fileName.match(/(\\.[^.]+)$/)\n const extension = extMatch ? extMatch[1] : ''\n const baseName = extension ? fileName.slice(0, -extension.length) : fileName\n\n // Build modifier suffix from all modifiers\n const modifierSuffix = Object.entries(modifierInputs)\n .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n .map(([key, value]) => `${key}-${value}`)\n .join('-')\n\n // Construct filename with suffix before extension\n if (modifierSuffix) {\n return `${baseName}-${modifierSuffix}${extension}`\n }\n\n return fileName\n}\n","/**\n * @fileoverview JavaScript module bundler for multi-theme output\n */\n\nimport type { JsModuleRendererOptions } from '@renderers/types'\nimport type { ResolverDocument } from '@resolution/resolution.types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@tokens/types'\n\nimport type { BundleDataItem } from './types'\nimport { buildMetadata, normalizeModifierInputs, stripInternalMetadata } from './utils'\n\n/**\n * Extract object literal from formatted JS module using balanced brace matching\n * More robust than regex for handling nested objects/arrays\n */\nfunction extractObjectFromJsModule(formattedJs: string): string {\n // Find the start of the object assignment: \"const name = {\"\n const assignmentMatch = /const\\s+\\w+\\s*=\\s*\\{/.exec(formattedJs)\n if (!assignmentMatch) {\n return '{}'\n }\n\n const startIndex = assignmentMatch.index + assignmentMatch[0].length - 1 // Include the opening brace\n let braceCount = 0\n let inString = false\n let stringChar = ''\n let escaped = false\n\n for (let i = startIndex; i < formattedJs.length; i++) {\n const char = formattedJs[i]\n\n // Handle string literals (ignore braces inside strings)\n if (!escaped && (char === '\"' || char === \"'\" || char === '`')) {\n if (!inString) {\n inString = true\n stringChar = char\n } else if (char === stringChar) {\n inString = false\n stringChar = ''\n }\n }\n\n // Track escape sequences\n escaped = !escaped && char === '\\\\'\n\n // Count braces when not in a string\n if (!inString) {\n if (char === '{') {\n braceCount++\n } else if (char === '}') {\n braceCount--\n if (braceCount === 0) {\n // Found the matching closing brace\n return formattedJs.substring(startIndex, i + 1)\n }\n }\n }\n }\n\n // Fallback if no matching brace found\n return '{}'\n}\n\nfunction toCamelKey(key: string): string {\n if (key === '') {\n return ''\n }\n return key\n .split('-')\n .filter((part) => part !== '')\n .map((w, i) => (i === 0 ? w : w.charAt(0).toUpperCase() + w.slice(1)))\n .join('')\n}\n\nfunction buildStableDashKey(params: {\n modifierInputs: Record<string, string>\n dimensions: string[]\n defaults: Record<string, string>\n}): string {\n const { modifierInputs, dimensions, defaults } = params\n const inputs = normalizeModifierInputs(modifierInputs)\n\n return dimensions\n .map((dimension) => {\n const value = inputs[dimension] ?? defaults[dimension] ?? ''\n return String(value)\n })\n .join('-')\n}\n\n/** Generate the optional getTokens helper function source */\nfunction buildHelperFunction(dimensions: string[]): string {\n const dimensionOrder = dimensions.map((d) => JSON.stringify(d)).join(', ')\n return [\n `/**`,\n ` * Get tokens for a specific modifier combination`,\n ` * @param {Object} modifiers - Modifier values (e.g., { theme: 'dark', brand: 'partner-a' })`,\n ` * @returns {Object} Resolved tokens for the combination`,\n ` */`,\n `export function getTokens(modifiers = {}) {`,\n ` const key = [${dimensionOrder}]`,\n ` .map(dim => modifiers[dim] ?? tokenBundle._meta.defaults[dim])`,\n ` .join('-')`,\n ` const camelKey = key`,\n ` .split('-')`,\n ` .filter(Boolean)`,\n ` .map((w, i) => (i === 0 ? w : w.charAt(0).toUpperCase() + w.slice(1)))`,\n ` .join('')`,\n ` return tokenBundle.tokens[camelKey]`,\n `}`,\n ``,\n ``,\n ].join('\\n')\n}\n\n/** Assemble the final JS bundle output string */\nfunction assembleJsBundle(\n metadata: ReturnType<typeof buildMetadata>,\n jsBlocks: string[],\n generateHelper: boolean,\n): string {\n let output = `const tokenBundle = {\\n`\n output += ` _meta: ${JSON.stringify(metadata, null, 2).replace(/\\n/g, '\\n ')},\\n`\n output += ` tokens: {\\n${jsBlocks.join(',\\n')}\\n }\\n`\n output += `}\\n\\n`\n\n if (generateHelper) {\n output += buildHelperFunction(metadata.dimensions)\n }\n\n output += `export default tokenBundle\\n`\n return output\n}\n\n/**\n * Bundle tokens as JS module with metadata and optional helper\n *\n * JS-specific strategy: All combinations for dynamic theming\n * - Includes metadata with dimensions and defaults\n * - All permutations included (no filtering)\n * - Optional helper function for key generation\n */\nexport async function bundleAsJsModule(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n options: JsModuleRendererOptions | undefined,\n formatTokens?: (tokens: ResolvedTokens) => Promise<string>,\n): Promise<string> {\n if (!formatTokens) {\n throw new ConfigurationError('JS formatter was not provided')\n }\n\n const metadata = buildMetadata(resolver)\n const jsBlocks: string[] = []\n\n for (const { tokens, modifierInputs } of bundleData) {\n const cleanTokens = stripInternalMetadata(tokens)\n const key = buildStableDashKey({\n modifierInputs,\n dimensions: metadata.dimensions,\n defaults: metadata.defaults,\n })\n const camelKey = toCamelKey(key)\n const formattedJs = await formatTokens(cleanTokens)\n const tokenObject = extractObjectFromJsModule(formattedJs)\n const indentedObject = tokenObject.replace(/\\n/g, '\\n ')\n jsBlocks.push(` // ${key}\\n ${JSON.stringify(camelKey)}: ${indentedObject}`)\n }\n\n return assembleJsBundle(metadata, jsBlocks, options?.generateHelper ?? false)\n}\n","/**\n * @fileoverview JSON bundler for multi-theme output\n */\n\nimport type { ResolverDocument } from '@resolution/resolution.types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@tokens/types'\n\nimport type { BundleDataItem } from './types'\nimport {\n buildMetadata,\n buildStablePermutationKey,\n normalizeModifierInputs,\n stripInternalMetadata,\n} from './utils'\n\n/**\n * Bundle tokens as JSON object with metadata for runtime lookup\n *\n * JSON-specific strategy: All combinations for dynamic theming\n * - Includes metadata with dimensions and defaults\n * - All permutations included (no filtering)\n * - Predictable keys for O(1) lookup\n */\nexport async function bundleAsJson(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n formatTokens?: (tokens: ResolvedTokens) => Promise<string>,\n): Promise<string> {\n // Build metadata\n const metadata = buildMetadata(resolver)\n\n // Build tokens object\n const tokens: Record<string, unknown> = {}\n for (const { tokens: tokenSet, modifierInputs } of bundleData) {\n // Strip internal metadata before formatting\n const cleanTokens = stripInternalMetadata(tokenSet)\n\n // Generate key from full modifier inputs for all combinations\n if (!formatTokens) {\n throw new ConfigurationError('JSON formatter was not provided')\n }\n\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const key = buildStablePermutationKey(normalizedInputs, metadata.dimensions)\n const themeJson = await formatTokens(cleanTokens)\n tokens[key] = JSON.parse(themeJson) as unknown\n }\n\n // Return complete bundle with metadata\n const bundle = {\n _meta: metadata,\n tokens,\n }\n\n return JSON.stringify(bundle, null, 2)\n}\n","/**\n * @fileoverview Color format conversion utilities for DTCG 2025.10\n * Uses culori for accurate color science and conversions\n */\n\nimport type { ColorComponent, ColorSpace, ColorValueObject } from '@tokens/types'\nimport {\n formatHex,\n formatHex8,\n type Color as CuloriColor,\n type Rgb,\n type Lrgb,\n type Hsl,\n type Hwb,\n type Lab,\n type Lch,\n type Oklab,\n type Oklch,\n type P3,\n type A98,\n type Prophoto,\n type Rec2020,\n type Xyz65,\n type Xyz50,\n} from 'culori'\n\n/**\n * Check if a color value is in DTCG object format\n */\nexport function isColorObject(value: unknown): value is ColorValueObject {\n return (\n typeof value === 'object' && value !== null && 'colorSpace' in value && 'components' in value\n )\n}\n\n/**\n * Convert a color component value to culori format\n * The \"none\" keyword becomes undefined (culori's representation of missing channels)\n */\nfunction componentToCulori(component: ColorComponent): number | undefined {\n return component === 'none' ? undefined : component\n}\n\n/**\n * Convert DTCG color object to culori color object\n * Handles all 14 DTCG color spaces and the \"none\" keyword\n */\nexport function dtcgObjectToCulori(color: ColorValueObject): CuloriColor {\n const [c1, c2, c3] = color.components.map(componentToCulori)\n const alpha = color.alpha !== undefined ? componentToCulori(color.alpha) : undefined\n\n // Normalize color space (case-insensitive, handle aliases)\n const colorSpace = color.colorSpace.toLowerCase() as Lowercase<ColorSpace>\n\n // Map DTCG color spaces to culori color objects with proper property names\n switch (colorSpace) {\n // RGB-based color spaces (components are R, G, B in 0-1 range)\n case 'srgb':\n return { mode: 'rgb', r: c1, g: c2, b: c3, alpha } as Rgb\n\n case 'srgb-linear':\n return { mode: 'lrgb', r: c1, g: c2, b: c3, alpha } as Lrgb\n\n case 'display-p3':\n return { mode: 'p3', r: c1, g: c2, b: c3, alpha } as P3\n\n case 'a98-rgb':\n return { mode: 'a98', r: c1, g: c2, b: c3, alpha } as A98\n\n case 'prophoto-rgb':\n return { mode: 'prophoto', r: c1, g: c2, b: c3, alpha } as Prophoto\n\n case 'rec2020':\n return { mode: 'rec2020', r: c1, g: c2, b: c3, alpha } as Rec2020\n\n // Cylindrical color spaces (Hue, Saturation/Whiteness, Lightness/Blackness)\n case 'hsl':\n return { mode: 'hsl', h: c1, s: c2, l: c3, alpha } as Hsl\n\n case 'hwb':\n return { mode: 'hwb', h: c1, w: c2, b: c3, alpha } as Hwb\n\n // Lab color spaces (Lightness, a/b or Chroma/Hue)\n case 'lab':\n return { mode: 'lab', l: c1, a: c2, b: c3, alpha } as Lab\n\n case 'lch':\n return { mode: 'lch', l: c1, c: c2, h: c3, alpha } as Lch\n\n case 'oklab':\n return { mode: 'oklab', l: c1, a: c2, b: c3, alpha } as Oklab\n\n case 'oklch':\n return { mode: 'oklch', l: c1, c: c2, h: c3, alpha } as Oklch\n\n // XYZ color spaces\n case 'xyz-d65':\n return { mode: 'xyz65', x: c1, y: c2, z: c3, alpha } as Xyz65\n\n case 'xyz-d50':\n return { mode: 'xyz50', x: c1, y: c2, z: c3, alpha } as Xyz50\n\n // Fallback to sRGB if color space is not recognized\n default:\n return { mode: 'rgb', r: c1, g: c2, b: c3, alpha } as Rgb\n }\n}\n\n/**\n * Convert DTCG color object to hex string\n */\nexport function colorObjectToHex(color: ColorValueObject): string {\n const culoriColor = dtcgObjectToCulori(color)\n const alpha = color.alpha ?? 1\n\n if (alpha < 1) {\n return formatHex8(culoriColor)\n }\n\n return formatHex(culoriColor)\n}\n","/**\n * @fileoverview Dimension format conversion utilities for DTCG 2025.10\n * Handles dimension object format { value: number, unit: string }\n */\n\nimport { DEFAULT_BASE_FONT_SIZE_PX } from '@shared/constants'\nimport type { DimensionValue } from '@tokens/types'\n/**\n * Check if a value is in dimension object format\n */\nexport function isDimensionObject(value: unknown): value is DimensionValue {\n return typeof value === 'object' && value !== null && 'value' in value && 'unit' in value\n}\n\n/**\n * Convert DTCG dimension object to CSS string\n */\nexport function dimensionObjectToString(dimension: DimensionValue): string {\n return `${dimension.value}${dimension.unit}`\n}\n\n/**\n * Convert a DTCG dimension object between units (px, rem).\n *\n * Converts via px as an intermediate: rem -> px -> target.\n * Returns the original value unchanged for unsupported unit combinations.\n *\n * @param value - Source dimension object\n * @param toUnit - Target CSS unit\n * @param baseFontSize - Base font size in px used for rem conversions\n */\nexport function convertDimension(\n value: DimensionValue,\n toUnit: DimensionValue['unit'],\n baseFontSize = DEFAULT_BASE_FONT_SIZE_PX,\n): DimensionValue {\n const fromUnit = value.unit\n let numValue = value.value\n\n // Convert to px first (as intermediate)\n if (fromUnit === 'rem') {\n numValue = numValue * baseFontSize\n } else if (fromUnit !== 'px' && fromUnit !== toUnit) {\n // If not px, rem, or em, and not already target unit, return as-is\n return value\n }\n\n // Convert from px to target unit\n if (toUnit === 'rem') {\n numValue = numValue / baseFontSize\n } else if (toUnit !== 'px') {\n // Can't convert to other units, return original\n return value\n }\n\n return {\n value: numValue,\n unit: toUnit,\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Android/Jetpack Compose renderer for design tokens\n * Generates Kotlin code targeting Jetpack Compose with Material 3.\n *\n * @experimental This renderer is experimental. Its API, generated code structure,\n * and options may change in future releases.\n *\n * Supports two structure modes:\n * - `'nested'` — token path hierarchy as nested `object` declarations\n * - `'flat'` — tokens grouped by type into semantic sub-objects (Colors, Spacing, etc.)\n */\n\nimport {\n colorObjectToHex,\n isColorObject,\n dtcgObjectToCulori,\n} from '@processing/processors/transforms/built-in/color-converter'\nimport { isDimensionObject } from '@processing/processors/transforms/built-in/dimension-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type {\n ColorValueObject,\n DimensionValue,\n DurationValue,\n ResolvedToken,\n ResolvedTokens,\n} from '@tokens/types'\nimport { converter } from 'culori'\n\nimport { buildInMemoryOutputKey, resolveFileName, stripInternalMetadata } from './bundlers/utils'\nimport { outputTree } from './output-tree'\nimport type { RenderContext, RenderOutput, Renderer } from './types'\n\n/**\n * Options for Android/Jetpack Compose renderer\n *\n * Note: `packageName` is marked optional for type compatibility with the Renderer\n * generic, but is validated as required at runtime in the renderer's format() method.\n *\n * @experimental This type is experimental. Properties and behavior may change.\n */\nexport type AndroidRendererOptions = {\n preset?: 'standalone' | 'bundle'\n packageName?: string\n objectName?: string\n /**\n * Color output format for Kotlin Color initializers.\n * - `'argb_hex'` (default) — `Color(0xAARRGGBB)` hex literal\n * - `'argb_float'` — `Color(r, g, b, a)` float components\n *\n * Legacy aliases: `'argb8'` maps to `'argb_hex'`, `'argb_floats'` maps to `'argb_float'`.\n */\n colorFormat?: 'argb_hex' | 'argb_float' | 'argb8' | 'argb_floats'\n /**\n * Color space for generated Color values.\n * - `'sRGB'` (default) — standard sRGB color space\n * - `'displayP3'` — Display P3 wide gamut via `ColorSpaces.DisplayP3`\n */\n colorSpace?: 'sRGB' | 'displayP3'\n /**\n * Structure mode for token organization.\n * - `'nested'` (default) — mirror token path hierarchy as nested objects\n * - `'flat'` — group tokens by $type into semantic sub-objects (Colors, Spacing, etc.)\n */\n structure?: 'nested' | 'flat'\n /**\n * Kotlin visibility modifier for the generated object and its members.\n * - `undefined` (default) — no explicit modifier, which means `public` in Kotlin\n * - `'public'` — explicit `public object` / `public val`\n * - `'internal'` — `internal object` / `internal val` (useful for KMP / multi-module)\n */\n visibility?: 'public' | 'internal'\n /** Number of spaces per indentation level (default 4) */\n indent?: number\n}\n\n/**\n * Internal resolved options with all defaults applied.\n */\ntype ResolvedOptions = {\n preset: 'standalone' | 'bundle'\n packageName: string\n objectName: string\n colorFormat: 'argb_hex' | 'argb_float'\n colorSpace: 'sRGB' | 'displayP3'\n structure: 'nested' | 'flat'\n visibility: 'public' | 'internal' | undefined\n indent: number\n}\n\ntype TokenTreeNode = {\n children: Map<string, TokenTreeNode>\n token?: ResolvedToken\n}\n\ntype TokenGroup = {\n name: string\n tokens: ResolvedToken[]\n}\n\nconst toSRGB = converter('rgb')\nconst toP3 = converter('p3')\n\nconst KOTLIN_KEYWORDS = new Set([\n 'val',\n 'var',\n 'fun',\n 'class',\n 'object',\n 'when',\n 'is',\n 'in',\n 'return',\n 'break',\n 'continue',\n 'do',\n 'while',\n 'for',\n 'if',\n 'else',\n 'try',\n 'catch',\n 'throw',\n 'as',\n 'this',\n 'super',\n 'null',\n 'true',\n 'false',\n])\n\nconst KOTLIN_TYPE_GROUP_MAP: Record<string, string> = {\n color: 'Colors',\n dimension: 'Spacing',\n fontFamily: 'Fonts',\n fontWeight: 'FontWeights',\n duration: 'Durations',\n shadow: 'Shadows',\n typography: 'Typography',\n number: 'Numbers',\n cubicBezier: 'Animations',\n border: 'Borders',\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction resolveColorFormat(format?: string): 'argb_hex' | 'argb_float' {\n if (format === 'argb_floats' || format === 'argb_float') {\n return 'argb_float'\n }\n return 'argb_hex'\n}\n\nfunction indent(width: number, level: number): string {\n return ' '.repeat(width * level)\n}\n\nfunction escapeKotlinString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\$/g, '\\\\$')\n}\n\nfunction escapeKDoc(str: string): string {\n return str.replace(/\\*\\//g, '* /').replace(/\\r?\\n/g, ' ').trim()\n}\n\nfunction formatKotlinNumber(value: number): string {\n return Number.isInteger(value) ? `${value}.0` : String(value)\n}\n\nfunction roundComponent(value: number): number {\n return Math.round(value * 1000) / 1000\n}\n\nfunction toResourceName(family: string): string {\n return family\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_|_$/g, '')\n}\n\n// ---------------------------------------------------------------------------\n// Identifier helpers\n// ---------------------------------------------------------------------------\n\nfunction toPascalCase(name: string): string {\n const pascal = name\n .replace(/[-._]+(.)/g, (_, c: string) => c.toUpperCase())\n .replace(/[-._]+$/g, '')\n .replace(/^[-._]+/g, '')\n\n const result = pascal.charAt(0).toUpperCase() + pascal.slice(1)\n\n if (/^\\d/.test(result)) {\n return `_${result}`\n }\n\n return KOTLIN_KEYWORDS.has(result.charAt(0).toLowerCase() + result.slice(1))\n ? `\\`${result}\\``\n : result\n}\n\nfunction toKotlinIdentifier(name: string): string {\n const camel = name\n .replace(/[-._]+(.)/g, (_, c: string) => c.toUpperCase())\n .replace(/[-._]+$/g, '')\n .replace(/^[-._]+/g, '')\n\n const identifier = camel.charAt(0).toLowerCase() + camel.slice(1)\n\n if (/^\\d/.test(identifier)) {\n return `_${identifier}`\n }\n\n return KOTLIN_KEYWORDS.has(identifier) ? `\\`${identifier}\\`` : identifier\n}\n\n// ---------------------------------------------------------------------------\n// Renderer\n// ---------------------------------------------------------------------------\n\nexport class AndroidRenderer implements Renderer<AndroidRendererOptions> {\n async format(context: RenderContext, options?: AndroidRendererOptions): Promise<RenderOutput> {\n if (!options?.packageName) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": packageName is required for Android output`,\n )\n }\n\n const opts: ResolvedOptions = {\n preset: options?.preset ?? 'standalone',\n packageName: options.packageName,\n objectName: options?.objectName ?? 'DesignTokens',\n colorFormat: resolveColorFormat(options?.colorFormat),\n colorSpace: options?.colorSpace ?? 'sRGB',\n structure: options?.structure ?? 'nested',\n visibility: options?.visibility,\n indent: options?.indent ?? 4,\n }\n\n if (opts.preset === 'bundle') {\n return await this.formatBundle(context, opts)\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n // -----------------------------------------------------------------------\n // Token tree (nested mode)\n // -----------------------------------------------------------------------\n\n private buildTokenTree(tokens: ResolvedTokens): TokenTreeNode {\n const root: TokenTreeNode = { children: new Map() }\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n let current = root\n const segments = token.path\n\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i]!\n if (!current.children.has(seg)) {\n current.children.set(seg, { children: new Map() })\n }\n current = current.children.get(seg)!\n }\n\n const leafName = segments[segments.length - 1] ?? token.name\n const leaf: TokenTreeNode = current.children.get(leafName) ?? { children: new Map() }\n leaf.token = token\n current.children.set(leafName, leaf)\n }\n\n return root\n }\n\n // -----------------------------------------------------------------------\n // Flat structure grouping\n // -----------------------------------------------------------------------\n\n private groupTokensByType(tokens: ResolvedTokens): TokenGroup[] {\n const groupMap = new Map<string, ResolvedToken[]>()\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const groupName = KOTLIN_TYPE_GROUP_MAP[token.$type ?? ''] ?? 'Other'\n const existing = groupMap.get(groupName) ?? []\n existing.push(token)\n groupMap.set(groupName, existing)\n }\n\n return Array.from(groupMap.entries()).map(([name, groupTokens]) => ({\n name,\n tokens: groupTokens,\n }))\n }\n\n /**\n * Builds a flattened camelCase name from a token's path, stripping the\n * type prefix segment (which is already represented by the group object).\n */\n private buildFlatKotlinName(token: ResolvedToken): string {\n const path = token.path\n const withoutTypePrefix = path.length > 1 ? path.slice(1) : path\n const joined = withoutTypePrefix.join('_')\n return toKotlinIdentifier(joined)\n }\n\n // -----------------------------------------------------------------------\n // Rendering\n // -----------------------------------------------------------------------\n\n private formatTokens(tokens: ResolvedTokens, options: ResolvedOptions): string {\n if (options.structure === 'flat') {\n return this.formatAsFlat(tokens, options)\n }\n return this.formatAsNested(tokens, options)\n }\n\n private formatAsNested(tokens: ResolvedTokens, options: ResolvedOptions): string {\n const tree = this.buildTokenTree(tokens)\n const tokenTypes = new Set<string>()\n this.collectTokenTypes(tree, tokenTypes)\n\n return this.buildFile(tokenTypes, options, (lines, vis) => {\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${vis}object ${options.objectName} {`)\n this.renderTreeChildren(lines, tree, 1, options)\n lines.push('}')\n })\n }\n\n private formatAsFlat(tokens: ResolvedTokens, options: ResolvedOptions): string {\n const groups = this.groupTokensByType(tokens)\n const tokenTypes = this.collectTokenTypesFromEntries(tokens)\n\n return this.buildFile(tokenTypes, options, (lines, vis) => {\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${vis}object ${options.objectName} {`)\n this.renderFlatGroups(lines, groups, 1, options)\n lines.push('}')\n })\n }\n\n /**\n * Shared file preamble: header, package, imports, optional ShadowToken class.\n * The `renderBody` callback appends the main object(s) to `lines`.\n */\n private buildFile(\n tokenTypes: Set<string>,\n options: ResolvedOptions,\n renderBody: (lines: string[], vis: string) => void,\n ): string {\n const imports = this.collectImports(tokenTypes, options)\n const vis = options.visibility ? `${options.visibility} ` : ''\n const lines: string[] = []\n\n lines.push(this.buildFileHeader())\n lines.push('')\n lines.push(`package ${options.packageName}`)\n lines.push('')\n\n for (const imp of imports) {\n lines.push(`import ${imp}`)\n }\n if (imports.length > 0) {\n lines.push('')\n }\n\n if (tokenTypes.has('shadow')) {\n lines.push(...this.buildShadowTokenClass(vis, options))\n lines.push('')\n }\n\n renderBody(lines, vis)\n lines.push('')\n\n return lines.join('\\n')\n }\n\n private renderFlatGroups(\n lines: string[],\n groups: TokenGroup[],\n baseDepth: number,\n options: ResolvedOptions,\n ): void {\n const vis = options.visibility ? `${options.visibility} ` : ''\n const groupIndent = indent(options.indent, baseDepth)\n const valIndent = indent(options.indent, baseDepth + 1)\n\n for (const group of groups) {\n lines.push(`${groupIndent}${vis}object ${group.name} {`)\n for (const token of group.tokens) {\n const kotlinName = this.buildFlatKotlinName(token)\n const kotlinValue = this.formatKotlinValue(token, options, baseDepth + 1)\n const annotation = this.typeAnnotationSuffix(token)\n\n if (token.$description) {\n lines.push(`${valIndent}/** ${escapeKDoc(token.$description)} */`)\n }\n lines.push(`${valIndent}${vis}val ${kotlinName}${annotation} = ${kotlinValue}`)\n }\n lines.push(`${groupIndent}}`)\n lines.push('')\n }\n }\n\n private renderTreeChildren(\n lines: string[],\n node: TokenTreeNode,\n depth: number,\n options: ResolvedOptions,\n ): void {\n const vis = options.visibility ? `${options.visibility} ` : ''\n const pad = indent(options.indent, depth)\n const entries = Array.from(node.children.entries())\n\n for (let idx = 0; idx < entries.length; idx++) {\n const [key, child] = entries[idx]!\n\n if (child.token && child.children.size === 0) {\n this.renderLeaf(lines, key, child.token, depth, options)\n } else if (child.children.size > 0 && !child.token) {\n const objectName = toPascalCase(key)\n lines.push(`${pad}${vis}object ${objectName} {`)\n this.renderTreeChildren(lines, child, depth + 1, options)\n lines.push(`${pad}}`)\n if (idx < entries.length - 1) {\n lines.push('')\n }\n } else {\n this.renderLeaf(lines, key, child.token!, depth, options)\n this.renderTreeChildren(lines, child, depth, options)\n }\n }\n }\n\n private renderLeaf(\n lines: string[],\n key: string,\n token: ResolvedToken,\n depth: number,\n options: ResolvedOptions,\n ): void {\n const vis = options.visibility ? `${options.visibility} ` : ''\n const pad = indent(options.indent, depth)\n const kotlinName = toKotlinIdentifier(key)\n const kotlinValue = this.formatKotlinValue(token, options, depth)\n const annotation = this.typeAnnotationSuffix(token)\n\n if (token.$description) {\n lines.push(`${pad}/** ${escapeKDoc(token.$description)} */`)\n }\n\n lines.push(`${pad}${vis}val ${kotlinName}${annotation} = ${kotlinValue}`)\n }\n\n private buildFileHeader(): string {\n return [\n '// Generated by Dispersa - do not edit manually',\n '// https://github.com/timges/dispersa',\n ].join('\\n')\n }\n\n // -----------------------------------------------------------------------\n // Shadow data class\n // -----------------------------------------------------------------------\n\n private buildShadowTokenClass(vis: string, options: ResolvedOptions): string[] {\n const i1 = indent(options.indent, 1)\n return [\n '@Immutable',\n `${vis}data class ShadowToken(`,\n `${i1}val color: Color,`,\n `${i1}val elevation: Dp,`,\n `${i1}val offsetX: Dp,`,\n `${i1}val offsetY: Dp,`,\n ')',\n ]\n }\n\n // -----------------------------------------------------------------------\n // Imports (tree-shaken)\n // -----------------------------------------------------------------------\n\n private collectImports(tokenTypes: Set<string>, options: ResolvedOptions): string[] {\n const imports = new Set<string>()\n const ns = 'androidx.compose'\n const hasColors =\n tokenTypes.has('color') || tokenTypes.has('shadow') || tokenTypes.has('border')\n\n if (hasColors) {\n imports.add(`${ns}.ui.graphics.Color`)\n }\n if (tokenTypes.has('dimension') || tokenTypes.has('shadow') || tokenTypes.has('border')) {\n imports.add(`${ns}.ui.unit.Dp`)\n imports.add(`${ns}.ui.unit.dp`)\n }\n if (tokenTypes.has('typography') || tokenTypes.has('fontFamily')) {\n imports.add(`${ns}.ui.text.TextStyle`)\n imports.add(`${ns}.ui.unit.sp`)\n }\n if (tokenTypes.has('typography') || tokenTypes.has('fontWeight')) {\n imports.add(`${ns}.ui.text.font.FontWeight`)\n }\n if (tokenTypes.has('fontFamily')) {\n imports.add(`${ns}.ui.text.font.FontFamily`)\n }\n if (tokenTypes.has('duration')) {\n imports.add('kotlin.time.Duration')\n imports.add('kotlin.time.Duration.Companion.milliseconds')\n imports.add('kotlin.time.Duration.Companion.seconds')\n }\n if (tokenTypes.has('cubicBezier')) {\n imports.add(`${ns}.animation.core.CubicBezierEasing`)\n }\n if (tokenTypes.has('shadow')) {\n imports.add(`${ns}.runtime.Immutable`)\n }\n if (tokenTypes.has('border')) {\n imports.add(`${ns}.foundation.BorderStroke`)\n }\n if (options.colorSpace === 'displayP3' && hasColors) {\n imports.add(`${ns}.ui.graphics.colorspace.ColorSpaces`)\n }\n\n return Array.from(imports).sort()\n }\n\n private collectTokenTypes(node: TokenTreeNode, types: Set<string>): void {\n if (node.token?.$type) {\n types.add(node.token.$type)\n }\n for (const child of node.children.values()) {\n this.collectTokenTypes(child, types)\n }\n }\n\n private collectTokenTypesFromEntries(tokens: ResolvedTokens): Set<string> {\n const types = new Set<string>()\n for (const [, token] of Object.entries(tokens)) {\n if (token.$type) {\n types.add(token.$type)\n }\n }\n return types\n }\n\n // -----------------------------------------------------------------------\n // Type annotations\n // -----------------------------------------------------------------------\n\n private getTypeAnnotation(token: ResolvedToken): string | undefined {\n switch (token.$type) {\n case 'color':\n return 'Color'\n case 'dimension':\n return 'Dp'\n case 'fontFamily':\n return 'FontFamily'\n case 'fontWeight':\n return 'FontWeight'\n case 'duration':\n return 'Duration'\n case 'shadow':\n return 'ShadowToken'\n case 'cubicBezier':\n return 'CubicBezierEasing'\n case 'number':\n return 'Double'\n case 'typography':\n return 'TextStyle'\n case 'border':\n return 'BorderStroke'\n default: {\n const value = token.$value\n if (typeof value === 'string') {\n return 'String'\n }\n if (typeof value === 'boolean') {\n return 'Boolean'\n }\n if (typeof value === 'number') {\n return 'Double'\n }\n return undefined\n }\n }\n }\n\n private typeAnnotationSuffix(token: ResolvedToken): string {\n const type = this.getTypeAnnotation(token)\n return type ? `: ${type}` : ''\n }\n\n // -----------------------------------------------------------------------\n // Value formatting\n // -----------------------------------------------------------------------\n\n private formatKotlinValue(token: ResolvedToken, options: ResolvedOptions, depth: number): string {\n const value = token.$value\n\n if (token.$type === 'color') {\n return this.formatColorValue(value, options)\n }\n if (token.$type === 'dimension') {\n return this.formatDimensionValue(value)\n }\n if (token.$type === 'fontFamily') {\n return this.formatFontFamilyValue(value)\n }\n if (token.$type === 'fontWeight') {\n return this.formatFontWeightValue(value)\n }\n if (token.$type === 'duration') {\n return this.formatDurationValue(value)\n }\n if (token.$type === 'shadow') {\n return this.formatShadowValue(value, options, depth)\n }\n if (token.$type === 'typography') {\n return this.formatTypographyValue(value, options, depth)\n }\n if (token.$type === 'border') {\n return this.formatBorderValue(value, options)\n }\n\n if (token.$type === 'number') {\n return typeof value === 'number' ? formatKotlinNumber(value) : String(value)\n }\n\n if (token.$type === 'cubicBezier' && Array.isArray(value) && value.length === 4) {\n return `CubicBezierEasing(${value[0]}f, ${value[1]}f, ${value[2]}f, ${value[3]}f)`\n }\n\n if (typeof value === 'string') {\n return `\"${escapeKotlinString(value)}\"`\n }\n if (typeof value === 'number') {\n return formatKotlinNumber(value)\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\n }\n\n return `\"${escapeKotlinString(String(value))}\"`\n }\n\n private formatColorValue(value: unknown, options: ResolvedOptions): string {\n if (!isColorObject(value)) {\n if (typeof value === 'string') {\n const hex = value.replace('#', '')\n if (/^[0-9a-fA-F]{6,8}$/.test(hex)) {\n const argb = hex.length === 8 ? hex : `FF${hex}`\n return `Color(0x${argb.toUpperCase()})`\n }\n }\n return 'Color.Unspecified'\n }\n\n const colorObj = value as ColorValueObject\n const alpha = colorObj.alpha ?? 1\n\n if (options.colorFormat === 'argb_float' || options.colorSpace === 'displayP3') {\n return this.formatFloatColor(colorObj, alpha, options)\n }\n\n return this.formatHexColor(colorObj, alpha)\n }\n\n private formatFloatColor(\n colorObj: ColorValueObject,\n alpha: number,\n options: ResolvedOptions,\n ): string {\n if (options.colorSpace === 'displayP3') {\n const p3 = toP3(dtcgObjectToCulori(colorObj))\n const r = roundComponent(p3?.r ?? 0)\n const g = roundComponent(p3?.g ?? 0)\n const b = roundComponent(p3?.b ?? 0)\n return `Color(${r}f, ${g}f, ${b}f, ${roundComponent(alpha)}f, ColorSpaces.DisplayP3)`\n }\n\n const rgb = toSRGB(dtcgObjectToCulori(colorObj))\n const r = roundComponent(rgb?.r ?? 0)\n const g = roundComponent(rgb?.g ?? 0)\n const b = roundComponent(rgb?.b ?? 0)\n return `Color(${r}f, ${g}f, ${b}f, ${roundComponent(alpha)}f)`\n }\n\n private formatHexColor(colorObj: ColorValueObject, alpha: number): string {\n const hex = colorObjectToHex(colorObj)\n const hexClean = hex.replace('#', '')\n\n if (hexClean.length === 8) {\n const rrggbb = hexClean.slice(0, 6)\n const aa = hexClean.slice(6, 8)\n return `Color(0x${aa.toUpperCase()}${rrggbb.toUpperCase()})`\n }\n\n const alphaHex =\n alpha < 1\n ? Math.round(alpha * 255)\n .toString(16)\n .padStart(2, '0')\n .toUpperCase()\n : 'FF'\n return `Color(0x${alphaHex}${hexClean.toUpperCase()})`\n }\n\n private formatDimensionValue(value: unknown): string {\n if (isDimensionObject(value)) {\n const dim = value as DimensionValue\n const dpValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n return `${dpValue}.dp`\n }\n\n return typeof value === 'number' ? `${value}.dp` : `0.dp`\n }\n\n private formatFontFamilyValue(value: unknown): string {\n if (Array.isArray(value)) {\n const primary = value[0]\n if (typeof primary === 'string') {\n return this.mapKotlinFontFamily(primary)\n }\n return 'FontFamily.Default'\n }\n\n return typeof value === 'string' ? this.mapKotlinFontFamily(value) : 'FontFamily.Default'\n }\n\n private mapKotlinFontFamily(family: string): string {\n const normalized = family.toLowerCase().replace(/['\"]/g, '').trim()\n const builtIn: Record<string, string> = {\n 'sans-serif': 'FontFamily.SansSerif',\n serif: 'FontFamily.Serif',\n monospace: 'FontFamily.Monospace',\n cursive: 'FontFamily.Cursive',\n }\n\n return (\n builtIn[normalized] ??\n `FontFamily.Default // TODO: load \"${family}\" via Font(R.font.${toResourceName(family)})`\n )\n }\n\n private formatFontWeightValue(value: unknown): string {\n if (typeof value === 'number') {\n return this.numericFontWeight(value)\n }\n if (typeof value === 'string') {\n return this.namedFontWeight(value) ?? 'FontWeight.Normal'\n }\n return 'FontWeight.Normal'\n }\n\n private numericFontWeight(weight: number): string {\n if (weight <= 100) {\n return 'FontWeight.Thin'\n }\n if (weight <= 200) {\n return 'FontWeight.ExtraLight'\n }\n if (weight <= 300) {\n return 'FontWeight.Light'\n }\n if (weight <= 400) {\n return 'FontWeight.Normal'\n }\n if (weight <= 500) {\n return 'FontWeight.Medium'\n }\n if (weight <= 600) {\n return 'FontWeight.SemiBold'\n }\n if (weight <= 700) {\n return 'FontWeight.Bold'\n }\n if (weight <= 800) {\n return 'FontWeight.ExtraBold'\n }\n return 'FontWeight.Black'\n }\n\n private namedFontWeight(name: string): string | undefined {\n const map: Record<string, string> = {\n thin: 'FontWeight.Thin',\n extralight: 'FontWeight.ExtraLight',\n ultralight: 'FontWeight.ExtraLight',\n light: 'FontWeight.Light',\n regular: 'FontWeight.Normal',\n normal: 'FontWeight.Normal',\n medium: 'FontWeight.Medium',\n semibold: 'FontWeight.SemiBold',\n demibold: 'FontWeight.SemiBold',\n bold: 'FontWeight.Bold',\n extrabold: 'FontWeight.ExtraBold',\n heavy: 'FontWeight.ExtraBold',\n black: 'FontWeight.Black',\n ultrabold: 'FontWeight.Black',\n }\n\n return map[name.toLowerCase()]\n }\n\n private formatDurationValue(value: unknown): string {\n if (typeof value === 'object' && value !== null && 'value' in value && 'unit' in value) {\n const dur = value as DurationValue\n return dur.unit === 'ms' ? `${dur.value}.milliseconds` : `${dur.value}.seconds`\n }\n\n return typeof value === 'number' ? `${value}.milliseconds` : '0.milliseconds'\n }\n\n private formatShadowValue(value: unknown, options: ResolvedOptions, depth: number): string {\n if (Array.isArray(value) && value.length > 0) {\n return this.formatSingleShadow(value[0] as Record<string, unknown>, options, depth)\n }\n\n if (typeof value === 'object' && value !== null) {\n return this.formatSingleShadow(value as Record<string, unknown>, options, depth)\n }\n\n return 'ShadowToken(color = Color.Unspecified, elevation = 0.dp, offsetX = 0.dp, offsetY = 0.dp)'\n }\n\n private formatSingleShadow(\n shadow: Record<string, unknown>,\n options: ResolvedOptions,\n depth: number,\n ): string {\n const color = isColorObject(shadow.color)\n ? this.formatColorValue(shadow.color, options)\n : 'Color.Black'\n\n const elevation = isDimensionObject(shadow.blur)\n ? this.formatDimensionValue(shadow.blur)\n : '0.dp'\n\n const offsetX = isDimensionObject(shadow.offsetX)\n ? this.formatDimensionValue(shadow.offsetX)\n : '0.dp'\n\n const offsetY = isDimensionObject(shadow.offsetY)\n ? this.formatDimensionValue(shadow.offsetY)\n : '0.dp'\n\n const propIndent = indent(options.indent, depth + 1)\n const closeIndent = indent(options.indent, depth)\n return [\n 'ShadowToken(',\n `${propIndent}color = ${color},`,\n `${propIndent}elevation = ${elevation},`,\n `${propIndent}offsetX = ${offsetX},`,\n `${propIndent}offsetY = ${offsetY},`,\n `${closeIndent})`,\n ].join('\\n')\n }\n\n private formatBorderValue(value: unknown, options: ResolvedOptions): string {\n if (typeof value !== 'object' || value === null) {\n return 'BorderStroke(0.dp, Color.Unspecified)'\n }\n\n const border = value as Record<string, unknown>\n const width = isDimensionObject(border.width) ? this.formatDimensionValue(border.width) : '0.dp'\n\n const color = isColorObject(border.color)\n ? this.formatColorValue(border.color, options)\n : 'Color.Unspecified'\n\n return `BorderStroke(${width}, ${color})`\n }\n\n private formatTypographyValue(value: unknown, options: ResolvedOptions, depth: number): string {\n if (typeof value !== 'object' || value === null) {\n return 'TextStyle()'\n }\n\n const typo = value as Record<string, unknown>\n const parts: string[] = []\n\n if (isDimensionObject(typo.fontSize)) {\n const dim = typo.fontSize as DimensionValue\n const spValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n parts.push(`fontSize = ${spValue}.sp`)\n }\n\n if (typo.fontWeight != null) {\n parts.push(`fontWeight = ${this.formatFontWeightValue(typo.fontWeight)}`)\n }\n\n if (typo.lineHeight != null && typeof typo.lineHeight === 'number') {\n if (isDimensionObject(typo.fontSize)) {\n const dim = typo.fontSize as DimensionValue\n const spValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n const lineHeightSp = Math.round(spValue * typo.lineHeight * 100) / 100\n parts.push(`lineHeight = ${lineHeightSp}.sp`)\n }\n }\n\n if (isDimensionObject(typo.letterSpacing)) {\n const dim = typo.letterSpacing as DimensionValue\n const spValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n parts.push(`letterSpacing = ${spValue}.sp`)\n }\n\n if (parts.length === 0) {\n return 'TextStyle()'\n }\n\n const propIndent = indent(options.indent, depth + 1)\n const closeIndent = indent(options.indent, depth)\n return `TextStyle(\\n${parts.map((p) => `${propIndent}${p}`).join(',\\n')},\\n${closeIndent})`\n }\n\n // -----------------------------------------------------------------------\n // Output: standalone\n // -----------------------------------------------------------------------\n\n private async formatStandalone(\n context: RenderContext,\n options: ResolvedOptions,\n ): Promise<RenderOutput> {\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for standalone Android output`,\n )\n }\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = this.formatTokens(processedTokens, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'kt',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n // -----------------------------------------------------------------------\n // Output: bundle\n // -----------------------------------------------------------------------\n\n private async formatBundle(\n context: RenderContext,\n options: ResolvedOptions,\n ): Promise<RenderOutput> {\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for bundle Android output`,\n )\n }\n\n const content = this.formatBundleContent(context, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, context.meta.basePermutation)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'kt',\n modifierInputs: context.meta.basePermutation,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n\n return outputTree({ [fileName]: content })\n }\n\n private formatBundleContent(context: RenderContext, options: ResolvedOptions): string {\n const allTokenTypes = this.collectAllPermutationTypes(context)\n\n return this.buildFile(allTokenTypes, options, (lines, vis) => {\n const i1 = indent(options.indent, 1)\n\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${vis}object ${options.objectName} {`)\n\n for (let idx = 0; idx < context.permutations.length; idx++) {\n const { tokens, modifierInputs } = context.permutations[idx]!\n const processedTokens = stripInternalMetadata(tokens)\n const permName = this.buildPermutationName(modifierInputs)\n lines.push(`${i1}${vis}object ${permName} {`)\n this.renderBundleTokens(lines, processedTokens, options, 2)\n lines.push(`${i1}}`)\n if (idx < context.permutations.length - 1) {\n lines.push('')\n }\n }\n\n lines.push('}')\n })\n }\n\n private collectAllPermutationTypes(context: RenderContext): Set<string> {\n const allTokenTypes = new Set<string>()\n for (const { tokens } of context.permutations) {\n const processed = stripInternalMetadata(tokens)\n for (const [, token] of Object.entries(processed)) {\n if (token.$type) {\n allTokenTypes.add(token.$type)\n }\n }\n }\n return allTokenTypes\n }\n\n private renderBundleTokens(\n lines: string[],\n tokens: ResolvedTokens,\n options: ResolvedOptions,\n baseDepth: number,\n ): void {\n if (options.structure === 'flat') {\n const groups = this.groupTokensByType(tokens)\n this.renderFlatGroups(lines, groups, baseDepth, options)\n return\n }\n\n const tree = this.buildTokenTree(tokens)\n this.renderTreeChildren(lines, tree, baseDepth, options)\n }\n\n private buildPermutationName(modifierInputs: Record<string, string>): string {\n const values = Object.values(modifierInputs)\n if (values.length === 0) {\n return 'Default'\n }\n return values.map((v) => toPascalCase(v)).join('')\n }\n}\n\n/**\n * Android/Jetpack Compose renderer factory function.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'android',\n * renderer: androidRenderer(),\n * options: {\n * packageName: 'com.example.tokens',\n * objectName: 'DesignTokens',\n * colorFormat: 'argb_hex',\n * },\n * file: 'DesignTokens-{theme}.kt'\n * }]\n * ```\n */\nexport function androidRenderer(): Renderer<AndroidRendererOptions> {\n const rendererInstance = new AndroidRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as AndroidRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @fileoverview Output tree helpers for custom renderers\n */\n\nimport type { OutputTree } from './types'\n\n/**\n * Create an {@link OutputTree} from a map of file paths to content strings.\n *\n * Use this when building a custom renderer that produces multiple output files\n * (e.g. one file per theme or permutation).\n *\n * @param files - Record mapping relative file paths to their string content\n * @returns An `OutputTree` that the build orchestrator can write to disk or return in-memory\n *\n * @example\n * ```typescript\n * import { defineRenderer, outputTree } from 'dispersa/renderers'\n *\n * const myRenderer = defineRenderer((context) => {\n * return outputTree({\n * 'light.css': '/* light tokens *\\/',\n * 'dark.css': '/* dark tokens *\\/',\n * })\n * })\n * ```\n */\nexport const outputTree = (files: Record<string, string>): OutputTree => {\n return {\n kind: 'outputTree',\n files,\n }\n}\n\n/**\n * Type guard that checks whether a value is an {@link OutputTree}.\n *\n * @param value - The value to check\n * @returns `true` if the value is an `OutputTree`\n */\nexport const isOutputTree = (value: unknown): value is OutputTree => {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { kind?: unknown }).kind === 'outputTree'\n )\n}\n","/**\n * @fileoverview CSS renderer with theme selector support\n * Supports DTCG 2025.10 color and dimension object formats\n */\n\nimport {\n colorObjectToHex,\n isColorObject,\n} from '@processing/processors/transforms/built-in/color-converter'\nimport {\n dimensionObjectToString,\n isDimensionObject,\n} from '@processing/processors/transforms/built-in/dimension-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport {\n formatDeprecationMessage,\n getPureAliasReferenceName,\n getSortedTokenEntries,\n} from '@shared/utils/token-utils'\nimport type { DimensionValue, DurationValue, ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { buildSetLayerBlocks, bundleAsCss } from './bundlers/css'\nimport {\n buildInMemoryOutputKey,\n filterTokensBySource,\n filterTokensFromSets,\n normalizeModifierInputs,\n resolveBaseFileName,\n resolveMediaQuery,\n resolveFileName,\n resolveSelector,\n stripInternalMetadata,\n} from './bundlers/utils'\nimport type { CssRendererOptions, RenderContext, RenderOutput, Renderer } from './types'\n\ntype ResolvedCssOptions = Omit<CssRendererOptions, 'selector' | 'mediaQuery'> & {\n selector?: string\n mediaQuery?: string\n referenceTokens?: ResolvedTokens\n}\n\ntype Shadow = {\n color: unknown\n offsetX: DimensionValue\n offsetY: DimensionValue\n blur: DimensionValue\n spread?: DimensionValue\n inset?: boolean\n}\n\ntype CssEntry = {\n name: string\n value: string\n}\n\ntype CompositeLeaf = {\n path: string[]\n value: unknown\n}\n\nexport class CssRenderer implements Renderer<CssRendererOptions> {\n private sanitizeCssCommentText(text: string): string {\n return text.replace(/\\*\\//g, '*\\\\/').replace(/\\r?\\n/g, ' ').trim()\n }\n\n async format(context: RenderContext, options?: CssRendererOptions): Promise<RenderOutput> {\n const opts: CssRendererOptions = {\n preset: options?.preset ?? 'bundle',\n selector: options?.selector,\n mediaQuery: options?.mediaQuery,\n minify: options?.minify ?? false,\n preserveReferences: options?.preserveReferences ?? false,\n }\n\n if (opts.preset === 'bundle') {\n return await this.formatBundle(context, opts)\n }\n\n if (opts.preset === 'modifier') {\n return await this.formatModifier(context, opts)\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n private static readonly PRETTIER_PRINT_WIDTH = 80\n private static readonly PRETTIER_TAB_WIDTH = 2\n\n /**\n * Format tokens as CSS custom properties\n *\n * Converts resolved design tokens into CSS format with configurable selector,\n * media queries, and formatting options. Supports DTCG color and dimension objects.\n *\n * Note: This method expects selector and mediaQuery to be resolved strings.\n * Function-based selectors should be resolved before calling format().\n *\n * @param tokens - Resolved tokens to format\n * @param options - CSS formatting options (selector, media query, minify, etc.)\n * @returns Formatted CSS string with custom properties\n */\n private async formatTokens(\n tokens: ResolvedTokens,\n options?: ResolvedCssOptions,\n ): Promise<string> {\n const opts = {\n preset: 'bundle' as const,\n selector: ':root',\n mediaQuery: '',\n minify: false,\n preserveReferences: false,\n ...options,\n referenceTokens: options?.referenceTokens ?? tokens,\n }\n\n const groups = this.groupTokens(tokens, opts)\n const referenceTokens = opts.referenceTokens\n const lines: string[] = []\n\n for (const [selector, groupTokens] of Object.entries(groups)) {\n this.buildCssBlock(lines, groupTokens, selector, tokens, referenceTokens, opts)\n }\n\n const cssString = lines.join('')\n return opts.minify ? cssString : await this.formatWithPrettier(cssString)\n }\n\n private buildCssBlock(\n lines: string[],\n groupTokens: ResolvedToken[],\n selector: string,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n opts: Required<ResolvedCssOptions>,\n ): void {\n const indent = opts.minify ? '' : ' '\n const newline = opts.minify ? '' : '\\n'\n const space = opts.minify ? '' : ' '\n const hasMediaQuery = opts.mediaQuery != null && opts.mediaQuery !== ''\n const tokenIndent = hasMediaQuery ? indent + indent : indent\n\n if (hasMediaQuery) {\n lines.push(`@media ${opts.mediaQuery}${space}{${newline}`)\n lines.push(`${indent}${selector}${space}{${newline}`)\n } else {\n lines.push(`${selector}${space}{${newline}`)\n }\n\n for (const token of groupTokens) {\n this.pushTokenLines(\n lines,\n token,\n tokens,\n referenceTokens,\n opts.preserveReferences ?? false,\n tokenIndent,\n newline,\n space,\n )\n }\n\n if (hasMediaQuery) {\n lines.push(`${indent}}${newline}`)\n }\n lines.push(`}${newline}${newline}`)\n }\n\n private pushTokenLines(\n lines: string[],\n token: ResolvedToken,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n preserveReferences: boolean,\n indent: string,\n newline: string,\n space: string,\n ): void {\n const entries = this.buildCssEntries(token, tokens, referenceTokens, preserveReferences)\n\n if (token.$deprecated != null && token.$deprecated !== false) {\n const deprecationMsg = formatDeprecationMessage(token, '', 'comment')\n lines.push(`${indent}/* ${this.sanitizeCssCommentText(deprecationMsg)} */${newline}`)\n }\n\n if (token.$description && token.$description !== '') {\n lines.push(`${indent}/* ${this.sanitizeCssCommentText(token.$description)} */${newline}`)\n }\n\n for (const entry of entries) {\n lines.push(`${indent}--${entry.name}:${space}${entry.value};${newline}`)\n }\n }\n\n private async formatWithPrettier(css: string): Promise<string> {\n try {\n return await prettier.format(css, {\n parser: 'css',\n printWidth: CssRenderer.PRETTIER_PRINT_WIDTH,\n tabWidth: CssRenderer.PRETTIER_TAB_WIDTH,\n useTabs: false,\n })\n } catch {\n // Prettier may fail on edge-case CSS; fall back to raw string\n return css\n }\n }\n\n /**\n * Group tokens by selector (for theme support)\n */\n private groupTokens(\n tokens: ResolvedTokens,\n options: Required<CssRendererOptions>,\n ): Record<string, ResolvedToken[]> {\n const sortedTokens = getSortedTokenEntries(tokens).map(([, token]) => token)\n return {\n [options.selector as string]: sortedTokens,\n }\n }\n\n private buildCssEntries(\n token: ResolvedToken,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n preserveReferences: boolean,\n ): CssEntry[] {\n if (preserveReferences) {\n const refName = getPureAliasReferenceName(token.originalValue)\n if (refName !== undefined) {\n return [\n {\n name: token.name,\n value: this.buildCssVarReference(refName, referenceTokens, tokens),\n },\n ]\n }\n }\n\n if (!this.isCompositeToken(token)) {\n return [{ name: token.name, value: this.formatValue(token) }]\n }\n\n const leaves = this.collectCompositeLeaves(token.$value)\n if (leaves.length === 0) {\n return [{ name: token.name, value: this.formatLeafValue(token.$value) }]\n }\n\n const leafEntries = leaves.map((leaf) => ({\n name: this.buildCompositeName(token.name, leaf.path),\n value: this.formatLeafValue(\n this.resolveCompositeLeafValue(\n leaf,\n token.originalValue,\n tokens,\n referenceTokens,\n preserveReferences,\n ),\n ),\n }))\n\n const wholeValue = this.buildCompositeWholeValue(token, preserveReferences)\n if (!wholeValue) {\n return leafEntries\n }\n\n return [{ name: token.name, value: wholeValue }, ...leafEntries]\n }\n\n private isCompositeToken(token: ResolvedToken): boolean {\n const isCompositeType = [\n 'shadow',\n 'typography',\n 'border',\n 'strokeStyle',\n 'transition',\n 'gradient',\n ].includes(token.$type ?? '')\n if (!isCompositeType) {\n return false\n }\n\n const value = token.$value\n return (typeof value === 'object' && value !== null) || Array.isArray(value)\n }\n\n private buildCompositeWholeValue(\n token: ResolvedToken,\n preserveReferences: boolean,\n ): string | undefined {\n if (token.$type === 'shadow') {\n // Shadow always supports a whole-value (single or multi-layer)\n return preserveReferences ? this.buildShadowWholeValue(token) : this.formatValue(token)\n }\n if (token.$type === 'border') {\n // Border shorthand only works when style is a simple string (e.g. \"solid\").\n // Complex strokeStyle objects can't be represented as a CSS shorthand.\n if (!this.hasBorderShorthandStyle(token)) {\n return undefined\n }\n return preserveReferences ? this.buildBorderWholeValue(token) : this.formatValue(token)\n }\n if (token.$type === 'transition') {\n return preserveReferences ? this.buildTransitionWholeValue(token) : this.formatValue(token)\n }\n return undefined\n }\n\n private hasBorderShorthandStyle(token: ResolvedToken): boolean {\n const value = token.$value\n if (typeof value !== 'object' || value === null) {\n return false\n }\n return typeof (value as { style?: unknown }).style === 'string'\n }\n\n private buildShadowWholeValue(token: ResolvedToken): string | undefined {\n const value = token.$value\n if (Array.isArray(value)) {\n return value\n .map((shadow, index) => this.buildShadowLayerValue(token.name, shadow, [String(index)]))\n .join(', ')\n }\n if (typeof value === 'object' && value !== null) {\n return this.buildShadowLayerValue(token.name, value, [])\n }\n return undefined\n }\n\n private buildShadowLayerValue(baseName: string, shadow: unknown, prefix: string[]): string {\n if (typeof shadow !== 'object' || shadow === null) {\n return String(shadow)\n }\n const shadowObj = shadow as Shadow\n const parts: string[] = []\n\n if (shadowObj.inset === true) {\n parts.push('inset')\n }\n\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'offsetX']))\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'offsetY']))\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'blur']))\n\n if (shadowObj.spread != null) {\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'spread']))\n }\n\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'color']))\n return parts.join(' ')\n }\n\n private buildBorderWholeValue(token: ResolvedToken): string | undefined {\n const value = token.$value\n if (typeof value !== 'object' || value === null) {\n return undefined\n }\n const border = value as { style?: unknown }\n if (typeof border.style !== 'string') {\n return undefined\n }\n return [\n this.buildCompositeVar(token.name, ['width']),\n this.buildCompositeVar(token.name, ['style']),\n this.buildCompositeVar(token.name, ['color']),\n ].join(' ')\n }\n\n private buildTransitionWholeValue(token: ResolvedToken): string | undefined {\n const value = token.$value\n if (typeof value !== 'object' || value === null) {\n return undefined\n }\n return [\n this.buildCompositeVar(token.name, ['duration']),\n `cubic-bezier(${this.buildCompositeVar(token.name, ['timingFunction', '0'])}, ${this.buildCompositeVar(token.name, ['timingFunction', '1'])}, ${this.buildCompositeVar(token.name, ['timingFunction', '2'])}, ${this.buildCompositeVar(token.name, ['timingFunction', '3'])})`,\n this.buildCompositeVar(token.name, ['delay']),\n ].join(' ')\n }\n\n private buildCompositeVar(baseName: string, path: string[]): string {\n return `var(--${this.buildCompositeName(baseName, path)})`\n }\n\n private collectCompositeLeaves(value: unknown): CompositeLeaf[] {\n const leaves: CompositeLeaf[] = []\n this.collectLeafEntries(value, [], leaves)\n return leaves\n }\n\n private collectLeafEntries(value: unknown, path: string[], leaves: CompositeLeaf[]): void {\n if (this.isPrimitiveValue(value)) {\n leaves.push({ path, value })\n return\n }\n\n if (isColorObject(value) || isDimensionObject(value) || this.isDurationObject(value)) {\n leaves.push({ path, value })\n return\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n leaves.push({ path, value })\n return\n }\n value.forEach((item, index) => {\n this.collectLeafEntries(item, [...path, String(index)], leaves)\n })\n return\n }\n\n if (typeof value === 'object' && value !== null) {\n const entries = Object.entries(value)\n if (entries.length === 0) {\n leaves.push({ path, value })\n return\n }\n for (const [key, child] of entries) {\n this.collectLeafEntries(child, [...path, this.normalizePathSegment(key)], leaves)\n }\n return\n }\n\n leaves.push({ path, value })\n }\n\n private normalizePathSegment(segment: string): string {\n return segment.trim().replace(/\\s+/g, '-')\n }\n\n private buildCompositeName(base: string, path: string[]): string {\n if (path.length === 0) {\n return base\n }\n return `${base}-${path.join('-')}`\n }\n\n private formatLeafValue(value: unknown): string {\n if (isColorObject(value)) {\n return colorObjectToHex(value)\n }\n\n if (isDimensionObject(value)) {\n return dimensionObjectToString(value)\n }\n\n if (this.isDurationObject(value)) {\n return this.formatDurationValue(value)\n }\n\n if (typeof value === 'string') {\n return value\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value)\n }\n\n if (Array.isArray(value)) {\n return JSON.stringify(value)\n }\n\n if (typeof value === 'object' && value != null) {\n return JSON.stringify(value)\n }\n\n return String(value)\n }\n\n private resolveCompositeLeafValue(\n leaf: CompositeLeaf,\n originalValue: unknown,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n preserveReferences: boolean,\n ): unknown {\n if (!preserveReferences) {\n return leaf.value\n }\n\n const originalLeafValue = this.getOriginalLeafValue(originalValue, leaf.path)\n const refName = getPureAliasReferenceName(originalLeafValue)\n if (refName === undefined) {\n return leaf.value\n }\n\n return this.buildCssVarReference(refName, referenceTokens, tokens)\n }\n\n private buildCssVarReference(\n refName: string,\n referenceTokens: ResolvedTokens,\n tokens: ResolvedTokens,\n ): string {\n const referencedToken = referenceTokens[refName] ?? tokens[refName]\n if (!referencedToken) {\n throw new ConfigurationError(\n `CSS reference \"{${refName}}\" could not be resolved. The referenced token is not present in the current output's token set. ` +\n `This usually means a filter (e.g. isAlias()) excluded the referenced token while preserveReferences is true. ` +\n `Either remove the filter, include the referenced token, or set preserveReferences to false.`,\n )\n }\n return `var(--${referencedToken.name})`\n }\n\n private getOriginalLeafValue(value: unknown, path: string[]): unknown {\n let current: unknown = value\n\n for (const segment of path) {\n if (Array.isArray(current)) {\n const index = Number(segment)\n if (!Number.isInteger(index)) {\n return undefined\n }\n current = current[index]\n continue\n }\n\n if (typeof current === 'object' && current !== null) {\n const entries = Object.entries(current)\n const matched = entries.find(([key]) => this.normalizePathSegment(key) === segment)\n if (!matched) {\n return undefined\n }\n current = matched[1]\n continue\n }\n\n return undefined\n }\n\n return current\n }\n\n private isPrimitiveValue(value: unknown): boolean {\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'\n }\n\n private isDurationObject(value: unknown): value is DurationValue {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'value' in value &&\n 'unit' in value &&\n (value as { unit?: unknown }).unit !== undefined\n )\n }\n\n private formatDurationValue(value: DurationValue): string {\n if (typeof value === 'string') {\n return value\n }\n return `${value.value}${value.unit}`\n }\n\n /**\n * Format token value for CSS\n * Handles DTCG 2025.10 object formats for colors and dimensions\n */\n private formatValue(token: ResolvedToken): string {\n const value = token.$value\n\n const typed = this.formatTypedValue(token.$type, value)\n if (typed !== undefined) {\n return typed\n }\n\n return this.formatPrimitiveOrStructured(value, token.$type)\n }\n\n private formatTypedValue(type: string | undefined, value: unknown): string | undefined {\n if (type === 'color' && isColorObject(value)) {\n return colorObjectToHex(value)\n }\n\n if (type === 'dimension') {\n // Legacy fallback: string values from incomplete alias resolution\n return typeof value === 'string' ? value : dimensionObjectToString(value as DimensionValue)\n }\n\n if (type === 'duration') {\n if (this.isDurationObject(value)) {\n return this.formatDurationValue(value)\n }\n if (typeof value === 'string') {\n return value\n }\n }\n\n return undefined\n }\n\n private formatPrimitiveOrStructured(value: unknown, tokenType?: string): string {\n if (typeof value === 'string') {\n return value\n }\n if (typeof value === 'number') {\n return String(value)\n }\n if (Array.isArray(value)) {\n return this.formatArrayValue(value, tokenType)\n }\n if (typeof value === 'object' && value != null) {\n return this.formatCompositeValue(value as Record<string, unknown>, tokenType)\n }\n return String(value)\n }\n\n private formatArrayValue(value: unknown[], tokenType?: string): string {\n if (tokenType === 'shadow' && value.length > 0 && typeof value[0] === 'object') {\n return value.map((shadowObj) => this.formatShadow(shadowObj as unknown as Shadow)).join(', ')\n }\n // For arrays like font families\n return value.map((v) => (typeof v === 'string' && v.includes(' ') ? `\"${v}\"` : v)).join(', ')\n }\n\n /**\n * Format composite token values\n */\n private formatCompositeValue(value: Record<string, unknown>, tokenType?: string): string {\n if (tokenType === 'shadow') {\n return this.formatShadow(value as unknown as Shadow)\n }\n\n if (tokenType === 'border') {\n return this.formatBorder(value)\n }\n\n if (tokenType === 'transition') {\n return this.formatTransition(value)\n }\n\n // Default: JSON stringify (for debugging or unsupported types)\n return JSON.stringify(value)\n }\n\n /**\n * Format a single shadow object to CSS box-shadow syntax\n */\n private formatShadow(shadow: Shadow): string {\n const parts: string[] = []\n if (shadow.inset === true) {\n parts.push('inset')\n }\n\n // Enforce DTCG 2025.10 compliance: all dimension values must be objects\n\n parts.push(dimensionObjectToString(shadow.offsetX))\n parts.push(dimensionObjectToString(shadow.offsetY))\n parts.push(dimensionObjectToString(shadow.blur))\n\n if (shadow.spread != null) {\n parts.push(dimensionObjectToString(shadow.spread))\n }\n\n // Handle color objects (DTCG format)\n if (isColorObject(shadow.color)) {\n parts.push(colorObjectToHex(shadow.color))\n } else {\n parts.push(String(shadow.color))\n }\n\n return parts.join(' ')\n }\n\n /**\n * Format a border object to CSS border shorthand syntax\n */\n private formatBorder(value: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (isDimensionObject(value.width)) {\n parts.push(dimensionObjectToString(value.width as DimensionValue))\n } else if (value.width != null) {\n parts.push(String(value.width))\n }\n\n if (typeof value.style === 'string') {\n parts.push(value.style)\n }\n\n if (isColorObject(value.color)) {\n parts.push(colorObjectToHex(value.color))\n } else if (value.color != null) {\n parts.push(String(value.color))\n }\n\n return parts.join(' ')\n }\n\n /**\n * Format a transition object to CSS transition shorthand syntax\n */\n private formatTransition(value: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (this.isDurationObject(value.duration)) {\n parts.push(this.formatDurationValue(value.duration as DurationValue))\n } else if (value.duration != null) {\n parts.push(String(value.duration))\n }\n\n if (Array.isArray(value.timingFunction) && value.timingFunction.length === 4) {\n parts.push(`cubic-bezier(${value.timingFunction.join(', ')})`)\n }\n\n if (this.isDurationObject(value.delay)) {\n parts.push(this.formatDurationValue(value.delay as DurationValue))\n } else if (value.delay != null) {\n parts.push(String(value.delay))\n }\n\n return parts.join(' ')\n }\n\n private async formatBundle(context: RenderContext, options: CssRendererOptions): Promise<string> {\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens,\n modifierInputs,\n isBase: this.isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsCss(bundleData, context.resolver, options, async (tokens, resolved) => {\n return await this.formatTokens(tokens, {\n ...resolved,\n preserveReferences: options.preserveReferences ?? false,\n })\n })\n }\n\n private async formatStandalone(\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<RenderOutput> {\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for standalone CSS output`,\n )\n }\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const { fileName, content } = await this.buildStandaloneFile(\n tokens,\n modifierInputs,\n context,\n options,\n )\n files[fileName] = content\n }\n\n return { kind: 'outputTree', files }\n }\n\n private async buildStandaloneFile(\n tokens: ResolvedTokens,\n modifierInputs: Record<string, string>,\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<{ fileName: string; content: string }> {\n const isBase = this.isBasePermutation(modifierInputs, context.meta.defaults)\n const { modifierName, modifierContext } = this.resolveModifierContext(\n modifierInputs,\n context,\n isBase,\n )\n\n const selector = resolveSelector(\n options.selector,\n modifierName,\n modifierContext,\n isBase,\n modifierInputs,\n )\n const mediaQuery = resolveMediaQuery(\n options.mediaQuery,\n modifierName,\n modifierContext,\n isBase,\n modifierInputs,\n )\n\n const content = await this.formatTokens(tokens, {\n selector,\n mediaQuery,\n minify: options.minify ?? false,\n preserveReferences: options.preserveReferences ?? false,\n referenceTokens: tokens,\n })\n\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'css',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n\n return { fileName, content }\n }\n\n private async formatModifier(\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<RenderOutput> {\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for modifier CSS output`,\n )\n }\n if (!context.resolver.modifiers) {\n throw new ConfigurationError('Modifier preset requires modifiers to be defined in resolver')\n }\n\n const files: Record<string, string> = {}\n\n const baseResult = await this.buildModifierBaseFile(context, options)\n if (baseResult) {\n files[baseResult.fileName] = baseResult.content\n }\n\n for (const [modifierName, modifierDef] of Object.entries(context.resolver.modifiers)) {\n for (const contextValue of Object.keys(modifierDef.contexts)) {\n const result = await this.buildModifierContextFile(\n modifierName,\n contextValue,\n context,\n options,\n )\n if (result) {\n files[result.fileName] = result.content\n }\n }\n }\n\n return { kind: 'outputTree', files }\n }\n\n private async buildModifierBaseFile(\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<{ fileName: string; content: string } | undefined> {\n const basePermutation = context.permutations.find(({ modifierInputs }) =>\n this.isBasePermutation(modifierInputs, context.meta.defaults),\n )\n if (!basePermutation) {\n return undefined\n }\n\n const setTokens = filterTokensFromSets(basePermutation.tokens)\n if (Object.keys(setTokens).length === 0) {\n return undefined\n }\n\n const setBlocks = buildSetLayerBlocks(setTokens, context.resolver)\n if (setBlocks.length === 0) {\n return undefined\n }\n\n const modifiers = context.resolver.modifiers!\n const firstModifierName = Object.keys(modifiers)[0] ?? ''\n const firstModifierContext = context.meta.defaults[firstModifierName] ?? ''\n const baseModifierInputs = { ...context.meta.defaults }\n\n const selector = resolveSelector(\n options.selector,\n firstModifierName,\n firstModifierContext,\n true,\n baseModifierInputs,\n )\n const mediaQuery = resolveMediaQuery(\n options.mediaQuery,\n firstModifierName,\n firstModifierContext,\n true,\n baseModifierInputs,\n )\n\n const referenceTokens = basePermutation.tokens\n const cssBlocks: string[] = []\n for (const block of setBlocks) {\n const cleanTokens = stripInternalMetadata(block.tokens)\n const css = await this.formatTokens(cleanTokens, {\n selector,\n mediaQuery,\n minify: options.minify ?? false,\n preserveReferences: options.preserveReferences ?? false,\n referenceTokens,\n })\n const header = block.description\n ? `/* ${block.key} */\\n/* ${block.description} */`\n : `/* ${block.key} */`\n cssBlocks.push(`${header}\\n${css}`)\n }\n\n const content = cssBlocks.join('\\n')\n\n const fileName = context.output.file\n ? resolveBaseFileName(context.output.file, context.meta.defaults)\n : `${context.output.name}-base.css`\n\n return { fileName, content }\n }\n\n private collectTokensForModifierContext(\n modifierName: string,\n contextValue: string,\n permutations: RenderContext['permutations'],\n ): { tokensFromSource: ResolvedTokens; referenceTokens: ResolvedTokens } {\n const expectedSource = `${modifierName}-${contextValue}`\n let tokensFromSource: ResolvedTokens = {}\n let referenceTokens: ResolvedTokens = {}\n\n for (const { tokens, modifierInputs } of permutations) {\n if (modifierInputs[modifierName] !== contextValue) {\n continue\n }\n tokensFromSource = { ...tokensFromSource, ...filterTokensBySource(tokens, expectedSource) }\n referenceTokens = { ...referenceTokens, ...tokens }\n }\n\n return { tokensFromSource, referenceTokens }\n }\n\n private async buildModifierContextFile(\n modifierName: string,\n contextValue: string,\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<{ fileName: string; content: string } | undefined> {\n const { tokensFromSource, referenceTokens } = this.collectTokensForModifierContext(\n modifierName,\n contextValue,\n context.permutations,\n )\n\n if (Object.keys(tokensFromSource).length === 0) {\n return undefined\n }\n\n const defaults = context.meta.defaults\n const isBase = contextValue === defaults[modifierName]\n const modifierInputs = { ...defaults, [modifierName]: contextValue }\n\n const selector = resolveSelector(\n options.selector,\n modifierName,\n contextValue,\n isBase,\n modifierInputs,\n )\n const mediaQuery = resolveMediaQuery(\n options.mediaQuery,\n modifierName,\n contextValue,\n isBase,\n modifierInputs,\n )\n\n const content = await this.formatTokens(tokensFromSource, {\n selector,\n mediaQuery,\n minify: options.minify ?? false,\n preserveReferences: options.preserveReferences ?? false,\n referenceTokens,\n })\n\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'css',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n\n return { fileName, content }\n }\n\n private resolveModifierContext(\n modifierInputs: Record<string, string>,\n context: RenderContext,\n isBase: boolean,\n ): { modifierName: string; modifierContext: string } {\n if (!context.resolver.modifiers) {\n return { modifierName: '', modifierContext: '' }\n }\n\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const normalizedDefaults = normalizeModifierInputs(context.meta.defaults)\n\n if (isBase) {\n const firstModifier = Object.keys(context.resolver.modifiers)[0] ?? ''\n return {\n modifierName: firstModifier,\n modifierContext: normalizedInputs[firstModifier] ?? '',\n }\n }\n\n for (const [name, value] of Object.entries(normalizedInputs)) {\n if (value !== normalizedDefaults[name]) {\n return { modifierName: name, modifierContext: value }\n }\n }\n\n return { modifierName: '', modifierContext: '' }\n }\n\n private isBasePermutation(\n modifierInputs: Record<string, string>,\n defaults: Record<string, string>,\n ): boolean {\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const normalizedDefaults = normalizeModifierInputs(defaults)\n return Object.entries(normalizedDefaults).every(\n ([key, value]) => normalizedInputs[key] === value,\n )\n }\n}\n\n/**\n * CSS renderer factory function.\n *\n * Options are provided via OutputConfig.options.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'css',\n * renderer: cssRenderer(),\n * options: {\n * preset: 'bundle',\n * selector: ':root',\n * mediaQuery: (modifierName, context) => {\n * if (modifierName === 'breakpoint' && context === 'mobile') {\n * return '(max-width: 768px)'\n * }\n * return ''\n * }\n * },\n * file: 'tokens.css'\n * }]\n * ```\n */\nexport function cssRenderer(): Renderer<CssRendererOptions> {\n const rendererInstance = new CssRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as CssRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @fileoverview CSS bundler for multi-theme output\n */\n\nimport type { CssRendererOptions } from '@renderers/types'\nimport type { ResolverDocument } from '@resolution/resolution.types'\nimport { BasePermutationError, ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedToken, ResolvedTokens } from '@tokens/types'\n\nimport type { BundleDataItem } from './types'\nimport {\n stripInternalMetadata,\n resolveSelector,\n resolveMediaQuery,\n countModifierDifferences,\n getExpectedSource,\n filterTokensBySource,\n parseModifierSource,\n normalizeModifierInputs,\n} from './utils'\n\ntype ResolvedCssOptions = Omit<CssRendererOptions, 'selector' | 'mediaQuery'> & {\n selector?: string\n mediaQuery?: string\n referenceTokens?: ResolvedTokens\n}\n\ntype TokenWithSource = ResolvedToken & {\n _sourceSet?: string\n _sourceModifier?: string\n}\n\nconst getSourceSet = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n const maybe = token as TokenWithSource\n return typeof maybe._sourceSet === 'string' ? maybe._sourceSet : undefined\n}\n\nconst getSourceModifier = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n const maybe = token as TokenWithSource\n return typeof maybe._sourceModifier === 'string' ? maybe._sourceModifier : undefined\n}\n\n/**\n * Bundle tokens as CSS with descriptive comments\n *\n * CSS-specific strategy: Uses cascade model with minimal overrides\n * - Base permutation gets all tokens in :root\n * - Single-dimension modifiers get only their overrides in [data-*] selectors\n * - Multi-dimension permutations are skipped (would create duplicate selectors)\n */\nexport async function bundleAsCss(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n options?: CssRendererOptions,\n formatTokens?: (tokens: ResolvedTokens, options: ResolvedCssOptions) => Promise<string>,\n): Promise<string> {\n const baseItem = bundleData.find((item) => item.isBase)\n if (!baseItem) {\n throw new BasePermutationError('Base permutation not found in bundle data')\n }\n if (!formatTokens) {\n throw new ConfigurationError('CSS formatter was not provided')\n }\n\n const orderedBundleData = orderBundleData(bundleData, resolver, baseItem)\n const cssBlocks: string[] = []\n\n for (const item of orderedBundleData) {\n if (item.isBase) {\n const blocks = await formatBasePermutation(item, resolver, options, formatTokens)\n cssBlocks.push(...blocks)\n continue\n }\n\n const block = await formatModifierPermutation(item, baseItem, options, formatTokens)\n if (block) {\n cssBlocks.push(block)\n }\n }\n\n return cssBlocks.join('\\n\\n')\n}\n\nasync function formatBasePermutation(\n { tokens, modifierInputs }: BundleDataItem,\n resolver: ResolverDocument,\n options: CssRendererOptions | undefined,\n formatTokens: (tokens: ResolvedTokens, options: ResolvedCssOptions) => Promise<string>,\n): Promise<string[]> {\n const firstModifierName = resolver.modifiers ? Object.keys(resolver.modifiers)[0] : ''\n const modifier = firstModifierName ?? ''\n const context = modifierInputs[modifier] ?? ''\n\n const selector = resolveSelector(options?.selector, modifier, context, true, modifierInputs)\n const mediaQuery = resolveMediaQuery(options?.mediaQuery, modifier, context, true, modifierInputs)\n const referenceTokens = stripInternalMetadata(tokens)\n const defaultBlocks = buildDefaultLayerBlocks(tokens, modifierInputs, resolver)\n\n const cssBlocks: string[] = []\n for (const block of defaultBlocks) {\n const cleanTokens = stripInternalMetadata(block.tokens)\n const css = await formatTokens(cleanTokens, {\n selector,\n mediaQuery,\n minify: options?.minify,\n referenceTokens,\n })\n const header = block.description\n ? `/* ${block.key} */\\n/* ${block.description} */`\n : `/* ${block.key} */`\n cssBlocks.push(`${header}\\n${css}`)\n }\n\n return cssBlocks\n}\n\nasync function formatModifierPermutation(\n { tokens, modifierInputs }: BundleDataItem,\n baseItem: BundleDataItem,\n options: CssRendererOptions | undefined,\n formatTokens: (tokens: ResolvedTokens, options: ResolvedCssOptions) => Promise<string>,\n): Promise<string | undefined> {\n // Skip permutations where multiple modifiers differ from base\n const differenceCount = countModifierDifferences(modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n return undefined\n }\n\n // Non-base: filter to only tokens from this modifier's source\n const expectedSource = getExpectedSource(modifierInputs, baseItem.modifierInputs)\n let tokensToInclude = filterTokensBySource(tokens, expectedSource)\n const hasSourceMetadata = Object.values(tokens).some(\n (token) => token != null && getSourceModifier(token) !== undefined,\n )\n\n // If tokens have no source metadata, fall back to full token set\n if (Object.keys(tokensToInclude).length === 0 && !hasSourceMetadata) {\n tokensToInclude = tokens\n }\n\n if (Object.keys(tokensToInclude).length === 0) {\n return undefined\n }\n\n const [modifier, context] = parseModifierSource(expectedSource)\n const cleanTokens = stripInternalMetadata(tokensToInclude)\n const referenceTokens = stripInternalMetadata(tokens)\n const selector = resolveSelector(options?.selector, modifier, context, false, modifierInputs)\n const mediaQuery = resolveMediaQuery(\n options?.mediaQuery,\n modifier,\n context,\n false,\n modifierInputs,\n )\n\n const css = await formatTokens(cleanTokens, {\n selector,\n mediaQuery,\n minify: options?.minify,\n referenceTokens,\n })\n return `/* Modifier: ${modifier}=${context} */\\n${css}`\n}\n\nexport type SetLayerBlock = {\n key: string\n description?: string\n tokens: BundleDataItem['tokens']\n}\n\n/** Collect tokens belonging to a specific set, excluding already-included tokens */\nfunction collectSetTokens(\n tokens: BundleDataItem['tokens'],\n setName: string,\n included: Set<string>,\n): BundleDataItem['tokens'] {\n const result: BundleDataItem['tokens'] = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (!included.has(name) && getSourceSet(token) === setName) {\n result[name] = token\n }\n }\n return result\n}\n\n/** Collect tokens belonging to a specific modifier source, excluding already-included tokens */\nfunction collectModifierTokens(\n tokens: BundleDataItem['tokens'],\n expectedSource: string,\n included: Set<string>,\n): BundleDataItem['tokens'] {\n const result: BundleDataItem['tokens'] = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (!included.has(name) && (getSourceModifier(token) ?? '').toLowerCase() === expectedSource) {\n result[name] = token\n }\n }\n return result\n}\n\n/** Collect all tokens not yet included in any block */\nfunction collectRemainder(\n tokens: BundleDataItem['tokens'],\n included: Set<string>,\n): BundleDataItem['tokens'] {\n const result: BundleDataItem['tokens'] = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (!included.has(name)) {\n result[name] = token\n }\n }\n return result\n}\n\n/**\n * Group tokens by their originating set, following the resolver's resolution order.\n *\n * Produces one block per set (e.g. \"Set: colors\", \"Set: typography\") plus\n * an \"Unattributed\" block for any tokens that don't belong to a known set.\n * This is used by both the bundle preset (base permutation) and the modifier\n * preset (base file) to produce structured CSS output with set comments.\n */\nexport function buildSetLayerBlocks(\n tokens: BundleDataItem['tokens'],\n resolver: ResolverDocument,\n): SetLayerBlock[] {\n const blocks: SetLayerBlock[] = []\n const included = new Set<string>()\n\n const addBlock = (key: string, blockTokens: BundleDataItem['tokens'], description?: string) => {\n if (Object.keys(blockTokens).length === 0) {\n return\n }\n for (const k of Object.keys(blockTokens)) {\n included.add(k)\n }\n blocks.push({ key, description, tokens: blockTokens })\n }\n\n for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string' || !ref.startsWith('#/sets/')) {\n continue\n }\n\n const setName = ref.slice('#/sets/'.length)\n addBlock(\n `Set: ${setName}`,\n collectSetTokens(tokens, setName, included),\n resolver.sets?.[setName]?.description,\n )\n }\n\n addBlock('Unattributed', collectRemainder(tokens, included))\n return blocks\n}\n\nfunction buildDefaultLayerBlocks(\n tokens: BundleDataItem['tokens'],\n baseModifierInputs: Record<string, string>,\n resolver: ResolverDocument,\n): SetLayerBlock[] {\n const blocks: SetLayerBlock[] = []\n const included = new Set<string>()\n const baseInputs = normalizeModifierInputs(baseModifierInputs)\n\n const addBlock = (key: string, blockTokens: BundleDataItem['tokens'], description?: string) => {\n if (Object.keys(blockTokens).length === 0) {\n return\n }\n for (const k of Object.keys(blockTokens)) {\n included.add(k)\n }\n blocks.push({ key, description, tokens: blockTokens })\n }\n\n for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string') {\n continue\n }\n\n if (ref.startsWith('#/sets/')) {\n const setName = ref.slice('#/sets/'.length)\n addBlock(\n `Set: ${setName}`,\n collectSetTokens(tokens, setName, included),\n resolver.sets?.[setName]?.description,\n )\n continue\n }\n\n if (ref.startsWith('#/modifiers/')) {\n const modifierName = ref.slice('#/modifiers/'.length)\n const modifier = resolver.modifiers?.[modifierName]\n const selectedContext = baseInputs[modifierName.toLowerCase()]\n if (!modifier || !selectedContext) {\n continue\n }\n\n const expectedSource = `${modifierName}-${selectedContext}`.toLowerCase()\n addBlock(\n `Modifier: ${modifierName}=${selectedContext} (default)`,\n collectModifierTokens(tokens, expectedSource, included),\n modifier.description,\n )\n }\n }\n\n addBlock('Unattributed', collectRemainder(tokens, included))\n return blocks\n}\n\n/** Find a permutation that differs from the base in exactly one modifier dimension */\nfunction findSingleDiffPermutation(\n bundleData: BundleDataItem[],\n modifierName: string,\n context: string,\n baseInputs: Record<string, string>,\n): BundleDataItem | undefined {\n const normalizedModifier = modifierName.toLowerCase()\n const normalizedContext = context.toLowerCase()\n\n return bundleData.find((item) => {\n if (item.isBase) {\n return false\n }\n const inputs = normalizeModifierInputs(item.modifierInputs)\n if (inputs[normalizedModifier] !== normalizedContext) {\n return false\n }\n return Object.entries(baseInputs).every(([k, v]) => k === normalizedModifier || inputs[k] === v)\n })\n}\n\nfunction orderBundleData(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n baseItem: BundleDataItem,\n): BundleDataItem[] {\n const modifiers = resolver.modifiers\n if (!modifiers) {\n return bundleData\n }\n\n const baseInputs = normalizeModifierInputs(baseItem.modifierInputs)\n const orderedModifierNames = getOrderedModifierNames(resolver)\n if (orderedModifierNames.length === 0) {\n return bundleData\n }\n\n const firstModifierDef = modifiers[orderedModifierNames[0] ?? '']\n if (!firstModifierDef) {\n return bundleData\n }\n\n const includedKeys = new Set<string>()\n const ordered: BundleDataItem[] = []\n\n const pushUnique = (item: BundleDataItem | undefined) => {\n if (!item) {\n return\n }\n const key = stableInputsKey(item.modifierInputs)\n if (includedKeys.has(key)) {\n return\n }\n includedKeys.add(key)\n ordered.push(item)\n }\n\n pushUnique(baseItem)\n\n for (const modifierName of orderedModifierNames) {\n const modifierDef = modifiers[modifierName]\n if (!modifierDef) {\n continue\n }\n\n const defaultValue = baseInputs[modifierName.toLowerCase()] ?? ''\n for (const ctx of Object.keys(modifierDef.contexts)) {\n if (defaultValue === ctx.toLowerCase()) {\n continue\n }\n pushUnique(findSingleDiffPermutation(bundleData, modifierName, ctx, baseInputs))\n }\n }\n\n return ordered.length > 0 ? ordered : bundleData\n}\n\nfunction getOrderedModifierNames(resolver: ResolverDocument): string[] {\n const modifiers = resolver.modifiers ?? {}\n const seen = new Set<string>()\n const ordered: string[] = []\n\n for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string') {\n continue\n }\n if (!ref.startsWith('#/modifiers/')) {\n continue\n }\n const name = ref.slice('#/modifiers/'.length)\n if (seen.has(name)) {\n continue\n }\n if (!(name in modifiers)) {\n continue\n }\n ordered.push(name)\n seen.add(name)\n }\n\n for (const name of Object.keys(modifiers)) {\n if (seen.has(name)) {\n continue\n }\n ordered.push(name)\n seen.add(name)\n }\n\n return ordered\n}\n\nfunction stableInputsKey(modifierInputs: Record<string, string>): string {\n const normalized = normalizeModifierInputs(modifierInputs)\n return Object.keys(normalized)\n .sort()\n .map((k) => `${k}=${normalized[k]}`)\n .join('|')\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview iOS/SwiftUI renderer for design tokens\n * Generates Swift code targeting SwiftUI (iOS 17+)\n */\n\nimport {\n isColorObject,\n dtcgObjectToCulori,\n} from '@processing/processors/transforms/built-in/color-converter'\nimport { isDimensionObject } from '@processing/processors/transforms/built-in/dimension-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type {\n ColorValueObject,\n DimensionValue,\n DurationValue,\n GradientStop,\n ResolvedToken,\n ResolvedTokens,\n} from '@tokens/types'\nimport { converter } from 'culori'\n\nimport { buildInMemoryOutputKey, resolveFileName, stripInternalMetadata } from './bundlers/utils'\nimport { outputTree } from './output-tree'\nimport type { RenderContext, RenderOutput, Renderer } from './types'\n\n/**\n * Options for iOS/SwiftUI renderer\n */\nexport type IosRendererOptions = {\n preset?: 'standalone'\n accessLevel?: 'public' | 'internal'\n /**\n * Output structure:\n * - `'enum'` — nested enums inside a single root enum\n * - `'grouped'` — namespace enum with separate extensions per token group\n */\n structure?: 'enum' | 'grouped'\n enumName?: string\n /** Namespace enum name used in grouped mode (default: 'DesignTokens') */\n extensionNamespace?: string\n colorSpace?: 'sRGB' | 'displayP3'\n /**\n * Target Swift language version.\n * - `'5.9'` (default) — standard static let declarations\n * - `'6.0'` — adds `nonisolated(unsafe)` to static properties for\n * Swift 6 strict concurrency compliance\n */\n swiftVersion?: '5.9' | '6.0'\n /** Number of spaces per indentation level (default 4) */\n indent?: number\n /** Add @frozen annotation to enums and structs for ABI stability (default false) */\n frozen?: boolean\n}\n\ntype TokenGroup = {\n name: string\n tokens: ResolvedToken[]\n}\n\nconst toSRGB = converter('rgb')\nconst toP3 = converter('p3')\n\nconst SWIFT_TYPE_GROUP_MAP: Record<string, string> = {\n color: 'Colors',\n dimension: 'Spacing',\n fontFamily: 'Fonts',\n fontWeight: 'FontWeights',\n duration: 'Durations',\n shadow: 'Shadows',\n typography: 'Typography',\n number: 'Numbers',\n cubicBezier: 'Animations',\n border: 'Borders',\n gradient: 'Gradients',\n}\n\n/**\n * Swift reserved keywords that require backtick-escaping when used as identifiers.\n */\nconst SWIFT_KEYWORDS = new Set([\n 'associatedtype',\n 'class',\n 'deinit',\n 'enum',\n 'extension',\n 'fileprivate',\n 'func',\n 'import',\n 'init',\n 'inout',\n 'internal',\n 'let',\n 'open',\n 'operator',\n 'private',\n 'protocol',\n 'public',\n 'rethrows',\n 'static',\n 'struct',\n 'subscript',\n 'typealias',\n 'var',\n 'break',\n 'case',\n 'continue',\n 'default',\n 'defer',\n 'do',\n 'else',\n 'fallthrough',\n 'for',\n 'guard',\n 'if',\n 'in',\n 'repeat',\n 'return',\n 'switch',\n 'where',\n 'while',\n 'as',\n 'catch',\n 'false',\n 'is',\n 'nil',\n 'super',\n 'self',\n 'Self',\n 'throw',\n 'throws',\n 'true',\n 'try',\n 'Type',\n 'Protocol',\n])\n\nexport class IosRenderer implements Renderer<IosRendererOptions> {\n async format(context: RenderContext, options?: IosRendererOptions): Promise<RenderOutput> {\n const opts: Required<IosRendererOptions> = {\n preset: options?.preset ?? 'standalone',\n accessLevel: options?.accessLevel ?? 'public',\n structure: options?.structure ?? 'enum',\n enumName: options?.enumName ?? 'DesignTokens',\n extensionNamespace: options?.extensionNamespace ?? 'DesignTokens',\n colorSpace: options?.colorSpace ?? 'sRGB',\n swiftVersion: options?.swiftVersion ?? '5.9',\n indent: options?.indent ?? 4,\n frozen: options?.frozen ?? false,\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n private formatTokens(tokens: ResolvedTokens, options: Required<IosRendererOptions>): string {\n if (options.structure === 'grouped') {\n return this.formatAsGrouped(tokens, options)\n }\n\n return this.formatAsEnum(tokens, options)\n }\n\n private formatAsEnum(tokens: ResolvedTokens, options: Required<IosRendererOptions>): string {\n const access = options.accessLevel\n const groups = this.groupTokensByType(tokens)\n const imports = this.collectImports(tokens)\n const i1 = this.indentStr(options.indent, 1)\n const i2 = this.indentStr(options.indent, 2)\n const staticPrefix = this.staticLetPrefix(options)\n const frozen = this.frozenPrefix(options)\n const lines: string[] = []\n\n lines.push(this.buildFileHeader())\n lines.push('')\n for (const imp of imports) {\n lines.push(`import ${imp}`)\n }\n\n lines.push(...this.buildStructDefinitions(tokens, access, options))\n\n lines.push('')\n lines.push(`${frozen}${access} enum ${options.enumName} {`)\n\n for (const group of groups) {\n lines.push(`${i1}${frozen}${access} enum ${group.name} {`)\n for (const token of group.tokens) {\n const swiftName = this.buildQualifiedSwiftName(token)\n const swiftValue = this.formatSwiftValue(token, options)\n const typeAnnotation = this.getTypeAnnotation(token)\n const annotation = typeAnnotation ? `: ${typeAnnotation}` : ''\n const docComment = this.buildDocComment(token, i2)\n if (docComment) {\n lines.push(docComment)\n }\n lines.push(`${i2}${access} ${staticPrefix}${swiftName}${annotation} = ${swiftValue}`)\n }\n lines.push(`${i1}}`)\n lines.push('')\n }\n\n lines.push('}')\n lines.push(...this.buildViewExtensions(tokens, access, options))\n lines.push('')\n\n return lines.join('\\n')\n }\n\n private formatAsGrouped(tokens: ResolvedTokens, options: Required<IosRendererOptions>): string {\n const access = options.accessLevel\n const namespace = options.extensionNamespace\n const groups = this.groupTokensByType(tokens)\n const imports = this.collectImports(tokens)\n const i1 = this.indentStr(options.indent, 1)\n const i2 = this.indentStr(options.indent, 2)\n const staticPrefix = this.staticLetPrefix(options)\n const frozen = this.frozenPrefix(options)\n const lines: string[] = []\n\n lines.push(this.buildFileHeader())\n lines.push('')\n for (const imp of imports) {\n lines.push(`import ${imp}`)\n }\n\n lines.push(...this.buildStructDefinitions(tokens, access, options))\n\n lines.push('')\n lines.push(`${frozen}${access} enum ${namespace} {}`)\n lines.push('')\n\n for (const group of groups) {\n lines.push(`${access} extension ${namespace} {`)\n lines.push(`${i1}${frozen}enum ${group.name} {`)\n for (const token of group.tokens) {\n const swiftName = this.buildQualifiedSwiftName(token)\n const swiftValue = this.formatSwiftValue(token, options)\n const typeAnnotation = this.getTypeAnnotation(token)\n const annotation = typeAnnotation ? `: ${typeAnnotation}` : ''\n const docComment = this.buildDocComment(token, i2)\n if (docComment) {\n lines.push(docComment)\n }\n lines.push(`${i2}${access} ${staticPrefix}${swiftName}${annotation} = ${swiftValue}`)\n }\n lines.push(`${i1}}`)\n lines.push('}')\n lines.push('')\n }\n\n lines.push(...this.buildViewExtensions(tokens, access, options))\n\n return lines.join('\\n')\n }\n\n private buildFileHeader(): string {\n return [\n '// Generated by Dispersa - do not edit manually',\n '// https://github.com/timges/dispersa',\n ].join('\\n')\n }\n\n private collectImports(tokens: ResolvedTokens): string[] {\n const imports = new Set<string>()\n imports.add('SwiftUI')\n\n for (const [, token] of Object.entries(tokens)) {\n if (token.$type === 'duration') {\n imports.add('Foundation')\n }\n }\n\n return Array.from(imports).sort()\n }\n\n /**\n * Builds a `///` doc comment from a token's `$description`, if present.\n */\n private buildDocComment(token: ResolvedToken, indent: string): string | undefined {\n if (!token.$description) {\n return undefined\n }\n\n return `${indent}/// ${token.$description}`\n }\n\n private groupTokensByType(tokens: ResolvedTokens): TokenGroup[] {\n const groupMap = new Map<string, ResolvedToken[]>()\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const groupName = SWIFT_TYPE_GROUP_MAP[token.$type ?? ''] ?? 'Other'\n const existing = groupMap.get(groupName) ?? []\n existing.push(token)\n groupMap.set(groupName, existing)\n }\n\n return Array.from(groupMap.entries()).map(([name, groupTokens]) => ({\n name,\n tokens: groupTokens,\n }))\n }\n\n /**\n * Builds a qualified Swift name from a token's path, preserving parent\n * hierarchy segments to avoid duplicate identifiers.\n *\n * For example, `color.blue.400` in the `Colors` group becomes `blue400`\n * instead of just `_400`.\n */\n private buildQualifiedSwiftName(token: ResolvedToken): string {\n const path = token.path\n\n // The first segment is typically the token type (color, spacing, etc.)\n // which is already represented by the group enum. Strip it.\n const withoutTypePrefix = path.length > 1 ? path.slice(1) : path\n\n const joined = withoutTypePrefix.join('_')\n return this.toSwiftIdentifier(joined)\n }\n\n private formatSwiftValue(token: ResolvedToken, options: Required<IosRendererOptions>): string {\n const value = token.$value\n\n if (token.$type === 'color') {\n return this.formatColorValue(value, options)\n }\n\n if (token.$type === 'dimension') {\n return this.formatDimensionValue(value)\n }\n\n if (token.$type === 'fontFamily') {\n return this.formatFontFamilyValue(value)\n }\n\n if (token.$type === 'fontWeight') {\n return this.formatFontWeightValue(value)\n }\n\n if (token.$type === 'duration') {\n return this.formatDurationValue(value)\n }\n\n if (token.$type === 'shadow') {\n return this.formatShadowValue(value, options)\n }\n\n if (token.$type === 'typography') {\n return this.formatTypographyValue(value)\n }\n\n if (token.$type === 'border') {\n return this.formatBorderValue(value, options)\n }\n\n if (token.$type === 'gradient') {\n return this.formatGradientValue(value, options)\n }\n\n if (token.$type === 'number') {\n return String(value)\n }\n\n if (token.$type === 'cubicBezier' && Array.isArray(value) && value.length === 4) {\n return `UnitCurve.bezier(startControlPoint: UnitPoint(x: ${value[0]}, y: ${value[1]}), endControlPoint: UnitPoint(x: ${value[2]}, y: ${value[3]}))`\n }\n\n if (typeof value === 'string') {\n return `\"${this.escapeSwiftString(value)}\"`\n }\n\n if (typeof value === 'number') {\n return String(value)\n }\n\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\n }\n\n return `\"${this.escapeSwiftString(String(value))}\"`\n }\n\n private formatColorValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (!isColorObject(value)) {\n return typeof value === 'string' ? `Color(\"${this.escapeSwiftString(value)}\")` : 'Color.clear'\n }\n\n const colorObj = value as ColorValueObject\n const alpha = colorObj.alpha ?? 1\n\n if (options.colorSpace === 'displayP3') {\n const p3 = toP3(dtcgObjectToCulori(colorObj))\n const r = this.roundComponent(p3?.r ?? 0)\n const g = this.roundComponent(p3?.g ?? 0)\n const b = this.roundComponent(p3?.b ?? 0)\n return alpha < 1\n ? `Color(.displayP3, red: ${r}, green: ${g}, blue: ${b}, opacity: ${this.roundComponent(alpha)})`\n : `Color(.displayP3, red: ${r}, green: ${g}, blue: ${b})`\n }\n\n const rgb = toSRGB(dtcgObjectToCulori(colorObj))\n const r = this.roundComponent(rgb?.r ?? 0)\n const g = this.roundComponent(rgb?.g ?? 0)\n const b = this.roundComponent(rgb?.b ?? 0)\n\n return alpha < 1\n ? `Color(red: ${r}, green: ${g}, blue: ${b}, opacity: ${this.roundComponent(alpha)})`\n : `Color(red: ${r}, green: ${g}, blue: ${b})`\n }\n\n private formatDimensionValue(value: unknown): string {\n if (isDimensionObject(value)) {\n const dim = value as DimensionValue\n // Convert rem to points (1rem = 16pt convention)\n const ptValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n return String(ptValue)\n }\n\n return String(value)\n }\n\n private formatFontFamilyValue(value: unknown): string {\n if (Array.isArray(value)) {\n const primary = value[0]\n return typeof primary === 'string' ? `\"${this.escapeSwiftString(primary)}\"` : '\"system\"'\n }\n\n return typeof value === 'string' ? `\"${this.escapeSwiftString(value)}\"` : '\"system\"'\n }\n\n private formatFontWeightValue(value: unknown): string {\n if (typeof value === 'number') {\n return this.numericFontWeight(value)\n }\n\n if (typeof value === 'string') {\n return this.namedFontWeight(value) ?? 'Font.Weight.regular'\n }\n\n return 'Font.Weight.regular'\n }\n\n private numericFontWeight(weight: number): string {\n if (weight <= 100) {\n return 'Font.Weight.ultraLight'\n }\n if (weight <= 200) {\n return 'Font.Weight.thin'\n }\n if (weight <= 300) {\n return 'Font.Weight.light'\n }\n if (weight <= 400) {\n return 'Font.Weight.regular'\n }\n if (weight <= 500) {\n return 'Font.Weight.medium'\n }\n if (weight <= 600) {\n return 'Font.Weight.semibold'\n }\n if (weight <= 700) {\n return 'Font.Weight.bold'\n }\n if (weight <= 800) {\n return 'Font.Weight.heavy'\n }\n return 'Font.Weight.black'\n }\n\n private namedFontWeight(name: string): string | undefined {\n const map: Record<string, string> = {\n thin: 'Font.Weight.thin',\n ultralight: 'Font.Weight.ultraLight',\n extralight: 'Font.Weight.ultraLight',\n light: 'Font.Weight.light',\n regular: 'Font.Weight.regular',\n normal: 'Font.Weight.regular',\n medium: 'Font.Weight.medium',\n semibold: 'Font.Weight.semibold',\n demibold: 'Font.Weight.semibold',\n bold: 'Font.Weight.bold',\n heavy: 'Font.Weight.heavy',\n extrabold: 'Font.Weight.heavy',\n black: 'Font.Weight.black',\n ultrabold: 'Font.Weight.black',\n }\n\n return map[name.toLowerCase()]\n }\n\n private formatDurationValue(value: unknown): string {\n if (typeof value === 'object' && value !== null && 'value' in value && 'unit' in value) {\n const dur = value as DurationValue\n const seconds = dur.unit === 'ms' ? dur.value / 1000 : dur.value\n return String(seconds)\n }\n\n return typeof value === 'number' ? String(value) : '0'\n }\n\n private formatShadowValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (Array.isArray(value) && value.length > 0) {\n // Use the first shadow layer for SwiftUI\n return this.formatSingleShadow(value[0] as Record<string, unknown>, options)\n }\n\n if (typeof value === 'object' && value !== null) {\n return this.formatSingleShadow(value as Record<string, unknown>, options)\n }\n\n return 'ShadowStyle(color: .clear, radius: 0, x: 0, y: 0, spread: 0)'\n }\n\n private formatSingleShadow(\n shadow: Record<string, unknown>,\n options: Required<IosRendererOptions>,\n ): string {\n const color = isColorObject(shadow.color)\n ? this.formatColorValue(shadow.color, options)\n : 'Color.black.opacity(0.25)'\n\n const radius = isDimensionObject(shadow.blur)\n ? this.dimensionToCGFloat(shadow.blur as DimensionValue)\n : '8'\n\n const x = isDimensionObject(shadow.offsetX)\n ? this.dimensionToCGFloat(shadow.offsetX as DimensionValue)\n : '0'\n\n const y = isDimensionObject(shadow.offsetY)\n ? this.dimensionToCGFloat(shadow.offsetY as DimensionValue)\n : '0'\n\n const spread = isDimensionObject(shadow.spread)\n ? this.dimensionToCGFloat(shadow.spread as DimensionValue)\n : '0'\n\n return `ShadowStyle(color: ${color}, radius: ${radius}, x: ${x}, y: ${y}, spread: ${spread})`\n }\n\n private formatTypographyValue(value: unknown): string {\n if (typeof value !== 'object' || value === null) {\n return 'TypographyStyle(font: Font.body, tracking: 0, lineSpacing: 0)'\n }\n\n const typo = value as Record<string, unknown>\n\n const size = isDimensionObject(typo.fontSize)\n ? this.dimensionToPoints(typo.fontSize as DimensionValue)\n : '16'\n\n const weight =\n typo.fontWeight != null ? this.formatFontWeightValue(typo.fontWeight) : 'Font.Weight.regular'\n\n const fontExpr = this.buildFontExpression(typo, size, weight)\n const tracking = this.extractTracking(typo)\n const lineSpacing = this.extractLineSpacing(typo)\n\n return `TypographyStyle(font: ${fontExpr}, tracking: ${tracking}, lineSpacing: ${lineSpacing})`\n }\n\n private buildFontExpression(typo: Record<string, unknown>, size: string, weight: string): string {\n if (typo.fontFamily != null) {\n const family = Array.isArray(typo.fontFamily) ? typo.fontFamily[0] : typo.fontFamily\n if (typeof family === 'string') {\n return `Font.custom(\"${this.escapeSwiftString(family)}\", size: ${size}).weight(${weight})`\n }\n }\n\n return `Font.system(size: ${size}, weight: ${weight})`\n }\n\n private extractTracking(typo: Record<string, unknown>): string {\n if (!isDimensionObject(typo.letterSpacing)) {\n return '0'\n }\n const dim = typo.letterSpacing as DimensionValue\n const ptValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n return String(ptValue)\n }\n\n private extractLineSpacing(typo: Record<string, unknown>): string {\n if (typo.lineHeight == null || typeof typo.lineHeight !== 'number') {\n return '0'\n }\n if (!isDimensionObject(typo.fontSize)) {\n return '0'\n }\n const dim = typo.fontSize as DimensionValue\n const basePt = dim.unit === 'rem' ? dim.value * 16 : dim.value\n const lineHeightPt = Math.round(basePt * typo.lineHeight * 100) / 100\n return String(lineHeightPt - basePt)\n }\n\n private dimensionToPoints(dim: DimensionValue): string {\n const ptValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n return String(ptValue)\n }\n\n /** Formats a dimension as a CGFloat literal (appends `.0` for integers). */\n private dimensionToCGFloat(dim: DimensionValue): string {\n const ptValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n return Number.isInteger(ptValue) ? `${ptValue}.0` : String(ptValue)\n }\n\n private getTypeAnnotation(token: ResolvedToken): string | undefined {\n switch (token.$type) {\n case 'dimension':\n return 'CGFloat'\n case 'duration':\n return 'TimeInterval'\n case 'number':\n return 'Double'\n case 'fontWeight':\n return 'Font.Weight'\n case 'fontFamily':\n return 'String'\n default:\n return undefined\n }\n }\n\n private toSwiftIdentifier(name: string): string {\n // Convert kebab-case, dot-notation, or snake_case to camelCase\n const camel = name\n .replace(/[-._]+(.)/g, (_, c: string) => c.toUpperCase())\n .replace(/[-._]+$/g, '')\n .replace(/^[-._]+/g, '')\n\n // Ensure first character is lowercase\n const identifier = camel.charAt(0).toLowerCase() + camel.slice(1)\n\n // Prefix with underscore if it starts with a digit\n const safe = /^\\d/.test(identifier) ? `_${identifier}` : identifier\n\n // Escape Swift reserved keywords with backticks\n return SWIFT_KEYWORDS.has(safe) ? `\\`${safe}\\`` : safe\n }\n\n private escapeSwiftString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n')\n }\n\n private roundComponent(value: number): number {\n return Math.round(value * 10000) / 10000\n }\n\n private indentStr(width: number, level: number): string {\n return ' '.repeat(width * level)\n }\n\n /**\n * Returns the prefix for `static let` declarations.\n * Swift 6 requires `nonisolated(unsafe)` on global stored properties.\n */\n private staticLetPrefix(options: Required<IosRendererOptions>): string {\n return options.swiftVersion === '6.0' ? 'nonisolated(unsafe) static let ' : 'static let '\n }\n\n /** Returns `@frozen ` when the frozen option is enabled, empty string otherwise. */\n private frozenPrefix(options: Required<IosRendererOptions>): string {\n return options.frozen ? '@frozen ' : ''\n }\n\n /** Returns `: Sendable` when targeting Swift 6, empty string otherwise. */\n private structConformances(options: Required<IosRendererOptions>): string {\n return options.swiftVersion === '6.0' ? ': Sendable' : ''\n }\n\n private hasShadowTokens(tokens: ResolvedTokens): boolean {\n return Object.values(tokens).some((t) => t.$type === 'shadow')\n }\n\n private hasTypographyTokens(tokens: ResolvedTokens): boolean {\n return Object.values(tokens).some((t) => t.$type === 'typography')\n }\n\n private hasBorderTokens(tokens: ResolvedTokens): boolean {\n return Object.values(tokens).some((t) => t.$type === 'border')\n }\n\n /** Emits all struct definitions needed by the token set. */\n private buildStructDefinitions(\n tokens: ResolvedTokens,\n access: string,\n options: Required<IosRendererOptions>,\n ): string[] {\n const lines: string[] = []\n\n if (this.hasShadowTokens(tokens)) {\n lines.push('')\n lines.push(...this.buildShadowStyleStruct(access, options))\n }\n\n if (this.hasTypographyTokens(tokens)) {\n lines.push('')\n lines.push(...this.buildTypographyStyleStruct(access, options))\n }\n\n if (this.hasBorderTokens(tokens)) {\n lines.push('')\n lines.push(...this.buildBorderStyleStruct(access, options))\n }\n\n return lines\n }\n\n private buildShadowStyleStruct(access: string, options: Required<IosRendererOptions>): string[] {\n const i1 = this.indentStr(options.indent, 1)\n const conformances = this.structConformances(options)\n const frozen = this.frozenPrefix(options)\n return [\n `${frozen}${access} struct ShadowStyle${conformances} {`,\n `${i1}${access} let color: Color`,\n `${i1}${access} let radius: CGFloat`,\n `${i1}${access} let x: CGFloat`,\n `${i1}${access} let y: CGFloat`,\n `${i1}${access} let spread: CGFloat`,\n '}',\n ]\n }\n\n private buildTypographyStyleStruct(\n access: string,\n options: Required<IosRendererOptions>,\n ): string[] {\n const i1 = this.indentStr(options.indent, 1)\n const conformances = this.structConformances(options)\n const frozen = this.frozenPrefix(options)\n return [\n `${frozen}${access} struct TypographyStyle${conformances} {`,\n `${i1}${access} let font: Font`,\n `${i1}${access} let tracking: CGFloat`,\n `${i1}${access} let lineSpacing: CGFloat`,\n '}',\n ]\n }\n\n private buildBorderStyleStruct(access: string, options: Required<IosRendererOptions>): string[] {\n const i1 = this.indentStr(options.indent, 1)\n const conformances = this.structConformances(options)\n const frozen = this.frozenPrefix(options)\n return [\n `${frozen}${access} struct BorderStyle${conformances} {`,\n `${i1}${access} let color: Color`,\n `${i1}${access} let width: CGFloat`,\n '}',\n ]\n }\n\n /** Emits convenience View extensions for shadow and typography application. */\n private buildViewExtensions(\n tokens: ResolvedTokens,\n access: string,\n options: Required<IosRendererOptions>,\n ): string[] {\n const lines: string[] = []\n const i1 = this.indentStr(options.indent, 1)\n const i2 = this.indentStr(options.indent, 2)\n\n if (this.hasShadowTokens(tokens)) {\n lines.push('')\n lines.push(`${access} extension View {`)\n lines.push(`${i1}func shadowStyle(_ style: ShadowStyle) -> some View {`)\n lines.push(\n `${i2}self.shadow(color: style.color, radius: style.radius, x: style.x, y: style.y)`,\n )\n lines.push(`${i1}}`)\n lines.push('}')\n }\n\n if (this.hasTypographyTokens(tokens)) {\n lines.push('')\n lines.push(`${access} extension View {`)\n lines.push(`${i1}func typographyStyle(_ style: TypographyStyle) -> some View {`)\n lines.push(\n `${i2}self.font(style.font).tracking(style.tracking).lineSpacing(style.lineSpacing)`,\n )\n lines.push(`${i1}}`)\n lines.push('}')\n }\n\n return lines\n }\n\n private formatBorderValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (typeof value !== 'object' || value === null) {\n return 'BorderStyle(color: .clear, width: 0)'\n }\n\n const border = value as Record<string, unknown>\n\n const color = isColorObject(border.color)\n ? this.formatColorValue(border.color, options)\n : 'Color.clear'\n\n const width = isDimensionObject(border.width)\n ? this.dimensionToCGFloat(border.width as DimensionValue)\n : '1.0'\n\n return `BorderStyle(color: ${color}, width: ${width})`\n }\n\n private formatGradientValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (!Array.isArray(value) || value.length === 0) {\n return 'Gradient(stops: [])'\n }\n\n const stops = (value as GradientStop[]).map((stop) => {\n const color = isColorObject(stop.color)\n ? this.formatColorValue(stop.color, options)\n : 'Color.clear'\n return `.init(color: ${color}, location: ${stop.position})`\n })\n\n return `Gradient(stops: [${stops.join(', ')}])`\n }\n\n private async formatStandalone(\n context: RenderContext,\n options: Required<IosRendererOptions>,\n ): Promise<RenderOutput> {\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for standalone iOS output`,\n )\n }\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = this.formatTokens(processedTokens, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'swift',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n}\n\n/**\n * iOS/SwiftUI renderer factory function.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'ios',\n * renderer: iosRenderer(),\n * options: {\n * accessLevel: 'public',\n * structure: 'enum', // or 'grouped' for extension-based layout\n * enumName: 'DesignTokens',\n * colorSpace: 'sRGB',\n * },\n * file: 'DesignTokens-{theme}.swift'\n * }]\n * ```\n */\nexport function iosRenderer(): Renderer<IosRendererOptions> {\n const rendererInstance = new IosRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as IosRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @fileoverview JavaScript module renderer using Prettier for formatting\n */\n\nimport {\n buildInMemoryOutputKey,\n resolveFileName,\n stripInternalMetadata,\n} from '@renderers/bundlers/utils'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { outputTree } from './output-tree'\nimport type { JsModuleRendererOptions, RenderContext, RenderOutput, Renderer } from './types'\n\nexport class JsModuleRenderer implements Renderer<JsModuleRendererOptions> {\n async format(context: RenderContext, options?: JsModuleRendererOptions): Promise<RenderOutput> {\n const opts: Required<JsModuleRendererOptions> = {\n preset: options?.preset ?? 'standalone',\n structure: options?.structure ?? 'nested',\n minify: options?.minify ?? false,\n moduleName: options?.moduleName ?? 'tokens',\n generateHelper: options?.generateHelper ?? false,\n }\n\n if (opts.preset === 'bundle') {\n const { bundleAsJsModule } = await import('@renderers/bundlers/js')\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens: stripInternalMetadata(tokens),\n modifierInputs,\n isBase: this.isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsJsModule(bundleData, context.resolver, opts, async (tokens) => {\n return await this.formatTokens(tokens, opts)\n })\n }\n\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for JS module output`,\n )\n }\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const cleanTokens = stripInternalMetadata(tokens)\n const content = await this.formatTokens(cleanTokens, opts)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'js',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n private async formatTokens(\n tokens: ResolvedTokens,\n options: JsModuleRendererOptions,\n ): Promise<string> {\n const opts: Required<JsModuleRendererOptions> = {\n preset: options.preset ?? 'standalone',\n structure: options.structure ?? 'nested',\n minify: options.minify ?? false,\n moduleName: options.moduleName ?? 'tokens',\n generateHelper: options.generateHelper ?? false,\n }\n\n const lines: string[] = []\n lines.push(...this.formatAsObject(tokens, opts))\n\n const code = lines.join('\\n')\n\n // Skip prettier formatting if minify is true\n if (opts.minify) {\n return code\n }\n\n // Use Prettier for consistent, high-quality formatting\n return await prettier.format(code, {\n parser: 'babel',\n printWidth: 80,\n tabWidth: 2,\n useTabs: false,\n semi: false,\n singleQuote: true,\n trailingComma: 'es5',\n })\n }\n\n /**\n * Format as default export object\n */\n private formatAsObject(\n tokens: ResolvedTokens,\n options: Required<JsModuleRendererOptions>,\n ): string[] {\n const lines: string[] = []\n const tokenObj = this.tokensToPlainObject(tokens, options.structure)\n const varName = options.moduleName !== '' ? options.moduleName : 'tokens'\n\n lines.push(`const ${varName} = {`)\n this.addObjectProperties(lines, tokenObj, 1)\n lines.push('}')\n lines.push('')\n lines.push(`export default ${varName}`)\n\n return lines\n }\n\n /**\n * Convert tokens to plain object with flat or nested structure\n */\n private tokensToPlainObject(\n tokens: ResolvedTokens,\n structure: 'flat' | 'nested',\n ): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n if (structure === 'flat') {\n // Flat structure: { \"token.name\": \"value\" }\n for (const [name, token] of getSortedTokenEntries(tokens)) {\n result[name] = token.$value\n }\n } else {\n // Nested structure: { \"token\": { \"name\": \"value\" } }\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const parts = token.path\n let current = result\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]\n if (part == null) {\n continue\n }\n if (!(part in current)) {\n current[part] = {}\n }\n current = current[part] as Record<string, unknown>\n }\n\n const lastPart = parts[parts.length - 1]\n if (lastPart != null) {\n current[lastPart] = token.$value\n }\n }\n }\n\n return result\n }\n\n /**\n * Add object properties to lines\n */\n private addObjectProperties(lines: string[], obj: Record<string, unknown>, indent: number): void {\n const indentStr = ' '.repeat(indent)\n const entries = Object.entries(obj).sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]\n if (entry == null) {\n continue\n }\n const [key, value] = entry\n const isLast = i === entries.length - 1\n\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n lines.push(`${indentStr}${this.quoteKey(key)}: {`)\n this.addObjectProperties(lines, value as Record<string, unknown>, indent + 1)\n lines.push(`${indentStr}}${isLast ? '' : ','}`)\n } else {\n const valueStr = JSON.stringify(value)\n lines.push(`${indentStr}${this.quoteKey(key)}: ${valueStr}${isLast ? '' : ','}`)\n }\n }\n }\n\n /**\n * Quote key if necessary\n */\n private quoteKey(key: string): string {\n if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) {\n return key\n }\n return `\"${key}\"`\n }\n\n private isBasePermutation(\n modifierInputs: Record<string, string>,\n defaults: Record<string, string>,\n ): boolean {\n return Object.entries(modifierInputs).every(([key, value]) => value === defaults[key])\n }\n}\n\n/**\n * JavaScript module renderer factory function\n *\n * Creates a JS module renderer with the specified preset and options.\n *\n * @param preset - Output preset: 'bundle' or 'standalone'\n * @param options - JS module formatting options (structure, minify, moduleName, generateHelper)\n * @returns Renderer instance\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'js',\n * renderer: jsRenderer(),\n * options: { preset: 'standalone', structure: 'flat', moduleName: 'tokens' },\n * file: 'tokens.js'\n * }]\n * ```\n */\nexport function jsRenderer(): Renderer<JsModuleRendererOptions> {\n const rendererInstance = new JsModuleRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as JsModuleRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @fileoverview JSON renderer using Prettier for consistent formatting\n */\n\nimport {\n buildInMemoryOutputKey,\n resolveFileName,\n stripInternalMetadata,\n} from '@renderers/bundlers/utils'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { outputTree } from './output-tree'\nimport type { JsonRendererOptions, RenderContext, RenderOutput, Renderer } from './types'\n\nexport class JsonRenderer implements Renderer<JsonRendererOptions> {\n async format(context: RenderContext, options?: JsonRendererOptions): Promise<RenderOutput> {\n const opts: Required<JsonRendererOptions> = {\n preset: options?.preset ?? 'standalone',\n structure: options?.structure ?? 'nested',\n minify: options?.minify ?? false,\n includeMetadata: options?.includeMetadata ?? false,\n }\n\n if (opts.preset === 'bundle') {\n const { bundleAsJson } = await import('@renderers/bundlers/json')\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens: stripInternalMetadata(tokens),\n modifierInputs,\n isBase: this.isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsJson(bundleData, context.resolver, async (tokens) => {\n return await this.formatTokens(tokens, opts)\n })\n }\n\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for JSON output`,\n )\n }\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = await this.formatTokens(processedTokens, opts)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'json',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n private async formatTokens(\n tokens: ResolvedTokens,\n options: JsonRendererOptions,\n ): Promise<string> {\n const opts: Required<JsonRendererOptions> = {\n preset: options.preset ?? 'standalone',\n structure: options.structure ?? 'nested',\n minify: options.minify ?? false,\n includeMetadata: options.includeMetadata ?? false,\n }\n\n let output: unknown\n\n if (opts.structure === 'flat') {\n // Flat format: { \"token.name\": \"value\" } or { \"token.name\": { $value, $type, ... } }\n output = opts.includeMetadata ? this.flattenTokens(tokens) : this.flattenValues(tokens)\n } else {\n // Nested format: { \"token\": { \"name\": \"value\" } }\n output = opts.includeMetadata ? this.nestTokens(tokens) : this.nestValues(tokens)\n }\n\n const jsonString = JSON.stringify(output)\n\n // Use Prettier for consistent, high-quality formatting\n if (!opts.minify) {\n return await prettier.format(jsonString, {\n parser: 'json',\n printWidth: 80,\n tabWidth: 2,\n useTabs: false,\n })\n }\n\n return jsonString\n }\n\n /**\n * Flatten tokens to simple key-value pairs\n */\n private flattenValues(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [name, token] of getSortedTokenEntries(tokens)) {\n result[name] = token.$value\n }\n return result\n }\n\n /**\n * Flatten tokens to metadata objects\n */\n private flattenTokens(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [name, token] of getSortedTokenEntries(tokens)) {\n result[name] = this.serializeToken(token)\n }\n return result\n }\n\n /**\n * Nest tokens by path (values only)\n */\n private nestValues(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const parts = token.path\n let current = result\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]\n if (part === null || part === undefined) {\n continue\n }\n if (!(part in current)) {\n current[part] = {}\n }\n current = current[part] as Record<string, unknown>\n }\n\n const lastPart = parts[parts.length - 1]\n if (lastPart !== null && lastPart !== undefined) {\n current[lastPart] = token.$value\n }\n }\n\n return result\n }\n\n /**\n * Nest tokens by path (with metadata)\n */\n private nestTokens(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const parts = token.path\n let current = result\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]\n if (part === null || part === undefined) {\n continue\n }\n if (!(part in current)) {\n current[part] = {}\n }\n current = current[part] as Record<string, unknown>\n }\n\n const lastPart = parts[parts.length - 1]\n if (lastPart !== null && lastPart !== undefined) {\n current[lastPart] = this.serializeToken(token)\n }\n }\n\n return result\n }\n\n private serializeToken(token: ResolvedToken): Record<string, unknown> {\n return {\n $value: token.$value,\n ...(typeof token.$type === 'string' && { $type: token.$type }),\n ...(token.$description != null &&\n token.$description !== '' && { $description: token.$description }),\n ...(token.$deprecated != null &&\n token.$deprecated !== false && { $deprecated: token.$deprecated }),\n ...(token.$extensions != null && { $extensions: token.$extensions }),\n }\n }\n\n private isBasePermutation(\n modifierInputs: Record<string, string>,\n defaults: Record<string, string>,\n ): boolean {\n return Object.entries(modifierInputs).every(([key, value]) => value === defaults[key])\n }\n}\n\n/**\n * JSON renderer factory function\n *\n * Creates a JSON renderer with the specified preset and options.\n *\n * @param preset - Output preset: 'bundle' or 'standalone'\n * @param options - JSON formatting options (structure, minify, includeMetadata)\n * @returns Renderer instance\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'json',\n * renderer: jsonRenderer(),\n * options: { preset: 'bundle', structure: 'nested', includeMetadata: true },\n * file: 'tokens.json'\n * }]\n * ```\n */\nexport function jsonRenderer(): Renderer<JsonRendererOptions> {\n const rendererInstance = new JsonRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as JsonRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Tailwind CSS v4 renderer using @theme directive\n * Generates CSS with @theme blocks for Tailwind v4+ design token integration\n */\n\nimport {\n colorObjectToHex,\n isColorObject,\n} from '@processing/processors/transforms/built-in/color-converter'\nimport {\n dimensionObjectToString,\n isDimensionObject,\n} from '@processing/processors/transforms/built-in/dimension-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { DimensionValue, DurationValue, ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { bundleAsTailwind } from './bundlers/tailwind'\nimport { buildInMemoryOutputKey, resolveFileName, stripInternalMetadata } from './bundlers/utils'\nimport { outputTree } from './output-tree'\nimport type {\n MediaQueryFunction,\n RenderContext,\n RenderOutput,\n Renderer,\n SelectorFunction,\n} from './types'\n\n/**\n * Options for Tailwind CSS v4 renderer\n *\n * Controls how tokens are converted to Tailwind v4 @theme CSS variables.\n *\n * @example Bundle with dark mode overrides\n * ```typescript\n * tailwind({\n * name: 'tailwind',\n * file: 'theme.css',\n * preset: 'bundle',\n * selector: (modifier, context, isBase) => {\n * if (isBase) return ':root'\n * return `[data-${modifier}=\"${context}\"]`\n * },\n * })\n * ```\n */\nexport type TailwindRendererOptions = {\n preset?: 'bundle' | 'standalone'\n includeImport?: boolean\n namespace?: string\n minify?: boolean\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n}\n\n/**\n * Mapping from DTCG token types to Tailwind v4 CSS variable namespace prefixes\n */\nconst TAILWIND_NAMESPACE_MAP: Record<string, string> = {\n color: 'color',\n dimension: 'spacing',\n fontFamily: 'font',\n fontWeight: 'font-weight',\n duration: 'duration',\n shadow: 'shadow',\n number: 'number',\n cubicBezier: 'ease',\n}\n\n/**\n * Resolved Tailwind options with required base fields.\n * selector and mediaQuery remain optional (only used in bundle mode).\n * variantDeclarations is populated by the bundler from non-base permutations.\n */\ntype ResolvedTailwindOptions = {\n preset: 'bundle' | 'standalone'\n includeImport: boolean\n namespace: string\n minify: boolean\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n variantDeclarations: string[]\n}\n\nexport class TailwindRenderer implements Renderer<TailwindRendererOptions> {\n async format(context: RenderContext, options?: TailwindRendererOptions): Promise<RenderOutput> {\n const opts: ResolvedTailwindOptions = {\n preset: options?.preset ?? 'bundle',\n includeImport: options?.includeImport ?? true,\n namespace: options?.namespace ?? '',\n minify: options?.minify ?? false,\n selector: options?.selector,\n mediaQuery: options?.mediaQuery,\n variantDeclarations: [],\n }\n\n if (opts.preset === 'bundle') {\n return await this.formatBundle(context, opts)\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n /**\n * Format tokens as Tailwind v4 @theme CSS variables\n */\n async formatTokens(tokens: ResolvedTokens, options: ResolvedTailwindOptions): Promise<string> {\n const lines: string[] = []\n const indent = options.minify ? '' : ' '\n const newline = options.minify ? '' : '\\n'\n const space = options.minify ? '' : ' '\n\n if (options.includeImport) {\n lines.push(`@import \"tailwindcss\";${newline}`)\n }\n\n // Emit @custom-variant declarations (auto-derived from non-base modifiers)\n if (options.variantDeclarations.length > 0) {\n if (options.includeImport) {\n lines.push(newline)\n }\n for (const declaration of options.variantDeclarations) {\n lines.push(`${declaration}${newline}`)\n }\n }\n\n if (options.includeImport || options.variantDeclarations.length > 0) {\n lines.push(newline)\n }\n\n const themeDirective = options.namespace ? `@theme namespace(${options.namespace})` : '@theme'\n\n lines.push(`${themeDirective}${space}{${newline}`)\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const varName = this.buildVariableName(token)\n const varValue = this.formatValue(token)\n lines.push(`${indent}--${varName}:${space}${varValue};${newline}`)\n }\n\n lines.push(`}${newline}`)\n\n const cssString = lines.join('')\n return options.minify ? cssString : await this.formatWithPrettier(cssString)\n }\n\n /**\n * Format tokens as plain CSS custom property overrides inside a selector block.\n * Used for modifier overrides (e.g., dark mode) appended after the @theme block.\n */\n async formatOverrideBlock(\n tokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n minify: boolean,\n ): Promise<string> {\n const indent = minify ? '' : ' '\n const newline = minify ? '' : '\\n'\n const space = minify ? '' : ' '\n const hasMediaQuery = mediaQuery !== ''\n const tokenIndent = hasMediaQuery ? indent + indent : indent\n\n const lines: string[] = []\n\n if (hasMediaQuery) {\n lines.push(`@media ${mediaQuery}${space}{${newline}`)\n lines.push(`${indent}${selector}${space}{${newline}`)\n } else {\n lines.push(`${selector}${space}{${newline}`)\n }\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const varName = this.buildVariableName(token)\n const varValue = this.formatValue(token)\n lines.push(`${tokenIndent}--${varName}:${space}${varValue};${newline}`)\n }\n\n if (hasMediaQuery) {\n lines.push(`${indent}}${newline}`)\n lines.push(`}${newline}`)\n } else {\n lines.push(`}${newline}`)\n }\n\n return lines.join('')\n }\n\n private buildVariableName(token: ResolvedToken): string {\n const prefix = TAILWIND_NAMESPACE_MAP[token.$type ?? '']\n if (!prefix) {\n return token.name\n }\n\n // If token name already starts with the prefix, don't double-prefix\n const nameLower = token.name.toLowerCase()\n const prefixLower = prefix.toLowerCase()\n if (nameLower.startsWith(`${prefixLower}-`) || nameLower.startsWith(`${prefixLower}.`)) {\n return token.name\n }\n\n return `${prefix}-${token.name}`\n }\n\n private formatValue(token: ResolvedToken): string {\n const value = token.$value\n\n if (token.$type === 'color' && isColorObject(value)) {\n return colorObjectToHex(value)\n }\n\n if (token.$type === 'dimension' && isDimensionObject(value)) {\n return dimensionObjectToString(value as DimensionValue)\n }\n\n if (token.$type === 'duration' && this.isDurationObject(value)) {\n return `${(value as DurationValue).value}${(value as DurationValue).unit}`\n }\n\n if (token.$type === 'fontFamily') {\n if (Array.isArray(value)) {\n return value\n .map((v) => (typeof v === 'string' && v.includes(' ') ? `\"${v}\"` : v))\n .join(', ')\n }\n return typeof value === 'string' ? value : String(value)\n }\n\n if (token.$type === 'shadow') {\n return this.formatShadowValue(value)\n }\n\n if (token.$type === 'cubicBezier' && Array.isArray(value) && value.length === 4) {\n return `cubic-bezier(${value.join(', ')})`\n }\n\n if (typeof value === 'string') {\n return value\n }\n\n if (typeof value === 'number') {\n return String(value)\n }\n\n return String(value)\n }\n\n private formatShadowValue(value: unknown): string {\n if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object') {\n return value.map((s) => this.formatSingleShadow(s as Record<string, unknown>)).join(', ')\n }\n\n if (typeof value === 'object' && value !== null) {\n return this.formatSingleShadow(value as Record<string, unknown>)\n }\n\n return String(value)\n }\n\n private formatSingleShadow(shadow: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (shadow.inset === true) {\n parts.push('inset')\n }\n\n if (isDimensionObject(shadow.offsetX)) {\n parts.push(dimensionObjectToString(shadow.offsetX as DimensionValue))\n }\n if (isDimensionObject(shadow.offsetY)) {\n parts.push(dimensionObjectToString(shadow.offsetY as DimensionValue))\n }\n if (isDimensionObject(shadow.blur)) {\n parts.push(dimensionObjectToString(shadow.blur as DimensionValue))\n }\n if (shadow.spread != null && isDimensionObject(shadow.spread)) {\n parts.push(dimensionObjectToString(shadow.spread as DimensionValue))\n }\n if (isColorObject(shadow.color)) {\n parts.push(colorObjectToHex(shadow.color))\n } else if (shadow.color != null) {\n parts.push(String(shadow.color))\n }\n\n return parts.join(' ')\n }\n\n private isDurationObject(value: unknown): value is DurationValue {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'value' in value &&\n 'unit' in value &&\n (value as { unit?: unknown }).unit !== undefined\n )\n }\n\n private async formatWithPrettier(css: string): Promise<string> {\n try {\n return await prettier.format(css, {\n parser: 'css',\n printWidth: 80,\n tabWidth: 2,\n useTabs: false,\n })\n } catch {\n return css\n }\n }\n\n private async formatBundle(\n context: RenderContext,\n options: ResolvedTailwindOptions,\n ): Promise<string> {\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens,\n modifierInputs,\n isBase: this.isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsTailwind(\n bundleData,\n options,\n async (tokens, opts) => await this.formatTokens(tokens, opts),\n async (tokens, selector, mediaQuery, minify) =>\n await this.formatOverrideBlock(tokens, selector, mediaQuery, minify),\n )\n }\n\n private async formatStandalone(\n context: RenderContext,\n options: ResolvedTailwindOptions,\n ): Promise<RenderOutput> {\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for standalone Tailwind output`,\n )\n }\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = await this.formatTokens(processedTokens, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'css',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n private isBasePermutation(\n modifierInputs: Record<string, string>,\n defaults: Record<string, string>,\n ): boolean {\n return Object.entries(defaults).every(\n ([key, value]) => modifierInputs[key]?.toLowerCase() === value.toLowerCase(),\n )\n }\n}\n\n/**\n * Tailwind CSS v4 renderer factory function.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'tailwind',\n * renderer: tailwindRenderer(),\n * options: {\n * preset: 'bundle',\n * includeImport: true,\n * },\n * file: 'theme.css'\n * }]\n * ```\n */\nexport function tailwindRenderer(): Renderer<TailwindRendererOptions> {\n const rendererInstance = new TailwindRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as TailwindRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Tailwind CSS v4 bundler for multi-theme output\n *\n * Bundles multiple permutations into a single Tailwind @theme file.\n * The base permutation tokens are included in @theme to define the utility\n * vocabulary. Non-base permutations (e.g., dark mode) are appended as plain\n * CSS custom property overrides with configurable selectors/media queries.\n */\n\nimport type { TailwindRendererOptions } from '@renderers/tailwind'\nimport type { MediaQueryFunction, SelectorFunction } from '@renderers/types'\nimport { BasePermutationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@tokens/types'\n\nimport type { BundleDataItem } from './types'\nimport {\n countModifierDifferences,\n getExpectedSource,\n normalizeModifierInputs,\n parseModifierSource,\n resolveMediaQuery,\n resolveSelector,\n stripInternalMetadata,\n} from './utils'\n\ntype ResolvedTailwindOptions = {\n preset: 'bundle' | 'standalone'\n includeImport: boolean\n namespace: string\n minify: boolean\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n variantDeclarations: string[]\n}\n\n/**\n * Bundle tokens as a Tailwind v4 @theme CSS file with modifier overrides\n *\n * Strategy:\n * - Base permutation tokens go into @theme (defines the Tailwind utility vocabulary)\n * - Non-base permutations are appended as plain CSS custom property overrides\n * using configurable selectors/media queries, consistent with the CSS renderer\n */\nexport async function bundleAsTailwind(\n bundleData: BundleDataItem[],\n options: ResolvedTailwindOptions | TailwindRendererOptions,\n formatThemeTokens: (tokens: ResolvedTokens, options: ResolvedTailwindOptions) => Promise<string>,\n formatOverrideBlock: (\n tokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n minify: boolean,\n ) => Promise<string>,\n): Promise<string> {\n const baseItem = bundleData.find((item) => item.isBase)\n if (!baseItem) {\n throw new BasePermutationError('Base permutation not found in bundle data')\n }\n\n const resolvedOpts = resolveOptions(options)\n const cssBlocks: string[] = []\n\n // Collect @custom-variant declarations from non-base permutations\n const variantDeclarations = collectVariantDeclarations(bundleData, baseItem, resolvedOpts)\n const themeOpts: ResolvedTailwindOptions = { ...resolvedOpts, variantDeclarations }\n\n // Base permutation: format as @theme block\n const baseTokens = stripInternalMetadata(baseItem.tokens)\n const themeBlock = await formatThemeTokens(baseTokens, themeOpts)\n cssBlocks.push(themeBlock)\n\n // Non-base permutations: format as plain CSS override blocks\n for (const item of bundleData) {\n if (item.isBase) {\n continue\n }\n\n const block = await formatModifierOverride(item, baseItem, resolvedOpts, formatOverrideBlock)\n if (block) {\n cssBlocks.push(block)\n }\n }\n\n return cssBlocks.join('\\n')\n}\n\nasync function formatModifierOverride(\n { tokens, modifierInputs }: BundleDataItem,\n baseItem: BundleDataItem,\n options: ResolvedTailwindOptions,\n formatOverrideBlock: (\n tokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n minify: boolean,\n ) => Promise<string>,\n): Promise<string | undefined> {\n // Skip permutations where multiple modifiers differ from base\n const differenceCount = countModifierDifferences(modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n return undefined\n }\n\n // Include tokens whose resolved value differs from the base permutation.\n // Source-based filtering alone misses alias tokens that change indirectly\n // (e.g., background-base references gray.25 which changes in dark mode).\n // Since the Tailwind renderer resolves all references to final values,\n // every token with a changed value must appear in the override block.\n const tokensToInclude = filterTokensByValueChange(tokens, baseItem.tokens)\n\n if (Object.keys(tokensToInclude).length === 0) {\n return undefined\n }\n\n const expectedSource = getExpectedSource(modifierInputs, baseItem.modifierInputs)\n\n const [modifier, context] = parseModifierSource(expectedSource)\n const cleanTokens = stripInternalMetadata(tokensToInclude)\n\n const selector = resolveSelector(\n options.selector,\n modifier,\n context,\n false,\n normalizeModifierInputs(modifierInputs),\n )\n const mediaQuery = resolveMediaQuery(\n options.mediaQuery,\n modifier,\n context,\n false,\n normalizeModifierInputs(modifierInputs),\n )\n\n const css = await formatOverrideBlock(cleanTokens, selector, mediaQuery, options.minify)\n return `/* Modifier: ${modifier}=${context} */\\n${css}`\n}\n\n/**\n * Filter tokens to those whose resolved value differs from the base permutation.\n *\n * Unlike source-based filtering, this catches alias tokens that change\n * indirectly through reference resolution (e.g., background-base references\n * gray.25 which has a different value in dark mode).\n */\nfunction filterTokensByValueChange(\n currentTokens: ResolvedTokens,\n baseTokens: ResolvedTokens,\n): ResolvedTokens {\n const changed: ResolvedTokens = {}\n\n for (const [name, token] of Object.entries(currentTokens)) {\n const baseToken = baseTokens[name]\n if (!baseToken) {\n changed[name] = token\n continue\n }\n if (JSON.stringify(token.$value) !== JSON.stringify(baseToken.$value)) {\n changed[name] = token\n }\n }\n\n return changed\n}\n\n/**\n * Derive @custom-variant declarations from non-base permutations.\n *\n * For each non-base permutation that differs by a single modifier,\n * builds a Tailwind v4 @custom-variant line using the resolved selector\n * or media query. Variant names follow the {modifier}-{context} format\n * (e.g. \"theme-dark\") to avoid collisions across modifier dimensions.\n */\nfunction collectVariantDeclarations(\n bundleData: BundleDataItem[],\n baseItem: BundleDataItem,\n options: ResolvedTailwindOptions,\n): string[] {\n const declarations: string[] = []\n\n for (const item of bundleData) {\n if (item.isBase) {\n continue\n }\n\n const differenceCount = countModifierDifferences(item.modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n continue\n }\n\n const expectedSource = getExpectedSource(item.modifierInputs, baseItem.modifierInputs)\n const [modifier, context] = parseModifierSource(expectedSource)\n const variantName = `${modifier}-${context}`\n const normalized = normalizeModifierInputs(item.modifierInputs)\n\n const mediaQuery = resolveMediaQuery(options.mediaQuery, modifier, context, false, normalized)\n if (mediaQuery !== '') {\n declarations.push(`@custom-variant ${variantName} (@media ${mediaQuery});`)\n continue\n }\n\n const selector = resolveSelector(options.selector, modifier, context, false, normalized)\n declarations.push(`@custom-variant ${variantName} (&:where(${selector}, ${selector} *));`)\n }\n\n return declarations\n}\n\nfunction resolveOptions(\n options: ResolvedTailwindOptions | TailwindRendererOptions,\n): ResolvedTailwindOptions {\n return {\n preset: options.preset ?? 'bundle',\n includeImport: options.includeImport ?? true,\n namespace: options.namespace ?? '',\n minify: options.minify ?? false,\n selector: options.selector,\n mediaQuery: options.mediaQuery,\n variantDeclarations: [],\n }\n}\n","/**\n * @license\n * Copyright (c) 2025 Dispersa Contributors\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * @fileoverview Builder functions for creating output configurations\n *\n * These builder functions provide a convenient way to create OutputConfig objects\n * with flattened options for better DX and discoverability.\n */\n\nimport type { LifecycleHooks, OutputConfig } from '@config/index'\nimport type { Filter } from '@processing/processors/filters/types'\nimport type { Transform } from '@processing/processors/transforms/types'\nimport { androidRenderer } from '@renderers/android'\nimport { cssRenderer } from '@renderers/css'\nimport { iosRenderer } from '@renderers/ios'\nimport { jsRenderer } from '@renderers/js-module'\nimport { jsonRenderer } from '@renderers/json'\nimport { tailwindRenderer } from '@renderers/tailwind'\nimport type {\n AndroidRendererOptions,\n CssRendererOptions,\n IosRendererOptions,\n JsModuleRendererOptions,\n JsonRendererOptions,\n TailwindRendererOptions,\n} from '@renderers/types'\nimport type { ModifierInputs } from '@resolution/resolution.types'\n\n// ============================================================================\n// BASE BUILDER CONFIGURATION\n// ============================================================================\n\n/**\n * Base configuration shared across all builders\n */\ntype BuilderConfigBase = {\n /** Unique identifier for this output */\n name: string\n\n /** Output file path (string, pattern with {placeholders}, or function) - optional for in-memory mode */\n file?: string | ((modifierInputs: ModifierInputs) => string)\n\n /** Array of transform functions to apply */\n transforms?: Transform[]\n\n /** Array of filter functions to apply */\n filters?: Filter[]\n\n /** Per-output lifecycle hooks */\n hooks?: LifecycleHooks\n}\n\n// ============================================================================\n// CSS BUILDER\n// ============================================================================\n\n/**\n * CSS builder configuration with flattened options\n */\nexport type CssBuilderConfig = BuilderConfigBase & CssRendererOptions\n\n/**\n * Create CSS output configuration with flattened options\n *\n * Creates an OutputConfig for CSS custom properties output. All CSS-specific options\n * (selector, mediaQuery, etc.) are provided at the top level alongside common options\n * like name and file for improved discoverability.\n *\n * @param config - CSS builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'bundle' for CSS, meaning all themes are combined into\n * one file with appropriate selectors. Use preset: 'standalone' for separate files.\n *\n * The `file` property is optional. When omitted, content is returned in-memory instead\n * of being written to disk. The `file` property is required when `buildPath` is provided\n * to `dispersa.build()`.\n *\n * @example Basic CSS bundle with transforms\n * ```typescript\n * import { css } from 'dispersa'\n * import { nameKebabCase } from 'dispersa/transforms'\n *\n * const config = css({\n * name: 'css',\n * file: 'tokens.css',\n * preset: 'bundle',\n * selector: ':root',\n * transforms: [nameKebabCase()]\n * })\n * ```\n *\n * @example Standalone CSS with filters\n * ```typescript\n * import { css } from 'dispersa'\n * import { byType } from 'dispersa/filters'\n *\n * const config = css({\n * name: 'css-colors',\n * file: 'colors-{theme}.css',\n * preset: 'standalone',\n * selector: ':root',\n * filters: [byType('color')]\n * })\n * ```\n *\n * @example In-memory mode without file output\n * ```typescript\n * import { css } from 'dispersa'\n *\n * const config = css({\n * name: 'css',\n * preset: 'bundle',\n * selector: ':root'\n * })\n * // Use without buildPath to get content in-memory\n * const result = await dispersa.build({ outputs: [config] })\n * console.log(result.outputs[0].content)\n * ```\n */\nexport function css(config: CssBuilderConfig): OutputConfig<CssRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'bundle',\n ...rendererOptions\n }: CssBuilderConfig = config\n\n return {\n name,\n file,\n renderer: cssRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// JSON BUILDER\n// ============================================================================\n\n/**\n * JSON builder configuration with flattened options\n */\nexport type JsonBuilderConfig = BuilderConfigBase & JsonRendererOptions\n\n/**\n * Create JSON output configuration with flattened options\n *\n * Creates an OutputConfig for JSON token output. All JSON-specific options\n * (structure, includeMetadata, etc.) are provided at the top level for improved\n * discoverability and cleaner configuration.\n *\n * @param config - JSON builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'standalone' for JSON, meaning separate files per theme.\n * Use preset: 'bundle' to combine all themes into one file with metadata.\n *\n * The `file` property is optional. When omitted, content is returned in-memory instead\n * of being written to disk. The `file` property is required when `buildPath` is provided\n * to `dispersa.build()`.\n *\n * @example Standalone JSON with flat structure\n * ```typescript\n * import { json } from 'dispersa'\n *\n * const config = json({\n * name: 'json',\n * file: 'tokens-{theme}.json',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * ```\n *\n * @example Bundle JSON with metadata\n * ```typescript\n * import { json } from 'dispersa'\n *\n * const config = json({\n * name: 'json-bundle',\n * file: 'tokens.json',\n * preset: 'bundle',\n * structure: 'nested',\n * includeMetadata: true\n * })\n * ```\n *\n * @example In-memory mode without file output\n * ```typescript\n * import { json } from 'dispersa'\n *\n * const config = json({\n * name: 'json',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * // Use without buildPath to get content in-memory\n * const result = await dispersa.build({ outputs: [config] })\n * console.log(result.outputs[0].content)\n * ```\n */\nexport function json(config: JsonBuilderConfig): OutputConfig<JsonRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: jsonRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// JS MODULE BUILDER\n// ============================================================================\n\n/**\n * JS module builder configuration with flattened options\n */\nexport type JsBuilderConfig = BuilderConfigBase & JsModuleRendererOptions\n\n/**\n * Create JavaScript module output configuration with flattened options\n *\n * Creates an OutputConfig for JavaScript/TypeScript module output. All JS-specific\n * options (moduleName, generateHelper, etc.) are provided at the top level for\n * improved discoverability and cleaner configuration.\n *\n * @param config - JS module builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'standalone' for JS, meaning separate files per theme.\n * Use preset: 'bundle' with generateHelper: true to create a single file with\n * a helper function for dynamic theme switching.\n *\n * The `file` property is optional. When omitted, content is returned in-memory instead\n * of being written to disk. The `file` property is required when `buildPath` is provided\n * to `dispersa.build()`.\n *\n * @example Bundle JS with helper function\n * ```typescript\n * import { js } from 'dispersa'\n * import { nameCamelCase } from 'dispersa/transforms'\n *\n * const config = js({\n * name: 'js',\n * file: 'tokens.js',\n * preset: 'bundle',\n * moduleName: 'tokens',\n * generateHelper: true,\n * transforms: [nameCamelCase()]\n * })\n * ```\n *\n * @example Standalone JS modules\n * ```typescript\n * import { js } from 'dispersa'\n *\n * const config = js({\n * name: 'js-tokens',\n * file: 'tokens-{theme}.js',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * ```\n *\n * @example In-memory mode without file output\n * ```typescript\n * import { js } from 'dispersa'\n *\n * const config = js({\n * name: 'js',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * // Use without buildPath to get content in-memory\n * const result = await dispersa.build({ outputs: [config] })\n * console.log(result.outputs[0].content)\n * ```\n */\nexport function js(config: JsBuilderConfig): OutputConfig<JsModuleRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: jsRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// TAILWIND CSS v4 BUILDER\n// ============================================================================\n\n/**\n * Tailwind CSS v4 builder configuration with flattened options\n */\nexport type TailwindBuilderConfig = BuilderConfigBase & TailwindRendererOptions\n\n/**\n * Create Tailwind CSS v4 output configuration with flattened options\n *\n * Creates an OutputConfig for Tailwind v4 @theme CSS output. All Tailwind-specific\n * options (includeImport, namespace, etc.) are provided at the top level for\n * improved discoverability.\n *\n * @param config - Tailwind builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'bundle' for Tailwind, meaning the base permutation tokens\n * are used to define the @theme vocabulary. Use preset: 'standalone' for separate files.\n *\n * @example Bundle Tailwind theme with transforms\n * ```typescript\n * import { tailwind } from 'dispersa'\n * import { nameKebabCase } from 'dispersa/transforms'\n *\n * const config = tailwind({\n * name: 'tailwind',\n * file: 'theme.css',\n * preset: 'bundle',\n * includeImport: true,\n * transforms: [nameKebabCase()]\n * })\n * ```\n *\n * @example Standalone files per theme\n * ```typescript\n * import { tailwind } from 'dispersa'\n *\n * const config = tailwind({\n * name: 'tailwind',\n * file: 'theme-{theme}.css',\n * preset: 'standalone',\n * includeImport: false,\n * })\n * ```\n */\nexport function tailwind(config: TailwindBuilderConfig): OutputConfig<TailwindRendererOptions> {\n const { name, file, transforms, filters, hooks, preset = 'bundle', ...rendererOptions } = config\n\n return {\n name,\n file,\n renderer: tailwindRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// iOS / SWIFTUI BUILDER\n// ============================================================================\n\n/**\n * iOS/SwiftUI builder configuration with flattened options\n */\nexport type IosBuilderConfig = BuilderConfigBase & IosRendererOptions\n\n/**\n * Create iOS/SwiftUI output configuration with flattened options\n *\n * Creates an OutputConfig for Swift code generation targeting SwiftUI (iOS 17+, Swift 6).\n * All iOS-specific options (accessLevel, structure, etc.) are provided at the top level.\n *\n * @param config - iOS builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * Only standalone preset is supported. Each permutation generates a separate Swift file.\n *\n * @example Enum-based SwiftUI tokens\n * ```typescript\n * import { ios } from 'dispersa'\n *\n * const config = ios({\n * name: 'ios',\n * file: 'DesignTokens-{theme}.swift',\n * accessLevel: 'public',\n * structure: 'enum',\n * enumName: 'DesignTokens',\n * colorSpace: 'sRGB',\n * })\n * ```\n *\n * @example Grouped SwiftUI tokens (namespace enum + extensions per group)\n * ```typescript\n * import { ios } from 'dispersa'\n *\n * const config = ios({\n * name: 'ios-tokens',\n * file: 'Tokens-{theme}.swift',\n * structure: 'grouped',\n * colorSpace: 'displayP3',\n * })\n * ```\n */\nexport function ios(config: IosBuilderConfig): OutputConfig<IosRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: iosRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// ANDROID / JETPACK COMPOSE BUILDER\n// ============================================================================\n\n/**\n * Android/Jetpack Compose builder configuration with flattened options\n */\nexport type AndroidBuilderConfig = BuilderConfigBase & AndroidRendererOptions\n\n/**\n * Create Android/Jetpack Compose output configuration with flattened options\n *\n * Creates an OutputConfig for Kotlin code generation targeting Jetpack Compose\n * with Material 3. All Android-specific options (packageName, objectName, etc.)\n * are provided at the top level.\n *\n * @experimental This builder is experimental. Options and generated output may change.\n * @param config - Android builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The `packageName` option is required (Kotlin convention). Supports both\n * `'standalone'` (default, one file per permutation) and `'bundle'` (all\n * permutations in a single file) presets.\n *\n * @example Standalone Compose tokens with hex colors\n * ```typescript\n * import { android } from 'dispersa'\n *\n * const config = android({\n * name: 'android',\n * file: 'DesignTokens-{theme}.kt',\n * packageName: 'com.example.tokens',\n * objectName: 'DesignTokens',\n * colorFormat: 'argb_hex',\n * })\n * ```\n *\n * @example Flat structure with Display P3 colors\n * ```typescript\n * import { android } from 'dispersa'\n *\n * const config = android({\n * name: 'android-tokens',\n * file: 'Tokens-{theme}.kt',\n * packageName: 'com.example.design',\n * structure: 'flat',\n * colorSpace: 'displayP3',\n * colorFormat: 'argb_float',\n * })\n * ```\n *\n * @example Bundle mode — all themes in one file\n * ```typescript\n * import { android } from 'dispersa'\n *\n * const config = android({\n * name: 'android-bundle',\n * file: 'DesignTokens.kt',\n * packageName: 'com.example.tokens',\n * preset: 'bundle',\n * structure: 'flat',\n * })\n * ```\n */\nexport function android(config: AndroidBuilderConfig): OutputConfig<AndroidRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: androidRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/shared/errors/index.ts","../src/shared/utils/token-utils.ts","../src/renderers/bundlers/utils.ts","../src/renderers/bundlers/js.ts","../src/renderers/bundlers/json.ts","../src/processing/processors/transforms/built-in/color-converter.ts","../src/processing/processors/transforms/built-in/dimension-converter.ts","../src/renderers/android.ts","../src/renderers/output-tree.ts","../src/renderers/css.ts","../src/renderers/bundlers/css.ts","../src/renderers/ios.ts","../src/renderers/js-module.ts","../src/renderers/json.ts","../src/renderers/tailwind.ts","../src/renderers/bundlers/tailwind.ts","../src/builders.ts"],"names":["formatHex8","formatHex","converter","r","g","b","css","indent","prettier","toSRGB","toP3","bundleAsJsModule","bundleAsJson"],"mappings":"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","file":"builders.cjs","sourcesContent":["/**\n * @fileoverview Custom error classes for Dispersa\n *\n * Error classes are intentionally kept as simple value objects with no\n * imports from utility modules. Suggestion formatting is done at call\n * sites to keep the error hierarchy dependency-free.\n */\n\n/**\n * Base error class for all Dispersa errors\n */\nexport class DispersaError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'DispersaError'\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n }\n }\n}\n\n/**\n * Thrown when a token reference cannot be resolved\n *\n * @param referenceName - The token name that could not be found\n * @param suggestions - Similar token names for \"did you mean?\" hints\n * @param message - Optional custom message (overrides auto-generated message)\n */\nexport class TokenReferenceError extends DispersaError {\n constructor(\n public referenceName: string,\n public suggestions: string[] = [],\n message?: string,\n ) {\n const hint = TokenReferenceError.formatHint(suggestions)\n super(\n message ??\n `Token reference resolution failed: '${referenceName}'. Token does not exist.${hint}`,\n )\n this.name = 'TokenReferenceError'\n }\n\n private static formatHint(suggestions: string[]): string {\n if (suggestions.length === 0) {\n return ''\n }\n if (suggestions.length === 1) {\n return ` Did you mean \"${suggestions[0]}\"?`\n }\n const quoted = suggestions.map((s) => `\"${s}\"`)\n const last = quoted.pop()!\n return ` Did you mean ${quoted.join(', ')} or ${last}?`\n }\n}\n\n/**\n * Thrown when a circular reference is detected\n */\nexport class CircularReferenceError extends DispersaError {\n constructor(\n public tokenName: string,\n public referencePath: string[],\n ) {\n super(\n `Token resolution failed: '${tokenName}'. Circular reference detected in path: ${referencePath.join(' -> ')}`,\n )\n this.name = 'CircularReferenceError'\n }\n}\n\n/**\n * Thrown when validation fails\n */\nexport class ValidationError extends DispersaError {\n constructor(\n message: string,\n public errors: { message: string; path?: string }[],\n ) {\n super(message)\n this.name = 'ValidationError'\n }\n}\n\n/**\n * Thrown when file operations fail\n */\nexport class FileOperationError extends DispersaError {\n constructor(\n public operation: 'read' | 'write',\n public filePath: string,\n public originalError: Error,\n ) {\n super(`Failed to ${operation} file: ${filePath}. ${originalError.message}`)\n this.name = 'FileOperationError'\n }\n}\n\n/**\n * Thrown when a build configuration is invalid\n */\nexport class ConfigurationError extends DispersaError {\n constructor(message: string) {\n super(message)\n this.name = 'ConfigurationError'\n }\n}\n\n/**\n * Thrown when base permutation cannot be determined\n */\nexport class BasePermutationError extends DispersaError {\n constructor(\n message = 'Base permutation determination failed. Define a default modifier in resolver.',\n ) {\n super(message)\n this.name = 'BasePermutationError'\n }\n}\n\n/**\n * Thrown when an unknown modifier or context is used\n *\n * @param modifierName - Name of the modifier that failed validation\n * @param contextValue - The invalid context value (if applicable)\n * @param availableValues - Valid options (context names or modifier names) for the error message\n */\nexport class ModifierError extends DispersaError {\n constructor(\n public modifierName: string,\n public contextValue?: string,\n public availableValues: string[] = [],\n ) {\n const available = availableValues.length > 0 ? ` Available: ${availableValues.join(', ')}.` : ''\n\n const message =\n contextValue != null && contextValue !== ''\n ? `Modifier validation failed: '${modifierName}'. Invalid context '${contextValue}'.${available}`\n : `Modifier validation failed: '${modifierName}'. Modifier not defined in resolver.${available}`\n super(message)\n this.name = 'ModifierError'\n }\n}\n","/**\n * @fileoverview Token utility functions\n */\n\nimport type { InternalResolvedTokens, ResolvedToken, ResolvedTokens } from '@tokens/types'\n\n/**\n * Format deprecation message for a token\n *\n * Generates a standardized deprecation message that can be used in comments,\n * descriptions, or warnings. Handles both boolean and string deprecation values.\n *\n * @param token - Token with optional deprecation information\n * @param description - Optional existing description to prepend deprecation info to\n * @param format - Output format: 'comment' for CSS comments, 'bracket' for [DEPRECATED] prefix\n * @returns Formatted deprecation message or description with deprecation prefix\n *\n * @example\n * ```typescript\n * // CSS comment format\n * formatDeprecationMessage(token, '', 'comment')\n * // Returns: \"DEPRECATED: Use new-token instead\"\n *\n * // Bracket format\n * formatDeprecationMessage(token, 'Primary color', 'bracket')\n * // Returns: \"[DEPRECATED: Use new-token instead] Primary color\"\n * ```\n */\nexport function formatDeprecationMessage(\n token: ResolvedToken,\n description: string = '',\n format: 'comment' | 'bracket' = 'bracket',\n): string {\n if (token.$deprecated == null || token.$deprecated === false) {\n return description\n }\n\n const deprecationMsg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n\n if (format === 'comment') {\n // CSS comment format: \"DEPRECATED: message\" or just \"DEPRECATED\"\n const msg = deprecationMsg ? ` ${deprecationMsg}` : ''\n return `DEPRECATED${msg}`\n } else {\n // Bracket format: \"[DEPRECATED: message]\" or \"[DEPRECATED]\"\n const msg = deprecationMsg ? `: ${deprecationMsg}` : ''\n const prefix = `[DEPRECATED${msg}]`\n return description ? `${prefix} ${description}` : prefix\n }\n}\n\n/**\n * Strip internal metadata from tokens before public output\n */\nexport function stripInternalTokenMetadata(tokens: InternalResolvedTokens): ResolvedTokens {\n const cleaned: ResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n const { _isAlias: _alias, _sourceModifier: _source, _sourceSet: _sourceSet, ...rest } = token\n cleaned[name] = rest\n }\n\n return cleaned\n}\n\n/**\n * Get sorted token entries for deterministic output ordering\n */\nexport function getSortedTokenEntries(\n tokens: ResolvedTokens,\n): Array<[name: string, token: ResolvedToken]> {\n return Object.entries(tokens).sort(([nameA], [nameB]) => nameA.localeCompare(nameB))\n}\n\n/**\n * Check if a value looks like a DTCG token (has `$value` or `$ref` property).\n *\n * This is the base structural check shared by parsers, validators, and resolvers.\n * Individual modules may wrap this in a type-guard to narrow to their own token types.\n */\nexport function isTokenLike(value: unknown): boolean {\n return typeof value === 'object' && value !== null && ('$value' in value || '$ref' in value)\n}\n\n/**\n * Extract a pure alias reference name from a string value.\n *\n * Returns the inner token name for \"{token.name}\" inputs and undefined otherwise.\n */\nexport function getPureAliasReferenceName(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined\n }\n const match = /^\\{([^}]+)\\}$/.exec(value)\n return match?.[1]?.trim()\n}\n","/**\n * @fileoverview Shared utilities for bundlers\n */\n\nimport type { ModifierInputs, ResolvedTokens } from '@config/index'\nimport type { MediaQueryFunction, SelectorFunction } from '@renderers/types'\nimport type { ResolverDocument } from '@resolution/resolution.types'\nimport { stripInternalTokenMetadata } from '@shared/utils/token-utils'\nimport type { InternalResolvedTokens } from '@tokens/types'\n\nfunction sanitizeDataAttributeName(value: string): string {\n // Attribute names are more constrained than token/modifier names.\n // Use a conservative whitelist to avoid generating invalid selectors.\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9_-]+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n}\n\nfunction escapeCssString(value: string): string {\n // Minimal escaping for use inside double-quoted CSS strings.\n // Prevents breaking out of the attribute selector value.\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\r?\\n/g, ' ')\n}\n\nexport function normalizeModifierInputs(inputs: Record<string, string>): Record<string, string> {\n const normalized: Record<string, string> = {}\n for (const [key, value] of Object.entries(inputs)) {\n normalized[key.toLowerCase()] = value.toLowerCase()\n }\n return normalized\n}\n\nexport function buildStablePermutationKey(\n modifierInputs: Record<string, string>,\n dimensions: string[],\n): string {\n return dimensions.map((dimension) => `${dimension}=${modifierInputs[dimension] ?? ''}`).join('|')\n}\n\n/**\n * Resolve a CSS selector (either string or function) to a string\n *\n * Handles both static string selectors and dynamic function-based selectors.\n * Falls back to default behavior if no selector is provided:\n * - Base permutation: ':root'\n * - Modifier permutation: '[data-{modifierName}=\"{context}\"]'\n *\n * @param selector - Selector as string or function\n * @param modifierName - Name of the modifier (e.g., 'theme')\n * @param context - Context value of the modifier (e.g., 'dark')\n * @param isBase - Whether this is the base permutation\n * @param allModifierInputs - All modifier inputs for this permutation\n * @returns Resolved CSS selector string\n */\nexport function resolveSelector(\n selector: string | SelectorFunction | undefined,\n modifierName: string,\n context: string,\n isBase: boolean,\n allModifierInputs: Record<string, string>,\n): string {\n if (typeof selector === 'function') {\n return selector(modifierName, context, isBase, allModifierInputs)\n }\n if (typeof selector === 'string') {\n return selector\n }\n // Default behavior\n if (isBase) {\n return ':root'\n }\n\n const attrName = sanitizeDataAttributeName(modifierName)\n const attrValue = escapeCssString(context)\n return `[data-${attrName}=\"${attrValue}\"]`\n}\n\n/**\n * Resolve a media query (either string or function) to a string\n *\n * Handles both static string media queries and dynamic function-based media queries.\n * Returns empty string if no media query is provided.\n *\n * @param mediaQuery - Media query as string or function\n * @param modifierName - Name of the modifier (e.g., 'breakpoint')\n * @param context - Context value of the modifier (e.g., 'mobile')\n * @param isBase - Whether this is the base permutation\n * @param allModifierInputs - All modifier inputs for this permutation\n * @returns Resolved media query string or empty string\n */\nexport function resolveMediaQuery(\n mediaQuery: string | MediaQueryFunction | undefined,\n modifierName: string,\n context: string,\n isBase: boolean,\n allModifierInputs: Record<string, string>,\n): string {\n if (typeof mediaQuery === 'function') {\n return mediaQuery(modifierName, context, isBase, allModifierInputs)\n }\n if (typeof mediaQuery === 'string') {\n return mediaQuery\n }\n // No default for media queries\n return ''\n}\n\n/**\n * Strip internal metadata from tokens before formatting\n * Removes all properties starting with underscore (_)\n */\nexport function stripInternalMetadata(tokens: InternalResolvedTokens): ResolvedTokens {\n return stripInternalTokenMetadata(tokens)\n}\n\n/**\n * Generate a clean key/label for a permutation\n *\n * For base permutation: returns \"base\"\n * For single-dimension diff: returns \"modifier-value\" (e.g., \"theme-dark\", \"brand-partner-a\")\n * For multi-dimension diff (fallback): returns full key (e.g., \"primary-web-comfortable-dark-standard\")\n */\nexport function generatePermutationKey(\n modifierInputs: Record<string, string>,\n resolver: ResolverDocument,\n isBase: boolean,\n): string {\n if (isBase) {\n return 'base'\n }\n\n const metadata = buildMetadata(resolver)\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const defaults = metadata.defaults\n\n // Find which modifier differs\n const differences: Array<{ name: string; value: string }> = []\n for (const dimension of metadata.dimensions) {\n const value = normalizedInputs[dimension]\n if (value !== undefined && value !== defaults[dimension]) {\n differences.push({ name: dimension, value })\n }\n }\n\n // If exactly one modifier differs, use clean format\n if (differences.length === 1 && differences[0]) {\n const diff = differences[0]\n return `${diff.name}-${diff.value}`\n }\n\n // Fallback: use full key (shouldn't happen with single-dimension permutations)\n return buildStablePermutationKey(normalizedInputs, metadata.dimensions)\n}\n\nexport function buildInMemoryOutputKey(params: {\n outputName: string\n extension: string\n modifierInputs: Record<string, string>\n resolver: ResolverDocument\n defaults: Record<string, string>\n}): string {\n const { outputName, extension, modifierInputs, resolver, defaults } = params\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const normalizedDefaults = normalizeModifierInputs(defaults)\n const isBase = Object.entries(normalizedDefaults).every(\n ([key, value]) => normalizedInputs[key] === value,\n )\n const permutationKey = generatePermutationKey(modifierInputs, resolver, isBase)\n return `${outputName}-${permutationKey}.${extension}`\n}\n\n/**\n * Build metadata for bundle formats\n */\nexport function buildMetadata(resolver: ResolverDocument): {\n dimensions: string[]\n defaults: Record<string, string>\n} {\n const metadata: {\n dimensions: string[]\n defaults: Record<string, string>\n } = {\n dimensions: [],\n defaults: {},\n }\n\n if (resolver.modifiers) {\n for (const [name, modifier] of Object.entries(resolver.modifiers)) {\n const normalizedName = name.toLowerCase()\n const defaultContext = modifier.default ?? Object.keys(modifier.contexts)[0] ?? ''\n metadata.dimensions.push(normalizedName)\n metadata.defaults[normalizedName] = defaultContext.toLowerCase()\n }\n }\n\n return metadata\n}\n\n/**\n * Resolve a resolver input to a ResolverDocument\n *\n * Handles both string paths (loaded from filesystem) and inline ResolverDocument objects.\n * This eliminates duplicate resolver loading logic across renderers.\n *\n * @param input - Either a file path string or an inline ResolverDocument object\n * @returns Resolved ResolverDocument ready for use\n */\nexport async function resolveResolverDocument(\n input: string | ResolverDocument,\n): Promise<ResolverDocument> {\n if (typeof input === 'string') {\n const { ResolverLoader } = await import('@adapters/filesystem/resolver-loader')\n const loader = new ResolverLoader({})\n return await loader.loadDocument(input)\n }\n return input\n}\n\n/**\n * Count how many modifiers differ between two inputs\n */\nexport function countModifierDifferences(\n currentInputs: Record<string, string>,\n baseInputs: Record<string, string>,\n): number {\n const normalizedCurrent = normalizeModifierInputs(currentInputs)\n const normalizedBase = normalizeModifierInputs(baseInputs)\n let count = 0\n for (const [key, value] of Object.entries(normalizedCurrent)) {\n if (value !== normalizedBase[key]) {\n count++\n }\n }\n return count\n}\n\n/**\n * Determine which modifier source this permutation represents\n * Returns source tag like \"theme-dark\" or \"platform-mobile\"\n */\nexport function getExpectedSource(\n currentInputs: Record<string, string>,\n baseInputs: Record<string, string>,\n): string {\n const normalizedCurrent = normalizeModifierInputs(currentInputs)\n const normalizedBase = normalizeModifierInputs(baseInputs)\n // Find which modifier differs\n for (const [key, value] of Object.entries(normalizedCurrent)) {\n if (value !== normalizedBase[key]) {\n return `${key}-${value}`\n }\n }\n return 'base'\n}\n\n/**\n * Extract modifier name and context from an expected source string\n * For example: \"theme-dark\" returns [\"theme\", \"dark\"]\n */\nexport function parseModifierSource(source: string): [modifierName: string, context: string] {\n const dashIndex = source.indexOf('-')\n if (dashIndex === -1) {\n return [source, '']\n }\n return [source.slice(0, dashIndex), source.slice(dashIndex + 1)]\n}\n\n/**\n * Filter tokens to only include those from a specific source\n */\nexport function filterTokensBySource(\n tokens: InternalResolvedTokens,\n expectedSource: string,\n): InternalResolvedTokens {\n const filtered: InternalResolvedTokens = {}\n const expected = expectedSource.toLowerCase()\n\n for (const [name, token] of Object.entries(tokens)) {\n const source =\n typeof token._sourceModifier === 'string' ? token._sourceModifier.toLowerCase() : ''\n\n // Check if token has the expected source (case-insensitive)\n if (source !== '' && source === expected) {\n filtered[name] = token\n }\n }\n\n return filtered\n}\n\n/**\n * Filter tokens to only include those originating from sets (not modifiers)\n *\n * Returns tokens that have no `_sourceModifier` tag, meaning they were defined\n * in the resolver's sets section and not overridden by any modifier context.\n */\nexport function filterTokensFromSets(tokens: InternalResolvedTokens): InternalResolvedTokens {\n const filtered: InternalResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n const hasModifierSource =\n typeof token._sourceModifier === 'string' && token._sourceModifier !== ''\n if (!hasModifierSource) {\n filtered[name] = token\n }\n }\n\n return filtered\n}\n\n/**\n * Resolve a filename for the modifier preset's base file.\n *\n * Unlike `resolveFileName`, this does not inject synthetic modifier values.\n * Instead it handles each filename mode with base-specific logic:\n *\n * - **Pattern string**: replaces all `{key}` placeholders with `\"base\"`, then\n * collapses consecutive `base` segments (e.g. `base-base` or `base/base`).\n * - **Plain string**: appends `-base` before the file extension.\n * - **Function**: calls with the actual default modifier inputs.\n *\n * @param fileName - Filename configuration (string, pattern, or function)\n * @param defaults - Default modifier inputs for the base permutation\n * @returns Resolved base filename\n */\nexport function resolveBaseFileName(\n fileName: string | ((modifierInputs: ModifierInputs) => string),\n defaults: ModifierInputs,\n): string {\n if (typeof fileName === 'function') {\n return fileName({ ...defaults, _base: 'true' })\n }\n\n if (/\\{.+?\\}/.test(fileName)) {\n const baseInputs = Object.fromEntries(Object.keys(defaults).map((k) => [k, 'base']))\n return collapseBaseSegments(interpolatePattern(fileName, baseInputs))\n }\n\n const extMatch = fileName.match(/(\\.[^.]+)$/)\n const extension = extMatch ? extMatch[1] : ''\n const baseName = extension ? fileName.slice(0, -extension.length) : fileName\n return `${baseName}-base${extension}`\n}\n\n/**\n * Collapse consecutive \"base\" segments separated by `-` or `/`.\n * For example `base-base/tokens.css` becomes `base/tokens.css`.\n */\nfunction collapseBaseSegments(value: string): string {\n let result = value\n let previous = ''\n while (result !== previous) {\n previous = result\n result = result.replace(/\\bbase([/-])base\\b/, 'base')\n }\n return result\n}\n\n/**\n * Interpolate pattern placeholders in a filename string\n *\n * Replaces {key} placeholders with values from modifierInputs.\n * For example, \"tokens-{theme}-{platform}.css\" with {theme: 'dark', platform: 'mobile'}\n * becomes \"tokens-dark-mobile.css\".\n *\n * @param pattern - Filename pattern with {key} placeholders\n * @param modifierInputs - Modifier values to interpolate\n * @returns Interpolated filename\n */\nexport function interpolatePattern(pattern: string, modifierInputs: ModifierInputs): string {\n let result = pattern\n\n for (const [key, value] of Object.entries(modifierInputs)) {\n result = result.replaceAll(`{${key}}`, value)\n }\n return result\n}\n\n/**\n * Generate filename for standalone renderer\n *\n * Supports three modes:\n * 1. Pattern string with {key} placeholders: \"tokens-{theme}-{platform}.css\"\n * 2. Function that receives modifierInputs: (inputs) => `tokens-${inputs.theme}.css`\n * 3. Plain string: applies default pattern with all modifiers\n *\n * @param fileName - Filename configuration (string or function)\n * @param modifierInputs - Modifier values for this permutation\n * @returns Resolved filename\n */\nexport function resolveFileName(\n fileName: string | ((modifierInputs: ModifierInputs) => string),\n modifierInputs: ModifierInputs,\n): string {\n // Function-based filename\n if (typeof fileName === 'function') {\n return fileName(modifierInputs)\n }\n\n // Pattern-based filename: check if it contains {key} placeholders\n if (/\\{.+?\\}/.test(fileName)) {\n return interpolatePattern(fileName, modifierInputs)\n }\n\n // Plain string: apply default pattern (backward compatible)\n // Extract file extension and base name\n const extMatch = fileName.match(/(\\.[^.]+)$/)\n const extension = extMatch ? extMatch[1] : ''\n const baseName = extension ? fileName.slice(0, -extension.length) : fileName\n\n // Build modifier suffix from all modifiers\n const modifierSuffix = Object.entries(modifierInputs)\n .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n .map(([key, value]) => `${key}-${value}`)\n .join('-')\n\n // Construct filename with suffix before extension\n if (modifierSuffix) {\n return `${baseName}-${modifierSuffix}${extension}`\n }\n\n return fileName\n}\n","/**\n * @fileoverview JavaScript module bundler for multi-theme output\n */\n\nimport type { JsModuleRendererOptions } from '@renderers/types'\nimport type { ResolverDocument } from '@resolution/resolution.types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@tokens/types'\n\nimport type { BundleDataItem } from './types'\nimport { buildMetadata, normalizeModifierInputs, stripInternalMetadata } from './utils'\n\n/**\n * Extract object literal from formatted JS module using balanced brace matching\n * More robust than regex for handling nested objects/arrays\n */\nfunction extractObjectFromJsModule(formattedJs: string): string {\n // Find the start of the object assignment: \"const name = {\"\n const assignmentMatch = /const\\s+\\w+\\s*=\\s*\\{/.exec(formattedJs)\n if (!assignmentMatch) {\n return '{}'\n }\n\n const startIndex = assignmentMatch.index + assignmentMatch[0].length - 1 // Include the opening brace\n let braceCount = 0\n let inString = false\n let stringChar = ''\n let escaped = false\n\n for (let i = startIndex; i < formattedJs.length; i++) {\n const char = formattedJs[i]\n\n // Handle string literals (ignore braces inside strings)\n if (!escaped && (char === '\"' || char === \"'\" || char === '`')) {\n if (!inString) {\n inString = true\n stringChar = char\n } else if (char === stringChar) {\n inString = false\n stringChar = ''\n }\n }\n\n // Track escape sequences\n escaped = !escaped && char === '\\\\'\n\n // Count braces when not in a string\n if (!inString) {\n if (char === '{') {\n braceCount++\n } else if (char === '}') {\n braceCount--\n if (braceCount === 0) {\n // Found the matching closing brace\n return formattedJs.substring(startIndex, i + 1)\n }\n }\n }\n }\n\n // Fallback if no matching brace found\n return '{}'\n}\n\nfunction toCamelKey(key: string): string {\n if (key === '') {\n return ''\n }\n return key\n .split('-')\n .filter((part) => part !== '')\n .map((w, i) => (i === 0 ? w : w.charAt(0).toUpperCase() + w.slice(1)))\n .join('')\n}\n\nfunction buildStableDashKey(params: {\n modifierInputs: Record<string, string>\n dimensions: string[]\n defaults: Record<string, string>\n}): string {\n const { modifierInputs, dimensions, defaults } = params\n const inputs = normalizeModifierInputs(modifierInputs)\n\n return dimensions\n .map((dimension) => {\n const value = inputs[dimension] ?? defaults[dimension] ?? ''\n return String(value)\n })\n .join('-')\n}\n\n/** Generate the optional getTokens helper function source */\nfunction buildHelperFunction(dimensions: string[]): string {\n const dimensionOrder = dimensions.map((d) => JSON.stringify(d)).join(', ')\n return [\n `/**`,\n ` * Get tokens for a specific modifier combination`,\n ` * @param {Object} modifiers - Modifier values (e.g., { theme: 'dark', brand: 'partner-a' })`,\n ` * @returns {Object} Resolved tokens for the combination`,\n ` */`,\n `export function getTokens(modifiers = {}) {`,\n ` const key = [${dimensionOrder}]`,\n ` .map(dim => modifiers[dim] ?? tokenBundle._meta.defaults[dim])`,\n ` .join('-')`,\n ` const camelKey = key`,\n ` .split('-')`,\n ` .filter(Boolean)`,\n ` .map((w, i) => (i === 0 ? w : w.charAt(0).toUpperCase() + w.slice(1)))`,\n ` .join('')`,\n ` return tokenBundle.tokens[camelKey]`,\n `}`,\n ``,\n ``,\n ].join('\\n')\n}\n\n/** Assemble the final JS bundle output string */\nfunction assembleJsBundle(\n metadata: ReturnType<typeof buildMetadata>,\n jsBlocks: string[],\n generateHelper: boolean,\n): string {\n let output = `const tokenBundle = {\\n`\n output += ` _meta: ${JSON.stringify(metadata, null, 2).replace(/\\n/g, '\\n ')},\\n`\n output += ` tokens: {\\n${jsBlocks.join(',\\n')}\\n }\\n`\n output += `}\\n\\n`\n\n if (generateHelper) {\n output += buildHelperFunction(metadata.dimensions)\n }\n\n output += `export default tokenBundle\\n`\n return output\n}\n\n/**\n * Bundle tokens as JS module with metadata and optional helper\n *\n * JS-specific strategy: All combinations for dynamic theming\n * - Includes metadata with dimensions and defaults\n * - All permutations included (no filtering)\n * - Optional helper function for key generation\n */\nexport async function bundleAsJsModule(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n options: JsModuleRendererOptions | undefined,\n formatTokens?: (tokens: ResolvedTokens) => Promise<string>,\n): Promise<string> {\n if (!formatTokens) {\n throw new ConfigurationError('JS formatter was not provided')\n }\n\n const metadata = buildMetadata(resolver)\n const jsBlocks: string[] = []\n\n for (const { tokens, modifierInputs } of bundleData) {\n const cleanTokens = stripInternalMetadata(tokens)\n const key = buildStableDashKey({\n modifierInputs,\n dimensions: metadata.dimensions,\n defaults: metadata.defaults,\n })\n const camelKey = toCamelKey(key)\n const formattedJs = await formatTokens(cleanTokens)\n const tokenObject = extractObjectFromJsModule(formattedJs)\n const indentedObject = tokenObject.replace(/\\n/g, '\\n ')\n jsBlocks.push(` // ${key}\\n ${JSON.stringify(camelKey)}: ${indentedObject}`)\n }\n\n return assembleJsBundle(metadata, jsBlocks, options?.generateHelper ?? false)\n}\n","/**\n * @fileoverview JSON bundler for multi-theme output\n */\n\nimport type { ResolverDocument } from '@resolution/resolution.types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@tokens/types'\n\nimport type { BundleDataItem } from './types'\nimport {\n buildMetadata,\n buildStablePermutationKey,\n normalizeModifierInputs,\n stripInternalMetadata,\n} from './utils'\n\n/**\n * Bundle tokens as JSON object with metadata for runtime lookup\n *\n * JSON-specific strategy: All combinations for dynamic theming\n * - Includes metadata with dimensions and defaults\n * - All permutations included (no filtering)\n * - Predictable keys for O(1) lookup\n */\nexport async function bundleAsJson(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n formatTokens?: (tokens: ResolvedTokens) => Promise<string>,\n): Promise<string> {\n // Build metadata\n const metadata = buildMetadata(resolver)\n\n // Build tokens object\n const tokens: Record<string, unknown> = {}\n for (const { tokens: tokenSet, modifierInputs } of bundleData) {\n // Strip internal metadata before formatting\n const cleanTokens = stripInternalMetadata(tokenSet)\n\n // Generate key from full modifier inputs for all combinations\n if (!formatTokens) {\n throw new ConfigurationError('JSON formatter was not provided')\n }\n\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const key = buildStablePermutationKey(normalizedInputs, metadata.dimensions)\n const themeJson = await formatTokens(cleanTokens)\n tokens[key] = JSON.parse(themeJson) as unknown\n }\n\n // Return complete bundle with metadata\n const bundle = {\n _meta: metadata,\n tokens,\n }\n\n return JSON.stringify(bundle, null, 2)\n}\n","/**\n * @fileoverview Color format conversion utilities for DTCG 2025.10\n * Uses culori for accurate color science and conversions\n */\n\nimport type { ColorComponent, ColorSpace, ColorValueObject } from '@tokens/types'\nimport {\n formatHex,\n formatHex8,\n type Color as CuloriColor,\n type Rgb,\n type Lrgb,\n type Hsl,\n type Hwb,\n type Lab,\n type Lch,\n type Oklab,\n type Oklch,\n type P3,\n type A98,\n type Prophoto,\n type Rec2020,\n type Xyz65,\n type Xyz50,\n} from 'culori'\n\n/**\n * Check if a color value is in DTCG object format\n */\nexport function isColorObject(value: unknown): value is ColorValueObject {\n return (\n typeof value === 'object' && value !== null && 'colorSpace' in value && 'components' in value\n )\n}\n\n/**\n * Convert a color component value to culori format\n * The \"none\" keyword becomes undefined (culori's representation of missing channels)\n */\nfunction componentToCulori(component: ColorComponent): number | undefined {\n return component === 'none' ? undefined : component\n}\n\n/**\n * Convert DTCG color object to culori color object\n * Handles all 14 DTCG color spaces and the \"none\" keyword\n */\nexport function dtcgObjectToCulori(color: ColorValueObject): CuloriColor {\n const [c1, c2, c3] = color.components.map(componentToCulori)\n const alpha = color.alpha !== undefined ? componentToCulori(color.alpha) : undefined\n\n // Normalize color space (case-insensitive, handle aliases)\n const colorSpace = color.colorSpace.toLowerCase() as Lowercase<ColorSpace>\n\n // Map DTCG color spaces to culori color objects with proper property names\n switch (colorSpace) {\n // RGB-based color spaces (components are R, G, B in 0-1 range)\n case 'srgb':\n return { mode: 'rgb', r: c1, g: c2, b: c3, alpha } as Rgb\n\n case 'srgb-linear':\n return { mode: 'lrgb', r: c1, g: c2, b: c3, alpha } as Lrgb\n\n case 'display-p3':\n return { mode: 'p3', r: c1, g: c2, b: c3, alpha } as P3\n\n case 'a98-rgb':\n return { mode: 'a98', r: c1, g: c2, b: c3, alpha } as A98\n\n case 'prophoto-rgb':\n return { mode: 'prophoto', r: c1, g: c2, b: c3, alpha } as Prophoto\n\n case 'rec2020':\n return { mode: 'rec2020', r: c1, g: c2, b: c3, alpha } as Rec2020\n\n // Cylindrical color spaces (Hue, Saturation/Whiteness, Lightness/Blackness)\n case 'hsl':\n return { mode: 'hsl', h: c1, s: c2, l: c3, alpha } as Hsl\n\n case 'hwb':\n return { mode: 'hwb', h: c1, w: c2, b: c3, alpha } as Hwb\n\n // Lab color spaces (Lightness, a/b or Chroma/Hue)\n case 'lab':\n return { mode: 'lab', l: c1, a: c2, b: c3, alpha } as Lab\n\n case 'lch':\n return { mode: 'lch', l: c1, c: c2, h: c3, alpha } as Lch\n\n case 'oklab':\n return { mode: 'oklab', l: c1, a: c2, b: c3, alpha } as Oklab\n\n case 'oklch':\n return { mode: 'oklch', l: c1, c: c2, h: c3, alpha } as Oklch\n\n // XYZ color spaces\n case 'xyz-d65':\n return { mode: 'xyz65', x: c1, y: c2, z: c3, alpha } as Xyz65\n\n case 'xyz-d50':\n return { mode: 'xyz50', x: c1, y: c2, z: c3, alpha } as Xyz50\n\n // Fallback to sRGB if color space is not recognized\n default:\n return { mode: 'rgb', r: c1, g: c2, b: c3, alpha } as Rgb\n }\n}\n\n/**\n * Convert DTCG color object to hex string\n */\nexport function colorObjectToHex(color: ColorValueObject): string {\n const culoriColor = dtcgObjectToCulori(color)\n const alpha = color.alpha ?? 1\n\n if (alpha < 1) {\n return formatHex8(culoriColor)\n }\n\n return formatHex(culoriColor)\n}\n","/**\n * @fileoverview Dimension format conversion utilities for DTCG 2025.10\n * Handles dimension object format { value: number, unit: string }\n */\n\nimport { DEFAULT_BASE_FONT_SIZE_PX } from '@shared/constants'\nimport type { DimensionValue } from '@tokens/types'\n/**\n * Check if a value is in dimension object format\n */\nexport function isDimensionObject(value: unknown): value is DimensionValue {\n return typeof value === 'object' && value !== null && 'value' in value && 'unit' in value\n}\n\n/**\n * Convert DTCG dimension object to CSS string\n */\nexport function dimensionObjectToString(dimension: DimensionValue): string {\n return `${dimension.value}${dimension.unit}`\n}\n\n/**\n * Convert a DTCG dimension object between units (px, rem).\n *\n * Converts via px as an intermediate: rem -> px -> target.\n * Returns the original value unchanged for unsupported unit combinations.\n *\n * @param value - Source dimension object\n * @param toUnit - Target CSS unit\n * @param baseFontSize - Base font size in px used for rem conversions\n */\nexport function convertDimension(\n value: DimensionValue,\n toUnit: DimensionValue['unit'],\n baseFontSize = DEFAULT_BASE_FONT_SIZE_PX,\n): DimensionValue {\n const fromUnit = value.unit\n let numValue = value.value\n\n // Convert to px first (as intermediate)\n if (fromUnit === 'rem') {\n numValue = numValue * baseFontSize\n } else if (fromUnit !== 'px' && fromUnit !== toUnit) {\n // If not px, rem, or em, and not already target unit, return as-is\n return value\n }\n\n // Convert from px to target unit\n if (toUnit === 'rem') {\n numValue = numValue / baseFontSize\n } else if (toUnit !== 'px') {\n // Can't convert to other units, return original\n return value\n }\n\n return {\n value: numValue,\n unit: toUnit,\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Android/Jetpack Compose renderer for design tokens\n * Generates Kotlin code targeting Jetpack Compose with Material 3.\n *\n * @experimental This renderer is experimental. Its API, generated code structure,\n * and options may change in future releases.\n *\n * Supports two structure modes:\n * - `'nested'` — token path hierarchy as nested `object` declarations\n * - `'flat'` — tokens grouped by type into semantic sub-objects (Colors, Spacing, etc.)\n */\n\nimport {\n colorObjectToHex,\n isColorObject,\n dtcgObjectToCulori,\n} from '@processing/processors/transforms/built-in/color-converter'\nimport { isDimensionObject } from '@processing/processors/transforms/built-in/dimension-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type {\n ColorValueObject,\n DimensionValue,\n DurationValue,\n ResolvedToken,\n ResolvedTokens,\n} from '@tokens/types'\nimport { converter } from 'culori'\n\nimport { buildInMemoryOutputKey, resolveFileName, stripInternalMetadata } from './bundlers/utils'\nimport { outputTree } from './output-tree'\nimport type { RenderContext, RenderOutput, Renderer } from './types'\n\n/**\n * Options for Android/Jetpack Compose renderer\n *\n * Note: `packageName` is marked optional for type compatibility with the Renderer\n * generic, but is validated as required at runtime in the renderer's format() method.\n *\n * @experimental This type is experimental. Properties and behavior may change.\n */\nexport type AndroidRendererOptions = {\n preset?: 'standalone' | 'bundle'\n packageName?: string\n objectName?: string\n /**\n * Color output format for Kotlin Color initializers.\n * - `'argb_hex'` (default) — `Color(0xAARRGGBB)` hex literal\n * - `'argb_float'` — `Color(r, g, b, a)` float components\n *\n * Legacy aliases: `'argb8'` maps to `'argb_hex'`, `'argb_floats'` maps to `'argb_float'`.\n */\n colorFormat?: 'argb_hex' | 'argb_float' | 'argb8' | 'argb_floats'\n /**\n * Color space for generated Color values.\n * - `'sRGB'` (default) — standard sRGB color space\n * - `'displayP3'` — Display P3 wide gamut via `ColorSpaces.DisplayP3`\n */\n colorSpace?: 'sRGB' | 'displayP3'\n /**\n * Structure mode for token organization.\n * - `'nested'` (default) — mirror token path hierarchy as nested objects\n * - `'flat'` — group tokens by $type into semantic sub-objects (Colors, Spacing, etc.)\n */\n structure?: 'nested' | 'flat'\n /**\n * Kotlin visibility modifier for the generated object and its members.\n * - `undefined` (default) — no explicit modifier, which means `public` in Kotlin\n * - `'public'` — explicit `public object` / `public val`\n * - `'internal'` — `internal object` / `internal val` (useful for KMP / multi-module)\n */\n visibility?: 'public' | 'internal'\n /** Number of spaces per indentation level (default 4) */\n indent?: number\n}\n\n/**\n * Internal resolved options with all defaults applied.\n */\ntype ResolvedOptions = {\n preset: 'standalone' | 'bundle'\n packageName: string\n objectName: string\n colorFormat: 'argb_hex' | 'argb_float'\n colorSpace: 'sRGB' | 'displayP3'\n structure: 'nested' | 'flat'\n visibility: 'public' | 'internal' | undefined\n indent: number\n}\n\ntype TokenTreeNode = {\n children: Map<string, TokenTreeNode>\n token?: ResolvedToken\n}\n\ntype TokenGroup = {\n name: string\n tokens: ResolvedToken[]\n}\n\nconst toSRGB = converter('rgb')\nconst toP3 = converter('p3')\n\nconst KOTLIN_KEYWORDS = new Set([\n 'val',\n 'var',\n 'fun',\n 'class',\n 'object',\n 'when',\n 'is',\n 'in',\n 'return',\n 'break',\n 'continue',\n 'do',\n 'while',\n 'for',\n 'if',\n 'else',\n 'try',\n 'catch',\n 'throw',\n 'as',\n 'this',\n 'super',\n 'null',\n 'true',\n 'false',\n])\n\nconst KOTLIN_TYPE_GROUP_MAP: Record<string, string> = {\n color: 'Colors',\n dimension: 'Spacing',\n fontFamily: 'Fonts',\n fontWeight: 'FontWeights',\n duration: 'Durations',\n shadow: 'Shadows',\n typography: 'Typography',\n number: 'Numbers',\n cubicBezier: 'Animations',\n border: 'Borders',\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction resolveColorFormat(format?: string): 'argb_hex' | 'argb_float' {\n if (format === 'argb_floats' || format === 'argb_float') {\n return 'argb_float'\n }\n return 'argb_hex'\n}\n\nfunction indent(width: number, level: number): string {\n return ' '.repeat(width * level)\n}\n\nfunction escapeKotlinString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\$/g, '\\\\$')\n}\n\nfunction escapeKDoc(str: string): string {\n return str.replace(/\\*\\//g, '* /').replace(/\\r?\\n/g, ' ').trim()\n}\n\nfunction formatKotlinNumber(value: number): string {\n return Number.isInteger(value) ? `${value}.0` : String(value)\n}\n\nfunction roundComponent(value: number): number {\n return Math.round(value * 1000) / 1000\n}\n\nfunction toResourceName(family: string): string {\n return family\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_|_$/g, '')\n}\n\n// ---------------------------------------------------------------------------\n// Identifier helpers\n// ---------------------------------------------------------------------------\n\nfunction toPascalCase(name: string): string {\n const pascal = name\n .replace(/[-._]+(.)/g, (_, c: string) => c.toUpperCase())\n .replace(/[-._]+$/g, '')\n .replace(/^[-._]+/g, '')\n\n const result = pascal.charAt(0).toUpperCase() + pascal.slice(1)\n\n if (/^\\d/.test(result)) {\n return `_${result}`\n }\n\n return KOTLIN_KEYWORDS.has(result.charAt(0).toLowerCase() + result.slice(1))\n ? `\\`${result}\\``\n : result\n}\n\nfunction toKotlinIdentifier(name: string): string {\n const camel = name\n .replace(/[-._]+(.)/g, (_, c: string) => c.toUpperCase())\n .replace(/[-._]+$/g, '')\n .replace(/^[-._]+/g, '')\n\n const identifier = camel.charAt(0).toLowerCase() + camel.slice(1)\n\n if (/^\\d/.test(identifier)) {\n return `_${identifier}`\n }\n\n return KOTLIN_KEYWORDS.has(identifier) ? `\\`${identifier}\\`` : identifier\n}\n\n// ---------------------------------------------------------------------------\n// Renderer\n// ---------------------------------------------------------------------------\n\nexport class AndroidRenderer implements Renderer<AndroidRendererOptions> {\n async format(context: RenderContext, options?: AndroidRendererOptions): Promise<RenderOutput> {\n if (!options?.packageName) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": packageName is required for Android output`,\n )\n }\n\n const opts: ResolvedOptions = {\n preset: options?.preset ?? 'standalone',\n packageName: options.packageName,\n objectName: options?.objectName ?? 'DesignTokens',\n colorFormat: resolveColorFormat(options?.colorFormat),\n colorSpace: options?.colorSpace ?? 'sRGB',\n structure: options?.structure ?? 'nested',\n visibility: options?.visibility,\n indent: options?.indent ?? 4,\n }\n\n if (opts.preset === 'bundle') {\n return await this.formatBundle(context, opts)\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n // -----------------------------------------------------------------------\n // Token tree (nested mode)\n // -----------------------------------------------------------------------\n\n private buildTokenTree(tokens: ResolvedTokens): TokenTreeNode {\n const root: TokenTreeNode = { children: new Map() }\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n let current = root\n const segments = token.path\n\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i]!\n if (!current.children.has(seg)) {\n current.children.set(seg, { children: new Map() })\n }\n current = current.children.get(seg)!\n }\n\n const leafName = segments[segments.length - 1] ?? token.name\n const leaf: TokenTreeNode = current.children.get(leafName) ?? { children: new Map() }\n leaf.token = token\n current.children.set(leafName, leaf)\n }\n\n return root\n }\n\n // -----------------------------------------------------------------------\n // Flat structure grouping\n // -----------------------------------------------------------------------\n\n private groupTokensByType(tokens: ResolvedTokens): TokenGroup[] {\n const groupMap = new Map<string, ResolvedToken[]>()\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const groupName = KOTLIN_TYPE_GROUP_MAP[token.$type ?? ''] ?? 'Other'\n const existing = groupMap.get(groupName) ?? []\n existing.push(token)\n groupMap.set(groupName, existing)\n }\n\n return Array.from(groupMap.entries()).map(([name, groupTokens]) => ({\n name,\n tokens: groupTokens,\n }))\n }\n\n /**\n * Builds a flattened camelCase name from a token's path, stripping the\n * type prefix segment (which is already represented by the group object).\n */\n private buildFlatKotlinName(token: ResolvedToken): string {\n const path = token.path\n const withoutTypePrefix = path.length > 1 ? path.slice(1) : path\n const joined = withoutTypePrefix.join('_')\n return toKotlinIdentifier(joined)\n }\n\n // -----------------------------------------------------------------------\n // Rendering\n // -----------------------------------------------------------------------\n\n private formatTokens(tokens: ResolvedTokens, options: ResolvedOptions): string {\n if (options.structure === 'flat') {\n return this.formatAsFlat(tokens, options)\n }\n return this.formatAsNested(tokens, options)\n }\n\n private formatAsNested(tokens: ResolvedTokens, options: ResolvedOptions): string {\n const tree = this.buildTokenTree(tokens)\n const tokenTypes = new Set<string>()\n this.collectTokenTypes(tree, tokenTypes)\n\n return this.buildFile(tokenTypes, options, (lines, vis) => {\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${vis}object ${options.objectName} {`)\n this.renderTreeChildren(lines, tree, 1, options)\n lines.push('}')\n })\n }\n\n private formatAsFlat(tokens: ResolvedTokens, options: ResolvedOptions): string {\n const groups = this.groupTokensByType(tokens)\n const tokenTypes = this.collectTokenTypesFromEntries(tokens)\n\n return this.buildFile(tokenTypes, options, (lines, vis) => {\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${vis}object ${options.objectName} {`)\n this.renderFlatGroups(lines, groups, 1, options)\n lines.push('}')\n })\n }\n\n /**\n * Shared file preamble: header, package, imports, optional ShadowToken class.\n * The `renderBody` callback appends the main object(s) to `lines`.\n */\n private buildFile(\n tokenTypes: Set<string>,\n options: ResolvedOptions,\n renderBody: (lines: string[], vis: string) => void,\n ): string {\n const imports = this.collectImports(tokenTypes, options)\n const vis = options.visibility ? `${options.visibility} ` : ''\n const lines: string[] = []\n\n lines.push(this.buildFileHeader())\n lines.push('')\n lines.push(`package ${options.packageName}`)\n lines.push('')\n\n for (const imp of imports) {\n lines.push(`import ${imp}`)\n }\n if (imports.length > 0) {\n lines.push('')\n }\n\n if (tokenTypes.has('shadow')) {\n lines.push(...this.buildShadowTokenClass(vis, options))\n lines.push('')\n }\n\n renderBody(lines, vis)\n lines.push('')\n\n return lines.join('\\n')\n }\n\n private renderFlatGroups(\n lines: string[],\n groups: TokenGroup[],\n baseDepth: number,\n options: ResolvedOptions,\n ): void {\n const vis = options.visibility ? `${options.visibility} ` : ''\n const groupIndent = indent(options.indent, baseDepth)\n const valIndent = indent(options.indent, baseDepth + 1)\n\n for (const group of groups) {\n lines.push(`${groupIndent}${vis}object ${group.name} {`)\n for (const token of group.tokens) {\n const kotlinName = this.buildFlatKotlinName(token)\n const kotlinValue = this.formatKotlinValue(token, options, baseDepth + 1)\n const annotation = this.typeAnnotationSuffix(token)\n\n if (token.$description) {\n lines.push(`${valIndent}/** ${escapeKDoc(token.$description)} */`)\n }\n lines.push(`${valIndent}${vis}val ${kotlinName}${annotation} = ${kotlinValue}`)\n }\n lines.push(`${groupIndent}}`)\n lines.push('')\n }\n }\n\n private renderTreeChildren(\n lines: string[],\n node: TokenTreeNode,\n depth: number,\n options: ResolvedOptions,\n ): void {\n const vis = options.visibility ? `${options.visibility} ` : ''\n const pad = indent(options.indent, depth)\n const entries = Array.from(node.children.entries())\n\n for (let idx = 0; idx < entries.length; idx++) {\n const [key, child] = entries[idx]!\n\n if (child.token && child.children.size === 0) {\n this.renderLeaf(lines, key, child.token, depth, options)\n } else if (child.children.size > 0 && !child.token) {\n const objectName = toPascalCase(key)\n lines.push(`${pad}${vis}object ${objectName} {`)\n this.renderTreeChildren(lines, child, depth + 1, options)\n lines.push(`${pad}}`)\n if (idx < entries.length - 1) {\n lines.push('')\n }\n } else {\n this.renderLeaf(lines, key, child.token!, depth, options)\n this.renderTreeChildren(lines, child, depth, options)\n }\n }\n }\n\n private renderLeaf(\n lines: string[],\n key: string,\n token: ResolvedToken,\n depth: number,\n options: ResolvedOptions,\n ): void {\n const vis = options.visibility ? `${options.visibility} ` : ''\n const pad = indent(options.indent, depth)\n const kotlinName = toKotlinIdentifier(key)\n const kotlinValue = this.formatKotlinValue(token, options, depth)\n const annotation = this.typeAnnotationSuffix(token)\n\n if (token.$description) {\n lines.push(`${pad}/** ${escapeKDoc(token.$description)} */`)\n }\n\n lines.push(`${pad}${vis}val ${kotlinName}${annotation} = ${kotlinValue}`)\n }\n\n private buildFileHeader(): string {\n return [\n '// Generated by Dispersa - do not edit manually',\n '// https://github.com/timges/dispersa',\n ].join('\\n')\n }\n\n // -----------------------------------------------------------------------\n // Shadow data class\n // -----------------------------------------------------------------------\n\n private buildShadowTokenClass(vis: string, options: ResolvedOptions): string[] {\n const i1 = indent(options.indent, 1)\n return [\n '@Immutable',\n `${vis}data class ShadowToken(`,\n `${i1}val color: Color,`,\n `${i1}val elevation: Dp,`,\n `${i1}val offsetX: Dp,`,\n `${i1}val offsetY: Dp,`,\n ')',\n ]\n }\n\n // -----------------------------------------------------------------------\n // Imports (tree-shaken)\n // -----------------------------------------------------------------------\n\n private collectImports(tokenTypes: Set<string>, options: ResolvedOptions): string[] {\n const imports = new Set<string>()\n const ns = 'androidx.compose'\n const hasColors =\n tokenTypes.has('color') || tokenTypes.has('shadow') || tokenTypes.has('border')\n\n if (hasColors) {\n imports.add(`${ns}.ui.graphics.Color`)\n }\n if (tokenTypes.has('dimension') || tokenTypes.has('shadow') || tokenTypes.has('border')) {\n imports.add(`${ns}.ui.unit.Dp`)\n imports.add(`${ns}.ui.unit.dp`)\n }\n if (tokenTypes.has('typography') || tokenTypes.has('fontFamily')) {\n imports.add(`${ns}.ui.text.TextStyle`)\n imports.add(`${ns}.ui.unit.sp`)\n }\n if (tokenTypes.has('typography') || tokenTypes.has('fontWeight')) {\n imports.add(`${ns}.ui.text.font.FontWeight`)\n }\n if (tokenTypes.has('fontFamily')) {\n imports.add(`${ns}.ui.text.font.FontFamily`)\n }\n if (tokenTypes.has('duration')) {\n imports.add('kotlin.time.Duration')\n imports.add('kotlin.time.Duration.Companion.milliseconds')\n imports.add('kotlin.time.Duration.Companion.seconds')\n }\n if (tokenTypes.has('cubicBezier')) {\n imports.add(`${ns}.animation.core.CubicBezierEasing`)\n }\n if (tokenTypes.has('shadow')) {\n imports.add(`${ns}.runtime.Immutable`)\n }\n if (tokenTypes.has('border')) {\n imports.add(`${ns}.foundation.BorderStroke`)\n }\n if (options.colorSpace === 'displayP3' && hasColors) {\n imports.add(`${ns}.ui.graphics.colorspace.ColorSpaces`)\n }\n\n return Array.from(imports).sort()\n }\n\n private collectTokenTypes(node: TokenTreeNode, types: Set<string>): void {\n if (node.token?.$type) {\n types.add(node.token.$type)\n }\n for (const child of node.children.values()) {\n this.collectTokenTypes(child, types)\n }\n }\n\n private collectTokenTypesFromEntries(tokens: ResolvedTokens): Set<string> {\n const types = new Set<string>()\n for (const [, token] of Object.entries(tokens)) {\n if (token.$type) {\n types.add(token.$type)\n }\n }\n return types\n }\n\n // -----------------------------------------------------------------------\n // Type annotations\n // -----------------------------------------------------------------------\n\n private getTypeAnnotation(token: ResolvedToken): string | undefined {\n switch (token.$type) {\n case 'color':\n return 'Color'\n case 'dimension':\n return 'Dp'\n case 'fontFamily':\n return 'FontFamily'\n case 'fontWeight':\n return 'FontWeight'\n case 'duration':\n return 'Duration'\n case 'shadow':\n return 'ShadowToken'\n case 'cubicBezier':\n return 'CubicBezierEasing'\n case 'number':\n return 'Double'\n case 'typography':\n return 'TextStyle'\n case 'border':\n return 'BorderStroke'\n default: {\n const value = token.$value\n if (typeof value === 'string') {\n return 'String'\n }\n if (typeof value === 'boolean') {\n return 'Boolean'\n }\n if (typeof value === 'number') {\n return 'Double'\n }\n return undefined\n }\n }\n }\n\n private typeAnnotationSuffix(token: ResolvedToken): string {\n const type = this.getTypeAnnotation(token)\n return type ? `: ${type}` : ''\n }\n\n // -----------------------------------------------------------------------\n // Value formatting\n // -----------------------------------------------------------------------\n\n private formatKotlinValue(token: ResolvedToken, options: ResolvedOptions, depth: number): string {\n const value = token.$value\n\n if (token.$type === 'color') {\n return this.formatColorValue(value, options)\n }\n if (token.$type === 'dimension') {\n return this.formatDimensionValue(value)\n }\n if (token.$type === 'fontFamily') {\n return this.formatFontFamilyValue(value)\n }\n if (token.$type === 'fontWeight') {\n return this.formatFontWeightValue(value)\n }\n if (token.$type === 'duration') {\n return this.formatDurationValue(value)\n }\n if (token.$type === 'shadow') {\n return this.formatShadowValue(value, options, depth)\n }\n if (token.$type === 'typography') {\n return this.formatTypographyValue(value, options, depth)\n }\n if (token.$type === 'border') {\n return this.formatBorderValue(value, options)\n }\n\n if (token.$type === 'number') {\n return typeof value === 'number' ? formatKotlinNumber(value) : String(value)\n }\n\n if (token.$type === 'cubicBezier' && Array.isArray(value) && value.length === 4) {\n return `CubicBezierEasing(${value[0]}f, ${value[1]}f, ${value[2]}f, ${value[3]}f)`\n }\n\n if (typeof value === 'string') {\n return `\"${escapeKotlinString(value)}\"`\n }\n if (typeof value === 'number') {\n return formatKotlinNumber(value)\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\n }\n\n return `\"${escapeKotlinString(String(value))}\"`\n }\n\n private formatColorValue(value: unknown, options: ResolvedOptions): string {\n if (!isColorObject(value)) {\n if (typeof value === 'string') {\n const hex = value.replace('#', '')\n if (/^[0-9a-fA-F]{6,8}$/.test(hex)) {\n const argb = hex.length === 8 ? hex : `FF${hex}`\n return `Color(0x${argb.toUpperCase()})`\n }\n }\n return 'Color.Unspecified'\n }\n\n const colorObj = value as ColorValueObject\n const alpha = colorObj.alpha ?? 1\n\n if (options.colorFormat === 'argb_float' || options.colorSpace === 'displayP3') {\n return this.formatFloatColor(colorObj, alpha, options)\n }\n\n return this.formatHexColor(colorObj, alpha)\n }\n\n private formatFloatColor(\n colorObj: ColorValueObject,\n alpha: number,\n options: ResolvedOptions,\n ): string {\n if (options.colorSpace === 'displayP3') {\n const p3 = toP3(dtcgObjectToCulori(colorObj))\n const r = roundComponent(p3?.r ?? 0)\n const g = roundComponent(p3?.g ?? 0)\n const b = roundComponent(p3?.b ?? 0)\n return `Color(${r}f, ${g}f, ${b}f, ${roundComponent(alpha)}f, ColorSpaces.DisplayP3)`\n }\n\n const rgb = toSRGB(dtcgObjectToCulori(colorObj))\n const r = roundComponent(rgb?.r ?? 0)\n const g = roundComponent(rgb?.g ?? 0)\n const b = roundComponent(rgb?.b ?? 0)\n return `Color(${r}f, ${g}f, ${b}f, ${roundComponent(alpha)}f)`\n }\n\n private formatHexColor(colorObj: ColorValueObject, alpha: number): string {\n const hex = colorObjectToHex(colorObj)\n const hexClean = hex.replace('#', '')\n\n if (hexClean.length === 8) {\n const rrggbb = hexClean.slice(0, 6)\n const aa = hexClean.slice(6, 8)\n return `Color(0x${aa.toUpperCase()}${rrggbb.toUpperCase()})`\n }\n\n const alphaHex =\n alpha < 1\n ? Math.round(alpha * 255)\n .toString(16)\n .padStart(2, '0')\n .toUpperCase()\n : 'FF'\n return `Color(0x${alphaHex}${hexClean.toUpperCase()})`\n }\n\n private formatDimensionValue(value: unknown): string {\n if (isDimensionObject(value)) {\n const dim = value as DimensionValue\n const dpValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n return `${dpValue}.dp`\n }\n\n return typeof value === 'number' ? `${value}.dp` : `0.dp`\n }\n\n private formatFontFamilyValue(value: unknown): string {\n if (Array.isArray(value)) {\n const primary = value[0]\n if (typeof primary === 'string') {\n return this.mapKotlinFontFamily(primary)\n }\n return 'FontFamily.Default'\n }\n\n return typeof value === 'string' ? this.mapKotlinFontFamily(value) : 'FontFamily.Default'\n }\n\n private mapKotlinFontFamily(family: string): string {\n const normalized = family.toLowerCase().replace(/['\"]/g, '').trim()\n const builtIn: Record<string, string> = {\n 'sans-serif': 'FontFamily.SansSerif',\n serif: 'FontFamily.Serif',\n monospace: 'FontFamily.Monospace',\n cursive: 'FontFamily.Cursive',\n }\n\n return (\n builtIn[normalized] ??\n `FontFamily.Default // TODO: load \"${family}\" via Font(R.font.${toResourceName(family)})`\n )\n }\n\n private formatFontWeightValue(value: unknown): string {\n if (typeof value === 'number') {\n return this.numericFontWeight(value)\n }\n if (typeof value === 'string') {\n return this.namedFontWeight(value) ?? 'FontWeight.Normal'\n }\n return 'FontWeight.Normal'\n }\n\n private numericFontWeight(weight: number): string {\n if (weight <= 100) {\n return 'FontWeight.Thin'\n }\n if (weight <= 200) {\n return 'FontWeight.ExtraLight'\n }\n if (weight <= 300) {\n return 'FontWeight.Light'\n }\n if (weight <= 400) {\n return 'FontWeight.Normal'\n }\n if (weight <= 500) {\n return 'FontWeight.Medium'\n }\n if (weight <= 600) {\n return 'FontWeight.SemiBold'\n }\n if (weight <= 700) {\n return 'FontWeight.Bold'\n }\n if (weight <= 800) {\n return 'FontWeight.ExtraBold'\n }\n return 'FontWeight.Black'\n }\n\n private namedFontWeight(name: string): string | undefined {\n const map: Record<string, string> = {\n thin: 'FontWeight.Thin',\n extralight: 'FontWeight.ExtraLight',\n ultralight: 'FontWeight.ExtraLight',\n light: 'FontWeight.Light',\n regular: 'FontWeight.Normal',\n normal: 'FontWeight.Normal',\n medium: 'FontWeight.Medium',\n semibold: 'FontWeight.SemiBold',\n demibold: 'FontWeight.SemiBold',\n bold: 'FontWeight.Bold',\n extrabold: 'FontWeight.ExtraBold',\n heavy: 'FontWeight.ExtraBold',\n black: 'FontWeight.Black',\n ultrabold: 'FontWeight.Black',\n }\n\n return map[name.toLowerCase()]\n }\n\n private formatDurationValue(value: unknown): string {\n if (typeof value === 'object' && value !== null && 'value' in value && 'unit' in value) {\n const dur = value as DurationValue\n return dur.unit === 'ms' ? `${dur.value}.milliseconds` : `${dur.value}.seconds`\n }\n\n return typeof value === 'number' ? `${value}.milliseconds` : '0.milliseconds'\n }\n\n private formatShadowValue(value: unknown, options: ResolvedOptions, depth: number): string {\n if (Array.isArray(value) && value.length > 0) {\n return this.formatSingleShadow(value[0] as Record<string, unknown>, options, depth)\n }\n\n if (typeof value === 'object' && value !== null) {\n return this.formatSingleShadow(value as Record<string, unknown>, options, depth)\n }\n\n return 'ShadowToken(color = Color.Unspecified, elevation = 0.dp, offsetX = 0.dp, offsetY = 0.dp)'\n }\n\n private formatSingleShadow(\n shadow: Record<string, unknown>,\n options: ResolvedOptions,\n depth: number,\n ): string {\n const color = isColorObject(shadow.color)\n ? this.formatColorValue(shadow.color, options)\n : 'Color.Black'\n\n const elevation = isDimensionObject(shadow.blur)\n ? this.formatDimensionValue(shadow.blur)\n : '0.dp'\n\n const offsetX = isDimensionObject(shadow.offsetX)\n ? this.formatDimensionValue(shadow.offsetX)\n : '0.dp'\n\n const offsetY = isDimensionObject(shadow.offsetY)\n ? this.formatDimensionValue(shadow.offsetY)\n : '0.dp'\n\n const propIndent = indent(options.indent, depth + 1)\n const closeIndent = indent(options.indent, depth)\n return [\n 'ShadowToken(',\n `${propIndent}color = ${color},`,\n `${propIndent}elevation = ${elevation},`,\n `${propIndent}offsetX = ${offsetX},`,\n `${propIndent}offsetY = ${offsetY},`,\n `${closeIndent})`,\n ].join('\\n')\n }\n\n private formatBorderValue(value: unknown, options: ResolvedOptions): string {\n if (typeof value !== 'object' || value === null) {\n return 'BorderStroke(0.dp, Color.Unspecified)'\n }\n\n const border = value as Record<string, unknown>\n const width = isDimensionObject(border.width) ? this.formatDimensionValue(border.width) : '0.dp'\n\n const color = isColorObject(border.color)\n ? this.formatColorValue(border.color, options)\n : 'Color.Unspecified'\n\n return `BorderStroke(${width}, ${color})`\n }\n\n private formatTypographyValue(value: unknown, options: ResolvedOptions, depth: number): string {\n if (typeof value !== 'object' || value === null) {\n return 'TextStyle()'\n }\n\n const typo = value as Record<string, unknown>\n const parts: string[] = []\n\n if (isDimensionObject(typo.fontSize)) {\n const dim = typo.fontSize as DimensionValue\n const spValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n parts.push(`fontSize = ${spValue}.sp`)\n }\n\n if (typo.fontWeight != null) {\n parts.push(`fontWeight = ${this.formatFontWeightValue(typo.fontWeight)}`)\n }\n\n if (typo.lineHeight != null && typeof typo.lineHeight === 'number') {\n if (isDimensionObject(typo.fontSize)) {\n const dim = typo.fontSize as DimensionValue\n const spValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n const lineHeightSp = Math.round(spValue * typo.lineHeight * 100) / 100\n parts.push(`lineHeight = ${lineHeightSp}.sp`)\n }\n }\n\n if (isDimensionObject(typo.letterSpacing)) {\n const dim = typo.letterSpacing as DimensionValue\n const spValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n parts.push(`letterSpacing = ${spValue}.sp`)\n }\n\n if (parts.length === 0) {\n return 'TextStyle()'\n }\n\n const propIndent = indent(options.indent, depth + 1)\n const closeIndent = indent(options.indent, depth)\n return `TextStyle(\\n${parts.map((p) => `${propIndent}${p}`).join(',\\n')},\\n${closeIndent})`\n }\n\n // -----------------------------------------------------------------------\n // Output: standalone\n // -----------------------------------------------------------------------\n\n private async formatStandalone(\n context: RenderContext,\n options: ResolvedOptions,\n ): Promise<RenderOutput> {\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for standalone Android output`,\n )\n }\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = this.formatTokens(processedTokens, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'kt',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n // -----------------------------------------------------------------------\n // Output: bundle\n // -----------------------------------------------------------------------\n\n private async formatBundle(\n context: RenderContext,\n options: ResolvedOptions,\n ): Promise<RenderOutput> {\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for bundle Android output`,\n )\n }\n\n const content = this.formatBundleContent(context, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, context.meta.basePermutation)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'kt',\n modifierInputs: context.meta.basePermutation,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n\n return outputTree({ [fileName]: content })\n }\n\n private formatBundleContent(context: RenderContext, options: ResolvedOptions): string {\n const allTokenTypes = this.collectAllPermutationTypes(context)\n\n return this.buildFile(allTokenTypes, options, (lines, vis) => {\n const i1 = indent(options.indent, 1)\n\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${vis}object ${options.objectName} {`)\n\n for (let idx = 0; idx < context.permutations.length; idx++) {\n const { tokens, modifierInputs } = context.permutations[idx]!\n const processedTokens = stripInternalMetadata(tokens)\n const permName = this.buildPermutationName(modifierInputs)\n lines.push(`${i1}${vis}object ${permName} {`)\n this.renderBundleTokens(lines, processedTokens, options, 2)\n lines.push(`${i1}}`)\n if (idx < context.permutations.length - 1) {\n lines.push('')\n }\n }\n\n lines.push('}')\n })\n }\n\n private collectAllPermutationTypes(context: RenderContext): Set<string> {\n const allTokenTypes = new Set<string>()\n for (const { tokens } of context.permutations) {\n const processed = stripInternalMetadata(tokens)\n for (const [, token] of Object.entries(processed)) {\n if (token.$type) {\n allTokenTypes.add(token.$type)\n }\n }\n }\n return allTokenTypes\n }\n\n private renderBundleTokens(\n lines: string[],\n tokens: ResolvedTokens,\n options: ResolvedOptions,\n baseDepth: number,\n ): void {\n if (options.structure === 'flat') {\n const groups = this.groupTokensByType(tokens)\n this.renderFlatGroups(lines, groups, baseDepth, options)\n return\n }\n\n const tree = this.buildTokenTree(tokens)\n this.renderTreeChildren(lines, tree, baseDepth, options)\n }\n\n private buildPermutationName(modifierInputs: Record<string, string>): string {\n const values = Object.values(modifierInputs)\n if (values.length === 0) {\n return 'Default'\n }\n return values.map((v) => toPascalCase(v)).join('')\n }\n}\n\n/**\n * Android/Jetpack Compose renderer factory function.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'android',\n * renderer: androidRenderer(),\n * options: {\n * packageName: 'com.example.tokens',\n * objectName: 'DesignTokens',\n * colorFormat: 'argb_hex',\n * },\n * file: 'DesignTokens-{theme}.kt'\n * }]\n * ```\n */\nexport function androidRenderer(): Renderer<AndroidRendererOptions> {\n const rendererInstance = new AndroidRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as AndroidRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @fileoverview Output tree helpers for custom renderers\n */\n\nimport type { OutputTree } from './types'\n\n/**\n * Create an {@link OutputTree} from a map of file paths to content strings.\n *\n * Use this when building a custom renderer that produces multiple output files\n * (e.g. one file per theme or permutation).\n *\n * @param files - Record mapping relative file paths to their string content\n * @returns An `OutputTree` that the build orchestrator can write to disk or return in-memory\n *\n * @example\n * ```typescript\n * import { defineRenderer, outputTree } from 'dispersa/renderers'\n *\n * const myRenderer = defineRenderer((context) => {\n * return outputTree({\n * 'light.css': '/* light tokens *\\/',\n * 'dark.css': '/* dark tokens *\\/',\n * })\n * })\n * ```\n */\nexport const outputTree = (files: Record<string, string>): OutputTree => {\n return {\n kind: 'outputTree',\n files,\n }\n}\n\n/**\n * Type guard that checks whether a value is an {@link OutputTree}.\n *\n * @param value - The value to check\n * @returns `true` if the value is an `OutputTree`\n */\nexport const isOutputTree = (value: unknown): value is OutputTree => {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { kind?: unknown }).kind === 'outputTree'\n )\n}\n","/**\n * @fileoverview CSS renderer with theme selector support\n * Supports DTCG 2025.10 color and dimension object formats\n */\n\nimport {\n colorObjectToHex,\n isColorObject,\n} from '@processing/processors/transforms/built-in/color-converter'\nimport {\n dimensionObjectToString,\n isDimensionObject,\n} from '@processing/processors/transforms/built-in/dimension-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport {\n formatDeprecationMessage,\n getPureAliasReferenceName,\n getSortedTokenEntries,\n} from '@shared/utils/token-utils'\nimport type { DimensionValue, DurationValue, ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { buildSetLayerBlocks, bundleAsCss } from './bundlers/css'\nimport {\n buildInMemoryOutputKey,\n filterTokensBySource,\n filterTokensFromSets,\n normalizeModifierInputs,\n resolveBaseFileName,\n resolveMediaQuery,\n resolveFileName,\n resolveSelector,\n stripInternalMetadata,\n} from './bundlers/utils'\nimport type { CssRendererOptions, RenderContext, RenderOutput, Renderer } from './types'\n\ntype ResolvedCssOptions = Omit<CssRendererOptions, 'selector' | 'mediaQuery'> & {\n selector?: string\n mediaQuery?: string\n referenceTokens?: ResolvedTokens\n}\n\ntype Shadow = {\n color: unknown\n offsetX: DimensionValue\n offsetY: DimensionValue\n blur: DimensionValue\n spread?: DimensionValue\n inset?: boolean\n}\n\ntype CssEntry = {\n name: string\n value: string\n}\n\ntype CompositeLeaf = {\n path: string[]\n value: unknown\n}\n\nexport class CssRenderer implements Renderer<CssRendererOptions> {\n private sanitizeCssCommentText(text: string): string {\n return text.replace(/\\*\\//g, '*\\\\/').replace(/\\r?\\n/g, ' ').trim()\n }\n\n async format(context: RenderContext, options?: CssRendererOptions): Promise<RenderOutput> {\n const opts: CssRendererOptions = {\n preset: options?.preset ?? 'bundle',\n selector: options?.selector,\n mediaQuery: options?.mediaQuery,\n minify: options?.minify ?? false,\n preserveReferences: options?.preserveReferences ?? false,\n }\n\n if (opts.preset === 'bundle') {\n return await this.formatBundle(context, opts)\n }\n\n if (opts.preset === 'modifier') {\n return await this.formatModifier(context, opts)\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n private static readonly PRETTIER_PRINT_WIDTH = 80\n private static readonly PRETTIER_TAB_WIDTH = 2\n\n /**\n * Format tokens as CSS custom properties\n *\n * Converts resolved design tokens into CSS format with configurable selector,\n * media queries, and formatting options. Supports DTCG color and dimension objects.\n *\n * Note: This method expects selector and mediaQuery to be resolved strings.\n * Function-based selectors should be resolved before calling format().\n *\n * @param tokens - Resolved tokens to format\n * @param options - CSS formatting options (selector, media query, minify, etc.)\n * @returns Formatted CSS string with custom properties\n */\n private async formatTokens(\n tokens: ResolvedTokens,\n options?: ResolvedCssOptions,\n ): Promise<string> {\n const opts = {\n preset: 'bundle' as const,\n selector: ':root',\n mediaQuery: '',\n minify: false,\n preserveReferences: false,\n ...options,\n referenceTokens: options?.referenceTokens ?? tokens,\n }\n\n const groups = this.groupTokens(tokens, opts)\n const referenceTokens = opts.referenceTokens\n const lines: string[] = []\n\n for (const [selector, groupTokens] of Object.entries(groups)) {\n this.buildCssBlock(lines, groupTokens, selector, tokens, referenceTokens, opts)\n }\n\n const cssString = lines.join('')\n return opts.minify ? cssString : await this.formatWithPrettier(cssString)\n }\n\n private buildCssBlock(\n lines: string[],\n groupTokens: ResolvedToken[],\n selector: string,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n opts: Required<ResolvedCssOptions>,\n ): void {\n const indent = opts.minify ? '' : ' '\n const newline = opts.minify ? '' : '\\n'\n const space = opts.minify ? '' : ' '\n const hasMediaQuery = opts.mediaQuery != null && opts.mediaQuery !== ''\n const tokenIndent = hasMediaQuery ? indent + indent : indent\n\n if (hasMediaQuery) {\n lines.push(`@media ${opts.mediaQuery}${space}{${newline}`)\n lines.push(`${indent}${selector}${space}{${newline}`)\n } else {\n lines.push(`${selector}${space}{${newline}`)\n }\n\n for (const token of groupTokens) {\n this.pushTokenLines(\n lines,\n token,\n tokens,\n referenceTokens,\n opts.preserveReferences ?? false,\n tokenIndent,\n newline,\n space,\n )\n }\n\n if (hasMediaQuery) {\n lines.push(`${indent}}${newline}`)\n }\n lines.push(`}${newline}${newline}`)\n }\n\n private pushTokenLines(\n lines: string[],\n token: ResolvedToken,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n preserveReferences: boolean,\n indent: string,\n newline: string,\n space: string,\n ): void {\n const entries = this.buildCssEntries(token, tokens, referenceTokens, preserveReferences)\n\n if (token.$deprecated != null && token.$deprecated !== false) {\n const deprecationMsg = formatDeprecationMessage(token, '', 'comment')\n lines.push(`${indent}/* ${this.sanitizeCssCommentText(deprecationMsg)} */${newline}`)\n }\n\n if (token.$description && token.$description !== '') {\n lines.push(`${indent}/* ${this.sanitizeCssCommentText(token.$description)} */${newline}`)\n }\n\n for (const entry of entries) {\n lines.push(`${indent}--${entry.name}:${space}${entry.value};${newline}`)\n }\n }\n\n private async formatWithPrettier(css: string): Promise<string> {\n try {\n return await prettier.format(css, {\n parser: 'css',\n printWidth: CssRenderer.PRETTIER_PRINT_WIDTH,\n tabWidth: CssRenderer.PRETTIER_TAB_WIDTH,\n useTabs: false,\n })\n } catch {\n // Prettier may fail on edge-case CSS; fall back to raw string\n return css\n }\n }\n\n /**\n * Group tokens by selector (for theme support)\n */\n private groupTokens(\n tokens: ResolvedTokens,\n options: Required<CssRendererOptions>,\n ): Record<string, ResolvedToken[]> {\n const sortedTokens = getSortedTokenEntries(tokens).map(([, token]) => token)\n return {\n [options.selector as string]: sortedTokens,\n }\n }\n\n private buildCssEntries(\n token: ResolvedToken,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n preserveReferences: boolean,\n ): CssEntry[] {\n if (preserveReferences) {\n const refName = getPureAliasReferenceName(token.originalValue)\n if (refName !== undefined) {\n return [\n {\n name: token.name,\n value: this.buildCssVarReference(refName, referenceTokens, tokens),\n },\n ]\n }\n }\n\n if (!this.isCompositeToken(token)) {\n return [{ name: token.name, value: this.formatValue(token) }]\n }\n\n const leaves = this.collectCompositeLeaves(token.$value)\n if (leaves.length === 0) {\n return [{ name: token.name, value: this.formatLeafValue(token.$value) }]\n }\n\n const leafEntries = leaves.map((leaf) => ({\n name: this.buildCompositeName(token.name, leaf.path),\n value: this.formatLeafValue(\n this.resolveCompositeLeafValue(\n leaf,\n token.originalValue,\n tokens,\n referenceTokens,\n preserveReferences,\n ),\n ),\n }))\n\n const wholeValue = this.buildCompositeWholeValue(token, preserveReferences)\n if (!wholeValue) {\n return leafEntries\n }\n\n return [{ name: token.name, value: wholeValue }, ...leafEntries]\n }\n\n private isCompositeToken(token: ResolvedToken): boolean {\n const isCompositeType = [\n 'shadow',\n 'typography',\n 'border',\n 'strokeStyle',\n 'transition',\n 'gradient',\n ].includes(token.$type ?? '')\n if (!isCompositeType) {\n return false\n }\n\n const value = token.$value\n return (typeof value === 'object' && value !== null) || Array.isArray(value)\n }\n\n private buildCompositeWholeValue(\n token: ResolvedToken,\n preserveReferences: boolean,\n ): string | undefined {\n if (token.$type === 'shadow') {\n // Shadow always supports a whole-value (single or multi-layer)\n return preserveReferences ? this.buildShadowWholeValue(token) : this.formatValue(token)\n }\n if (token.$type === 'border') {\n // Border shorthand only works when style is a simple string (e.g. \"solid\").\n // Complex strokeStyle objects can't be represented as a CSS shorthand.\n if (!this.hasBorderShorthandStyle(token)) {\n return undefined\n }\n return preserveReferences ? this.buildBorderWholeValue(token) : this.formatValue(token)\n }\n if (token.$type === 'transition') {\n return preserveReferences ? this.buildTransitionWholeValue(token) : this.formatValue(token)\n }\n return undefined\n }\n\n private hasBorderShorthandStyle(token: ResolvedToken): boolean {\n const value = token.$value\n if (typeof value !== 'object' || value === null) {\n return false\n }\n return typeof (value as { style?: unknown }).style === 'string'\n }\n\n private buildShadowWholeValue(token: ResolvedToken): string | undefined {\n const value = token.$value\n if (Array.isArray(value)) {\n return value\n .map((shadow, index) => this.buildShadowLayerValue(token.name, shadow, [String(index)]))\n .join(', ')\n }\n if (typeof value === 'object' && value !== null) {\n return this.buildShadowLayerValue(token.name, value, [])\n }\n return undefined\n }\n\n private buildShadowLayerValue(baseName: string, shadow: unknown, prefix: string[]): string {\n if (typeof shadow !== 'object' || shadow === null) {\n return String(shadow)\n }\n const shadowObj = shadow as Shadow\n const parts: string[] = []\n\n if (shadowObj.inset === true) {\n parts.push('inset')\n }\n\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'offsetX']))\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'offsetY']))\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'blur']))\n\n if (shadowObj.spread != null) {\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'spread']))\n }\n\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'color']))\n return parts.join(' ')\n }\n\n private buildBorderWholeValue(token: ResolvedToken): string | undefined {\n const value = token.$value\n if (typeof value !== 'object' || value === null) {\n return undefined\n }\n const border = value as { style?: unknown }\n if (typeof border.style !== 'string') {\n return undefined\n }\n return [\n this.buildCompositeVar(token.name, ['width']),\n this.buildCompositeVar(token.name, ['style']),\n this.buildCompositeVar(token.name, ['color']),\n ].join(' ')\n }\n\n private buildTransitionWholeValue(token: ResolvedToken): string | undefined {\n const value = token.$value\n if (typeof value !== 'object' || value === null) {\n return undefined\n }\n return [\n this.buildCompositeVar(token.name, ['duration']),\n `cubic-bezier(${this.buildCompositeVar(token.name, ['timingFunction', '0'])}, ${this.buildCompositeVar(token.name, ['timingFunction', '1'])}, ${this.buildCompositeVar(token.name, ['timingFunction', '2'])}, ${this.buildCompositeVar(token.name, ['timingFunction', '3'])})`,\n this.buildCompositeVar(token.name, ['delay']),\n ].join(' ')\n }\n\n private buildCompositeVar(baseName: string, path: string[]): string {\n return `var(--${this.buildCompositeName(baseName, path)})`\n }\n\n private collectCompositeLeaves(value: unknown): CompositeLeaf[] {\n const leaves: CompositeLeaf[] = []\n this.collectLeafEntries(value, [], leaves)\n return leaves\n }\n\n private collectLeafEntries(value: unknown, path: string[], leaves: CompositeLeaf[]): void {\n if (this.isPrimitiveValue(value)) {\n leaves.push({ path, value })\n return\n }\n\n if (isColorObject(value) || isDimensionObject(value) || this.isDurationObject(value)) {\n leaves.push({ path, value })\n return\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n leaves.push({ path, value })\n return\n }\n value.forEach((item, index) => {\n this.collectLeafEntries(item, [...path, String(index)], leaves)\n })\n return\n }\n\n if (typeof value === 'object' && value !== null) {\n const entries = Object.entries(value)\n if (entries.length === 0) {\n leaves.push({ path, value })\n return\n }\n for (const [key, child] of entries) {\n this.collectLeafEntries(child, [...path, this.normalizePathSegment(key)], leaves)\n }\n return\n }\n\n leaves.push({ path, value })\n }\n\n private normalizePathSegment(segment: string): string {\n return segment.trim().replace(/\\s+/g, '-')\n }\n\n private buildCompositeName(base: string, path: string[]): string {\n if (path.length === 0) {\n return base\n }\n return `${base}-${path.join('-')}`\n }\n\n private formatLeafValue(value: unknown): string {\n if (isColorObject(value)) {\n return colorObjectToHex(value)\n }\n\n if (isDimensionObject(value)) {\n return dimensionObjectToString(value)\n }\n\n if (this.isDurationObject(value)) {\n return this.formatDurationValue(value)\n }\n\n if (typeof value === 'string') {\n return value\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value)\n }\n\n if (Array.isArray(value)) {\n return JSON.stringify(value)\n }\n\n if (typeof value === 'object' && value != null) {\n return JSON.stringify(value)\n }\n\n return String(value)\n }\n\n private resolveCompositeLeafValue(\n leaf: CompositeLeaf,\n originalValue: unknown,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n preserveReferences: boolean,\n ): unknown {\n if (!preserveReferences) {\n return leaf.value\n }\n\n const originalLeafValue = this.getOriginalLeafValue(originalValue, leaf.path)\n const refName = getPureAliasReferenceName(originalLeafValue)\n if (refName === undefined) {\n return leaf.value\n }\n\n return this.buildCssVarReference(refName, referenceTokens, tokens)\n }\n\n private buildCssVarReference(\n refName: string,\n referenceTokens: ResolvedTokens,\n tokens: ResolvedTokens,\n ): string {\n const referencedToken = referenceTokens[refName] ?? tokens[refName]\n if (!referencedToken) {\n throw new ConfigurationError(\n `CSS reference \"{${refName}}\" could not be resolved. The referenced token is not present in the current output's token set. ` +\n `This usually means a filter (e.g. isAlias()) excluded the referenced token while preserveReferences is true. ` +\n `Either remove the filter, include the referenced token, or set preserveReferences to false.`,\n )\n }\n return `var(--${referencedToken.name})`\n }\n\n private getOriginalLeafValue(value: unknown, path: string[]): unknown {\n let current: unknown = value\n\n for (const segment of path) {\n if (Array.isArray(current)) {\n const index = Number(segment)\n if (!Number.isInteger(index)) {\n return undefined\n }\n current = current[index]\n continue\n }\n\n if (typeof current === 'object' && current !== null) {\n const entries = Object.entries(current)\n const matched = entries.find(([key]) => this.normalizePathSegment(key) === segment)\n if (!matched) {\n return undefined\n }\n current = matched[1]\n continue\n }\n\n return undefined\n }\n\n return current\n }\n\n private isPrimitiveValue(value: unknown): boolean {\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'\n }\n\n private isDurationObject(value: unknown): value is DurationValue {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'value' in value &&\n 'unit' in value &&\n (value as { unit?: unknown }).unit !== undefined\n )\n }\n\n private formatDurationValue(value: DurationValue): string {\n if (typeof value === 'string') {\n return value\n }\n return `${value.value}${value.unit}`\n }\n\n /**\n * Format token value for CSS\n * Handles DTCG 2025.10 object formats for colors and dimensions\n */\n private formatValue(token: ResolvedToken): string {\n const value = token.$value\n\n const typed = this.formatTypedValue(token.$type, value)\n if (typed !== undefined) {\n return typed\n }\n\n return this.formatPrimitiveOrStructured(value, token.$type)\n }\n\n private formatTypedValue(type: string | undefined, value: unknown): string | undefined {\n if (type === 'color' && isColorObject(value)) {\n return colorObjectToHex(value)\n }\n\n if (type === 'dimension') {\n // Legacy fallback: string values from incomplete alias resolution\n return typeof value === 'string' ? value : dimensionObjectToString(value as DimensionValue)\n }\n\n if (type === 'duration') {\n if (this.isDurationObject(value)) {\n return this.formatDurationValue(value)\n }\n if (typeof value === 'string') {\n return value\n }\n }\n\n return undefined\n }\n\n private formatPrimitiveOrStructured(value: unknown, tokenType?: string): string {\n if (typeof value === 'string') {\n return value\n }\n if (typeof value === 'number') {\n return String(value)\n }\n if (Array.isArray(value)) {\n return this.formatArrayValue(value, tokenType)\n }\n if (typeof value === 'object' && value != null) {\n return this.formatCompositeValue(value as Record<string, unknown>, tokenType)\n }\n return String(value)\n }\n\n private formatArrayValue(value: unknown[], tokenType?: string): string {\n if (tokenType === 'shadow' && value.length > 0 && typeof value[0] === 'object') {\n return value.map((shadowObj) => this.formatShadow(shadowObj as unknown as Shadow)).join(', ')\n }\n // For arrays like font families\n return value.map((v) => (typeof v === 'string' && v.includes(' ') ? `\"${v}\"` : v)).join(', ')\n }\n\n /**\n * Format composite token values\n */\n private formatCompositeValue(value: Record<string, unknown>, tokenType?: string): string {\n if (tokenType === 'shadow') {\n return this.formatShadow(value as unknown as Shadow)\n }\n\n if (tokenType === 'border') {\n return this.formatBorder(value)\n }\n\n if (tokenType === 'transition') {\n return this.formatTransition(value)\n }\n\n // Default: JSON stringify (for debugging or unsupported types)\n return JSON.stringify(value)\n }\n\n /**\n * Format a single shadow object to CSS box-shadow syntax\n */\n private formatShadow(shadow: Shadow): string {\n const parts: string[] = []\n if (shadow.inset === true) {\n parts.push('inset')\n }\n\n // Enforce DTCG 2025.10 compliance: all dimension values must be objects\n\n parts.push(dimensionObjectToString(shadow.offsetX))\n parts.push(dimensionObjectToString(shadow.offsetY))\n parts.push(dimensionObjectToString(shadow.blur))\n\n if (shadow.spread != null) {\n parts.push(dimensionObjectToString(shadow.spread))\n }\n\n // Handle color objects (DTCG format)\n if (isColorObject(shadow.color)) {\n parts.push(colorObjectToHex(shadow.color))\n } else {\n parts.push(String(shadow.color))\n }\n\n return parts.join(' ')\n }\n\n /**\n * Format a border object to CSS border shorthand syntax\n */\n private formatBorder(value: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (isDimensionObject(value.width)) {\n parts.push(dimensionObjectToString(value.width as DimensionValue))\n } else if (value.width != null) {\n parts.push(String(value.width))\n }\n\n if (typeof value.style === 'string') {\n parts.push(value.style)\n }\n\n if (isColorObject(value.color)) {\n parts.push(colorObjectToHex(value.color))\n } else if (value.color != null) {\n parts.push(String(value.color))\n }\n\n return parts.join(' ')\n }\n\n /**\n * Format a transition object to CSS transition shorthand syntax\n */\n private formatTransition(value: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (this.isDurationObject(value.duration)) {\n parts.push(this.formatDurationValue(value.duration as DurationValue))\n } else if (value.duration != null) {\n parts.push(String(value.duration))\n }\n\n if (Array.isArray(value.timingFunction) && value.timingFunction.length === 4) {\n parts.push(`cubic-bezier(${value.timingFunction.join(', ')})`)\n }\n\n if (this.isDurationObject(value.delay)) {\n parts.push(this.formatDurationValue(value.delay as DurationValue))\n } else if (value.delay != null) {\n parts.push(String(value.delay))\n }\n\n return parts.join(' ')\n }\n\n private async formatBundle(context: RenderContext, options: CssRendererOptions): Promise<string> {\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens,\n modifierInputs,\n isBase: this.isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsCss(bundleData, context.resolver, options, async (tokens, resolved) => {\n return await this.formatTokens(tokens, {\n ...resolved,\n preserveReferences: options.preserveReferences ?? false,\n })\n })\n }\n\n private async formatStandalone(\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<RenderOutput> {\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for standalone CSS output`,\n )\n }\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const { fileName, content } = await this.buildStandaloneFile(\n tokens,\n modifierInputs,\n context,\n options,\n )\n files[fileName] = content\n }\n\n return { kind: 'outputTree', files }\n }\n\n private async buildStandaloneFile(\n tokens: ResolvedTokens,\n modifierInputs: Record<string, string>,\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<{ fileName: string; content: string }> {\n const isBase = this.isBasePermutation(modifierInputs, context.meta.defaults)\n const { modifierName, modifierContext } = this.resolveModifierContext(\n modifierInputs,\n context,\n isBase,\n )\n\n const selector = resolveSelector(\n options.selector,\n modifierName,\n modifierContext,\n isBase,\n modifierInputs,\n )\n const mediaQuery = resolveMediaQuery(\n options.mediaQuery,\n modifierName,\n modifierContext,\n isBase,\n modifierInputs,\n )\n\n const content = await this.formatTokens(tokens, {\n selector,\n mediaQuery,\n minify: options.minify ?? false,\n preserveReferences: options.preserveReferences ?? false,\n referenceTokens: tokens,\n })\n\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'css',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n\n return { fileName, content }\n }\n\n private async formatModifier(\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<RenderOutput> {\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for modifier CSS output`,\n )\n }\n if (!context.resolver.modifiers) {\n throw new ConfigurationError('Modifier preset requires modifiers to be defined in resolver')\n }\n\n const files: Record<string, string> = {}\n\n const baseResult = await this.buildModifierBaseFile(context, options)\n if (baseResult) {\n files[baseResult.fileName] = baseResult.content\n }\n\n for (const [modifierName, modifierDef] of Object.entries(context.resolver.modifiers)) {\n for (const contextValue of Object.keys(modifierDef.contexts)) {\n const result = await this.buildModifierContextFile(\n modifierName,\n contextValue,\n context,\n options,\n )\n if (result) {\n files[result.fileName] = result.content\n }\n }\n }\n\n return { kind: 'outputTree', files }\n }\n\n private async buildModifierBaseFile(\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<{ fileName: string; content: string } | undefined> {\n const basePermutation = context.permutations.find(({ modifierInputs }) =>\n this.isBasePermutation(modifierInputs, context.meta.defaults),\n )\n if (!basePermutation) {\n return undefined\n }\n\n const setTokens = filterTokensFromSets(basePermutation.tokens)\n if (Object.keys(setTokens).length === 0) {\n return undefined\n }\n\n const setBlocks = buildSetLayerBlocks(setTokens, context.resolver)\n if (setBlocks.length === 0) {\n return undefined\n }\n\n const modifiers = context.resolver.modifiers!\n const firstModifierName = Object.keys(modifiers)[0] ?? ''\n const firstModifierContext = context.meta.defaults[firstModifierName] ?? ''\n const baseModifierInputs = { ...context.meta.defaults }\n\n const selector = resolveSelector(\n options.selector,\n firstModifierName,\n firstModifierContext,\n true,\n baseModifierInputs,\n )\n const mediaQuery = resolveMediaQuery(\n options.mediaQuery,\n firstModifierName,\n firstModifierContext,\n true,\n baseModifierInputs,\n )\n\n const referenceTokens = basePermutation.tokens\n const cssBlocks: string[] = []\n for (const block of setBlocks) {\n const cleanTokens = stripInternalMetadata(block.tokens)\n const css = await this.formatTokens(cleanTokens, {\n selector,\n mediaQuery,\n minify: options.minify ?? false,\n preserveReferences: options.preserveReferences ?? false,\n referenceTokens,\n })\n const header = block.description\n ? `/* ${block.key} */\\n/* ${block.description} */`\n : `/* ${block.key} */`\n cssBlocks.push(`${header}\\n${css}`)\n }\n\n const content = cssBlocks.join('\\n')\n\n const fileName = context.output.file\n ? resolveBaseFileName(context.output.file, context.meta.defaults)\n : `${context.output.name}-base.css`\n\n return { fileName, content }\n }\n\n private collectTokensForModifierContext(\n modifierName: string,\n contextValue: string,\n permutations: RenderContext['permutations'],\n ): { tokensFromSource: ResolvedTokens; referenceTokens: ResolvedTokens } {\n const expectedSource = `${modifierName}-${contextValue}`\n let tokensFromSource: ResolvedTokens = {}\n let referenceTokens: ResolvedTokens = {}\n\n for (const { tokens, modifierInputs } of permutations) {\n if (modifierInputs[modifierName] !== contextValue) {\n continue\n }\n tokensFromSource = { ...tokensFromSource, ...filterTokensBySource(tokens, expectedSource) }\n referenceTokens = { ...referenceTokens, ...tokens }\n }\n\n return { tokensFromSource, referenceTokens }\n }\n\n private async buildModifierContextFile(\n modifierName: string,\n contextValue: string,\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<{ fileName: string; content: string } | undefined> {\n const { tokensFromSource, referenceTokens } = this.collectTokensForModifierContext(\n modifierName,\n contextValue,\n context.permutations,\n )\n\n if (Object.keys(tokensFromSource).length === 0) {\n return undefined\n }\n\n const defaults = context.meta.defaults\n const isBase = contextValue === defaults[modifierName]\n const modifierInputs = { ...defaults, [modifierName]: contextValue }\n\n const selector = resolveSelector(\n options.selector,\n modifierName,\n contextValue,\n isBase,\n modifierInputs,\n )\n const mediaQuery = resolveMediaQuery(\n options.mediaQuery,\n modifierName,\n contextValue,\n isBase,\n modifierInputs,\n )\n\n const content = await this.formatTokens(tokensFromSource, {\n selector,\n mediaQuery,\n minify: options.minify ?? false,\n preserveReferences: options.preserveReferences ?? false,\n referenceTokens,\n })\n\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'css',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n\n return { fileName, content }\n }\n\n private resolveModifierContext(\n modifierInputs: Record<string, string>,\n context: RenderContext,\n isBase: boolean,\n ): { modifierName: string; modifierContext: string } {\n if (!context.resolver.modifiers) {\n return { modifierName: '', modifierContext: '' }\n }\n\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const normalizedDefaults = normalizeModifierInputs(context.meta.defaults)\n\n if (isBase) {\n const firstModifier = Object.keys(context.resolver.modifiers)[0] ?? ''\n return {\n modifierName: firstModifier,\n modifierContext: normalizedInputs[firstModifier] ?? '',\n }\n }\n\n for (const [name, value] of Object.entries(normalizedInputs)) {\n if (value !== normalizedDefaults[name]) {\n return { modifierName: name, modifierContext: value }\n }\n }\n\n return { modifierName: '', modifierContext: '' }\n }\n\n private isBasePermutation(\n modifierInputs: Record<string, string>,\n defaults: Record<string, string>,\n ): boolean {\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const normalizedDefaults = normalizeModifierInputs(defaults)\n return Object.entries(normalizedDefaults).every(\n ([key, value]) => normalizedInputs[key] === value,\n )\n }\n}\n\n/**\n * CSS renderer factory function.\n *\n * Options are provided via OutputConfig.options.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'css',\n * renderer: cssRenderer(),\n * options: {\n * preset: 'bundle',\n * selector: ':root',\n * mediaQuery: (modifierName, context) => {\n * if (modifierName === 'breakpoint' && context === 'mobile') {\n * return '(max-width: 768px)'\n * }\n * return ''\n * }\n * },\n * file: 'tokens.css'\n * }]\n * ```\n */\nexport function cssRenderer(): Renderer<CssRendererOptions> {\n const rendererInstance = new CssRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as CssRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @fileoverview CSS bundler for multi-theme output\n */\n\nimport type { CssRendererOptions } from '@renderers/types'\nimport type { ResolverDocument } from '@resolution/resolution.types'\nimport { BasePermutationError, ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedToken, ResolvedTokens } from '@tokens/types'\n\nimport type { BundleDataItem } from './types'\nimport {\n stripInternalMetadata,\n resolveSelector,\n resolveMediaQuery,\n countModifierDifferences,\n getExpectedSource,\n filterTokensBySource,\n parseModifierSource,\n normalizeModifierInputs,\n} from './utils'\n\ntype ResolvedCssOptions = Omit<CssRendererOptions, 'selector' | 'mediaQuery'> & {\n selector?: string\n mediaQuery?: string\n referenceTokens?: ResolvedTokens\n}\n\ntype TokenWithSource = ResolvedToken & {\n _sourceSet?: string\n _sourceModifier?: string\n}\n\nconst getSourceSet = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n const maybe = token as TokenWithSource\n return typeof maybe._sourceSet === 'string' ? maybe._sourceSet : undefined\n}\n\nconst getSourceModifier = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n const maybe = token as TokenWithSource\n return typeof maybe._sourceModifier === 'string' ? maybe._sourceModifier : undefined\n}\n\n/**\n * Bundle tokens as CSS with descriptive comments\n *\n * CSS-specific strategy: Uses cascade model with minimal overrides\n * - Base permutation gets all tokens in :root\n * - Single-dimension modifiers get only their overrides in [data-*] selectors\n * - Multi-dimension permutations are skipped (would create duplicate selectors)\n */\nexport async function bundleAsCss(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n options?: CssRendererOptions,\n formatTokens?: (tokens: ResolvedTokens, options: ResolvedCssOptions) => Promise<string>,\n): Promise<string> {\n const baseItem = bundleData.find((item) => item.isBase)\n if (!baseItem) {\n throw new BasePermutationError('Base permutation not found in bundle data')\n }\n if (!formatTokens) {\n throw new ConfigurationError('CSS formatter was not provided')\n }\n\n const orderedBundleData = orderBundleData(bundleData, resolver, baseItem)\n const cssBlocks: string[] = []\n\n for (const item of orderedBundleData) {\n if (item.isBase) {\n const blocks = await formatBasePermutation(item, resolver, options, formatTokens)\n cssBlocks.push(...blocks)\n continue\n }\n\n const block = await formatModifierPermutation(item, baseItem, options, formatTokens)\n if (block) {\n cssBlocks.push(block)\n }\n }\n\n return cssBlocks.join('\\n\\n')\n}\n\nasync function formatBasePermutation(\n { tokens, modifierInputs }: BundleDataItem,\n resolver: ResolverDocument,\n options: CssRendererOptions | undefined,\n formatTokens: (tokens: ResolvedTokens, options: ResolvedCssOptions) => Promise<string>,\n): Promise<string[]> {\n const firstModifierName = resolver.modifiers ? Object.keys(resolver.modifiers)[0] : ''\n const modifier = firstModifierName ?? ''\n const context = modifierInputs[modifier] ?? ''\n\n const selector = resolveSelector(options?.selector, modifier, context, true, modifierInputs)\n const mediaQuery = resolveMediaQuery(options?.mediaQuery, modifier, context, true, modifierInputs)\n const referenceTokens = stripInternalMetadata(tokens)\n const defaultBlocks = buildDefaultLayerBlocks(tokens, modifierInputs, resolver)\n\n const cssBlocks: string[] = []\n for (const block of defaultBlocks) {\n const cleanTokens = stripInternalMetadata(block.tokens)\n const css = await formatTokens(cleanTokens, {\n selector,\n mediaQuery,\n minify: options?.minify,\n referenceTokens,\n })\n const header = block.description\n ? `/* ${block.key} */\\n/* ${block.description} */`\n : `/* ${block.key} */`\n cssBlocks.push(`${header}\\n${css}`)\n }\n\n return cssBlocks\n}\n\nasync function formatModifierPermutation(\n { tokens, modifierInputs }: BundleDataItem,\n baseItem: BundleDataItem,\n options: CssRendererOptions | undefined,\n formatTokens: (tokens: ResolvedTokens, options: ResolvedCssOptions) => Promise<string>,\n): Promise<string | undefined> {\n // Skip permutations where multiple modifiers differ from base\n const differenceCount = countModifierDifferences(modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n return undefined\n }\n\n // Non-base: filter to only tokens from this modifier's source\n const expectedSource = getExpectedSource(modifierInputs, baseItem.modifierInputs)\n let tokensToInclude = filterTokensBySource(tokens, expectedSource)\n const hasSourceMetadata = Object.values(tokens).some(\n (token) => token != null && getSourceModifier(token) !== undefined,\n )\n\n // If tokens have no source metadata, fall back to full token set\n if (Object.keys(tokensToInclude).length === 0 && !hasSourceMetadata) {\n tokensToInclude = tokens\n }\n\n if (Object.keys(tokensToInclude).length === 0) {\n return undefined\n }\n\n const [modifier, context] = parseModifierSource(expectedSource)\n const cleanTokens = stripInternalMetadata(tokensToInclude)\n const referenceTokens = stripInternalMetadata(tokens)\n const selector = resolveSelector(options?.selector, modifier, context, false, modifierInputs)\n const mediaQuery = resolveMediaQuery(\n options?.mediaQuery,\n modifier,\n context,\n false,\n modifierInputs,\n )\n\n const css = await formatTokens(cleanTokens, {\n selector,\n mediaQuery,\n minify: options?.minify,\n referenceTokens,\n })\n return `/* Modifier: ${modifier}=${context} */\\n${css}`\n}\n\nexport type SetLayerBlock = {\n key: string\n description?: string\n tokens: BundleDataItem['tokens']\n}\n\n/** Collect tokens belonging to a specific set, excluding already-included tokens */\nfunction collectSetTokens(\n tokens: BundleDataItem['tokens'],\n setName: string,\n included: Set<string>,\n): BundleDataItem['tokens'] {\n const result: BundleDataItem['tokens'] = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (!included.has(name) && getSourceSet(token) === setName) {\n result[name] = token\n }\n }\n return result\n}\n\n/** Collect tokens belonging to a specific modifier source, excluding already-included tokens */\nfunction collectModifierTokens(\n tokens: BundleDataItem['tokens'],\n expectedSource: string,\n included: Set<string>,\n): BundleDataItem['tokens'] {\n const result: BundleDataItem['tokens'] = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (!included.has(name) && (getSourceModifier(token) ?? '').toLowerCase() === expectedSource) {\n result[name] = token\n }\n }\n return result\n}\n\n/** Collect all tokens not yet included in any block */\nfunction collectRemainder(\n tokens: BundleDataItem['tokens'],\n included: Set<string>,\n): BundleDataItem['tokens'] {\n const result: BundleDataItem['tokens'] = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (!included.has(name)) {\n result[name] = token\n }\n }\n return result\n}\n\n/**\n * Group tokens by their originating set, following the resolver's resolution order.\n *\n * Produces one block per set (e.g. \"Set: colors\", \"Set: typography\") plus\n * an \"Unattributed\" block for any tokens that don't belong to a known set.\n * This is used by both the bundle preset (base permutation) and the modifier\n * preset (base file) to produce structured CSS output with set comments.\n */\nexport function buildSetLayerBlocks(\n tokens: BundleDataItem['tokens'],\n resolver: ResolverDocument,\n): SetLayerBlock[] {\n const blocks: SetLayerBlock[] = []\n const included = new Set<string>()\n\n const addBlock = (key: string, blockTokens: BundleDataItem['tokens'], description?: string) => {\n if (Object.keys(blockTokens).length === 0) {\n return\n }\n for (const k of Object.keys(blockTokens)) {\n included.add(k)\n }\n blocks.push({ key, description, tokens: blockTokens })\n }\n\n for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string' || !ref.startsWith('#/sets/')) {\n continue\n }\n\n const setName = ref.slice('#/sets/'.length)\n addBlock(\n `Set: ${setName}`,\n collectSetTokens(tokens, setName, included),\n resolver.sets?.[setName]?.description,\n )\n }\n\n addBlock('Unattributed', collectRemainder(tokens, included))\n return blocks\n}\n\nfunction buildDefaultLayerBlocks(\n tokens: BundleDataItem['tokens'],\n baseModifierInputs: Record<string, string>,\n resolver: ResolverDocument,\n): SetLayerBlock[] {\n const blocks: SetLayerBlock[] = []\n const included = new Set<string>()\n const baseInputs = normalizeModifierInputs(baseModifierInputs)\n\n const addBlock = (key: string, blockTokens: BundleDataItem['tokens'], description?: string) => {\n if (Object.keys(blockTokens).length === 0) {\n return\n }\n for (const k of Object.keys(blockTokens)) {\n included.add(k)\n }\n blocks.push({ key, description, tokens: blockTokens })\n }\n\n for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string') {\n continue\n }\n\n if (ref.startsWith('#/sets/')) {\n const setName = ref.slice('#/sets/'.length)\n addBlock(\n `Set: ${setName}`,\n collectSetTokens(tokens, setName, included),\n resolver.sets?.[setName]?.description,\n )\n continue\n }\n\n if (ref.startsWith('#/modifiers/')) {\n const modifierName = ref.slice('#/modifiers/'.length)\n const modifier = resolver.modifiers?.[modifierName]\n const selectedContext = baseInputs[modifierName.toLowerCase()]\n if (!modifier || !selectedContext) {\n continue\n }\n\n const expectedSource = `${modifierName}-${selectedContext}`.toLowerCase()\n addBlock(\n `Modifier: ${modifierName}=${selectedContext} (default)`,\n collectModifierTokens(tokens, expectedSource, included),\n modifier.description,\n )\n }\n }\n\n addBlock('Unattributed', collectRemainder(tokens, included))\n return blocks\n}\n\n/** Find a permutation that differs from the base in exactly one modifier dimension */\nfunction findSingleDiffPermutation(\n bundleData: BundleDataItem[],\n modifierName: string,\n context: string,\n baseInputs: Record<string, string>,\n): BundleDataItem | undefined {\n const normalizedModifier = modifierName.toLowerCase()\n const normalizedContext = context.toLowerCase()\n\n return bundleData.find((item) => {\n if (item.isBase) {\n return false\n }\n const inputs = normalizeModifierInputs(item.modifierInputs)\n if (inputs[normalizedModifier] !== normalizedContext) {\n return false\n }\n return Object.entries(baseInputs).every(([k, v]) => k === normalizedModifier || inputs[k] === v)\n })\n}\n\nfunction orderBundleData(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n baseItem: BundleDataItem,\n): BundleDataItem[] {\n const modifiers = resolver.modifiers\n if (!modifiers) {\n return bundleData\n }\n\n const baseInputs = normalizeModifierInputs(baseItem.modifierInputs)\n const orderedModifierNames = getOrderedModifierNames(resolver)\n if (orderedModifierNames.length === 0) {\n return bundleData\n }\n\n const firstModifierDef = modifiers[orderedModifierNames[0] ?? '']\n if (!firstModifierDef) {\n return bundleData\n }\n\n const includedKeys = new Set<string>()\n const ordered: BundleDataItem[] = []\n\n const pushUnique = (item: BundleDataItem | undefined) => {\n if (!item) {\n return\n }\n const key = stableInputsKey(item.modifierInputs)\n if (includedKeys.has(key)) {\n return\n }\n includedKeys.add(key)\n ordered.push(item)\n }\n\n pushUnique(baseItem)\n\n for (const modifierName of orderedModifierNames) {\n const modifierDef = modifiers[modifierName]\n if (!modifierDef) {\n continue\n }\n\n const defaultValue = baseInputs[modifierName.toLowerCase()] ?? ''\n for (const ctx of Object.keys(modifierDef.contexts)) {\n if (defaultValue === ctx.toLowerCase()) {\n continue\n }\n pushUnique(findSingleDiffPermutation(bundleData, modifierName, ctx, baseInputs))\n }\n }\n\n return ordered.length > 0 ? ordered : bundleData\n}\n\nfunction getOrderedModifierNames(resolver: ResolverDocument): string[] {\n const modifiers = resolver.modifiers ?? {}\n const seen = new Set<string>()\n const ordered: string[] = []\n\n for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string') {\n continue\n }\n if (!ref.startsWith('#/modifiers/')) {\n continue\n }\n const name = ref.slice('#/modifiers/'.length)\n if (seen.has(name)) {\n continue\n }\n if (!(name in modifiers)) {\n continue\n }\n ordered.push(name)\n seen.add(name)\n }\n\n for (const name of Object.keys(modifiers)) {\n if (seen.has(name)) {\n continue\n }\n ordered.push(name)\n seen.add(name)\n }\n\n return ordered\n}\n\nfunction stableInputsKey(modifierInputs: Record<string, string>): string {\n const normalized = normalizeModifierInputs(modifierInputs)\n return Object.keys(normalized)\n .sort()\n .map((k) => `${k}=${normalized[k]}`)\n .join('|')\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview iOS/SwiftUI renderer for design tokens\n * Generates Swift code targeting SwiftUI (iOS 17+)\n */\n\nimport {\n isColorObject,\n dtcgObjectToCulori,\n} from '@processing/processors/transforms/built-in/color-converter'\nimport { isDimensionObject } from '@processing/processors/transforms/built-in/dimension-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type {\n ColorValueObject,\n DimensionValue,\n DurationValue,\n GradientStop,\n ResolvedToken,\n ResolvedTokens,\n} from '@tokens/types'\nimport { converter } from 'culori'\n\nimport { buildInMemoryOutputKey, resolveFileName, stripInternalMetadata } from './bundlers/utils'\nimport { outputTree } from './output-tree'\nimport type { RenderContext, RenderOutput, Renderer } from './types'\n\n/**\n * Options for iOS/SwiftUI renderer\n */\nexport type IosRendererOptions = {\n preset?: 'standalone'\n accessLevel?: 'public' | 'internal'\n /**\n * Output structure:\n * - `'enum'` — nested enums inside a single root enum\n * - `'grouped'` — namespace enum with separate extensions per token group\n */\n structure?: 'enum' | 'grouped'\n enumName?: string\n /** Namespace enum name used in grouped mode (default: 'DesignTokens') */\n extensionNamespace?: string\n colorSpace?: 'sRGB' | 'displayP3'\n /**\n * Target Swift language version.\n * - `'5.9'` (default) — standard static let declarations\n * - `'6.0'` — adds `nonisolated(unsafe)` to static properties for\n * Swift 6 strict concurrency compliance\n */\n swiftVersion?: '5.9' | '6.0'\n /** Number of spaces per indentation level (default 4) */\n indent?: number\n /** Add @frozen annotation to enums and structs for ABI stability (default false) */\n frozen?: boolean\n}\n\ntype TokenGroup = {\n name: string\n tokens: ResolvedToken[]\n}\n\nconst toSRGB = converter('rgb')\nconst toP3 = converter('p3')\n\nconst SWIFT_TYPE_GROUP_MAP: Record<string, string> = {\n color: 'Colors',\n dimension: 'Spacing',\n fontFamily: 'Fonts',\n fontWeight: 'FontWeights',\n duration: 'Durations',\n shadow: 'Shadows',\n typography: 'Typography',\n number: 'Numbers',\n cubicBezier: 'Animations',\n border: 'Borders',\n gradient: 'Gradients',\n}\n\n/**\n * Swift reserved keywords that require backtick-escaping when used as identifiers.\n */\nconst SWIFT_KEYWORDS = new Set([\n 'associatedtype',\n 'class',\n 'deinit',\n 'enum',\n 'extension',\n 'fileprivate',\n 'func',\n 'import',\n 'init',\n 'inout',\n 'internal',\n 'let',\n 'open',\n 'operator',\n 'private',\n 'protocol',\n 'public',\n 'rethrows',\n 'static',\n 'struct',\n 'subscript',\n 'typealias',\n 'var',\n 'break',\n 'case',\n 'continue',\n 'default',\n 'defer',\n 'do',\n 'else',\n 'fallthrough',\n 'for',\n 'guard',\n 'if',\n 'in',\n 'repeat',\n 'return',\n 'switch',\n 'where',\n 'while',\n 'as',\n 'catch',\n 'false',\n 'is',\n 'nil',\n 'super',\n 'self',\n 'Self',\n 'throw',\n 'throws',\n 'true',\n 'try',\n 'Type',\n 'Protocol',\n])\n\nexport class IosRenderer implements Renderer<IosRendererOptions> {\n async format(context: RenderContext, options?: IosRendererOptions): Promise<RenderOutput> {\n const opts: Required<IosRendererOptions> = {\n preset: options?.preset ?? 'standalone',\n accessLevel: options?.accessLevel ?? 'public',\n structure: options?.structure ?? 'enum',\n enumName: options?.enumName ?? 'DesignTokens',\n extensionNamespace: options?.extensionNamespace ?? 'DesignTokens',\n colorSpace: options?.colorSpace ?? 'sRGB',\n swiftVersion: options?.swiftVersion ?? '5.9',\n indent: options?.indent ?? 4,\n frozen: options?.frozen ?? false,\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n private formatTokens(tokens: ResolvedTokens, options: Required<IosRendererOptions>): string {\n if (options.structure === 'grouped') {\n return this.formatAsGrouped(tokens, options)\n }\n\n return this.formatAsEnum(tokens, options)\n }\n\n private formatAsEnum(tokens: ResolvedTokens, options: Required<IosRendererOptions>): string {\n const access = options.accessLevel\n const groups = this.groupTokensByType(tokens)\n const imports = this.collectImports(tokens)\n const i1 = this.indentStr(options.indent, 1)\n const i2 = this.indentStr(options.indent, 2)\n const staticPrefix = this.staticLetPrefix(options)\n const frozen = this.frozenPrefix(options)\n const lines: string[] = []\n\n lines.push(this.buildFileHeader())\n lines.push('')\n for (const imp of imports) {\n lines.push(`import ${imp}`)\n }\n\n lines.push(...this.buildStructDefinitions(tokens, access, options))\n\n lines.push('')\n lines.push(`${frozen}${access} enum ${options.enumName} {`)\n\n for (const group of groups) {\n lines.push(`${i1}${frozen}${access} enum ${group.name} {`)\n for (const token of group.tokens) {\n const swiftName = this.buildQualifiedSwiftName(token)\n const swiftValue = this.formatSwiftValue(token, options)\n const typeAnnotation = this.getTypeAnnotation(token)\n const annotation = typeAnnotation ? `: ${typeAnnotation}` : ''\n const docComment = this.buildDocComment(token, i2)\n if (docComment) {\n lines.push(docComment)\n }\n lines.push(`${i2}${access} ${staticPrefix}${swiftName}${annotation} = ${swiftValue}`)\n }\n lines.push(`${i1}}`)\n lines.push('')\n }\n\n lines.push('}')\n lines.push(...this.buildViewExtensions(tokens, access, options))\n lines.push('')\n\n return lines.join('\\n')\n }\n\n private formatAsGrouped(tokens: ResolvedTokens, options: Required<IosRendererOptions>): string {\n const access = options.accessLevel\n const namespace = options.extensionNamespace\n const groups = this.groupTokensByType(tokens)\n const imports = this.collectImports(tokens)\n const i1 = this.indentStr(options.indent, 1)\n const i2 = this.indentStr(options.indent, 2)\n const staticPrefix = this.staticLetPrefix(options)\n const frozen = this.frozenPrefix(options)\n const lines: string[] = []\n\n lines.push(this.buildFileHeader())\n lines.push('')\n for (const imp of imports) {\n lines.push(`import ${imp}`)\n }\n\n lines.push(...this.buildStructDefinitions(tokens, access, options))\n\n lines.push('')\n lines.push(`${frozen}${access} enum ${namespace} {}`)\n lines.push('')\n\n for (const group of groups) {\n lines.push(`${access} extension ${namespace} {`)\n lines.push(`${i1}${frozen}enum ${group.name} {`)\n for (const token of group.tokens) {\n const swiftName = this.buildQualifiedSwiftName(token)\n const swiftValue = this.formatSwiftValue(token, options)\n const typeAnnotation = this.getTypeAnnotation(token)\n const annotation = typeAnnotation ? `: ${typeAnnotation}` : ''\n const docComment = this.buildDocComment(token, i2)\n if (docComment) {\n lines.push(docComment)\n }\n lines.push(`${i2}${access} ${staticPrefix}${swiftName}${annotation} = ${swiftValue}`)\n }\n lines.push(`${i1}}`)\n lines.push('}')\n lines.push('')\n }\n\n lines.push(...this.buildViewExtensions(tokens, access, options))\n\n return lines.join('\\n')\n }\n\n private buildFileHeader(): string {\n return [\n '// Generated by Dispersa - do not edit manually',\n '// https://github.com/timges/dispersa',\n ].join('\\n')\n }\n\n private collectImports(tokens: ResolvedTokens): string[] {\n const imports = new Set<string>()\n imports.add('SwiftUI')\n\n for (const [, token] of Object.entries(tokens)) {\n if (token.$type === 'duration') {\n imports.add('Foundation')\n }\n }\n\n return Array.from(imports).sort()\n }\n\n /**\n * Builds a `///` doc comment from a token's `$description`, if present.\n */\n private buildDocComment(token: ResolvedToken, indent: string): string | undefined {\n if (!token.$description) {\n return undefined\n }\n\n return `${indent}/// ${token.$description}`\n }\n\n private groupTokensByType(tokens: ResolvedTokens): TokenGroup[] {\n const groupMap = new Map<string, ResolvedToken[]>()\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const groupName = SWIFT_TYPE_GROUP_MAP[token.$type ?? ''] ?? 'Other'\n const existing = groupMap.get(groupName) ?? []\n existing.push(token)\n groupMap.set(groupName, existing)\n }\n\n return Array.from(groupMap.entries()).map(([name, groupTokens]) => ({\n name,\n tokens: groupTokens,\n }))\n }\n\n /**\n * Builds a qualified Swift name from a token's path, preserving parent\n * hierarchy segments to avoid duplicate identifiers.\n *\n * For example, `color.blue.400` in the `Colors` group becomes `blue400`\n * instead of just `_400`.\n */\n private buildQualifiedSwiftName(token: ResolvedToken): string {\n const path = token.path\n\n // The first segment is typically the token type (color, spacing, etc.)\n // which is already represented by the group enum. Strip it.\n const withoutTypePrefix = path.length > 1 ? path.slice(1) : path\n\n const joined = withoutTypePrefix.join('_')\n return this.toSwiftIdentifier(joined)\n }\n\n private formatSwiftValue(token: ResolvedToken, options: Required<IosRendererOptions>): string {\n const value = token.$value\n\n if (token.$type === 'color') {\n return this.formatColorValue(value, options)\n }\n\n if (token.$type === 'dimension') {\n return this.formatDimensionValue(value)\n }\n\n if (token.$type === 'fontFamily') {\n return this.formatFontFamilyValue(value)\n }\n\n if (token.$type === 'fontWeight') {\n return this.formatFontWeightValue(value)\n }\n\n if (token.$type === 'duration') {\n return this.formatDurationValue(value)\n }\n\n if (token.$type === 'shadow') {\n return this.formatShadowValue(value, options)\n }\n\n if (token.$type === 'typography') {\n return this.formatTypographyValue(value)\n }\n\n if (token.$type === 'border') {\n return this.formatBorderValue(value, options)\n }\n\n if (token.$type === 'gradient') {\n return this.formatGradientValue(value, options)\n }\n\n if (token.$type === 'number') {\n return String(value)\n }\n\n if (token.$type === 'cubicBezier' && Array.isArray(value) && value.length === 4) {\n return `UnitCurve.bezier(startControlPoint: UnitPoint(x: ${value[0]}, y: ${value[1]}), endControlPoint: UnitPoint(x: ${value[2]}, y: ${value[3]}))`\n }\n\n if (typeof value === 'string') {\n return `\"${this.escapeSwiftString(value)}\"`\n }\n\n if (typeof value === 'number') {\n return String(value)\n }\n\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\n }\n\n return `\"${this.escapeSwiftString(String(value))}\"`\n }\n\n private formatColorValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (!isColorObject(value)) {\n return typeof value === 'string' ? `Color(\"${this.escapeSwiftString(value)}\")` : 'Color.clear'\n }\n\n const colorObj = value as ColorValueObject\n const alpha = colorObj.alpha ?? 1\n\n if (options.colorSpace === 'displayP3') {\n const p3 = toP3(dtcgObjectToCulori(colorObj))\n const r = this.roundComponent(p3?.r ?? 0)\n const g = this.roundComponent(p3?.g ?? 0)\n const b = this.roundComponent(p3?.b ?? 0)\n return alpha < 1\n ? `Color(.displayP3, red: ${r}, green: ${g}, blue: ${b}, opacity: ${this.roundComponent(alpha)})`\n : `Color(.displayP3, red: ${r}, green: ${g}, blue: ${b})`\n }\n\n const rgb = toSRGB(dtcgObjectToCulori(colorObj))\n const r = this.roundComponent(rgb?.r ?? 0)\n const g = this.roundComponent(rgb?.g ?? 0)\n const b = this.roundComponent(rgb?.b ?? 0)\n\n return alpha < 1\n ? `Color(red: ${r}, green: ${g}, blue: ${b}, opacity: ${this.roundComponent(alpha)})`\n : `Color(red: ${r}, green: ${g}, blue: ${b})`\n }\n\n private formatDimensionValue(value: unknown): string {\n if (isDimensionObject(value)) {\n const dim = value as DimensionValue\n // Convert rem to points (1rem = 16pt convention)\n const ptValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n return String(ptValue)\n }\n\n return String(value)\n }\n\n private formatFontFamilyValue(value: unknown): string {\n if (Array.isArray(value)) {\n const primary = value[0]\n return typeof primary === 'string' ? `\"${this.escapeSwiftString(primary)}\"` : '\"system\"'\n }\n\n return typeof value === 'string' ? `\"${this.escapeSwiftString(value)}\"` : '\"system\"'\n }\n\n private formatFontWeightValue(value: unknown): string {\n if (typeof value === 'number') {\n return this.numericFontWeight(value)\n }\n\n if (typeof value === 'string') {\n return this.namedFontWeight(value) ?? 'Font.Weight.regular'\n }\n\n return 'Font.Weight.regular'\n }\n\n private numericFontWeight(weight: number): string {\n if (weight <= 100) {\n return 'Font.Weight.ultraLight'\n }\n if (weight <= 200) {\n return 'Font.Weight.thin'\n }\n if (weight <= 300) {\n return 'Font.Weight.light'\n }\n if (weight <= 400) {\n return 'Font.Weight.regular'\n }\n if (weight <= 500) {\n return 'Font.Weight.medium'\n }\n if (weight <= 600) {\n return 'Font.Weight.semibold'\n }\n if (weight <= 700) {\n return 'Font.Weight.bold'\n }\n if (weight <= 800) {\n return 'Font.Weight.heavy'\n }\n return 'Font.Weight.black'\n }\n\n private namedFontWeight(name: string): string | undefined {\n const map: Record<string, string> = {\n thin: 'Font.Weight.thin',\n ultralight: 'Font.Weight.ultraLight',\n extralight: 'Font.Weight.ultraLight',\n light: 'Font.Weight.light',\n regular: 'Font.Weight.regular',\n normal: 'Font.Weight.regular',\n medium: 'Font.Weight.medium',\n semibold: 'Font.Weight.semibold',\n demibold: 'Font.Weight.semibold',\n bold: 'Font.Weight.bold',\n heavy: 'Font.Weight.heavy',\n extrabold: 'Font.Weight.heavy',\n black: 'Font.Weight.black',\n ultrabold: 'Font.Weight.black',\n }\n\n return map[name.toLowerCase()]\n }\n\n private formatDurationValue(value: unknown): string {\n if (typeof value === 'object' && value !== null && 'value' in value && 'unit' in value) {\n const dur = value as DurationValue\n const seconds = dur.unit === 'ms' ? dur.value / 1000 : dur.value\n return String(seconds)\n }\n\n return typeof value === 'number' ? String(value) : '0'\n }\n\n private formatShadowValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (Array.isArray(value) && value.length > 0) {\n // Use the first shadow layer for SwiftUI\n return this.formatSingleShadow(value[0] as Record<string, unknown>, options)\n }\n\n if (typeof value === 'object' && value !== null) {\n return this.formatSingleShadow(value as Record<string, unknown>, options)\n }\n\n return 'ShadowStyle(color: .clear, radius: 0, x: 0, y: 0, spread: 0)'\n }\n\n private formatSingleShadow(\n shadow: Record<string, unknown>,\n options: Required<IosRendererOptions>,\n ): string {\n const color = isColorObject(shadow.color)\n ? this.formatColorValue(shadow.color, options)\n : 'Color.black.opacity(0.25)'\n\n const radius = isDimensionObject(shadow.blur)\n ? this.dimensionToCGFloat(shadow.blur as DimensionValue)\n : '8'\n\n const x = isDimensionObject(shadow.offsetX)\n ? this.dimensionToCGFloat(shadow.offsetX as DimensionValue)\n : '0'\n\n const y = isDimensionObject(shadow.offsetY)\n ? this.dimensionToCGFloat(shadow.offsetY as DimensionValue)\n : '0'\n\n const spread = isDimensionObject(shadow.spread)\n ? this.dimensionToCGFloat(shadow.spread as DimensionValue)\n : '0'\n\n return `ShadowStyle(color: ${color}, radius: ${radius}, x: ${x}, y: ${y}, spread: ${spread})`\n }\n\n private formatTypographyValue(value: unknown): string {\n if (typeof value !== 'object' || value === null) {\n return 'TypographyStyle(font: Font.body, tracking: 0, lineSpacing: 0)'\n }\n\n const typo = value as Record<string, unknown>\n\n const size = isDimensionObject(typo.fontSize)\n ? this.dimensionToPoints(typo.fontSize as DimensionValue)\n : '16'\n\n const weight =\n typo.fontWeight != null ? this.formatFontWeightValue(typo.fontWeight) : 'Font.Weight.regular'\n\n const fontExpr = this.buildFontExpression(typo, size, weight)\n const tracking = this.extractTracking(typo)\n const lineSpacing = this.extractLineSpacing(typo)\n\n return `TypographyStyle(font: ${fontExpr}, tracking: ${tracking}, lineSpacing: ${lineSpacing})`\n }\n\n private buildFontExpression(typo: Record<string, unknown>, size: string, weight: string): string {\n if (typo.fontFamily != null) {\n const family = Array.isArray(typo.fontFamily) ? typo.fontFamily[0] : typo.fontFamily\n if (typeof family === 'string') {\n return `Font.custom(\"${this.escapeSwiftString(family)}\", size: ${size}).weight(${weight})`\n }\n }\n\n return `Font.system(size: ${size}, weight: ${weight})`\n }\n\n private extractTracking(typo: Record<string, unknown>): string {\n if (!isDimensionObject(typo.letterSpacing)) {\n return '0'\n }\n const dim = typo.letterSpacing as DimensionValue\n const ptValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n return String(ptValue)\n }\n\n private extractLineSpacing(typo: Record<string, unknown>): string {\n if (typo.lineHeight == null || typeof typo.lineHeight !== 'number') {\n return '0'\n }\n if (!isDimensionObject(typo.fontSize)) {\n return '0'\n }\n const dim = typo.fontSize as DimensionValue\n const basePt = dim.unit === 'rem' ? dim.value * 16 : dim.value\n const lineHeightPt = Math.round(basePt * typo.lineHeight * 100) / 100\n return String(lineHeightPt - basePt)\n }\n\n private dimensionToPoints(dim: DimensionValue): string {\n const ptValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n return String(ptValue)\n }\n\n /** Formats a dimension as a CGFloat literal (appends `.0` for integers). */\n private dimensionToCGFloat(dim: DimensionValue): string {\n const ptValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n return Number.isInteger(ptValue) ? `${ptValue}.0` : String(ptValue)\n }\n\n private getTypeAnnotation(token: ResolvedToken): string | undefined {\n switch (token.$type) {\n case 'dimension':\n return 'CGFloat'\n case 'duration':\n return 'TimeInterval'\n case 'number':\n return 'Double'\n case 'fontWeight':\n return 'Font.Weight'\n case 'fontFamily':\n return 'String'\n default:\n return undefined\n }\n }\n\n private toSwiftIdentifier(name: string): string {\n // Convert kebab-case, dot-notation, or snake_case to camelCase\n const camel = name\n .replace(/[-._]+(.)/g, (_, c: string) => c.toUpperCase())\n .replace(/[-._]+$/g, '')\n .replace(/^[-._]+/g, '')\n\n // Ensure first character is lowercase\n const identifier = camel.charAt(0).toLowerCase() + camel.slice(1)\n\n // Prefix with underscore if it starts with a digit\n const safe = /^\\d/.test(identifier) ? `_${identifier}` : identifier\n\n // Escape Swift reserved keywords with backticks\n return SWIFT_KEYWORDS.has(safe) ? `\\`${safe}\\`` : safe\n }\n\n private escapeSwiftString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n')\n }\n\n private roundComponent(value: number): number {\n return Math.round(value * 10000) / 10000\n }\n\n private indentStr(width: number, level: number): string {\n return ' '.repeat(width * level)\n }\n\n /**\n * Returns the prefix for `static let` declarations.\n * Swift 6 requires `nonisolated(unsafe)` on global stored properties.\n */\n private staticLetPrefix(options: Required<IosRendererOptions>): string {\n return options.swiftVersion === '6.0' ? 'nonisolated(unsafe) static let ' : 'static let '\n }\n\n /** Returns `@frozen ` when the frozen option is enabled, empty string otherwise. */\n private frozenPrefix(options: Required<IosRendererOptions>): string {\n return options.frozen ? '@frozen ' : ''\n }\n\n /** Returns `: Sendable` when targeting Swift 6, empty string otherwise. */\n private structConformances(options: Required<IosRendererOptions>): string {\n return options.swiftVersion === '6.0' ? ': Sendable' : ''\n }\n\n private hasShadowTokens(tokens: ResolvedTokens): boolean {\n return Object.values(tokens).some((t) => t.$type === 'shadow')\n }\n\n private hasTypographyTokens(tokens: ResolvedTokens): boolean {\n return Object.values(tokens).some((t) => t.$type === 'typography')\n }\n\n private hasBorderTokens(tokens: ResolvedTokens): boolean {\n return Object.values(tokens).some((t) => t.$type === 'border')\n }\n\n /** Emits all struct definitions needed by the token set. */\n private buildStructDefinitions(\n tokens: ResolvedTokens,\n access: string,\n options: Required<IosRendererOptions>,\n ): string[] {\n const lines: string[] = []\n\n if (this.hasShadowTokens(tokens)) {\n lines.push('')\n lines.push(...this.buildShadowStyleStruct(access, options))\n }\n\n if (this.hasTypographyTokens(tokens)) {\n lines.push('')\n lines.push(...this.buildTypographyStyleStruct(access, options))\n }\n\n if (this.hasBorderTokens(tokens)) {\n lines.push('')\n lines.push(...this.buildBorderStyleStruct(access, options))\n }\n\n return lines\n }\n\n private buildShadowStyleStruct(access: string, options: Required<IosRendererOptions>): string[] {\n const i1 = this.indentStr(options.indent, 1)\n const conformances = this.structConformances(options)\n const frozen = this.frozenPrefix(options)\n return [\n `${frozen}${access} struct ShadowStyle${conformances} {`,\n `${i1}${access} let color: Color`,\n `${i1}${access} let radius: CGFloat`,\n `${i1}${access} let x: CGFloat`,\n `${i1}${access} let y: CGFloat`,\n `${i1}${access} let spread: CGFloat`,\n '}',\n ]\n }\n\n private buildTypographyStyleStruct(\n access: string,\n options: Required<IosRendererOptions>,\n ): string[] {\n const i1 = this.indentStr(options.indent, 1)\n const conformances = this.structConformances(options)\n const frozen = this.frozenPrefix(options)\n return [\n `${frozen}${access} struct TypographyStyle${conformances} {`,\n `${i1}${access} let font: Font`,\n `${i1}${access} let tracking: CGFloat`,\n `${i1}${access} let lineSpacing: CGFloat`,\n '}',\n ]\n }\n\n private buildBorderStyleStruct(access: string, options: Required<IosRendererOptions>): string[] {\n const i1 = this.indentStr(options.indent, 1)\n const conformances = this.structConformances(options)\n const frozen = this.frozenPrefix(options)\n return [\n `${frozen}${access} struct BorderStyle${conformances} {`,\n `${i1}${access} let color: Color`,\n `${i1}${access} let width: CGFloat`,\n '}',\n ]\n }\n\n /** Emits convenience View extensions for shadow and typography application. */\n private buildViewExtensions(\n tokens: ResolvedTokens,\n access: string,\n options: Required<IosRendererOptions>,\n ): string[] {\n const lines: string[] = []\n const i1 = this.indentStr(options.indent, 1)\n const i2 = this.indentStr(options.indent, 2)\n\n if (this.hasShadowTokens(tokens)) {\n lines.push('')\n lines.push(`${access} extension View {`)\n lines.push(`${i1}func shadowStyle(_ style: ShadowStyle) -> some View {`)\n lines.push(\n `${i2}self.shadow(color: style.color, radius: style.radius, x: style.x, y: style.y)`,\n )\n lines.push(`${i1}}`)\n lines.push('}')\n }\n\n if (this.hasTypographyTokens(tokens)) {\n lines.push('')\n lines.push(`${access} extension View {`)\n lines.push(`${i1}func typographyStyle(_ style: TypographyStyle) -> some View {`)\n lines.push(\n `${i2}self.font(style.font).tracking(style.tracking).lineSpacing(style.lineSpacing)`,\n )\n lines.push(`${i1}}`)\n lines.push('}')\n }\n\n return lines\n }\n\n private formatBorderValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (typeof value !== 'object' || value === null) {\n return 'BorderStyle(color: .clear, width: 0)'\n }\n\n const border = value as Record<string, unknown>\n\n const color = isColorObject(border.color)\n ? this.formatColorValue(border.color, options)\n : 'Color.clear'\n\n const width = isDimensionObject(border.width)\n ? this.dimensionToCGFloat(border.width as DimensionValue)\n : '1.0'\n\n return `BorderStyle(color: ${color}, width: ${width})`\n }\n\n private formatGradientValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (!Array.isArray(value) || value.length === 0) {\n return 'Gradient(stops: [])'\n }\n\n const stops = (value as GradientStop[]).map((stop) => {\n const color = isColorObject(stop.color)\n ? this.formatColorValue(stop.color, options)\n : 'Color.clear'\n return `.init(color: ${color}, location: ${stop.position})`\n })\n\n return `Gradient(stops: [${stops.join(', ')}])`\n }\n\n private async formatStandalone(\n context: RenderContext,\n options: Required<IosRendererOptions>,\n ): Promise<RenderOutput> {\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for standalone iOS output`,\n )\n }\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = this.formatTokens(processedTokens, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'swift',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n}\n\n/**\n * iOS/SwiftUI renderer factory function.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'ios',\n * renderer: iosRenderer(),\n * options: {\n * accessLevel: 'public',\n * structure: 'enum', // or 'grouped' for extension-based layout\n * enumName: 'DesignTokens',\n * colorSpace: 'sRGB',\n * },\n * file: 'DesignTokens-{theme}.swift'\n * }]\n * ```\n */\nexport function iosRenderer(): Renderer<IosRendererOptions> {\n const rendererInstance = new IosRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as IosRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @fileoverview JavaScript module renderer using Prettier for formatting\n */\n\nimport {\n buildInMemoryOutputKey,\n resolveFileName,\n stripInternalMetadata,\n} from '@renderers/bundlers/utils'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { outputTree } from './output-tree'\nimport type { JsModuleRendererOptions, RenderContext, RenderOutput, Renderer } from './types'\n\nexport class JsModuleRenderer implements Renderer<JsModuleRendererOptions> {\n async format(context: RenderContext, options?: JsModuleRendererOptions): Promise<RenderOutput> {\n const opts: Required<JsModuleRendererOptions> = {\n preset: options?.preset ?? 'standalone',\n structure: options?.structure ?? 'nested',\n minify: options?.minify ?? false,\n moduleName: options?.moduleName ?? 'tokens',\n generateHelper: options?.generateHelper ?? false,\n }\n\n if (opts.preset === 'bundle') {\n const { bundleAsJsModule } = await import('@renderers/bundlers/js')\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens: stripInternalMetadata(tokens),\n modifierInputs,\n isBase: this.isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsJsModule(bundleData, context.resolver, opts, async (tokens) => {\n return await this.formatTokens(tokens, opts)\n })\n }\n\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for JS module output`,\n )\n }\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const cleanTokens = stripInternalMetadata(tokens)\n const content = await this.formatTokens(cleanTokens, opts)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'js',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n private async formatTokens(\n tokens: ResolvedTokens,\n options: JsModuleRendererOptions,\n ): Promise<string> {\n const opts: Required<JsModuleRendererOptions> = {\n preset: options.preset ?? 'standalone',\n structure: options.structure ?? 'nested',\n minify: options.minify ?? false,\n moduleName: options.moduleName ?? 'tokens',\n generateHelper: options.generateHelper ?? false,\n }\n\n const lines: string[] = []\n lines.push(...this.formatAsObject(tokens, opts))\n\n const code = lines.join('\\n')\n\n // Skip prettier formatting if minify is true\n if (opts.minify) {\n return code\n }\n\n // Use Prettier for consistent, high-quality formatting\n return await prettier.format(code, {\n parser: 'babel',\n printWidth: 80,\n tabWidth: 2,\n useTabs: false,\n semi: false,\n singleQuote: true,\n trailingComma: 'es5',\n })\n }\n\n /**\n * Format as default export object\n */\n private formatAsObject(\n tokens: ResolvedTokens,\n options: Required<JsModuleRendererOptions>,\n ): string[] {\n const lines: string[] = []\n const tokenObj = this.tokensToPlainObject(tokens, options.structure)\n const varName = options.moduleName !== '' ? options.moduleName : 'tokens'\n\n lines.push(`const ${varName} = {`)\n this.addObjectProperties(lines, tokenObj, 1)\n lines.push('}')\n lines.push('')\n lines.push(`export default ${varName}`)\n\n return lines\n }\n\n /**\n * Convert tokens to plain object with flat or nested structure\n */\n private tokensToPlainObject(\n tokens: ResolvedTokens,\n structure: 'flat' | 'nested',\n ): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n if (structure === 'flat') {\n // Flat structure: { \"token.name\": \"value\" }\n for (const [name, token] of getSortedTokenEntries(tokens)) {\n result[name] = token.$value\n }\n } else {\n // Nested structure: { \"token\": { \"name\": \"value\" } }\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const parts = token.path\n let current = result\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]\n if (part == null) {\n continue\n }\n if (!(part in current)) {\n current[part] = {}\n }\n current = current[part] as Record<string, unknown>\n }\n\n const lastPart = parts[parts.length - 1]\n if (lastPart != null) {\n current[lastPart] = token.$value\n }\n }\n }\n\n return result\n }\n\n /**\n * Add object properties to lines\n */\n private addObjectProperties(lines: string[], obj: Record<string, unknown>, indent: number): void {\n const indentStr = ' '.repeat(indent)\n const entries = Object.entries(obj).sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]\n if (entry == null) {\n continue\n }\n const [key, value] = entry\n const isLast = i === entries.length - 1\n\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n lines.push(`${indentStr}${this.quoteKey(key)}: {`)\n this.addObjectProperties(lines, value as Record<string, unknown>, indent + 1)\n lines.push(`${indentStr}}${isLast ? '' : ','}`)\n } else {\n const valueStr = JSON.stringify(value)\n lines.push(`${indentStr}${this.quoteKey(key)}: ${valueStr}${isLast ? '' : ','}`)\n }\n }\n }\n\n /**\n * Quote key if necessary\n */\n private quoteKey(key: string): string {\n if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) {\n return key\n }\n return `\"${key}\"`\n }\n\n private isBasePermutation(\n modifierInputs: Record<string, string>,\n defaults: Record<string, string>,\n ): boolean {\n return Object.entries(modifierInputs).every(([key, value]) => value === defaults[key])\n }\n}\n\n/**\n * JavaScript module renderer factory function\n *\n * Creates a JS module renderer with the specified preset and options.\n *\n * @param preset - Output preset: 'bundle' or 'standalone'\n * @param options - JS module formatting options (structure, minify, moduleName, generateHelper)\n * @returns Renderer instance\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'js',\n * renderer: jsRenderer(),\n * options: { preset: 'standalone', structure: 'flat', moduleName: 'tokens' },\n * file: 'tokens.js'\n * }]\n * ```\n */\nexport function jsRenderer(): Renderer<JsModuleRendererOptions> {\n const rendererInstance = new JsModuleRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as JsModuleRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @fileoverview JSON renderer using Prettier for consistent formatting\n */\n\nimport {\n buildInMemoryOutputKey,\n resolveFileName,\n stripInternalMetadata,\n} from '@renderers/bundlers/utils'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { outputTree } from './output-tree'\nimport type { JsonRendererOptions, RenderContext, RenderOutput, Renderer } from './types'\n\nexport class JsonRenderer implements Renderer<JsonRendererOptions> {\n async format(context: RenderContext, options?: JsonRendererOptions): Promise<RenderOutput> {\n const opts: Required<JsonRendererOptions> = {\n preset: options?.preset ?? 'standalone',\n structure: options?.structure ?? 'nested',\n minify: options?.minify ?? false,\n includeMetadata: options?.includeMetadata ?? false,\n }\n\n if (opts.preset === 'bundle') {\n const { bundleAsJson } = await import('@renderers/bundlers/json')\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens: stripInternalMetadata(tokens),\n modifierInputs,\n isBase: this.isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsJson(bundleData, context.resolver, async (tokens) => {\n return await this.formatTokens(tokens, opts)\n })\n }\n\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for JSON output`,\n )\n }\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = await this.formatTokens(processedTokens, opts)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'json',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n private async formatTokens(\n tokens: ResolvedTokens,\n options: JsonRendererOptions,\n ): Promise<string> {\n const opts: Required<JsonRendererOptions> = {\n preset: options.preset ?? 'standalone',\n structure: options.structure ?? 'nested',\n minify: options.minify ?? false,\n includeMetadata: options.includeMetadata ?? false,\n }\n\n let output: unknown\n\n if (opts.structure === 'flat') {\n // Flat format: { \"token.name\": \"value\" } or { \"token.name\": { $value, $type, ... } }\n output = opts.includeMetadata ? this.flattenTokens(tokens) : this.flattenValues(tokens)\n } else {\n // Nested format: { \"token\": { \"name\": \"value\" } }\n output = opts.includeMetadata ? this.nestTokens(tokens) : this.nestValues(tokens)\n }\n\n const jsonString = JSON.stringify(output)\n\n // Use Prettier for consistent, high-quality formatting\n if (!opts.minify) {\n return await prettier.format(jsonString, {\n parser: 'json',\n printWidth: 80,\n tabWidth: 2,\n useTabs: false,\n })\n }\n\n return jsonString\n }\n\n /**\n * Flatten tokens to simple key-value pairs\n */\n private flattenValues(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [name, token] of getSortedTokenEntries(tokens)) {\n result[name] = token.$value\n }\n return result\n }\n\n /**\n * Flatten tokens to metadata objects\n */\n private flattenTokens(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [name, token] of getSortedTokenEntries(tokens)) {\n result[name] = this.serializeToken(token)\n }\n return result\n }\n\n /**\n * Nest tokens by path (values only)\n */\n private nestValues(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const parts = token.path\n let current = result\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]\n if (part === null || part === undefined) {\n continue\n }\n if (!(part in current)) {\n current[part] = {}\n }\n current = current[part] as Record<string, unknown>\n }\n\n const lastPart = parts[parts.length - 1]\n if (lastPart !== null && lastPart !== undefined) {\n current[lastPart] = token.$value\n }\n }\n\n return result\n }\n\n /**\n * Nest tokens by path (with metadata)\n */\n private nestTokens(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const parts = token.path\n let current = result\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]\n if (part === null || part === undefined) {\n continue\n }\n if (!(part in current)) {\n current[part] = {}\n }\n current = current[part] as Record<string, unknown>\n }\n\n const lastPart = parts[parts.length - 1]\n if (lastPart !== null && lastPart !== undefined) {\n current[lastPart] = this.serializeToken(token)\n }\n }\n\n return result\n }\n\n private serializeToken(token: ResolvedToken): Record<string, unknown> {\n return {\n $value: token.$value,\n ...(typeof token.$type === 'string' && { $type: token.$type }),\n ...(token.$description != null &&\n token.$description !== '' && { $description: token.$description }),\n ...(token.$deprecated != null &&\n token.$deprecated !== false && { $deprecated: token.$deprecated }),\n ...(token.$extensions != null && { $extensions: token.$extensions }),\n }\n }\n\n private isBasePermutation(\n modifierInputs: Record<string, string>,\n defaults: Record<string, string>,\n ): boolean {\n return Object.entries(modifierInputs).every(([key, value]) => value === defaults[key])\n }\n}\n\n/**\n * JSON renderer factory function\n *\n * Creates a JSON renderer with the specified preset and options.\n *\n * @param preset - Output preset: 'bundle' or 'standalone'\n * @param options - JSON formatting options (structure, minify, includeMetadata)\n * @returns Renderer instance\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'json',\n * renderer: jsonRenderer(),\n * options: { preset: 'bundle', structure: 'nested', includeMetadata: true },\n * file: 'tokens.json'\n * }]\n * ```\n */\nexport function jsonRenderer(): Renderer<JsonRendererOptions> {\n const rendererInstance = new JsonRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as JsonRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Tailwind CSS v4 renderer using @theme directive\n * Generates CSS with @theme blocks for Tailwind v4+ design token integration\n */\n\nimport {\n colorObjectToHex,\n isColorObject,\n} from '@processing/processors/transforms/built-in/color-converter'\nimport {\n dimensionObjectToString,\n isDimensionObject,\n} from '@processing/processors/transforms/built-in/dimension-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { DimensionValue, DurationValue, ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { bundleAsTailwind } from './bundlers/tailwind'\nimport { buildInMemoryOutputKey, resolveFileName, stripInternalMetadata } from './bundlers/utils'\nimport { outputTree } from './output-tree'\nimport type {\n MediaQueryFunction,\n RenderContext,\n RenderOutput,\n Renderer,\n SelectorFunction,\n} from './types'\n\n/**\n * Options for Tailwind CSS v4 renderer\n *\n * Controls how tokens are converted to Tailwind v4 @theme CSS variables.\n *\n * @example Bundle with dark mode overrides\n * ```typescript\n * tailwind({\n * name: 'tailwind',\n * file: 'theme.css',\n * preset: 'bundle',\n * selector: (modifier, context, isBase) => {\n * if (isBase) return ':root'\n * return `[data-${modifier}=\"${context}\"]`\n * },\n * })\n * ```\n */\nexport type TailwindRendererOptions = {\n preset?: 'bundle' | 'standalone'\n includeImport?: boolean\n namespace?: string\n minify?: boolean\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n}\n\n/**\n * Mapping from DTCG token types to Tailwind v4 CSS variable namespace prefixes\n */\nconst TAILWIND_NAMESPACE_MAP: Record<string, string> = {\n color: 'color',\n dimension: 'spacing',\n fontFamily: 'font',\n fontWeight: 'font-weight',\n duration: 'duration',\n shadow: 'shadow',\n number: 'number',\n cubicBezier: 'ease',\n}\n\n/**\n * Resolved Tailwind options with required base fields.\n * selector and mediaQuery remain optional (only used in bundle mode).\n * variantDeclarations is populated by the bundler from non-base permutations.\n */\ntype ResolvedTailwindOptions = {\n preset: 'bundle' | 'standalone'\n includeImport: boolean\n namespace: string\n minify: boolean\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n variantDeclarations: string[]\n}\n\nexport class TailwindRenderer implements Renderer<TailwindRendererOptions> {\n async format(context: RenderContext, options?: TailwindRendererOptions): Promise<RenderOutput> {\n const opts: ResolvedTailwindOptions = {\n preset: options?.preset ?? 'bundle',\n includeImport: options?.includeImport ?? true,\n namespace: options?.namespace ?? '',\n minify: options?.minify ?? false,\n selector: options?.selector,\n mediaQuery: options?.mediaQuery,\n variantDeclarations: [],\n }\n\n if (opts.preset === 'bundle') {\n return await this.formatBundle(context, opts)\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n /**\n * Format tokens as Tailwind v4 @theme CSS variables\n */\n async formatTokens(tokens: ResolvedTokens, options: ResolvedTailwindOptions): Promise<string> {\n const lines: string[] = []\n const indent = options.minify ? '' : ' '\n const newline = options.minify ? '' : '\\n'\n const space = options.minify ? '' : ' '\n\n if (options.includeImport) {\n lines.push(`@import \"tailwindcss\";${newline}`)\n }\n\n // Emit @custom-variant declarations (auto-derived from non-base modifiers)\n if (options.variantDeclarations.length > 0) {\n if (options.includeImport) {\n lines.push(newline)\n }\n for (const declaration of options.variantDeclarations) {\n lines.push(`${declaration}${newline}`)\n }\n }\n\n if (options.includeImport || options.variantDeclarations.length > 0) {\n lines.push(newline)\n }\n\n const themeDirective = options.namespace ? `@theme namespace(${options.namespace})` : '@theme'\n\n lines.push(`${themeDirective}${space}{${newline}`)\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const varName = this.buildVariableName(token)\n const varValue = this.formatValue(token)\n lines.push(`${indent}--${varName}:${space}${varValue};${newline}`)\n }\n\n lines.push(`}${newline}`)\n\n const cssString = lines.join('')\n return options.minify ? cssString : await this.formatWithPrettier(cssString)\n }\n\n /**\n * Format tokens as plain CSS custom property overrides inside a selector block.\n * Used for modifier overrides (e.g., dark mode) appended after the @theme block.\n */\n async formatOverrideBlock(\n tokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n minify: boolean,\n ): Promise<string> {\n const indent = minify ? '' : ' '\n const newline = minify ? '' : '\\n'\n const space = minify ? '' : ' '\n const hasMediaQuery = mediaQuery !== ''\n const tokenIndent = hasMediaQuery ? indent + indent : indent\n\n const lines: string[] = []\n\n if (hasMediaQuery) {\n lines.push(`@media ${mediaQuery}${space}{${newline}`)\n lines.push(`${indent}${selector}${space}{${newline}`)\n } else {\n lines.push(`${selector}${space}{${newline}`)\n }\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const varName = this.buildVariableName(token)\n const varValue = this.formatValue(token)\n lines.push(`${tokenIndent}--${varName}:${space}${varValue};${newline}`)\n }\n\n if (hasMediaQuery) {\n lines.push(`${indent}}${newline}`)\n lines.push(`}${newline}`)\n } else {\n lines.push(`}${newline}`)\n }\n\n return lines.join('')\n }\n\n private buildVariableName(token: ResolvedToken): string {\n const prefix = TAILWIND_NAMESPACE_MAP[token.$type ?? '']\n if (!prefix) {\n return token.name\n }\n\n // If token name already starts with the prefix, don't double-prefix\n const nameLower = token.name.toLowerCase()\n const prefixLower = prefix.toLowerCase()\n if (nameLower.startsWith(`${prefixLower}-`) || nameLower.startsWith(`${prefixLower}.`)) {\n return token.name\n }\n\n return `${prefix}-${token.name}`\n }\n\n private formatValue(token: ResolvedToken): string {\n const value = token.$value\n\n if (token.$type === 'color' && isColorObject(value)) {\n return colorObjectToHex(value)\n }\n\n if (token.$type === 'dimension' && isDimensionObject(value)) {\n return dimensionObjectToString(value as DimensionValue)\n }\n\n if (token.$type === 'duration' && this.isDurationObject(value)) {\n return `${(value as DurationValue).value}${(value as DurationValue).unit}`\n }\n\n if (token.$type === 'fontFamily') {\n if (Array.isArray(value)) {\n return value\n .map((v) => (typeof v === 'string' && v.includes(' ') ? `\"${v}\"` : v))\n .join(', ')\n }\n return typeof value === 'string' ? value : String(value)\n }\n\n if (token.$type === 'shadow') {\n return this.formatShadowValue(value)\n }\n\n if (token.$type === 'cubicBezier' && Array.isArray(value) && value.length === 4) {\n return `cubic-bezier(${value.join(', ')})`\n }\n\n if (typeof value === 'string') {\n return value\n }\n\n if (typeof value === 'number') {\n return String(value)\n }\n\n return String(value)\n }\n\n private formatShadowValue(value: unknown): string {\n if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object') {\n return value.map((s) => this.formatSingleShadow(s as Record<string, unknown>)).join(', ')\n }\n\n if (typeof value === 'object' && value !== null) {\n return this.formatSingleShadow(value as Record<string, unknown>)\n }\n\n return String(value)\n }\n\n private formatSingleShadow(shadow: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (shadow.inset === true) {\n parts.push('inset')\n }\n\n if (isDimensionObject(shadow.offsetX)) {\n parts.push(dimensionObjectToString(shadow.offsetX as DimensionValue))\n }\n if (isDimensionObject(shadow.offsetY)) {\n parts.push(dimensionObjectToString(shadow.offsetY as DimensionValue))\n }\n if (isDimensionObject(shadow.blur)) {\n parts.push(dimensionObjectToString(shadow.blur as DimensionValue))\n }\n if (shadow.spread != null && isDimensionObject(shadow.spread)) {\n parts.push(dimensionObjectToString(shadow.spread as DimensionValue))\n }\n if (isColorObject(shadow.color)) {\n parts.push(colorObjectToHex(shadow.color))\n } else if (shadow.color != null) {\n parts.push(String(shadow.color))\n }\n\n return parts.join(' ')\n }\n\n private isDurationObject(value: unknown): value is DurationValue {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'value' in value &&\n 'unit' in value &&\n (value as { unit?: unknown }).unit !== undefined\n )\n }\n\n private async formatWithPrettier(css: string): Promise<string> {\n try {\n return await prettier.format(css, {\n parser: 'css',\n printWidth: 80,\n tabWidth: 2,\n useTabs: false,\n })\n } catch {\n return css\n }\n }\n\n private async formatBundle(\n context: RenderContext,\n options: ResolvedTailwindOptions,\n ): Promise<string> {\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens,\n modifierInputs,\n isBase: this.isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsTailwind(\n bundleData,\n options,\n async (tokens, opts) => await this.formatTokens(tokens, opts),\n async (tokens, selector, mediaQuery, minify) =>\n await this.formatOverrideBlock(tokens, selector, mediaQuery, minify),\n )\n }\n\n private async formatStandalone(\n context: RenderContext,\n options: ResolvedTailwindOptions,\n ): Promise<RenderOutput> {\n const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for standalone Tailwind output`,\n )\n }\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = await this.formatTokens(processedTokens, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'css',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n private isBasePermutation(\n modifierInputs: Record<string, string>,\n defaults: Record<string, string>,\n ): boolean {\n return Object.entries(defaults).every(\n ([key, value]) => modifierInputs[key]?.toLowerCase() === value.toLowerCase(),\n )\n }\n}\n\n/**\n * Tailwind CSS v4 renderer factory function.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'tailwind',\n * renderer: tailwindRenderer(),\n * options: {\n * preset: 'bundle',\n * includeImport: true,\n * },\n * file: 'theme.css'\n * }]\n * ```\n */\nexport function tailwindRenderer(): Renderer<TailwindRendererOptions> {\n const rendererInstance = new TailwindRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as TailwindRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Tailwind CSS v4 bundler for multi-theme output\n *\n * Bundles multiple permutations into a single Tailwind @theme file.\n * The base permutation tokens are included in @theme to define the utility\n * vocabulary. Non-base permutations (e.g., dark mode) are appended as plain\n * CSS custom property overrides with configurable selectors/media queries.\n */\n\nimport type { TailwindRendererOptions } from '@renderers/tailwind'\nimport type { MediaQueryFunction, SelectorFunction } from '@renderers/types'\nimport { BasePermutationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@tokens/types'\n\nimport type { BundleDataItem } from './types'\nimport {\n countModifierDifferences,\n getExpectedSource,\n normalizeModifierInputs,\n parseModifierSource,\n resolveMediaQuery,\n resolveSelector,\n stripInternalMetadata,\n} from './utils'\n\ntype ResolvedTailwindOptions = {\n preset: 'bundle' | 'standalone'\n includeImport: boolean\n namespace: string\n minify: boolean\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n variantDeclarations: string[]\n}\n\n/**\n * Bundle tokens as a Tailwind v4 @theme CSS file with modifier overrides\n *\n * Strategy:\n * - Base permutation tokens go into @theme (defines the Tailwind utility vocabulary)\n * - Non-base permutations are appended as plain CSS custom property overrides\n * using configurable selectors/media queries, consistent with the CSS renderer\n */\nexport async function bundleAsTailwind(\n bundleData: BundleDataItem[],\n options: ResolvedTailwindOptions | TailwindRendererOptions,\n formatThemeTokens: (tokens: ResolvedTokens, options: ResolvedTailwindOptions) => Promise<string>,\n formatOverrideBlock: (\n tokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n minify: boolean,\n ) => Promise<string>,\n): Promise<string> {\n const baseItem = bundleData.find((item) => item.isBase)\n if (!baseItem) {\n throw new BasePermutationError('Base permutation not found in bundle data')\n }\n\n const resolvedOpts = resolveOptions(options)\n const cssBlocks: string[] = []\n\n // Collect @custom-variant declarations from non-base permutations\n const variantDeclarations = collectVariantDeclarations(bundleData, baseItem, resolvedOpts)\n const themeOpts: ResolvedTailwindOptions = { ...resolvedOpts, variantDeclarations }\n\n // Base permutation: format as @theme block\n const baseTokens = stripInternalMetadata(baseItem.tokens)\n const themeBlock = await formatThemeTokens(baseTokens, themeOpts)\n cssBlocks.push(themeBlock)\n\n // Non-base permutations: format as plain CSS override blocks\n for (const item of bundleData) {\n if (item.isBase) {\n continue\n }\n\n const block = await formatModifierOverride(item, baseItem, resolvedOpts, formatOverrideBlock)\n if (block) {\n cssBlocks.push(block)\n }\n }\n\n return cssBlocks.join('\\n')\n}\n\nasync function formatModifierOverride(\n { tokens, modifierInputs }: BundleDataItem,\n baseItem: BundleDataItem,\n options: ResolvedTailwindOptions,\n formatOverrideBlock: (\n tokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n minify: boolean,\n ) => Promise<string>,\n): Promise<string | undefined> {\n // Skip permutations where multiple modifiers differ from base\n const differenceCount = countModifierDifferences(modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n return undefined\n }\n\n // Include tokens whose resolved value differs from the base permutation.\n // Source-based filtering alone misses alias tokens that change indirectly\n // (e.g., background-base references gray.25 which changes in dark mode).\n // Since the Tailwind renderer resolves all references to final values,\n // every token with a changed value must appear in the override block.\n const tokensToInclude = filterTokensByValueChange(tokens, baseItem.tokens)\n\n if (Object.keys(tokensToInclude).length === 0) {\n return undefined\n }\n\n const expectedSource = getExpectedSource(modifierInputs, baseItem.modifierInputs)\n\n const [modifier, context] = parseModifierSource(expectedSource)\n const cleanTokens = stripInternalMetadata(tokensToInclude)\n\n const selector = resolveSelector(\n options.selector,\n modifier,\n context,\n false,\n normalizeModifierInputs(modifierInputs),\n )\n const mediaQuery = resolveMediaQuery(\n options.mediaQuery,\n modifier,\n context,\n false,\n normalizeModifierInputs(modifierInputs),\n )\n\n const css = await formatOverrideBlock(cleanTokens, selector, mediaQuery, options.minify)\n return `/* Modifier: ${modifier}=${context} */\\n${css}`\n}\n\n/**\n * Filter tokens to those whose resolved value differs from the base permutation.\n *\n * Unlike source-based filtering, this catches alias tokens that change\n * indirectly through reference resolution (e.g., background-base references\n * gray.25 which has a different value in dark mode).\n */\nfunction filterTokensByValueChange(\n currentTokens: ResolvedTokens,\n baseTokens: ResolvedTokens,\n): ResolvedTokens {\n const changed: ResolvedTokens = {}\n\n for (const [name, token] of Object.entries(currentTokens)) {\n const baseToken = baseTokens[name]\n if (!baseToken) {\n changed[name] = token\n continue\n }\n if (JSON.stringify(token.$value) !== JSON.stringify(baseToken.$value)) {\n changed[name] = token\n }\n }\n\n return changed\n}\n\n/**\n * Derive @custom-variant declarations from non-base permutations.\n *\n * For each non-base permutation that differs by a single modifier,\n * builds a Tailwind v4 @custom-variant line using the resolved selector\n * or media query. Variant names follow the {modifier}-{context} format\n * (e.g. \"theme-dark\") to avoid collisions across modifier dimensions.\n */\nfunction collectVariantDeclarations(\n bundleData: BundleDataItem[],\n baseItem: BundleDataItem,\n options: ResolvedTailwindOptions,\n): string[] {\n const declarations: string[] = []\n\n for (const item of bundleData) {\n if (item.isBase) {\n continue\n }\n\n const differenceCount = countModifierDifferences(item.modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n continue\n }\n\n const expectedSource = getExpectedSource(item.modifierInputs, baseItem.modifierInputs)\n const [modifier, context] = parseModifierSource(expectedSource)\n const variantName = `${modifier}-${context}`\n const normalized = normalizeModifierInputs(item.modifierInputs)\n\n const mediaQuery = resolveMediaQuery(options.mediaQuery, modifier, context, false, normalized)\n if (mediaQuery !== '') {\n declarations.push(`@custom-variant ${variantName} (@media ${mediaQuery});`)\n continue\n }\n\n const selector = resolveSelector(options.selector, modifier, context, false, normalized)\n declarations.push(`@custom-variant ${variantName} (&:where(${selector}, ${selector} *));`)\n }\n\n return declarations\n}\n\nfunction resolveOptions(\n options: ResolvedTailwindOptions | TailwindRendererOptions,\n): ResolvedTailwindOptions {\n return {\n preset: options.preset ?? 'bundle',\n includeImport: options.includeImport ?? true,\n namespace: options.namespace ?? '',\n minify: options.minify ?? false,\n selector: options.selector,\n mediaQuery: options.mediaQuery,\n variantDeclarations: [],\n }\n}\n","/**\n * @license\n * Copyright (c) 2025 Dispersa Contributors\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * @fileoverview Builder functions for creating output configurations\n *\n * These builder functions provide a convenient way to create OutputConfig objects\n * with flattened options for better DX and discoverability.\n */\n\nimport type { FileFunction, LifecycleHooks, OutputConfig } from '@config/index'\nimport type { Filter } from '@processing/processors/filters/types'\nimport type { Transform } from '@processing/processors/transforms/types'\nimport { androidRenderer } from '@renderers/android'\nimport { cssRenderer } from '@renderers/css'\nimport { iosRenderer } from '@renderers/ios'\nimport { jsRenderer } from '@renderers/js-module'\nimport { jsonRenderer } from '@renderers/json'\nimport { tailwindRenderer } from '@renderers/tailwind'\nimport type {\n AndroidRendererOptions,\n CssRendererOptions,\n IosRendererOptions,\n JsModuleRendererOptions,\n JsonRendererOptions,\n TailwindRendererOptions,\n} from '@renderers/types'\n\n// ============================================================================\n// BASE BUILDER CONFIGURATION\n// ============================================================================\n\n/**\n * Base configuration shared across all builders\n */\ntype BuilderConfigBase = {\n /** Unique identifier for this output */\n name: string\n\n /** Output file path (string, pattern with {placeholders}, or function) - optional for in-memory mode */\n file?: string | FileFunction\n\n /** Array of transform functions to apply */\n transforms?: Transform[]\n\n /** Array of filter functions to apply */\n filters?: Filter[]\n\n /** Per-output lifecycle hooks */\n hooks?: LifecycleHooks\n}\n\n// ============================================================================\n// CSS BUILDER\n// ============================================================================\n\n/**\n * CSS builder configuration with flattened options\n */\nexport type CssBuilderConfig = BuilderConfigBase & CssRendererOptions\n\n/**\n * Create CSS output configuration with flattened options\n *\n * Creates an OutputConfig for CSS custom properties output. All CSS-specific options\n * (selector, mediaQuery, etc.) are provided at the top level alongside common options\n * like name and file for improved discoverability.\n *\n * @param config - CSS builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'bundle' for CSS, meaning all themes are combined into\n * one file with appropriate selectors. Use preset: 'standalone' for separate files.\n *\n * The `file` property is optional. When omitted, content is returned in-memory instead\n * of being written to disk. The `file` property is required when `buildPath` is provided\n * to `dispersa.build()`.\n *\n * @example Basic CSS bundle with transforms\n * ```typescript\n * import { css } from 'dispersa'\n * import { nameKebabCase } from 'dispersa/transforms'\n *\n * const config = css({\n * name: 'css',\n * file: 'tokens.css',\n * preset: 'bundle',\n * selector: ':root',\n * transforms: [nameKebabCase()]\n * })\n * ```\n *\n * @example Standalone CSS with filters\n * ```typescript\n * import { css } from 'dispersa'\n * import { byType } from 'dispersa/filters'\n *\n * const config = css({\n * name: 'css-colors',\n * file: 'colors-{theme}.css',\n * preset: 'standalone',\n * selector: ':root',\n * filters: [byType('color')]\n * })\n * ```\n *\n * @example In-memory mode without file output\n * ```typescript\n * import { css } from 'dispersa'\n *\n * const config = css({\n * name: 'css',\n * preset: 'bundle',\n * selector: ':root'\n * })\n * // Use without buildPath to get content in-memory\n * const result = await dispersa.build({ outputs: [config] })\n * console.log(result.outputs[0].content)\n * ```\n */\nexport function css(config: CssBuilderConfig): OutputConfig<CssRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'bundle',\n ...rendererOptions\n }: CssBuilderConfig = config\n\n return {\n name,\n file,\n renderer: cssRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// JSON BUILDER\n// ============================================================================\n\n/**\n * JSON builder configuration with flattened options\n */\nexport type JsonBuilderConfig = BuilderConfigBase & JsonRendererOptions\n\n/**\n * Create JSON output configuration with flattened options\n *\n * Creates an OutputConfig for JSON token output. All JSON-specific options\n * (structure, includeMetadata, etc.) are provided at the top level for improved\n * discoverability and cleaner configuration.\n *\n * @param config - JSON builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'standalone' for JSON, meaning separate files per theme.\n * Use preset: 'bundle' to combine all themes into one file with metadata.\n *\n * The `file` property is optional. When omitted, content is returned in-memory instead\n * of being written to disk. The `file` property is required when `buildPath` is provided\n * to `dispersa.build()`.\n *\n * @example Standalone JSON with flat structure\n * ```typescript\n * import { json } from 'dispersa'\n *\n * const config = json({\n * name: 'json',\n * file: 'tokens-{theme}.json',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * ```\n *\n * @example Bundle JSON with metadata\n * ```typescript\n * import { json } from 'dispersa'\n *\n * const config = json({\n * name: 'json-bundle',\n * file: 'tokens.json',\n * preset: 'bundle',\n * structure: 'nested',\n * includeMetadata: true\n * })\n * ```\n *\n * @example In-memory mode without file output\n * ```typescript\n * import { json } from 'dispersa'\n *\n * const config = json({\n * name: 'json',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * // Use without buildPath to get content in-memory\n * const result = await dispersa.build({ outputs: [config] })\n * console.log(result.outputs[0].content)\n * ```\n */\nexport function json(config: JsonBuilderConfig): OutputConfig<JsonRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: jsonRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// JS MODULE BUILDER\n// ============================================================================\n\n/**\n * JS module builder configuration with flattened options\n */\nexport type JsBuilderConfig = BuilderConfigBase & JsModuleRendererOptions\n\n/**\n * Create JavaScript module output configuration with flattened options\n *\n * Creates an OutputConfig for JavaScript/TypeScript module output. All JS-specific\n * options (moduleName, generateHelper, etc.) are provided at the top level for\n * improved discoverability and cleaner configuration.\n *\n * @param config - JS module builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'standalone' for JS, meaning separate files per theme.\n * Use preset: 'bundle' with generateHelper: true to create a single file with\n * a helper function for dynamic theme switching.\n *\n * The `file` property is optional. When omitted, content is returned in-memory instead\n * of being written to disk. The `file` property is required when `buildPath` is provided\n * to `dispersa.build()`.\n *\n * @example Bundle JS with helper function\n * ```typescript\n * import { js } from 'dispersa'\n * import { nameCamelCase } from 'dispersa/transforms'\n *\n * const config = js({\n * name: 'js',\n * file: 'tokens.js',\n * preset: 'bundle',\n * moduleName: 'tokens',\n * generateHelper: true,\n * transforms: [nameCamelCase()]\n * })\n * ```\n *\n * @example Standalone JS modules\n * ```typescript\n * import { js } from 'dispersa'\n *\n * const config = js({\n * name: 'js-tokens',\n * file: 'tokens-{theme}.js',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * ```\n *\n * @example In-memory mode without file output\n * ```typescript\n * import { js } from 'dispersa'\n *\n * const config = js({\n * name: 'js',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * // Use without buildPath to get content in-memory\n * const result = await dispersa.build({ outputs: [config] })\n * console.log(result.outputs[0].content)\n * ```\n */\nexport function js(config: JsBuilderConfig): OutputConfig<JsModuleRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: jsRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// TAILWIND CSS v4 BUILDER\n// ============================================================================\n\n/**\n * Tailwind CSS v4 builder configuration with flattened options\n */\nexport type TailwindBuilderConfig = BuilderConfigBase & TailwindRendererOptions\n\n/**\n * Create Tailwind CSS v4 output configuration with flattened options\n *\n * Creates an OutputConfig for Tailwind v4 @theme CSS output. All Tailwind-specific\n * options (includeImport, namespace, etc.) are provided at the top level for\n * improved discoverability.\n *\n * @param config - Tailwind builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'bundle' for Tailwind, meaning the base permutation tokens\n * are used to define the @theme vocabulary. Use preset: 'standalone' for separate files.\n *\n * @example Bundle Tailwind theme with transforms\n * ```typescript\n * import { tailwind } from 'dispersa'\n * import { nameKebabCase } from 'dispersa/transforms'\n *\n * const config = tailwind({\n * name: 'tailwind',\n * file: 'theme.css',\n * preset: 'bundle',\n * includeImport: true,\n * transforms: [nameKebabCase()]\n * })\n * ```\n *\n * @example Standalone files per theme\n * ```typescript\n * import { tailwind } from 'dispersa'\n *\n * const config = tailwind({\n * name: 'tailwind',\n * file: 'theme-{theme}.css',\n * preset: 'standalone',\n * includeImport: false,\n * })\n * ```\n */\nexport function tailwind(config: TailwindBuilderConfig): OutputConfig<TailwindRendererOptions> {\n const { name, file, transforms, filters, hooks, preset = 'bundle', ...rendererOptions } = config\n\n return {\n name,\n file,\n renderer: tailwindRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// iOS / SWIFTUI BUILDER\n// ============================================================================\n\n/**\n * iOS/SwiftUI builder configuration with flattened options\n */\nexport type IosBuilderConfig = BuilderConfigBase & IosRendererOptions\n\n/**\n * Create iOS/SwiftUI output configuration with flattened options\n *\n * Creates an OutputConfig for Swift code generation targeting SwiftUI (iOS 17+, Swift 6).\n * All iOS-specific options (accessLevel, structure, etc.) are provided at the top level.\n *\n * @param config - iOS builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * Only standalone preset is supported. Each permutation generates a separate Swift file.\n *\n * @example Enum-based SwiftUI tokens\n * ```typescript\n * import { ios } from 'dispersa'\n *\n * const config = ios({\n * name: 'ios',\n * file: 'DesignTokens-{theme}.swift',\n * accessLevel: 'public',\n * structure: 'enum',\n * enumName: 'DesignTokens',\n * colorSpace: 'sRGB',\n * })\n * ```\n *\n * @example Grouped SwiftUI tokens (namespace enum + extensions per group)\n * ```typescript\n * import { ios } from 'dispersa'\n *\n * const config = ios({\n * name: 'ios-tokens',\n * file: 'Tokens-{theme}.swift',\n * structure: 'grouped',\n * colorSpace: 'displayP3',\n * })\n * ```\n */\nexport function ios(config: IosBuilderConfig): OutputConfig<IosRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: iosRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// ANDROID / JETPACK COMPOSE BUILDER\n// ============================================================================\n\n/**\n * Android/Jetpack Compose builder configuration with flattened options\n */\nexport type AndroidBuilderConfig = BuilderConfigBase & AndroidRendererOptions\n\n/**\n * Create Android/Jetpack Compose output configuration with flattened options\n *\n * Creates an OutputConfig for Kotlin code generation targeting Jetpack Compose\n * with Material 3. All Android-specific options (packageName, objectName, etc.)\n * are provided at the top level.\n *\n * @experimental This builder is experimental. Options and generated output may change.\n * @param config - Android builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The `packageName` option is required (Kotlin convention). Supports both\n * `'standalone'` (default, one file per permutation) and `'bundle'` (all\n * permutations in a single file) presets.\n *\n * @example Standalone Compose tokens with hex colors\n * ```typescript\n * import { android } from 'dispersa'\n *\n * const config = android({\n * name: 'android',\n * file: 'DesignTokens-{theme}.kt',\n * packageName: 'com.example.tokens',\n * objectName: 'DesignTokens',\n * colorFormat: 'argb_hex',\n * })\n * ```\n *\n * @example Flat structure with Display P3 colors\n * ```typescript\n * import { android } from 'dispersa'\n *\n * const config = android({\n * name: 'android-tokens',\n * file: 'Tokens-{theme}.kt',\n * packageName: 'com.example.design',\n * structure: 'flat',\n * colorSpace: 'displayP3',\n * colorFormat: 'argb_float',\n * })\n * ```\n *\n * @example Bundle mode — all themes in one file\n * ```typescript\n * import { android } from 'dispersa'\n *\n * const config = android({\n * name: 'android-bundle',\n * file: 'DesignTokens.kt',\n * packageName: 'com.example.tokens',\n * preset: 'bundle',\n * structure: 'flat',\n * })\n * ```\n */\nexport function android(config: AndroidBuilderConfig): OutputConfig<AndroidRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: androidRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n"]}