dispersa 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/shared/errors/index.ts","../src/shared/utils/token-utils.ts","../src/renderers/bundlers/utils.ts","../src/renderers/metadata.ts","../src/renderers/bundlers/js.ts","../src/renderers/bundlers/json.ts","../src/processing/transforms/built-in/name-transforms.ts","../src/processing/transforms/built-in/color-converter.ts","../src/processing/transforms/built-in/dimension-converter.ts","../src/processing/transforms/built-in/duration-converter.ts","../src/renderers/android.ts","../src/renderers/output-tree.ts","../src/renderers/css.ts","../src/renderers/bundlers/css.ts","../src/tokens/types.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":["kebabCase","formatHex8","formatHex","converter","r","g","b","css","prettier","toSRGB","toP3","bundleAsJsModule","indentStr","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/**\n * Thrown when lint errors are found and failOnError is true\n *\n * @param issues - Array of lint issues that caused the error\n */\nexport class LintError extends DispersaError {\n constructor(\n public issues: Array<{\n ruleId: string\n severity: 'error' | 'warn'\n message: string\n tokenName: string\n tokenPath: string[]\n }>,\n ) {\n const errorCount = issues.filter((i) => i.severity === 'error').length\n const warningCount = issues.filter((i) => i.severity === 'warn').length\n super(`Lint failed with ${errorCount} error(s) and ${warningCount} warning(s).`)\n this.name = 'LintError'\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 const msg = deprecationMsg ? ` ${deprecationMsg}` : ''\n return `DEPRECATED${msg}`\n }\n\n const msg = deprecationMsg ? `: ${deprecationMsg}` : ''\n const prefix = `[DEPRECATED${msg}]`\n return description ? `${prefix} ${description}` : prefix\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 * Build a nested object from resolved tokens using their path hierarchy.\n *\n * Shared between JSON and JS renderers that need to convert flat tokens\n * into nested structures matching the original token group hierarchy.\n *\n * @param tokens - Flat resolved tokens map\n * @param extractValue - Callback to extract the leaf value from each token\n * @returns Nested object mirroring the token path structure\n */\nexport function buildNestedTokenObject(\n tokens: ResolvedTokens,\n extractValue: (token: ResolvedToken) => unknown,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [, token] of getSortedTokenEntries(tokens)) {\n setNestedValue(result, token.path, extractValue(token))\n }\n return result\n}\n\nfunction setNestedValue(root: Record<string, unknown>, path: string[], value: unknown): void {\n let current = root\n\n for (let i = 0; i < path.length - 1; i++) {\n const part = path[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 = path[path.length - 1]\n if (lastPart != null) {\n current[lastPart] = value\n }\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 * @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 Shared utilities for bundlers\n */\n\nimport type { MediaQueryFunction, SelectorFunction } from '@renderers/types'\nimport type { ModifierInputs, ResolverDocument } from '@resolution/types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries, stripInternalTokenMetadata } from '@shared/utils/token-utils'\nimport type { ResolvedTokens, InternalResolvedTokens, ResolvedToken } 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 type TokenGroup = {\n name: string\n tokens: ResolvedToken[]\n}\n\nexport function groupTokensByType(\n tokens: ResolvedTokens,\n typeGroupMap: Record<string, string>,\n): TokenGroup[] {\n const groupMap = new Map<string, ResolvedToken[]>()\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const groupName = typeGroupMap[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\nexport function indentStr(width: number, level: number): string {\n return ' '.repeat(width * level)\n}\n\nexport function buildGeneratedFileHeader(): string {\n return [\n '// Generated by Dispersa - do not edit manually',\n '// https://github.com/dispersa-core/dispersa',\n ].join('\\n')\n}\n\nexport function toSafeIdentifier(name: string, keywords: Set<string>, capitalize: boolean): string {\n const camel = name\n .replace(/[-._]+(.)/g, (_, c: string) => c.toUpperCase())\n .replace(/[-._]+$/g, '')\n .replace(/^[-._]+/g, '')\n\n const cased = capitalize\n ? camel.charAt(0).toUpperCase() + camel.slice(1)\n : camel.charAt(0).toLowerCase() + camel.slice(1)\n\n const safe = /^\\d/.test(cased) ? `_${cased}` : cased\n\n const keyCheck = capitalize ? safe.charAt(0).toLowerCase() + safe.slice(1) : safe\n return keywords.has(keyCheck) ? `\\`${safe}\\`` : safe\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 assertFileRequired(\n buildPath: string | undefined,\n outputFile: string | ((inputs: ModifierInputs) => string) | undefined,\n outputName: string,\n presetLabel: string,\n): void {\n const requiresFile = buildPath !== undefined && buildPath !== ''\n if (!outputFile && requiresFile) {\n throw new ConfigurationError(\n `Output \"${outputName}\": file is required for ${presetLabel} output`,\n )\n }\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 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(([key, value]) => normalizedInputs[key] === value)\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 permutationKey = generatePermutationKey(\n modifierInputs,\n resolver,\n isBasePermutation(modifierInputs, defaults),\n )\n return `${outputName}-${permutationKey}.${extension}`\n}\n\nexport type BundleMetadata = {\n dimensions: string[]\n defaults: Record<string, string>\n}\n\n/**\n * Build metadata for bundle formats\n */\nexport function buildMetadata(resolver: ResolverDocument): BundleMetadata {\n const metadata: BundleMetadata = {\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 * @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 Shared utilities for consistent metadata formatting across renderers\n */\n\nimport type { ResolvedToken } from '@tokens/types'\n\nexport type CommentFormat = 'css' | 'js' | 'swift' | 'kotlin' | 'tailwind'\n\nfunction sanitizeText(text: string, format: CommentFormat): string {\n switch (format) {\n case 'css':\n case 'tailwind':\n return text.replace(/\\*\\//g, '*\\\\/').replace(/\\r?\\n/g, ' ').trim()\n case 'kotlin':\n return text.replace(/\\*\\//g, '* /').replace(/\\r?\\n/g, ' ').trim()\n case 'js':\n case 'swift':\n return text.replace(/\\r?\\n/g, ' ').trim()\n default:\n return text.trim()\n }\n}\n\nfunction buildDeprecationText(token: ResolvedToken): string {\n if (token.$deprecated == null || token.$deprecated === false) {\n return ''\n }\n\n const msg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n return msg ? `DEPRECATED: ${msg}` : 'DEPRECATED'\n}\n\nexport function buildTokenDescriptionComment(\n token: ResolvedToken,\n format: CommentFormat,\n): string | undefined {\n if (!token.$description || token.$description === '') {\n return undefined\n }\n\n const text = sanitizeText(token.$description, format)\n\n switch (format) {\n case 'css':\n case 'tailwind':\n return `/* ${text} */`\n case 'js':\n return `// ${text}`\n case 'swift':\n return `/// ${text}`\n case 'kotlin':\n return `/** ${text} */`\n default:\n return undefined\n }\n}\n\nexport function buildTokenDeprecationComment(\n token: ResolvedToken,\n format: CommentFormat,\n): string | undefined {\n const text = buildDeprecationText(token)\n if (!text) {\n return undefined\n }\n\n switch (format) {\n case 'css':\n case 'tailwind':\n return `/* ${text} */`\n case 'js':\n return `// ${text}`\n case 'swift':\n return `/// ${text}`\n case 'kotlin':\n return `/** ${text} */`\n default:\n return undefined\n }\n}\n\nexport function buildSetComment(setName: string, description?: string): string {\n if (description) {\n return `/* Set: ${setName} */\\n/* ${sanitizeText(description, 'css')} */`\n }\n return `/* Set: ${setName} */`\n}\n\nexport function buildModifierComment(modifier: string, context: string): string {\n return `/* Modifier: ${modifier}=${context} */`\n}\n\nexport function buildSwiftDeprecationAttribute(token: ResolvedToken): string | undefined {\n if (token.$deprecated == null || token.$deprecated === false) {\n return undefined\n }\n\n const msg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n if (msg) {\n return `@available(*, deprecated, message: \"${sanitizeText(msg, 'swift')}\")`\n }\n return '@available(*, deprecated)'\n}\n\nexport function buildKotlinDeprecationAnnotation(token: ResolvedToken): string | undefined {\n if (token.$deprecated == null || token.$deprecated === false) {\n return undefined\n }\n\n const msg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n if (msg) {\n return `@Deprecated(message = \"${sanitizeText(msg, 'kotlin')}\")`\n }\n return '@Deprecated'\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 JavaScript module bundler for multi-theme output\n */\n\nimport type { JsModuleRendererOptions } from '@renderers/types'\nimport type { ResolverDocument } from '@resolution/types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@tokens/types'\n\nimport { buildModifierComment } from '../metadata'\n\nimport type { BundleDataItem } from './types'\nimport type { BundleMetadata } from './utils'\nimport { buildMetadata, normalizeModifierInputs, stripInternalMetadata } from './utils'\n\ntype StringTrackingState = {\n inString: boolean\n stringChar: string\n escaped: boolean\n}\n\nfunction updateStringTracking(state: StringTrackingState, char: string): void {\n if (!state.escaped && (char === '\"' || char === \"'\" || char === '`')) {\n if (!state.inString) {\n state.inString = true\n state.stringChar = char\n } else if (char === state.stringChar) {\n state.inString = false\n state.stringChar = ''\n }\n }\n state.escaped = !state.escaped && char === '\\\\'\n}\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 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\n const state: StringTrackingState = { inString: false, stringChar: '', escaped: false }\n let braceCount = 0\n\n for (let i = startIndex; i < formattedJs.length; i++) {\n const char = formattedJs[i]!\n updateStringTracking(state, char)\n\n if (state.inString) {\n continue\n }\n\n if (char === '{') {\n braceCount++\n } else if (char === '}') {\n braceCount--\n if (braceCount === 0) {\n return formattedJs.substring(startIndex, i + 1)\n }\n }\n }\n\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: BundleMetadata,\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, isBase } 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\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const modifierParts: string[] = []\n for (const dim of metadata.dimensions) {\n const value = normalizedInputs[dim.toLowerCase()]\n if (value) {\n modifierParts.push(`${dim}=${value}`)\n }\n }\n\n const formattedJs = await formatTokens(cleanTokens)\n const tokenObject = extractObjectFromJsModule(formattedJs)\n const indentedObject = tokenObject.replace(/\\n/g, '\\n ')\n\n let comment: string\n if (modifierParts.length > 0) {\n const modifierPart = modifierParts[0]!\n const eqIndex = modifierPart.indexOf('=')\n const modifier = modifierPart.slice(0, eqIndex)\n const context = modifierPart.slice(eqIndex + 1)\n comment = buildModifierComment(modifier, context)\n } else if (isBase) {\n comment = '// Base permutation'\n } else {\n comment = `// ${key}`\n }\n\n jsBlocks.push(` ${comment}\\n ${JSON.stringify(camelKey)}: ${indentedObject}`)\n }\n\n return assembleJsBundle(metadata, jsBlocks, options?.generateHelper ?? false)\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 JSON bundler for multi-theme output\n */\n\nimport type { ResolverDocument } from '@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 if (!formatTokens) {\n throw new ConfigurationError('JSON formatter was not provided')\n }\n\n const metadata = buildMetadata(resolver)\n const tokens: Record<string, unknown> = {}\n\n for (const { tokens: tokenSet, modifierInputs } of bundleData) {\n const cleanTokens = stripInternalMetadata(tokenSet)\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 const bundle = { _meta: metadata, tokens }\n return JSON.stringify(bundle, null, 2)\n}\n","/**\n * @fileoverview Built-in name transforms using change-case library for robust case conversion\n */\n\nimport { ResolvedToken } from '@tokens/types'\nimport { camelCase, kebabCase, snakeCase, pascalCase, constantCase } from 'change-case'\n\nimport type { Transform } from '../types'\n\n/**\n * Convert token name to camelCase\n */\nexport function nameCamelCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = camelCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to kebab-case\n */\nexport function nameKebabCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = kebabCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to snake_case\n */\nexport function nameSnakeCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = snakeCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to PascalCase\n */\nexport function namePascalCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = pascalCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to CONSTANT_CASE\n */\nexport function nameConstantCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = constantCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Add prefix to token name\n *\n * @example\n * ```typescript\n * // Add 'ds-' prefix to all token names\n * transforms: [namePrefix('ds-')]\n * // 'color.primary' becomes 'ds-color.primary'\n * ```\n */\nexport function namePrefix(prefix: string): Transform {\n return {\n transform: (token: ResolvedToken) => {\n return {\n ...token,\n name: `${prefix}${token.name}`,\n }\n },\n }\n}\n\n/**\n * Add suffix to token name\n *\n * @example\n * ```typescript\n * // Add '-token' suffix to all token names\n * transforms: [nameSuffix('-token')]\n * // 'color.primary' becomes 'color.primary-token'\n * ```\n */\nexport function nameSuffix(suffix: string): Transform {\n return {\n transform: (token: ResolvedToken) => {\n return {\n ...token,\n name: `${token.name}${suffix}`,\n }\n },\n }\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 * @fileoverview Duration format conversion utilities for DTCG 2025.10\n * Handles duration object format { value: number, unit: 'ms' | 's' }\n */\n\nimport type { DurationValue } from '@tokens/types'\n\n/**\n * Check if a value is in duration object format\n */\nexport function 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/**\n * Convert DTCG duration object to CSS string\n */\nexport function durationObjectToString(duration: DurationValue): string {\n return `${duration.value}${duration.unit}`\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/transforms/built-in/color-converter'\nimport { isDimensionObject } from '@processing/transforms/built-in/dimension-converter'\nimport { isDurationObject } from '@processing/transforms/built-in/duration-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { ColorValueObject, DimensionValue, ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport { converter } from 'culori'\n\nimport {\n assertFileRequired,\n buildGeneratedFileHeader,\n buildInMemoryOutputKey,\n groupTokensByType,\n indentStr,\n resolveFileName,\n stripInternalMetadata,\n toSafeIdentifier,\n} from './bundlers/utils'\nimport type { TokenGroup } from './bundlers/utils'\nimport { buildKotlinDeprecationAnnotation, buildTokenDescriptionComment } from './metadata'\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 visPrefix: string\n indent: number\n}\n\ntype TokenTreeNode = {\n children: Map<string, TokenTreeNode>\n token?: 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 escapeKotlinString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\$/g, '\\\\$')\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// 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 visibility = options?.visibility\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,\n visPrefix: visibility ? `${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 /**\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 toSafeIdentifier(joined, KOTLIN_KEYWORDS, false)\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 tokenTypes = this.collectTokenTypesFromEntries(tokens)\n const tree = this.buildTokenTree(tokens)\n\n return this.buildFile(tokenTypes, options, (lines) => {\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${options.visPrefix}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 = groupTokensByType(tokens, KOTLIN_TYPE_GROUP_MAP)\n const tokenTypes = this.collectTokenTypesFromEntries(tokens)\n\n return this.buildFile(tokenTypes, options, (lines) => {\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${options.visPrefix}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[]) => void,\n ): string {\n const imports = this.collectImports(tokenTypes, options)\n const lines: string[] = []\n\n lines.push(buildGeneratedFileHeader())\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(options))\n lines.push('')\n }\n\n renderBody(lines)\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 groupIndent = indentStr(options.indent, baseDepth)\n const valIndent = indentStr(options.indent, baseDepth + 1)\n\n for (const group of groups) {\n lines.push(`${groupIndent}${options.visPrefix}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 const descriptionComment = buildTokenDescriptionComment(token, 'kotlin')\n if (descriptionComment) {\n lines.push(`${valIndent}${descriptionComment}`)\n }\n\n const deprecation = buildKotlinDeprecationAnnotation(token)\n if (deprecation) {\n lines.push(`${valIndent}${deprecation}`)\n }\n\n lines.push(\n `${valIndent}${options.visPrefix}val ${kotlinName}${annotation} = ${kotlinValue}`,\n )\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 pad = indentStr(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 = toSafeIdentifier(key, KOTLIN_KEYWORDS, true)\n lines.push(`${pad}${options.visPrefix}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 pad = indentStr(options.indent, depth)\n const kotlinName = toSafeIdentifier(key, KOTLIN_KEYWORDS, false)\n const kotlinValue = this.formatKotlinValue(token, options, depth)\n const annotation = this.typeAnnotationSuffix(token)\n\n const descriptionComment = buildTokenDescriptionComment(token, 'kotlin')\n if (descriptionComment) {\n lines.push(`${pad}${descriptionComment}`)\n }\n\n const deprecation = buildKotlinDeprecationAnnotation(token)\n if (deprecation) {\n lines.push(`${pad}${deprecation}`)\n }\n\n lines.push(`${pad}${options.visPrefix}val ${kotlinName}${annotation} = ${kotlinValue}`)\n }\n\n // -----------------------------------------------------------------------\n // Shadow data class\n // -----------------------------------------------------------------------\n\n private buildShadowTokenClass(options: ResolvedOptions): string[] {\n const i1 = indentStr(options.indent, 1)\n return [\n '@Immutable',\n `${options.visPrefix}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 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 (isDurationObject(value)) {\n return value.unit === 'ms' ? `${value.value}.milliseconds` : `${value.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 = indentStr(options.indent, depth + 1)\n const closeIndent = indentStr(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 = indentStr(options.indent, depth + 1)\n const closeIndent = indentStr(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 assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone Android',\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 assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'bundle Android',\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) => {\n const i1 = indentStr(options.indent, 1)\n\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${options.visPrefix}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}${options.visPrefix}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 types = new Set<string>()\n for (const { tokens } of context.permutations) {\n for (const t of this.collectTokenTypesFromEntries(stripInternalMetadata(tokens))) {\n types.add(t)\n }\n }\n return types\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 = groupTokensByType(tokens, KOTLIN_TYPE_GROUP_MAP)\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) => toSafeIdentifier(v, KOTLIN_KEYWORDS, true)).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 { colorObjectToHex, isColorObject } from '@processing/transforms/built-in/color-converter'\nimport {\n dimensionObjectToString,\n isDimensionObject,\n} from '@processing/transforms/built-in/dimension-converter'\nimport {\n durationObjectToString,\n isDurationObject,\n} from '@processing/transforms/built-in/duration-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getPureAliasReferenceName, getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type {\n DimensionValue,\n DurationValue,\n ResolvedToken,\n ResolvedTokens,\n ShadowValueObject,\n} from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { buildSetLayerBlocks, bundleAsCss } from './bundlers/css'\nimport {\n assertFileRequired,\n buildInMemoryOutputKey,\n filterTokensBySource,\n filterTokensFromSets,\n isBasePermutation,\n normalizeModifierInputs,\n resolveBaseFileName,\n resolveMediaQuery,\n resolveFileName,\n resolveSelector,\n stripInternalMetadata,\n} from './bundlers/utils'\nimport { buildTokenDeprecationComment, buildTokenDescriptionComment } from './metadata'\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 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 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 sortedTokens = getSortedTokenEntries(tokens).map(([, token]) => token)\n const referenceTokens = opts.referenceTokens\n const lines: string[] = []\n\n this.buildCssBlock(lines, sortedTokens, opts.selector, tokens, referenceTokens, opts)\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 const deprecationComment = buildTokenDeprecationComment(token, 'css')\n if (deprecationComment) {\n lines.push(`${indent}${deprecationComment}${newline}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'css')\n if (descriptionComment) {\n lines.push(`${indent}${descriptionComment}${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 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 ShadowValueObject\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) || 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 (isDurationObject(value)) {\n return durationObjectToString(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 /**\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 (isDurationObject(value)) {\n return durationObjectToString(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\n .map((shadowObj) => this.formatShadow(shadowObj as unknown as ShadowValueObject))\n .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 ShadowValueObject)\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: ShadowValueObject): 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 (isDurationObject(value.duration)) {\n parts.push(durationObjectToString(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 (isDurationObject(value.delay)) {\n parts.push(durationObjectToString(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: 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 assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone CSS',\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 = 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 assertFileRequired(context.buildPath, context.output.file, context.output.name, 'modifier CSS')\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 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 { selector, mediaQuery } = this.resolveBaseModifierContext(context, options)\n const content = await this.formatSetBlocksCss(\n setBlocks,\n basePermutation.tokens,\n selector,\n mediaQuery,\n options,\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 resolveBaseModifierContext(\n context: RenderContext,\n options: CssRendererOptions,\n ): { selector: string; mediaQuery: string } {\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 return {\n selector: resolveSelector(\n options.selector,\n firstModifierName,\n firstModifierContext,\n true,\n baseModifierInputs,\n ),\n mediaQuery: resolveMediaQuery(\n options.mediaQuery,\n firstModifierName,\n firstModifierContext,\n true,\n baseModifierInputs,\n ),\n }\n }\n\n private async formatSetBlocksCss(\n setBlocks: ReturnType<typeof buildSetLayerBlocks>,\n referenceTokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n options: CssRendererOptions,\n ): Promise<string> {\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 return cssBlocks.join('\\n')\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\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 * @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 CSS bundler for multi-theme output\n */\n\nimport type { CssRendererOptions } from '@renderers/types'\nimport type { ResolverDocument } from '@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\nconst REF_PREFIX_SETS = '#/sets/'\nconst REF_PREFIX_MODIFIERS = '#/modifiers/'\n\ntype ResolvedCssOptions = Omit<CssRendererOptions, 'selector' | 'mediaQuery'> & {\n selector?: string\n mediaQuery?: string\n referenceTokens?: ResolvedTokens\n}\n\nconst getSourceSet = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n return '_sourceSet' in token && typeof token._sourceSet === 'string'\n ? token._sourceSet\n : undefined\n}\n\nconst getSourceModifier = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n return '_sourceModifier' in token && typeof token._sourceModifier === 'string'\n ? token._sourceModifier\n : 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\nfunction addLayerBlock(\n blocks: SetLayerBlock[],\n included: Set<string>,\n key: string,\n blockTokens: BundleDataItem['tokens'],\n description?: string,\n): void {\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/** 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 for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string' || !ref.startsWith(REF_PREFIX_SETS)) {\n continue\n }\n\n const setName = ref.slice(REF_PREFIX_SETS.length)\n addLayerBlock(\n blocks,\n included,\n `Set: ${setName}`,\n collectSetTokens(tokens, setName, included),\n resolver.sets?.[setName]?.description,\n )\n }\n\n addLayerBlock(blocks, included, '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 for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string') {\n continue\n }\n processResolutionOrderRef(ref, tokens, blocks, included, baseInputs, resolver)\n }\n\n addLayerBlock(blocks, included, 'Unattributed', collectRemainder(tokens, included))\n return blocks\n}\n\nfunction processResolutionOrderRef(\n ref: string,\n tokens: BundleDataItem['tokens'],\n blocks: SetLayerBlock[],\n included: Set<string>,\n baseInputs: Record<string, string>,\n resolver: ResolverDocument,\n): void {\n if (ref.startsWith(REF_PREFIX_SETS)) {\n const setName = ref.slice(REF_PREFIX_SETS.length)\n addLayerBlock(\n blocks,\n included,\n `Set: ${setName}`,\n collectSetTokens(tokens, setName, included),\n resolver.sets?.[setName]?.description,\n )\n return\n }\n\n if (!ref.startsWith(REF_PREFIX_MODIFIERS)) {\n return\n }\n\n const modifierName = ref.slice(REF_PREFIX_MODIFIERS.length)\n const modifier = resolver.modifiers?.[modifierName]\n const selectedContext = baseInputs[modifierName.toLowerCase()]\n if (!modifier || !selectedContext) {\n return\n }\n\n const expectedSource = `${modifierName}-${selectedContext}`.toLowerCase()\n addLayerBlock(\n blocks,\n included,\n `Modifier: ${modifierName}=${selectedContext} (default)`,\n collectModifierTokens(tokens, expectedSource, included),\n modifier.description,\n )\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 pushUniqueBundleItem(\n ordered: BundleDataItem[],\n includedKeys: Set<string>,\n item: BundleDataItem | undefined,\n): void {\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\nfunction appendModifierPermutations(\n bundleData: BundleDataItem[],\n modifiers: NonNullable<ResolverDocument['modifiers']>,\n orderedNames: string[],\n baseInputs: Record<string, string>,\n ordered: BundleDataItem[],\n includedKeys: Set<string>,\n): void {\n for (const modifierName of orderedNames) {\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 pushUniqueBundleItem(\n ordered,\n includedKeys,\n findSingleDiffPermutation(bundleData, modifierName, ctx, baseInputs),\n )\n }\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 pushUniqueBundleItem(ordered, includedKeys, baseItem)\n appendModifierPermutations(\n bundleData,\n modifiers,\n orderedModifierNames,\n baseInputs,\n ordered,\n includedKeys,\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(REF_PREFIX_MODIFIERS)) {\n continue\n }\n const name = ref.slice(REF_PREFIX_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 * @fileoverview Token types - extended from schema-generated types\n *\n * Base token types are defined manually to match DTCG 2025.10.\n * This keeps TypeScript types stable while runtime validation relies on\n * the vendored DTCG JSON Schemas.\n */\n\n// ============================================================================\n// DTCG TOKEN TYPES (MANUAL)\n// ============================================================================\n\nexport type JsonPointerReferenceObject = {\n $ref: string\n}\n\nexport type TokenValueReference = string | JsonPointerReferenceObject\n\nexport type Token = {\n $value?: TokenValue | TokenValueReference\n $ref?: string\n $type?: TokenType\n $description?: string\n $deprecated?: boolean | string\n $extensions?: Record<string, unknown>\n}\n\n/**\n * Internal token shape used by the resolver pipeline\n */\nexport type InternalToken = Token & {\n /** Internal: Source modifier tag for bundle outputs (not part of DTCG spec) */\n _sourceModifier?: string\n}\n\ntype TokenGroupMetadataValue = string | boolean | Record<string, unknown> | undefined\n\ntype TokenGroupBase = {\n $type?: TokenType\n $description?: string\n $deprecated?: boolean | string\n $extensions?: Record<string, unknown>\n $extends?: string\n $root?: Token\n}\n\n// Note: interface used to allow recursive index signature (TS2456 with type alias).\nexport interface TokenGroup extends TokenGroupBase {\n [key: string]: Token | InternalToken | TokenGroup | TokenGroupMetadataValue\n}\n\n// ============================================================================\n// HELPER TYPES (NOT SCHEMA-GENERATED)\n// ============================================================================\n\n/**\n * Token type discriminator - union of all valid token type strings\n *\n * Represents the possible values for the $type property in DTCG tokens.\n */\nexport type TokenType =\n | 'color'\n | 'dimension'\n | 'fontFamily'\n | 'fontWeight'\n | 'duration'\n | 'cubicBezier'\n | 'number'\n | 'shadow'\n | 'typography'\n | 'border'\n | 'strokeStyle'\n | 'transition'\n | 'gradient'\n\n/**\n * Token value types - any valid value that can appear in a token\n *\n * Represents the possible types for the $value property in tokens.\n * Can be primitives, objects, or arrays depending on the token type.\n */\nexport type TokenValue = string | number | boolean | Record<string, unknown> | unknown[]\n\n// ============================================================================\n// VALUE TYPES FOR DEVELOPER CONVENIENCE\n// ============================================================================\n\n/**\n * Valid DTCG color space identifiers\n * All 14 color spaces from DTCG Color Module 2025-10\n */\nexport type ColorSpace =\n | 'srgb' // sRGB (IEC 61966-2-1:1999)\n | 'srgb-linear' // Linear sRGB\n | 'hsl' // Hue, Saturation, Lightness\n | 'hwb' // Hue, Whiteness, Blackness\n | 'lab' // CIELAB (CIE L*a*b*)\n | 'lch' // CIE LCH (Lightness, Chroma, Hue)\n | 'oklab' // Oklab perceptual color space\n | 'oklch' // Oklch (Lightness, Chroma, Hue)\n | 'display-p3' // Display P3 (DCI-P3 D65 whitepoint)\n | 'a98-rgb' // Adobe RGB (1998)\n | 'prophoto-rgb' // ProPhoto RGB (ROMM RGB)\n | 'rec2020' // Rec. 2020 (ITU-R BT.2020-2)\n | 'xyz-d65' // CIE XYZ with D65 whitepoint\n | 'xyz-d50' // CIE XYZ with D50 whitepoint\n\n/**\n * Color component value: number or the \"none\" keyword for missing channels\n * Token references are handled separately via alias resolution\n */\nexport type ColorComponent = number | 'none'\n\n/**\n * DTCG color object format with colorSpace and components\n * Each color space has different component meanings and ranges:\n * - RGB-based (srgb, srgb-linear, display-p3, a98-rgb, prophoto-rgb, rec2020): [R: 0-1, G: 0-1, B: 0-1]\n * - HSL: [H: angle, S: 0-100, L: 0-100]\n * - HWB: [H: angle, W: 0-100, B: 0-100]\n * - Lab/CIELab: [L: 0-100, a: -125 to 125, b: -125 to 125]\n * - LCH: [L: 0-100, C: 0-150, H: angle]\n * - OKLab: [L: 0-1, a: -0.4 to 0.4, b: -0.4 to 0.4]\n * - OKLCH: [L: 0-1, C: 0-0.4, H: angle]\n * - XYZ: [X: unbounded, Y: unbounded, Z: unbounded]\n */\nexport type ColorValueObject = {\n colorSpace: ColorSpace\n components: [ColorComponent, ColorComponent, ColorComponent]\n alpha?: number\n hex?: string\n}\n\n/**\n * DTCG 2025-10 compliant color value\n *\n * Per DTCG spec, color values must be one of:\n * 1. **Color object** with colorSpace and components (e.g., `{ colorSpace: 'srgb', components: [1, 0, 0] }`)\n * 2. **Token reference** using `{token.path}` or JSON Pointer object (e.g., `\"{color.brand.primary}\"`)\n *\n * ⚠️ **Important**: Arbitrary CSS color strings like `\"#ff0000\"`, `\"rgb(255, 0, 0)\"`, or `\"red\"`\n * are NOT valid per DTCG spec. String values MUST be alias references.\n *\n * @see {@link https://www.designtokens.org/tr/2025.10/color/ | DTCG Color Module}\n * @see {@link https://www.designtokens.org/tr/2025.10/format/#color-0 | DTCG Format: Color Type}\n *\n * @example Valid color values\n * ```typescript\n * // Object format (preferred)\n * const color1: ColorValue = {\n * colorSpace: 'srgb',\n * components: [1, 0, 0],\n * alpha: 1\n * }\n *\n * // Alias reference (resolves to another token)\n * const color2: ColorValue = \"{color.brand.primary}\"\n * ```\n */\nexport type ColorValue = ColorValueObject | TokenValueReference\n\n/**\n * DTCG 2025-10 compliant dimension value\n *\n * Per DTCG spec, dimension values MUST use object format with\n * numeric value and string unit properties.\n *\n * ⚠️ **Important**: String values like `\"16px\"` are NOT valid per DTCG spec.\n * Dimensions MUST be objects with separate value and unit properties.\n *\n * @see {@link https://www.designtokens.org/tr/2025.10/format/#dimension-0 | DTCG Format: Dimension Type}\n *\n * @example Valid dimension values\n * ```typescript\n * const spacing: DimensionValue = { value: 16, unit: 'px' }\n * const fontSize: DimensionValue = { value: 1.5, unit: 'rem' }\n * const borderWidth: DimensionValue = { value: 2, unit: 'px' }\n * ```\n */\nexport type DimensionValue = {\n value: number\n unit: 'px' | 'rem'\n}\n\n/**\n * Font family value - single string or array of fallback fonts\n */\nexport type FontFamilyValue = string | string[]\n\n/**\n * Font weight value - numeric (1-1000) or named value\n */\nexport type FontWeightValue = number | string\n\n/**\n * Duration value - DTCG duration object\n */\nexport type DurationValue = { value: number; unit: 'ms' | 's' }\n\n/**\n * Cubic bezier value - 4-number array for animation easing\n */\nexport type CubicBezierValue = [number, number, number, number]\n\n/**\n * Shadow value object (DTCG 2025.10 composite type - Section 9.6)\n *\n * Represents a shadow effect with color, offset, blur, and optional spread.\n * Uses proper ColorValue and DimensionValue types per DTCG spec.\n *\n * @example\n * ```json\n * {\n * \"$type\": \"shadow\",\n * \"$value\": {\n * \"color\": { \"colorSpace\": \"srgb\", \"components\": [0, 0, 0], \"alpha\": 0.5 },\n * \"offsetX\": { \"value\": 0, \"unit\": \"px\" },\n * \"offsetY\": { \"value\": 4, \"unit\": \"px\" },\n * \"blur\": { \"value\": 8, \"unit\": \"px\" },\n * \"spread\": { \"value\": 0, \"unit\": \"px\" }\n * }\n * }\n * ```\n */\nexport type ShadowValueObject = {\n /** Shadow color (color object or alias reference) */\n color: ColorValue\n /** Horizontal offset */\n offsetX: DimensionValue\n /** Vertical offset */\n offsetY: DimensionValue\n /** Blur radius */\n blur: DimensionValue\n /** Spread radius */\n spread: DimensionValue\n /** Whether shadow is inset */\n inset?: boolean\n}\n\n/**\n * Shadow value - single shadow or array of shadows\n */\nexport type ShadowValue = ShadowValueObject | ShadowValueObject[]\n\n/**\n * Unresolved typography token type (pre-resolution)\n */\nexport type UnresolvedTypographyToken = Token & {\n $type: 'typography'\n $value: TypographyValue | TokenValueReference\n}\n\n/**\n * Unresolved border token type (pre-resolution)\n */\nexport type UnresolvedBorderToken = Token & {\n $type: 'border'\n $value: BorderValue | TokenValueReference\n}\n\n/**\n * Unresolved stroke style token type (pre-resolution)\n */\nexport type UnresolvedStrokeStyleToken = Token & {\n $type: 'strokeStyle'\n $value: StrokeStyleValue | TokenValueReference\n}\n\n/**\n * Unresolved transition token type (pre-resolution)\n */\nexport type UnresolvedTransitionToken = Token & {\n $type: 'transition'\n $value: TransitionValue | TokenValueReference\n}\n\n/**\n * Unresolved gradient token type (pre-resolution)\n */\nexport type UnresolvedGradientToken = Token & {\n $type: 'gradient'\n $value: GradientValue | TokenValueReference\n}\n\n/**\n * Stroke style value object\n */\nexport type StrokeStyleValueObject = {\n dashArray: DimensionValue[]\n lineCap: 'round' | 'butt' | 'square'\n}\n\n/**\n * Stroke style value\n */\nexport type StrokeStyleValue = string | StrokeStyleValueObject\n\n/**\n * Border value object\n */\nexport type BorderValue = {\n color: ColorValue\n width: DimensionValue\n style: StrokeStyleValue\n}\n\n/**\n * Typography value object\n */\nexport type TypographyValue = {\n fontFamily: FontFamilyValue\n fontSize: DimensionValue\n fontWeight: FontWeightValue\n letterSpacing: DimensionValue\n lineHeight: number\n}\n\n/**\n * Transition value object\n */\nexport type TransitionValue = {\n duration: DurationValue\n delay: DurationValue\n timingFunction: CubicBezierValue\n}\n\n/**\n * Gradient stop value object\n */\nexport type GradientStop = {\n color: ColorValue\n position: number\n}\n\n/**\n * Gradient value\n */\nexport type GradientValue = GradientStop[]\n\n// ============================================================================\n// NARROWED VALUE TYPE (FOR CONSUMER USE)\n// ============================================================================\n\n/**\n * Union of all known DTCG token value types.\n *\n * Provides narrower typing than `TokenValue` for consumers who want\n * better autocomplete and type checking when working with resolved tokens.\n *\n * Use the type guard helpers (`isColorToken`, `isDimensionToken`, etc.)\n * to narrow a `ResolvedToken` to a specific value type.\n *\n * @example\n * ```typescript\n * import type { ResolvedToken } from 'dispersa'\n * import { isColorToken, isDimensionToken } from 'dispersa'\n *\n * function process(token: ResolvedToken) {\n * if (isColorToken(token)) {\n * // token.$value is narrowed to ColorValue\n * }\n * if (isDimensionToken(token)) {\n * // token.$value is narrowed to DimensionValue\n * }\n * }\n * ```\n */\nexport type DesignTokenValue =\n | ColorValueObject\n | DimensionValue\n | DurationValue\n | CubicBezierValue\n | ShadowValueObject\n | ShadowValueObject[]\n | TypographyValue\n | BorderValue\n | StrokeStyleValueObject\n | StrokeStyleValue\n | TransitionValue\n | GradientValue\n | FontFamilyValue\n | FontWeightValue\n | number\n\n// ============================================================================\n// TOKEN TYPE GUARDS\n// ============================================================================\n\n/** Type-narrowed token whose `$value` is a `ColorValueObject` or color string */\nexport type ColorToken = ResolvedToken & { $type: 'color' }\n\n/** Type-narrowed token whose `$value` is a `DimensionValue` */\nexport type DimensionToken = ResolvedToken & { $type: 'dimension' }\n\n/** Type-narrowed token whose `$value` is a `ShadowValue` */\nexport type ShadowToken = ResolvedToken & { $type: 'shadow' }\n\n/** Type-narrowed token whose `$value` is a `TypographyValue` */\nexport type TypographyToken = ResolvedToken & { $type: 'typography' }\n\n/** Type-narrowed token whose `$value` is a `BorderValue` */\nexport type BorderToken = ResolvedToken & { $type: 'border' }\n\n/** Type-narrowed token whose `$value` is a `DurationValue` */\nexport type DurationToken = ResolvedToken & { $type: 'duration' }\n\n/** Type-narrowed token whose `$value` is a `TransitionValue` */\nexport type TransitionToken = ResolvedToken & { $type: 'transition' }\n\n/** Type-narrowed token whose `$value` is a `GradientValue` */\nexport type GradientToken = ResolvedToken & { $type: 'gradient' }\n\n/** Check if a resolved token is a color token */\nexport function isColorToken(token: ResolvedToken): token is ColorToken {\n return token.$type === 'color'\n}\n\n/** Check if a resolved token is a dimension token */\nexport function isDimensionToken(token: ResolvedToken): token is DimensionToken {\n return token.$type === 'dimension'\n}\n\n/** Check if a resolved token is a shadow token */\nexport function isShadowToken(token: ResolvedToken): token is ShadowToken {\n return token.$type === 'shadow'\n}\n\n/** Check if a resolved token is a typography token */\nexport function isTypographyToken(token: ResolvedToken): token is TypographyToken {\n return token.$type === 'typography'\n}\n\n/** Check if a resolved token is a border token */\nexport function isBorderToken(token: ResolvedToken): token is BorderToken {\n return token.$type === 'border'\n}\n\n/** Check if a resolved token is a duration token */\nexport function isDurationToken(token: ResolvedToken): token is DurationToken {\n return token.$type === 'duration'\n}\n\n/** Check if a resolved token is a transition token */\nexport function isTransitionToken(token: ResolvedToken): token is TransitionToken {\n return token.$type === 'transition'\n}\n\n/** Check if a resolved token is a gradient token */\nexport function isGradientToken(token: ResolvedToken): token is GradientToken {\n return token.$type === 'gradient'\n}\n\n// ============================================================================\n// COMPOSED TYPES (NOT SCHEMA-GENERATED)\n// ============================================================================\n\n/**\n * Top-level collection of tokens and groups\n *\n * Maps token/group names to their definitions. This is the structure\n * of a raw token file before resolution.\n */\nexport type TokenCollection = Record<string, Token | TokenGroup>\n\n/**\n * Token document nodes used during resolution\n */\nexport type TokenNode = Token | TokenGroup\n\n/**\n * Internal token document nodes used during resolution\n */\nexport type InternalTokenNode = InternalToken | TokenGroup\n\n/**\n * Token document structure (pre-resolution)\n */\nexport type TokenDocument = Record<string, TokenNode>\n\n/**\n * Internal token document structure (pre-resolution, with internal metadata)\n */\nexport type InternalTokenDocument = Record<string, InternalTokenNode>\n\n/**\n * Fully resolved token with computed metadata\n *\n * After resolution, tokens include additional metadata like their\n * full path in the token hierarchy and the original value before\n * any alias or reference resolution.\n *\n * @example\n * ```typescript\n * {\n * $value: \"#ff0000\",\n * $type: \"color\",\n * path: [\"color\", \"brand\", \"primary\"],\n * name: \"color.brand.primary\",\n * originalValue: \"{color.red.500}\" // Before alias resolution\n * }\n * ```\n */\nexport type ResolvedToken = Token & {\n /** Hierarchical path segments (e.g., ['color', 'brand', 'primary']) */\n path: string[]\n\n /** Fully qualified token name (e.g., 'color.brand.primary') */\n name: string\n\n /**\n * The raw value before any alias or reference resolution.\n *\n * For alias tokens this contains the alias reference string\n * (e.g., `\"{color.primary}\"`) or a composite value with embedded\n * alias references. For non-alias tokens this equals `$value`.\n *\n * Use the built-in `isAlias()` / `isBase()` filters or inspect\n * this value with `getPureAliasReferenceName()` to determine\n * whether the token was originally an alias.\n */\n originalValue: TokenValue\n}\n\n/**\n * Collection of resolved tokens indexed by name\n *\n * Maps token names to their resolved definitions. This is the primary\n * format used throughout Dispersa after token resolution.\n *\n * @example\n * ```typescript\n * {\n * \"color.brand.primary\": {\n * $value: \"#ff0000\",\n * $type: \"color\",\n * path: [\"color\", \"brand\", \"primary\"],\n * name: \"color.brand.primary\",\n * originalValue: \"#ff0000\"\n * }\n * }\n * ```\n */\nexport type ResolvedTokens = Record<string, ResolvedToken>\n\n/**\n * Internal resolved token with metadata used by the pipeline and bundlers\n *\n * These fields are not part of the DTCG spec and should be stripped before\n * returning tokens to public callers or rendering output.\n */\nexport type InternalResolvedToken = ResolvedToken & {\n /** Internal: Whether this token was originally an alias (not part of DTCG spec) */\n _isAlias?: boolean\n /** Internal: Source modifier tag for bundle outputs (not part of DTCG spec) */\n _sourceModifier?: string\n /** Internal: Source set name for bundle outputs (not part of DTCG spec) */\n _sourceSet?: string\n}\n\n/**\n * Internal collection of resolved tokens (with internal metadata)\n */\nexport type InternalResolvedTokens = Record<string, InternalResolvedToken>\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 { isColorObject, dtcgObjectToCulori } from '@processing/transforms/built-in/color-converter'\nimport { isDimensionObject } from '@processing/transforms/built-in/dimension-converter'\nimport { isDurationObject } from '@processing/transforms/built-in/duration-converter'\nimport type {\n ColorValueObject,\n DimensionValue,\n DurationValue,\n GradientStop,\n ResolvedToken,\n ResolvedTokens,\n} from '@tokens/types'\nimport { isBorderToken, isShadowToken, isTypographyToken } from '@tokens/types'\nimport { converter } from 'culori'\n\nimport {\n assertFileRequired,\n buildGeneratedFileHeader,\n buildInMemoryOutputKey,\n groupTokensByType,\n indentStr,\n resolveFileName,\n stripInternalMetadata,\n toSafeIdentifier,\n} from './bundlers/utils'\nimport { buildSwiftDeprecationAttribute, buildTokenDescriptionComment } from './metadata'\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\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 const access = options.accessLevel\n const groups = groupTokensByType(tokens, SWIFT_TYPE_GROUP_MAP)\n const imports = this.collectImports(tokens)\n const staticPrefix = this.staticLetPrefix(options)\n const frozen = this.frozenPrefix(options)\n const lines: string[] = []\n\n lines.push(buildGeneratedFileHeader())\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 this.pushTokenLayout(lines, groups, options, access, staticPrefix, frozen)\n lines.push(...this.buildViewExtensions(tokens, access, options))\n if (options.structure !== 'grouped') {\n lines.push('')\n }\n\n return lines.join('\\n')\n }\n\n private pushTokenLayout(\n lines: string[],\n groups: Array<{ name: string; tokens: ResolvedToken[] }>,\n options: Required<IosRendererOptions>,\n access: string,\n staticPrefix: string,\n frozen: string,\n ): void {\n const i1 = indentStr(options.indent, 1)\n const i2 = indentStr(options.indent, 2)\n\n if (options.structure === 'grouped') {\n this.pushGroupedLayout(lines, groups, options, access, i1, i2, staticPrefix, frozen)\n return\n }\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 this.pushTokenDeclarations(lines, group.tokens, options, access, i2, staticPrefix)\n lines.push(`${i1}}`)\n lines.push('')\n }\n\n lines.push('}')\n }\n\n private pushGroupedLayout(\n lines: string[],\n groups: Array<{ name: string; tokens: ResolvedToken[] }>,\n options: Required<IosRendererOptions>,\n access: string,\n i1: string,\n i2: string,\n staticPrefix: string,\n frozen: string,\n ): void {\n const namespace = options.extensionNamespace\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 this.pushTokenDeclarations(lines, group.tokens, options, access, i2, staticPrefix)\n lines.push(`${i1}}`)\n lines.push('}')\n lines.push('')\n }\n }\n\n private pushTokenDeclarations(\n lines: string[],\n tokens: ResolvedToken[],\n options: Required<IosRendererOptions>,\n access: string,\n indent: string,\n staticPrefix: string,\n ): void {\n for (const token of 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 = buildTokenDescriptionComment(token, 'swift')\n if (docComment) {\n lines.push(`${indent}${docComment}`)\n }\n\n const deprecationAttr = buildSwiftDeprecationAttribute(token)\n if (deprecationAttr) {\n lines.push(`${indent}${deprecationAttr}`)\n }\n\n lines.push(`${indent}${access} ${staticPrefix}${swiftName}${annotation} = ${swiftValue}`)\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 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 toSafeIdentifier(joined, SWIFT_KEYWORDS, false)\n }\n\n private formatSwiftValue(token: ResolvedToken, options: Required<IosRendererOptions>): string {\n const { $type, $value: value } = token\n\n switch ($type) {\n case 'color':\n return this.formatColorValue(value, options)\n case 'dimension':\n return this.formatDimensionValue(value)\n case 'fontFamily':\n return this.formatFontFamilyValue(value)\n case 'fontWeight':\n return this.formatFontWeightValue(value)\n case 'duration':\n return this.formatDurationValue(value)\n case 'shadow':\n return this.formatShadowValue(value, options)\n case 'typography':\n return this.formatTypographyValue(value)\n case 'border':\n return this.formatBorderValue(value, options)\n case 'gradient':\n return this.formatGradientValue(value, options)\n case 'number':\n return String(value)\n case 'cubicBezier':\n if (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 break\n }\n\n return this.formatSwiftPrimitive(value)\n }\n\n private formatSwiftPrimitive(value: unknown): string {\n if (typeof value === 'string') {\n return `\"${this.escapeSwiftString(value)}\"`\n }\n if (typeof value === 'number') {\n return String(value)\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\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 return this.dimensionToPoints(value as DimensionValue)\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 (isDurationObject(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 return this.dimensionToPoints(typo.letterSpacing as DimensionValue)\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 basePt = this.dimensionToNumericPoints(typo.fontSize as DimensionValue)\n const lineHeightPt = Math.round(basePt * typo.lineHeight * 100) / 100\n return String(lineHeightPt - basePt)\n }\n\n private dimensionToNumericPoints(dim: DimensionValue): number {\n return dim.unit === 'rem' ? dim.value * 16 : dim.value\n }\n\n private dimensionToPoints(dim: DimensionValue): string {\n return String(this.dimensionToNumericPoints(dim))\n }\n\n /** Formats a dimension as a CGFloat literal (appends `.0` for integers). */\n private dimensionToCGFloat(dim: DimensionValue): string {\n const ptValue = this.dimensionToNumericPoints(dim)\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 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 /**\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 /** 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 (Object.values(tokens).some(isShadowToken)) {\n lines.push('')\n lines.push(...this.buildShadowStyleStruct(access, options))\n }\n\n if (Object.values(tokens).some(isTypographyToken)) {\n lines.push('')\n lines.push(...this.buildTypographyStyleStruct(access, options))\n }\n\n if (Object.values(tokens).some(isBorderToken)) {\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 = 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 = 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 = 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 = indentStr(options.indent, 1)\n const i2 = indentStr(options.indent, 2)\n\n if (Object.values(tokens).some(isShadowToken)) {\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 (Object.values(tokens).some(isTypographyToken)) {\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 assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone iOS',\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 assertFileRequired,\n buildInMemoryOutputKey,\n isBasePermutation,\n resolveFileName,\n stripInternalMetadata,\n} from '@renderers/bundlers/utils'\nimport { buildNestedTokenObject, getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { buildTokenDeprecationComment, buildTokenDescriptionComment } from './metadata'\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: 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 assertFileRequired(context.buildPath, context.output.file, context.output.name, 'JS module')\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: Required<JsModuleRendererOptions>,\n ): Promise<string> {\n const lines: string[] = []\n lines.push(...this.formatAsObject(tokens, options))\n\n const code = lines.join('\\n')\n\n if (options.minify) {\n return code\n }\n\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 private formatAsObject(\n tokens: ResolvedTokens,\n options: Required<JsModuleRendererOptions>,\n ): string[] {\n const lines: string[] = []\n const tokenMap = this.buildTokenMap(tokens)\n const varName = options.moduleName !== '' ? options.moduleName : 'tokens'\n\n if (options.structure === 'flat') {\n lines.push(`const ${varName} = {`)\n this.addFlatProperties(lines, tokens, 1)\n lines.push('}')\n } else {\n lines.push(`const ${varName} = {`)\n const tokenObj = this.tokensToPlainObject(tokens, 'nested')\n this.addNestedProperties(lines, tokenObj, tokenMap, 1)\n lines.push('}')\n }\n\n lines.push('')\n lines.push(`export default ${varName}`)\n\n return lines\n }\n\n private buildTokenMap(tokens: ResolvedTokens): Map<string, ResolvedToken> {\n const map = new Map<string, ResolvedToken>()\n for (const [name, token] of Object.entries(tokens)) {\n map.set(name, token)\n }\n return map\n }\n\n private addFlatProperties(lines: string[], tokens: ResolvedTokens, indent: number): void {\n const indentStr = ' '.repeat(indent)\n const sortedEntries = getSortedTokenEntries(tokens)\n\n for (let i = 0; i < sortedEntries.length; i++) {\n const [name, token] = sortedEntries[i]!\n const isLast = i === sortedEntries.length - 1\n\n this.pushTokenComments(lines, token, indentStr)\n\n lines.push(\n `${indentStr}${this.quoteKey(name)}: ${JSON.stringify(token.$value)}${isLast ? '' : ','}`,\n )\n }\n }\n\n private pushTokenComments(lines: string[], token: ResolvedToken, indent: string): void {\n const deprecationComment = buildTokenDeprecationComment(token, 'js')\n if (deprecationComment) {\n lines.push(`${indent}${deprecationComment}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'js')\n if (descriptionComment) {\n lines.push(`${indent}${descriptionComment}`)\n }\n }\n\n private tokensToPlainObject(\n tokens: ResolvedTokens,\n structure: 'flat' | 'nested',\n ): Record<string, unknown> {\n if (structure === 'nested') {\n return buildNestedTokenObject(tokens, (token) => token.$value)\n }\n\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 private addNestedProperties(\n lines: string[],\n obj: Record<string, unknown>,\n tokenMap: Map<string, ResolvedToken>,\n indent: number,\n ): 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 const isNestedObject = typeof value === 'object' && value !== null && !Array.isArray(value)\n\n if (!isNestedObject) {\n const token = tokenMap.get(key)\n if (token) {\n this.pushTokenComments(lines, token, indentStr)\n }\n\n lines.push(\n `${indentStr}${this.quoteKey(key)}: ${JSON.stringify(value)}${isLast ? '' : ','}`,\n )\n continue\n }\n\n lines.push(`${indentStr}${this.quoteKey(key)}: {`)\n this.addNestedProperties(lines, value as Record<string, unknown>, tokenMap, indent + 1)\n lines.push(`${indentStr}}${isLast ? '' : ','}`)\n }\n }\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\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 assertFileRequired,\n buildInMemoryOutputKey,\n isBasePermutation,\n resolveFileName,\n stripInternalMetadata,\n} from '@renderers/bundlers/utils'\nimport { buildNestedTokenObject, 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: 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 assertFileRequired(context.buildPath, context.output.file, context.output.name, 'JSON')\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 private nestValues(tokens: ResolvedTokens): Record<string, unknown> {\n return buildNestedTokenObject(tokens, (token) => token.$value)\n }\n\n private nestTokens(tokens: ResolvedTokens): Record<string, unknown> {\n return buildNestedTokenObject(tokens, (token) => this.serializeToken(token))\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\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 { colorObjectToHex, isColorObject } from '@processing/transforms/built-in/color-converter'\nimport {\n dimensionObjectToString,\n isDimensionObject,\n} from '@processing/transforms/built-in/dimension-converter'\nimport {\n durationObjectToString,\n isDurationObject,\n} from '@processing/transforms/built-in/duration-converter'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { DimensionValue, ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { bundleAsTailwind } from './bundlers/tailwind'\nimport {\n assertFileRequired,\n buildInMemoryOutputKey,\n isBasePermutation,\n resolveFileName,\n stripInternalMetadata,\n} from './bundlers/utils'\nimport { buildTokenDeprecationComment, buildTokenDescriptionComment } from './metadata'\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\n const deprecationComment = buildTokenDeprecationComment(token, 'tailwind')\n if (deprecationComment) {\n lines.push(`${indent}${deprecationComment}${newline}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'tailwind')\n if (descriptionComment) {\n lines.push(`${indent}${descriptionComment}${newline}`)\n }\n\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\n const deprecationComment = buildTokenDeprecationComment(token, 'tailwind')\n if (deprecationComment) {\n lines.push(`${tokenIndent}${deprecationComment}${newline}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'tailwind')\n if (descriptionComment) {\n lines.push(`${tokenIndent}${descriptionComment}${newline}`)\n }\n\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' && isDurationObject(value)) {\n return durationObjectToString(value)\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 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: 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 assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone Tailwind',\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\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\nfunction resolveModifierSelectorAndMedia(\n options: ResolvedTailwindOptions,\n modifier: string,\n context: string,\n modifierInputs: Record<string, string>,\n): { selector: string; mediaQuery: string } {\n const normalized = normalizeModifierInputs(modifierInputs)\n return {\n selector: resolveSelector(options.selector, modifier, context, false, normalized),\n mediaQuery: resolveMediaQuery(options.mediaQuery, modifier, context, false, normalized),\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 const differenceCount = countModifierDifferences(modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n return undefined\n }\n\n // Value-based filtering catches alias tokens that change indirectly\n // (e.g., background-base references gray.25 which differs in dark mode).\n const tokensToInclude = filterTokensByValueChange(tokens, baseItem.tokens)\n if (Object.keys(tokensToInclude).length === 0) {\n return undefined\n }\n\n const expectedSource = getExpectedSource(modifierInputs, baseItem.modifierInputs)\n const [modifier, context] = parseModifierSource(expectedSource)\n const cleanTokens = stripInternalMetadata(tokensToInclude)\n const { selector, mediaQuery } = resolveModifierSelectorAndMedia(\n options,\n modifier,\n context,\n 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/filters/types'\nimport { nameKebabCase } from '@processing/transforms/built-in/name-transforms'\nimport type { Transform } from '@processing/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 `build()`.\n *\n * @example Basic CSS bundle with transforms\n * ```typescript\n * import { css } from 'dispersa'\n * import { colorToHex } from 'dispersa/transforms'\n *\n * // nameKebabCase() is applied automatically before your transforms\n * const config = css({\n * name: 'css',\n * file: 'tokens.css',\n * preset: 'bundle',\n * selector: ':root',\n * transforms: [colorToHex()]\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 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: [nameKebabCase(), ...(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 `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 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 `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 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/metadata.ts","../src/renderers/bundlers/js.ts","../src/renderers/bundlers/json.ts","../src/processing/transforms/built-in/name-transforms.ts","../src/processing/transforms/built-in/color-converter.ts","../src/processing/transforms/built-in/dimension-converter.ts","../src/processing/transforms/built-in/duration-converter.ts","../src/renderers/android.ts","../src/renderers/output-tree.ts","../src/renderers/css.ts","../src/renderers/bundlers/css.ts","../src/tokens/types.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":["kebabCase","formatHex8","formatHex","converter","r","g","b","css","prettier","toSRGB","toP3","bundleAsJsModule","indentStr","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/**\n * Thrown when lint errors are found and failOnError is true\n *\n * @param issues - Array of lint issues that caused the error\n */\nexport class LintError extends DispersaError {\n constructor(\n public issues: Array<{\n ruleId: string\n severity: 'error' | 'warn'\n message: string\n tokenName: string\n tokenPath: string[]\n }>,\n ) {\n const errorCount = issues.filter((i) => i.severity === 'error').length\n const warningCount = issues.filter((i) => i.severity === 'warn').length\n super(`Lint failed with ${errorCount} error(s) and ${warningCount} warning(s).`)\n this.name = 'LintError'\n }\n}\n","/**\n * @fileoverview Token utility functions\n */\n\nimport type {\n InternalResolvedTokens,\n ResolvedToken,\n ResolvedTokens,\n TokenValue,\n} 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 const msg = deprecationMsg ? ` ${deprecationMsg}` : ''\n return `DEPRECATED${msg}`\n }\n\n const msg = deprecationMsg ? `: ${deprecationMsg}` : ''\n const prefix = `[DEPRECATED${msg}]`\n return description ? `${prefix} ${description}` : prefix\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 * Build a nested object from resolved tokens using their path hierarchy.\n *\n * Shared between JSON and JS renderers that need to convert flat tokens\n * into nested structures matching the original token group hierarchy.\n *\n * @param tokens - Flat resolved tokens map\n * @param extractValue - Callback to extract the leaf value from each token\n * @returns Nested object mirroring the token path structure\n */\nexport function buildNestedTokenObject(\n tokens: ResolvedTokens,\n extractValue: (token: ResolvedToken) => unknown,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [, token] of getSortedTokenEntries(tokens)) {\n setNestedValue(result, token.path, extractValue(token))\n }\n return result\n}\n\nfunction setNestedValue(root: Record<string, unknown>, path: string[], value: unknown): void {\n let current = root\n\n for (let i = 0; i < path.length - 1; i++) {\n const part = path[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 = path[path.length - 1]\n if (lastPart != null) {\n current[lastPart] = value\n }\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\nconst ROOT_REF_PATTERN = /\\.\\$root\\}/g\n\n/**\n * Rewrite `{foo.$root}` → `{foo}` inside alias reference strings.\n * Handles plain string values and composite objects with nested references.\n */\nexport function rewriteRootReferences(value: TokenValue): TokenValue {\n if (typeof value === 'string') {\n return ROOT_REF_PATTERN.test(value)\n ? (value.replace(ROOT_REF_PATTERN, '}') as TokenValue)\n : value\n }\n\n if (Array.isArray(value)) {\n let changed = false\n const mapped = value.map((item) => {\n const rewritten = rewriteRootReferences(item as TokenValue)\n if (rewritten !== item) {\n changed = true\n }\n return rewritten\n })\n return changed ? (mapped as TokenValue) : value\n }\n\n if (typeof value === 'object' && value !== null) {\n let changed = false\n const result: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value)) {\n const rewritten = rewriteRootReferences(v as TokenValue)\n if (rewritten !== v) {\n changed = true\n }\n result[k] = rewritten\n }\n return changed ? (result as TokenValue) : value\n }\n\n return value\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 Shared utilities for bundlers\n */\n\nimport type { MediaQueryFunction, SelectorFunction } from '@renderers/types'\nimport type { ModifierInputs, ResolverDocument } from '@resolution/types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries, stripInternalTokenMetadata } from '@shared/utils/token-utils'\nimport type { ResolvedTokens, InternalResolvedTokens, ResolvedToken } 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 type TokenGroup = {\n name: string\n tokens: ResolvedToken[]\n}\n\nexport function groupTokensByType(\n tokens: ResolvedTokens,\n typeGroupMap: Record<string, string>,\n): TokenGroup[] {\n const groupMap = new Map<string, ResolvedToken[]>()\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const groupName = typeGroupMap[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\nexport function indentStr(width: number, level: number): string {\n return ' '.repeat(width * level)\n}\n\nexport function buildGeneratedFileHeader(): string {\n return [\n '// Generated by Dispersa - do not edit manually',\n '// https://github.com/dispersa-core/dispersa',\n ].join('\\n')\n}\n\nexport function toSafeIdentifier(name: string, keywords: Set<string>, capitalize: boolean): string {\n const camel = name\n .replace(/[-._]+(.)/g, (_, c: string) => c.toUpperCase())\n .replace(/[-._]+$/g, '')\n .replace(/^[-._]+/g, '')\n\n const cased = capitalize\n ? camel.charAt(0).toUpperCase() + camel.slice(1)\n : camel.charAt(0).toLowerCase() + camel.slice(1)\n\n const safe = /^\\d/.test(cased) ? `_${cased}` : cased\n\n const keyCheck = capitalize ? safe.charAt(0).toLowerCase() + safe.slice(1) : safe\n return keywords.has(keyCheck) ? `\\`${safe}\\`` : safe\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 assertFileRequired(\n buildPath: string | undefined,\n outputFile: string | ((inputs: ModifierInputs) => string) | undefined,\n outputName: string,\n presetLabel: string,\n): void {\n const requiresFile = buildPath !== undefined && buildPath !== ''\n if (!outputFile && requiresFile) {\n throw new ConfigurationError(\n `Output \"${outputName}\": file is required for ${presetLabel} output`,\n )\n }\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 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(([key, value]) => normalizedInputs[key] === value)\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 permutationKey = generatePermutationKey(\n modifierInputs,\n resolver,\n isBasePermutation(modifierInputs, defaults),\n )\n return `${outputName}-${permutationKey}.${extension}`\n}\n\nexport type BundleMetadata = {\n dimensions: string[]\n defaults: Record<string, string>\n}\n\n/**\n * Build metadata for bundle formats\n */\nexport function buildMetadata(resolver: ResolverDocument): BundleMetadata {\n const metadata: BundleMetadata = {\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 * @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 Shared utilities for consistent metadata formatting across renderers\n */\n\nimport type { ResolvedToken } from '@tokens/types'\n\nexport type CommentFormat = 'css' | 'js' | 'swift' | 'kotlin' | 'tailwind'\n\nfunction sanitizeText(text: string, format: CommentFormat): string {\n switch (format) {\n case 'css':\n case 'tailwind':\n return text.replace(/\\*\\//g, '*\\\\/').replace(/\\r?\\n/g, ' ').trim()\n case 'kotlin':\n return text.replace(/\\*\\//g, '* /').replace(/\\r?\\n/g, ' ').trim()\n case 'js':\n case 'swift':\n return text.replace(/\\r?\\n/g, ' ').trim()\n default:\n return text.trim()\n }\n}\n\nfunction buildDeprecationText(token: ResolvedToken): string {\n if (token.$deprecated == null || token.$deprecated === false) {\n return ''\n }\n\n const msg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n return msg ? `DEPRECATED: ${msg}` : 'DEPRECATED'\n}\n\nexport function buildTokenDescriptionComment(\n token: ResolvedToken,\n format: CommentFormat,\n): string | undefined {\n if (!token.$description || token.$description === '') {\n return undefined\n }\n\n const text = sanitizeText(token.$description, format)\n\n switch (format) {\n case 'css':\n case 'tailwind':\n return `/* ${text} */`\n case 'js':\n return `// ${text}`\n case 'swift':\n return `/// ${text}`\n case 'kotlin':\n return `/** ${text} */`\n default:\n return undefined\n }\n}\n\nexport function buildTokenDeprecationComment(\n token: ResolvedToken,\n format: CommentFormat,\n): string | undefined {\n const text = buildDeprecationText(token)\n if (!text) {\n return undefined\n }\n\n switch (format) {\n case 'css':\n case 'tailwind':\n return `/* ${text} */`\n case 'js':\n return `// ${text}`\n case 'swift':\n return `/// ${text}`\n case 'kotlin':\n return `/** ${text} */`\n default:\n return undefined\n }\n}\n\nexport function buildSetComment(setName: string, description?: string): string {\n if (description) {\n return `/* Set: ${setName} */\\n/* ${sanitizeText(description, 'css')} */`\n }\n return `/* Set: ${setName} */`\n}\n\nexport function buildModifierComment(modifier: string, context: string): string {\n return `/* Modifier: ${modifier}=${context} */`\n}\n\nexport function buildSwiftDeprecationAttribute(token: ResolvedToken): string | undefined {\n if (token.$deprecated == null || token.$deprecated === false) {\n return undefined\n }\n\n const msg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n if (msg) {\n return `@available(*, deprecated, message: \"${sanitizeText(msg, 'swift')}\")`\n }\n return '@available(*, deprecated)'\n}\n\nexport function buildKotlinDeprecationAnnotation(token: ResolvedToken): string | undefined {\n if (token.$deprecated == null || token.$deprecated === false) {\n return undefined\n }\n\n const msg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n if (msg) {\n return `@Deprecated(message = \"${sanitizeText(msg, 'kotlin')}\")`\n }\n return '@Deprecated'\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 JavaScript module bundler for multi-theme output\n */\n\nimport type { JsModuleRendererOptions } from '@renderers/types'\nimport type { ResolverDocument } from '@resolution/types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@tokens/types'\n\nimport { buildModifierComment } from '../metadata'\n\nimport type { BundleDataItem } from './types'\nimport type { BundleMetadata } from './utils'\nimport { buildMetadata, normalizeModifierInputs, stripInternalMetadata } from './utils'\n\ntype StringTrackingState = {\n inString: boolean\n stringChar: string\n escaped: boolean\n}\n\nfunction updateStringTracking(state: StringTrackingState, char: string): void {\n if (!state.escaped && (char === '\"' || char === \"'\" || char === '`')) {\n if (!state.inString) {\n state.inString = true\n state.stringChar = char\n } else if (char === state.stringChar) {\n state.inString = false\n state.stringChar = ''\n }\n }\n state.escaped = !state.escaped && char === '\\\\'\n}\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 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\n const state: StringTrackingState = { inString: false, stringChar: '', escaped: false }\n let braceCount = 0\n\n for (let i = startIndex; i < formattedJs.length; i++) {\n const char = formattedJs[i]!\n updateStringTracking(state, char)\n\n if (state.inString) {\n continue\n }\n\n if (char === '{') {\n braceCount++\n } else if (char === '}') {\n braceCount--\n if (braceCount === 0) {\n return formattedJs.substring(startIndex, i + 1)\n }\n }\n }\n\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: BundleMetadata,\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, isBase } 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\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const modifierParts: string[] = []\n for (const dim of metadata.dimensions) {\n const value = normalizedInputs[dim.toLowerCase()]\n if (value) {\n modifierParts.push(`${dim}=${value}`)\n }\n }\n\n const formattedJs = await formatTokens(cleanTokens)\n const tokenObject = extractObjectFromJsModule(formattedJs)\n const indentedObject = tokenObject.replace(/\\n/g, '\\n ')\n\n let comment: string\n if (modifierParts.length > 0) {\n const modifierPart = modifierParts[0]!\n const eqIndex = modifierPart.indexOf('=')\n const modifier = modifierPart.slice(0, eqIndex)\n const context = modifierPart.slice(eqIndex + 1)\n comment = buildModifierComment(modifier, context)\n } else if (isBase) {\n comment = '// Base permutation'\n } else {\n comment = `// ${key}`\n }\n\n jsBlocks.push(` ${comment}\\n ${JSON.stringify(camelKey)}: ${indentedObject}`)\n }\n\n return assembleJsBundle(metadata, jsBlocks, options?.generateHelper ?? false)\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 JSON bundler for multi-theme output\n */\n\nimport type { ResolverDocument } from '@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 if (!formatTokens) {\n throw new ConfigurationError('JSON formatter was not provided')\n }\n\n const metadata = buildMetadata(resolver)\n const tokens: Record<string, unknown> = {}\n\n for (const { tokens: tokenSet, modifierInputs } of bundleData) {\n const cleanTokens = stripInternalMetadata(tokenSet)\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 const bundle = { _meta: metadata, tokens }\n return JSON.stringify(bundle, null, 2)\n}\n","/**\n * @fileoverview Built-in name transforms using change-case library for robust case conversion\n */\n\nimport { ResolvedToken } from '@tokens/types'\nimport { camelCase, kebabCase, snakeCase, pascalCase, constantCase } from 'change-case'\n\nimport type { Transform } from '../types'\n\n/**\n * Convert token name to camelCase\n */\nexport function nameCamelCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = camelCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to kebab-case\n */\nexport function nameKebabCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = kebabCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to snake_case\n */\nexport function nameSnakeCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = snakeCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to PascalCase\n */\nexport function namePascalCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = pascalCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to CONSTANT_CASE\n */\nexport function nameConstantCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = constantCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Add prefix to token name\n *\n * @example\n * ```typescript\n * // Add 'ds-' prefix to all token names\n * transforms: [namePrefix('ds-')]\n * // 'color.primary' becomes 'ds-color.primary'\n * ```\n */\nexport function namePrefix(prefix: string): Transform {\n return {\n transform: (token: ResolvedToken) => {\n return {\n ...token,\n name: `${prefix}${token.name}`,\n }\n },\n }\n}\n\n/**\n * Add suffix to token name\n *\n * @example\n * ```typescript\n * // Add '-token' suffix to all token names\n * transforms: [nameSuffix('-token')]\n * // 'color.primary' becomes 'color.primary-token'\n * ```\n */\nexport function nameSuffix(suffix: string): Transform {\n return {\n transform: (token: ResolvedToken) => {\n return {\n ...token,\n name: `${token.name}${suffix}`,\n }\n },\n }\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 * @fileoverview Duration format conversion utilities for DTCG 2025.10\n * Handles duration object format { value: number, unit: 'ms' | 's' }\n */\n\nimport type { DurationValue } from '@tokens/types'\n\n/**\n * Check if a value is in duration object format\n */\nexport function 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/**\n * Convert DTCG duration object to CSS string\n */\nexport function durationObjectToString(duration: DurationValue): string {\n return `${duration.value}${duration.unit}`\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/transforms/built-in/color-converter'\nimport { isDimensionObject } from '@processing/transforms/built-in/dimension-converter'\nimport { isDurationObject } from '@processing/transforms/built-in/duration-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { ColorValueObject, DimensionValue, ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport { converter } from 'culori'\n\nimport {\n assertFileRequired,\n buildGeneratedFileHeader,\n buildInMemoryOutputKey,\n groupTokensByType,\n indentStr,\n resolveFileName,\n stripInternalMetadata,\n toSafeIdentifier,\n} from './bundlers/utils'\nimport type { TokenGroup } from './bundlers/utils'\nimport { buildKotlinDeprecationAnnotation, buildTokenDescriptionComment } from './metadata'\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 visPrefix: string\n indent: number\n}\n\ntype TokenTreeNode = {\n children: Map<string, TokenTreeNode>\n token?: 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 escapeKotlinString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\$/g, '\\\\$')\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// 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 visibility = options?.visibility\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,\n visPrefix: visibility ? `${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 /**\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 toSafeIdentifier(joined, KOTLIN_KEYWORDS, false)\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 tokenTypes = this.collectTokenTypesFromEntries(tokens)\n const tree = this.buildTokenTree(tokens)\n\n return this.buildFile(tokenTypes, options, (lines) => {\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${options.visPrefix}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 = groupTokensByType(tokens, KOTLIN_TYPE_GROUP_MAP)\n const tokenTypes = this.collectTokenTypesFromEntries(tokens)\n\n return this.buildFile(tokenTypes, options, (lines) => {\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${options.visPrefix}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[]) => void,\n ): string {\n const imports = this.collectImports(tokenTypes, options)\n const lines: string[] = []\n\n lines.push(buildGeneratedFileHeader())\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(options))\n lines.push('')\n }\n\n renderBody(lines)\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 groupIndent = indentStr(options.indent, baseDepth)\n const valIndent = indentStr(options.indent, baseDepth + 1)\n\n for (const group of groups) {\n lines.push(`${groupIndent}${options.visPrefix}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 const descriptionComment = buildTokenDescriptionComment(token, 'kotlin')\n if (descriptionComment) {\n lines.push(`${valIndent}${descriptionComment}`)\n }\n\n const deprecation = buildKotlinDeprecationAnnotation(token)\n if (deprecation) {\n lines.push(`${valIndent}${deprecation}`)\n }\n\n lines.push(\n `${valIndent}${options.visPrefix}val ${kotlinName}${annotation} = ${kotlinValue}`,\n )\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 pad = indentStr(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 = toSafeIdentifier(key, KOTLIN_KEYWORDS, true)\n lines.push(`${pad}${options.visPrefix}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 pad = indentStr(options.indent, depth)\n const kotlinName = toSafeIdentifier(key, KOTLIN_KEYWORDS, false)\n const kotlinValue = this.formatKotlinValue(token, options, depth)\n const annotation = this.typeAnnotationSuffix(token)\n\n const descriptionComment = buildTokenDescriptionComment(token, 'kotlin')\n if (descriptionComment) {\n lines.push(`${pad}${descriptionComment}`)\n }\n\n const deprecation = buildKotlinDeprecationAnnotation(token)\n if (deprecation) {\n lines.push(`${pad}${deprecation}`)\n }\n\n lines.push(`${pad}${options.visPrefix}val ${kotlinName}${annotation} = ${kotlinValue}`)\n }\n\n // -----------------------------------------------------------------------\n // Shadow data class\n // -----------------------------------------------------------------------\n\n private buildShadowTokenClass(options: ResolvedOptions): string[] {\n const i1 = indentStr(options.indent, 1)\n return [\n '@Immutable',\n `${options.visPrefix}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 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 (isDurationObject(value)) {\n return value.unit === 'ms' ? `${value.value}.milliseconds` : `${value.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 = indentStr(options.indent, depth + 1)\n const closeIndent = indentStr(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 = indentStr(options.indent, depth + 1)\n const closeIndent = indentStr(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 assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone Android',\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 assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'bundle Android',\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) => {\n const i1 = indentStr(options.indent, 1)\n\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${options.visPrefix}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}${options.visPrefix}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 types = new Set<string>()\n for (const { tokens } of context.permutations) {\n for (const t of this.collectTokenTypesFromEntries(stripInternalMetadata(tokens))) {\n types.add(t)\n }\n }\n return types\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 = groupTokensByType(tokens, KOTLIN_TYPE_GROUP_MAP)\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) => toSafeIdentifier(v, KOTLIN_KEYWORDS, true)).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 { colorObjectToHex, isColorObject } from '@processing/transforms/built-in/color-converter'\nimport {\n dimensionObjectToString,\n isDimensionObject,\n} from '@processing/transforms/built-in/dimension-converter'\nimport {\n durationObjectToString,\n isDurationObject,\n} from '@processing/transforms/built-in/duration-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getPureAliasReferenceName, getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type {\n DimensionValue,\n DurationValue,\n ResolvedToken,\n ResolvedTokens,\n ShadowValueObject,\n} from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { buildSetLayerBlocks, bundleAsCss } from './bundlers/css'\nimport {\n assertFileRequired,\n buildInMemoryOutputKey,\n filterTokensBySource,\n filterTokensFromSets,\n isBasePermutation,\n normalizeModifierInputs,\n resolveBaseFileName,\n resolveMediaQuery,\n resolveFileName,\n resolveSelector,\n stripInternalMetadata,\n} from './bundlers/utils'\nimport { buildTokenDeprecationComment, buildTokenDescriptionComment } from './metadata'\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 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 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 sortedTokens = getSortedTokenEntries(tokens).map(([, token]) => token)\n const referenceTokens = opts.referenceTokens\n const lines: string[] = []\n\n this.buildCssBlock(lines, sortedTokens, opts.selector, tokens, referenceTokens, opts)\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 const deprecationComment = buildTokenDeprecationComment(token, 'css')\n if (deprecationComment) {\n lines.push(`${indent}${deprecationComment}${newline}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'css')\n if (descriptionComment) {\n lines.push(`${indent}${descriptionComment}${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 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 ShadowValueObject\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) || 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 (isDurationObject(value)) {\n return durationObjectToString(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 /**\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 (isDurationObject(value)) {\n return durationObjectToString(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\n .map((shadowObj) => this.formatShadow(shadowObj as unknown as ShadowValueObject))\n .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 ShadowValueObject)\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: ShadowValueObject): 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 (isDurationObject(value.duration)) {\n parts.push(durationObjectToString(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 (isDurationObject(value.delay)) {\n parts.push(durationObjectToString(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: 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 assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone CSS',\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 = 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 assertFileRequired(context.buildPath, context.output.file, context.output.name, 'modifier CSS')\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 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 { selector, mediaQuery } = this.resolveBaseModifierContext(context, options)\n const content = await this.formatSetBlocksCss(\n setBlocks,\n basePermutation.tokens,\n selector,\n mediaQuery,\n options,\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 resolveBaseModifierContext(\n context: RenderContext,\n options: CssRendererOptions,\n ): { selector: string; mediaQuery: string } {\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 return {\n selector: resolveSelector(\n options.selector,\n firstModifierName,\n firstModifierContext,\n true,\n baseModifierInputs,\n ),\n mediaQuery: resolveMediaQuery(\n options.mediaQuery,\n firstModifierName,\n firstModifierContext,\n true,\n baseModifierInputs,\n ),\n }\n }\n\n private async formatSetBlocksCss(\n setBlocks: ReturnType<typeof buildSetLayerBlocks>,\n referenceTokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n options: CssRendererOptions,\n ): Promise<string> {\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 return cssBlocks.join('\\n')\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\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 * @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 CSS bundler for multi-theme output\n */\n\nimport type { CssRendererOptions } from '@renderers/types'\nimport type { ResolverDocument } from '@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\nconst REF_PREFIX_SETS = '#/sets/'\nconst REF_PREFIX_MODIFIERS = '#/modifiers/'\n\ntype ResolvedCssOptions = Omit<CssRendererOptions, 'selector' | 'mediaQuery'> & {\n selector?: string\n mediaQuery?: string\n referenceTokens?: ResolvedTokens\n}\n\nconst getSourceSet = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n return '_sourceSet' in token && typeof token._sourceSet === 'string'\n ? token._sourceSet\n : undefined\n}\n\nconst getSourceModifier = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n return '_sourceModifier' in token && typeof token._sourceModifier === 'string'\n ? token._sourceModifier\n : 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\nfunction addLayerBlock(\n blocks: SetLayerBlock[],\n included: Set<string>,\n key: string,\n blockTokens: BundleDataItem['tokens'],\n description?: string,\n): void {\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/** 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 for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string' || !ref.startsWith(REF_PREFIX_SETS)) {\n continue\n }\n\n const setName = ref.slice(REF_PREFIX_SETS.length)\n addLayerBlock(\n blocks,\n included,\n `Set: ${setName}`,\n collectSetTokens(tokens, setName, included),\n resolver.sets?.[setName]?.description,\n )\n }\n\n addLayerBlock(blocks, included, '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 for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string') {\n continue\n }\n processResolutionOrderRef(ref, tokens, blocks, included, baseInputs, resolver)\n }\n\n addLayerBlock(blocks, included, 'Unattributed', collectRemainder(tokens, included))\n return blocks\n}\n\nfunction processResolutionOrderRef(\n ref: string,\n tokens: BundleDataItem['tokens'],\n blocks: SetLayerBlock[],\n included: Set<string>,\n baseInputs: Record<string, string>,\n resolver: ResolverDocument,\n): void {\n if (ref.startsWith(REF_PREFIX_SETS)) {\n const setName = ref.slice(REF_PREFIX_SETS.length)\n addLayerBlock(\n blocks,\n included,\n `Set: ${setName}`,\n collectSetTokens(tokens, setName, included),\n resolver.sets?.[setName]?.description,\n )\n return\n }\n\n if (!ref.startsWith(REF_PREFIX_MODIFIERS)) {\n return\n }\n\n const modifierName = ref.slice(REF_PREFIX_MODIFIERS.length)\n const modifier = resolver.modifiers?.[modifierName]\n const selectedContext = baseInputs[modifierName.toLowerCase()]\n if (!modifier || !selectedContext) {\n return\n }\n\n const expectedSource = `${modifierName}-${selectedContext}`.toLowerCase()\n addLayerBlock(\n blocks,\n included,\n `Modifier: ${modifierName}=${selectedContext} (default)`,\n collectModifierTokens(tokens, expectedSource, included),\n modifier.description,\n )\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 pushUniqueBundleItem(\n ordered: BundleDataItem[],\n includedKeys: Set<string>,\n item: BundleDataItem | undefined,\n): void {\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\nfunction appendModifierPermutations(\n bundleData: BundleDataItem[],\n modifiers: NonNullable<ResolverDocument['modifiers']>,\n orderedNames: string[],\n baseInputs: Record<string, string>,\n ordered: BundleDataItem[],\n includedKeys: Set<string>,\n): void {\n for (const modifierName of orderedNames) {\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 pushUniqueBundleItem(\n ordered,\n includedKeys,\n findSingleDiffPermutation(bundleData, modifierName, ctx, baseInputs),\n )\n }\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 pushUniqueBundleItem(ordered, includedKeys, baseItem)\n appendModifierPermutations(\n bundleData,\n modifiers,\n orderedModifierNames,\n baseInputs,\n ordered,\n includedKeys,\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(REF_PREFIX_MODIFIERS)) {\n continue\n }\n const name = ref.slice(REF_PREFIX_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 * @fileoverview Token types - extended from schema-generated types\n *\n * Base token types are defined manually to match DTCG 2025.10.\n * This keeps TypeScript types stable while runtime validation relies on\n * the vendored DTCG JSON Schemas.\n */\n\n// ============================================================================\n// DTCG TOKEN TYPES (MANUAL)\n// ============================================================================\n\nexport type JsonPointerReferenceObject = {\n $ref: string\n}\n\nexport type TokenValueReference = string | JsonPointerReferenceObject\n\nexport type Token = {\n $value?: TokenValue | TokenValueReference\n $ref?: string\n $type?: TokenType\n $description?: string\n $deprecated?: boolean | string\n $extensions?: Record<string, unknown>\n}\n\n/**\n * Internal token shape used by the resolver pipeline\n */\nexport type InternalToken = Token & {\n /** Internal: Source modifier tag for bundle outputs (not part of DTCG spec) */\n _sourceModifier?: string\n}\n\ntype TokenGroupMetadataValue = string | boolean | Record<string, unknown> | undefined\n\ntype TokenGroupBase = {\n $type?: TokenType\n $description?: string\n $deprecated?: boolean | string\n $extensions?: Record<string, unknown>\n $extends?: string\n $root?: Token\n}\n\n// Note: interface used to allow recursive index signature (TS2456 with type alias).\nexport interface TokenGroup extends TokenGroupBase {\n [key: string]: Token | InternalToken | TokenGroup | TokenGroupMetadataValue\n}\n\n// ============================================================================\n// HELPER TYPES (NOT SCHEMA-GENERATED)\n// ============================================================================\n\n/**\n * Token type discriminator - union of all valid token type strings\n *\n * Represents the possible values for the $type property in DTCG tokens.\n */\nexport type TokenType =\n | 'color'\n | 'dimension'\n | 'fontFamily'\n | 'fontWeight'\n | 'duration'\n | 'cubicBezier'\n | 'number'\n | 'shadow'\n | 'typography'\n | 'border'\n | 'strokeStyle'\n | 'transition'\n | 'gradient'\n\n/**\n * Token value types - any valid value that can appear in a token\n *\n * Represents the possible types for the $value property in tokens.\n * Can be primitives, objects, or arrays depending on the token type.\n */\nexport type TokenValue = string | number | boolean | Record<string, unknown> | unknown[]\n\n// ============================================================================\n// VALUE TYPES FOR DEVELOPER CONVENIENCE\n// ============================================================================\n\n/**\n * Valid DTCG color space identifiers\n * All 14 color spaces from DTCG Color Module 2025-10\n */\nexport type ColorSpace =\n | 'srgb' // sRGB (IEC 61966-2-1:1999)\n | 'srgb-linear' // Linear sRGB\n | 'hsl' // Hue, Saturation, Lightness\n | 'hwb' // Hue, Whiteness, Blackness\n | 'lab' // CIELAB (CIE L*a*b*)\n | 'lch' // CIE LCH (Lightness, Chroma, Hue)\n | 'oklab' // Oklab perceptual color space\n | 'oklch' // Oklch (Lightness, Chroma, Hue)\n | 'display-p3' // Display P3 (DCI-P3 D65 whitepoint)\n | 'a98-rgb' // Adobe RGB (1998)\n | 'prophoto-rgb' // ProPhoto RGB (ROMM RGB)\n | 'rec2020' // Rec. 2020 (ITU-R BT.2020-2)\n | 'xyz-d65' // CIE XYZ with D65 whitepoint\n | 'xyz-d50' // CIE XYZ with D50 whitepoint\n\n/**\n * Color component value: number or the \"none\" keyword for missing channels\n * Token references are handled separately via alias resolution\n */\nexport type ColorComponent = number | 'none'\n\n/**\n * DTCG color object format with colorSpace and components\n * Each color space has different component meanings and ranges:\n * - RGB-based (srgb, srgb-linear, display-p3, a98-rgb, prophoto-rgb, rec2020): [R: 0-1, G: 0-1, B: 0-1]\n * - HSL: [H: angle, S: 0-100, L: 0-100]\n * - HWB: [H: angle, W: 0-100, B: 0-100]\n * - Lab/CIELab: [L: 0-100, a: -125 to 125, b: -125 to 125]\n * - LCH: [L: 0-100, C: 0-150, H: angle]\n * - OKLab: [L: 0-1, a: -0.4 to 0.4, b: -0.4 to 0.4]\n * - OKLCH: [L: 0-1, C: 0-0.4, H: angle]\n * - XYZ: [X: unbounded, Y: unbounded, Z: unbounded]\n */\nexport type ColorValueObject = {\n colorSpace: ColorSpace\n components: [ColorComponent, ColorComponent, ColorComponent]\n alpha?: number\n hex?: string\n}\n\n/**\n * DTCG 2025-10 compliant color value\n *\n * Per DTCG spec, color values must be one of:\n * 1. **Color object** with colorSpace and components (e.g., `{ colorSpace: 'srgb', components: [1, 0, 0] }`)\n * 2. **Token reference** using `{token.path}` or JSON Pointer object (e.g., `\"{color.brand.primary}\"`)\n *\n * ⚠️ **Important**: Arbitrary CSS color strings like `\"#ff0000\"`, `\"rgb(255, 0, 0)\"`, or `\"red\"`\n * are NOT valid per DTCG spec. String values MUST be alias references.\n *\n * @see {@link https://www.designtokens.org/tr/2025.10/color/ | DTCG Color Module}\n * @see {@link https://www.designtokens.org/tr/2025.10/format/#color-0 | DTCG Format: Color Type}\n *\n * @example Valid color values\n * ```typescript\n * // Object format (preferred)\n * const color1: ColorValue = {\n * colorSpace: 'srgb',\n * components: [1, 0, 0],\n * alpha: 1\n * }\n *\n * // Alias reference (resolves to another token)\n * const color2: ColorValue = \"{color.brand.primary}\"\n * ```\n */\nexport type ColorValue = ColorValueObject | TokenValueReference\n\n/**\n * DTCG 2025-10 compliant dimension value\n *\n * Per DTCG spec, dimension values MUST use object format with\n * numeric value and string unit properties.\n *\n * ⚠️ **Important**: String values like `\"16px\"` are NOT valid per DTCG spec.\n * Dimensions MUST be objects with separate value and unit properties.\n *\n * @see {@link https://www.designtokens.org/tr/2025.10/format/#dimension-0 | DTCG Format: Dimension Type}\n *\n * @example Valid dimension values\n * ```typescript\n * const spacing: DimensionValue = { value: 16, unit: 'px' }\n * const fontSize: DimensionValue = { value: 1.5, unit: 'rem' }\n * const borderWidth: DimensionValue = { value: 2, unit: 'px' }\n * ```\n */\nexport type DimensionValue = {\n value: number\n unit: 'px' | 'rem'\n}\n\n/**\n * Font family value - single string or array of fallback fonts\n */\nexport type FontFamilyValue = string | string[]\n\n/**\n * Font weight value - numeric (1-1000) or named value\n */\nexport type FontWeightValue = number | string\n\n/**\n * Duration value - DTCG duration object\n */\nexport type DurationValue = { value: number; unit: 'ms' | 's' }\n\n/**\n * Cubic bezier value - 4-number array for animation easing\n */\nexport type CubicBezierValue = [number, number, number, number]\n\n/**\n * Shadow value object (DTCG 2025.10 composite type - Section 9.6)\n *\n * Represents a shadow effect with color, offset, blur, and optional spread.\n * Uses proper ColorValue and DimensionValue types per DTCG spec.\n *\n * @example\n * ```json\n * {\n * \"$type\": \"shadow\",\n * \"$value\": {\n * \"color\": { \"colorSpace\": \"srgb\", \"components\": [0, 0, 0], \"alpha\": 0.5 },\n * \"offsetX\": { \"value\": 0, \"unit\": \"px\" },\n * \"offsetY\": { \"value\": 4, \"unit\": \"px\" },\n * \"blur\": { \"value\": 8, \"unit\": \"px\" },\n * \"spread\": { \"value\": 0, \"unit\": \"px\" }\n * }\n * }\n * ```\n */\nexport type ShadowValueObject = {\n /** Shadow color (color object or alias reference) */\n color: ColorValue\n /** Horizontal offset */\n offsetX: DimensionValue\n /** Vertical offset */\n offsetY: DimensionValue\n /** Blur radius */\n blur: DimensionValue\n /** Spread radius */\n spread: DimensionValue\n /** Whether shadow is inset */\n inset?: boolean\n}\n\n/**\n * Shadow value - single shadow or array of shadows\n */\nexport type ShadowValue = ShadowValueObject | ShadowValueObject[]\n\n/**\n * Unresolved typography token type (pre-resolution)\n */\nexport type UnresolvedTypographyToken = Token & {\n $type: 'typography'\n $value: TypographyValue | TokenValueReference\n}\n\n/**\n * Unresolved border token type (pre-resolution)\n */\nexport type UnresolvedBorderToken = Token & {\n $type: 'border'\n $value: BorderValue | TokenValueReference\n}\n\n/**\n * Unresolved stroke style token type (pre-resolution)\n */\nexport type UnresolvedStrokeStyleToken = Token & {\n $type: 'strokeStyle'\n $value: StrokeStyleValue | TokenValueReference\n}\n\n/**\n * Unresolved transition token type (pre-resolution)\n */\nexport type UnresolvedTransitionToken = Token & {\n $type: 'transition'\n $value: TransitionValue | TokenValueReference\n}\n\n/**\n * Unresolved gradient token type (pre-resolution)\n */\nexport type UnresolvedGradientToken = Token & {\n $type: 'gradient'\n $value: GradientValue | TokenValueReference\n}\n\n/**\n * Stroke style value object\n */\nexport type StrokeStyleValueObject = {\n dashArray: DimensionValue[]\n lineCap: 'round' | 'butt' | 'square'\n}\n\n/**\n * Stroke style value\n */\nexport type StrokeStyleValue = string | StrokeStyleValueObject\n\n/**\n * Border value object\n */\nexport type BorderValue = {\n color: ColorValue\n width: DimensionValue\n style: StrokeStyleValue\n}\n\n/**\n * Typography value object\n */\nexport type TypographyValue = {\n fontFamily: FontFamilyValue\n fontSize: DimensionValue\n fontWeight: FontWeightValue\n letterSpacing: DimensionValue\n lineHeight: number\n}\n\n/**\n * Transition value object\n */\nexport type TransitionValue = {\n duration: DurationValue\n delay: DurationValue\n timingFunction: CubicBezierValue\n}\n\n/**\n * Gradient stop value object\n */\nexport type GradientStop = {\n color: ColorValue\n position: number\n}\n\n/**\n * Gradient value\n */\nexport type GradientValue = GradientStop[]\n\n// ============================================================================\n// NARROWED VALUE TYPE (FOR CONSUMER USE)\n// ============================================================================\n\n/**\n * Union of all known DTCG token value types.\n *\n * Provides narrower typing than `TokenValue` for consumers who want\n * better autocomplete and type checking when working with resolved tokens.\n *\n * Use the type guard helpers (`isColorToken`, `isDimensionToken`, etc.)\n * to narrow a `ResolvedToken` to a specific value type.\n *\n * @example\n * ```typescript\n * import type { ResolvedToken } from 'dispersa'\n * import { isColorToken, isDimensionToken } from 'dispersa'\n *\n * function process(token: ResolvedToken) {\n * if (isColorToken(token)) {\n * // token.$value is narrowed to ColorValue\n * }\n * if (isDimensionToken(token)) {\n * // token.$value is narrowed to DimensionValue\n * }\n * }\n * ```\n */\nexport type DesignTokenValue =\n | ColorValueObject\n | DimensionValue\n | DurationValue\n | CubicBezierValue\n | ShadowValueObject\n | ShadowValueObject[]\n | TypographyValue\n | BorderValue\n | StrokeStyleValueObject\n | StrokeStyleValue\n | TransitionValue\n | GradientValue\n | FontFamilyValue\n | FontWeightValue\n | number\n\n// ============================================================================\n// TOKEN TYPE GUARDS\n// ============================================================================\n\n/** Type-narrowed token whose `$value` is a `ColorValueObject` or color string */\nexport type ColorToken = ResolvedToken & { $type: 'color' }\n\n/** Type-narrowed token whose `$value` is a `DimensionValue` */\nexport type DimensionToken = ResolvedToken & { $type: 'dimension' }\n\n/** Type-narrowed token whose `$value` is a `ShadowValue` */\nexport type ShadowToken = ResolvedToken & { $type: 'shadow' }\n\n/** Type-narrowed token whose `$value` is a `TypographyValue` */\nexport type TypographyToken = ResolvedToken & { $type: 'typography' }\n\n/** Type-narrowed token whose `$value` is a `BorderValue` */\nexport type BorderToken = ResolvedToken & { $type: 'border' }\n\n/** Type-narrowed token whose `$value` is a `DurationValue` */\nexport type DurationToken = ResolvedToken & { $type: 'duration' }\n\n/** Type-narrowed token whose `$value` is a `TransitionValue` */\nexport type TransitionToken = ResolvedToken & { $type: 'transition' }\n\n/** Type-narrowed token whose `$value` is a `GradientValue` */\nexport type GradientToken = ResolvedToken & { $type: 'gradient' }\n\n/** Check if a resolved token is a color token */\nexport function isColorToken(token: ResolvedToken): token is ColorToken {\n return token.$type === 'color'\n}\n\n/** Check if a resolved token is a dimension token */\nexport function isDimensionToken(token: ResolvedToken): token is DimensionToken {\n return token.$type === 'dimension'\n}\n\n/** Check if a resolved token is a shadow token */\nexport function isShadowToken(token: ResolvedToken): token is ShadowToken {\n return token.$type === 'shadow'\n}\n\n/** Check if a resolved token is a typography token */\nexport function isTypographyToken(token: ResolvedToken): token is TypographyToken {\n return token.$type === 'typography'\n}\n\n/** Check if a resolved token is a border token */\nexport function isBorderToken(token: ResolvedToken): token is BorderToken {\n return token.$type === 'border'\n}\n\n/** Check if a resolved token is a duration token */\nexport function isDurationToken(token: ResolvedToken): token is DurationToken {\n return token.$type === 'duration'\n}\n\n/** Check if a resolved token is a transition token */\nexport function isTransitionToken(token: ResolvedToken): token is TransitionToken {\n return token.$type === 'transition'\n}\n\n/** Check if a resolved token is a gradient token */\nexport function isGradientToken(token: ResolvedToken): token is GradientToken {\n return token.$type === 'gradient'\n}\n\n// ============================================================================\n// COMPOSED TYPES (NOT SCHEMA-GENERATED)\n// ============================================================================\n\n/**\n * Top-level collection of tokens and groups\n *\n * Maps token/group names to their definitions. This is the structure\n * of a raw token file before resolution.\n */\nexport type TokenCollection = Record<string, Token | TokenGroup>\n\n/**\n * Token document nodes used during resolution\n */\nexport type TokenNode = Token | TokenGroup\n\n/**\n * Internal token document nodes used during resolution\n */\nexport type InternalTokenNode = InternalToken | TokenGroup\n\n/**\n * Token document structure (pre-resolution)\n */\nexport type TokenDocument = Record<string, TokenNode>\n\n/**\n * Internal token document structure (pre-resolution, with internal metadata)\n */\nexport type InternalTokenDocument = Record<string, InternalTokenNode>\n\n/**\n * Fully resolved token with computed metadata\n *\n * After resolution, tokens include additional metadata like their\n * full path in the token hierarchy and the original value before\n * any alias or reference resolution.\n *\n * @example\n * ```typescript\n * {\n * $value: \"#ff0000\",\n * $type: \"color\",\n * path: [\"color\", \"brand\", \"primary\"],\n * name: \"color.brand.primary\",\n * originalValue: \"{color.red.500}\" // Before alias resolution\n * }\n * ```\n */\nexport type ResolvedToken = Token & {\n /** Hierarchical path segments (e.g., ['color', 'brand', 'primary']) */\n path: string[]\n\n /** Fully qualified token name (e.g., 'color.brand.primary') */\n name: string\n\n /**\n * The raw value before any alias or reference resolution.\n *\n * For alias tokens this contains the alias reference string\n * (e.g., `\"{color.primary}\"`) or a composite value with embedded\n * alias references. For non-alias tokens this equals `$value`.\n *\n * Use the built-in `isAlias()` / `isBase()` filters or inspect\n * this value with `getPureAliasReferenceName()` to determine\n * whether the token was originally an alias.\n */\n originalValue: TokenValue\n}\n\n/**\n * Collection of resolved tokens indexed by name\n *\n * Maps token names to their resolved definitions. This is the primary\n * format used throughout Dispersa after token resolution.\n *\n * @example\n * ```typescript\n * {\n * \"color.brand.primary\": {\n * $value: \"#ff0000\",\n * $type: \"color\",\n * path: [\"color\", \"brand\", \"primary\"],\n * name: \"color.brand.primary\",\n * originalValue: \"#ff0000\"\n * }\n * }\n * ```\n */\nexport type ResolvedTokens = Record<string, ResolvedToken>\n\n/**\n * Internal resolved token with metadata used by the pipeline and bundlers\n *\n * These fields are not part of the DTCG spec and should be stripped before\n * returning tokens to public callers or rendering output.\n */\nexport type InternalResolvedToken = ResolvedToken & {\n /** Internal: Whether this token was originally an alias (not part of DTCG spec) */\n _isAlias?: boolean\n /** Internal: Source modifier tag for bundle outputs (not part of DTCG spec) */\n _sourceModifier?: string\n /** Internal: Source set name for bundle outputs (not part of DTCG spec) */\n _sourceSet?: string\n}\n\n/**\n * Internal collection of resolved tokens (with internal metadata)\n */\nexport type InternalResolvedTokens = Record<string, InternalResolvedToken>\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 { isColorObject, dtcgObjectToCulori } from '@processing/transforms/built-in/color-converter'\nimport { isDimensionObject } from '@processing/transforms/built-in/dimension-converter'\nimport { isDurationObject } from '@processing/transforms/built-in/duration-converter'\nimport type {\n ColorValueObject,\n DimensionValue,\n DurationValue,\n GradientStop,\n ResolvedToken,\n ResolvedTokens,\n} from '@tokens/types'\nimport { isBorderToken, isShadowToken, isTypographyToken } from '@tokens/types'\nimport { converter } from 'culori'\n\nimport {\n assertFileRequired,\n buildGeneratedFileHeader,\n buildInMemoryOutputKey,\n groupTokensByType,\n indentStr,\n resolveFileName,\n stripInternalMetadata,\n toSafeIdentifier,\n} from './bundlers/utils'\nimport { buildSwiftDeprecationAttribute, buildTokenDescriptionComment } from './metadata'\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\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 const access = options.accessLevel\n const groups = groupTokensByType(tokens, SWIFT_TYPE_GROUP_MAP)\n const imports = this.collectImports(tokens)\n const staticPrefix = this.staticLetPrefix(options)\n const frozen = this.frozenPrefix(options)\n const lines: string[] = []\n\n lines.push(buildGeneratedFileHeader())\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 this.pushTokenLayout(lines, groups, options, access, staticPrefix, frozen)\n lines.push(...this.buildViewExtensions(tokens, access, options))\n if (options.structure !== 'grouped') {\n lines.push('')\n }\n\n return lines.join('\\n')\n }\n\n private pushTokenLayout(\n lines: string[],\n groups: Array<{ name: string; tokens: ResolvedToken[] }>,\n options: Required<IosRendererOptions>,\n access: string,\n staticPrefix: string,\n frozen: string,\n ): void {\n const i1 = indentStr(options.indent, 1)\n const i2 = indentStr(options.indent, 2)\n\n if (options.structure === 'grouped') {\n this.pushGroupedLayout(lines, groups, options, access, i1, i2, staticPrefix, frozen)\n return\n }\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 this.pushTokenDeclarations(lines, group.tokens, options, access, i2, staticPrefix)\n lines.push(`${i1}}`)\n lines.push('')\n }\n\n lines.push('}')\n }\n\n private pushGroupedLayout(\n lines: string[],\n groups: Array<{ name: string; tokens: ResolvedToken[] }>,\n options: Required<IosRendererOptions>,\n access: string,\n i1: string,\n i2: string,\n staticPrefix: string,\n frozen: string,\n ): void {\n const namespace = options.extensionNamespace\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 this.pushTokenDeclarations(lines, group.tokens, options, access, i2, staticPrefix)\n lines.push(`${i1}}`)\n lines.push('}')\n lines.push('')\n }\n }\n\n private pushTokenDeclarations(\n lines: string[],\n tokens: ResolvedToken[],\n options: Required<IosRendererOptions>,\n access: string,\n indent: string,\n staticPrefix: string,\n ): void {\n for (const token of 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 = buildTokenDescriptionComment(token, 'swift')\n if (docComment) {\n lines.push(`${indent}${docComment}`)\n }\n\n const deprecationAttr = buildSwiftDeprecationAttribute(token)\n if (deprecationAttr) {\n lines.push(`${indent}${deprecationAttr}`)\n }\n\n lines.push(`${indent}${access} ${staticPrefix}${swiftName}${annotation} = ${swiftValue}`)\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 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 toSafeIdentifier(joined, SWIFT_KEYWORDS, false)\n }\n\n private formatSwiftValue(token: ResolvedToken, options: Required<IosRendererOptions>): string {\n const { $type, $value: value } = token\n\n switch ($type) {\n case 'color':\n return this.formatColorValue(value, options)\n case 'dimension':\n return this.formatDimensionValue(value)\n case 'fontFamily':\n return this.formatFontFamilyValue(value)\n case 'fontWeight':\n return this.formatFontWeightValue(value)\n case 'duration':\n return this.formatDurationValue(value)\n case 'shadow':\n return this.formatShadowValue(value, options)\n case 'typography':\n return this.formatTypographyValue(value)\n case 'border':\n return this.formatBorderValue(value, options)\n case 'gradient':\n return this.formatGradientValue(value, options)\n case 'number':\n return String(value)\n case 'cubicBezier':\n if (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 break\n }\n\n return this.formatSwiftPrimitive(value)\n }\n\n private formatSwiftPrimitive(value: unknown): string {\n if (typeof value === 'string') {\n return `\"${this.escapeSwiftString(value)}\"`\n }\n if (typeof value === 'number') {\n return String(value)\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\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 return this.dimensionToPoints(value as DimensionValue)\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 (isDurationObject(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 return this.dimensionToPoints(typo.letterSpacing as DimensionValue)\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 basePt = this.dimensionToNumericPoints(typo.fontSize as DimensionValue)\n const lineHeightPt = Math.round(basePt * typo.lineHeight * 100) / 100\n return String(lineHeightPt - basePt)\n }\n\n private dimensionToNumericPoints(dim: DimensionValue): number {\n return dim.unit === 'rem' ? dim.value * 16 : dim.value\n }\n\n private dimensionToPoints(dim: DimensionValue): string {\n return String(this.dimensionToNumericPoints(dim))\n }\n\n /** Formats a dimension as a CGFloat literal (appends `.0` for integers). */\n private dimensionToCGFloat(dim: DimensionValue): string {\n const ptValue = this.dimensionToNumericPoints(dim)\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 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 /**\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 /** 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 (Object.values(tokens).some(isShadowToken)) {\n lines.push('')\n lines.push(...this.buildShadowStyleStruct(access, options))\n }\n\n if (Object.values(tokens).some(isTypographyToken)) {\n lines.push('')\n lines.push(...this.buildTypographyStyleStruct(access, options))\n }\n\n if (Object.values(tokens).some(isBorderToken)) {\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 = 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 = 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 = 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 = indentStr(options.indent, 1)\n const i2 = indentStr(options.indent, 2)\n\n if (Object.values(tokens).some(isShadowToken)) {\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 (Object.values(tokens).some(isTypographyToken)) {\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 assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone iOS',\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 assertFileRequired,\n buildInMemoryOutputKey,\n isBasePermutation,\n resolveFileName,\n stripInternalMetadata,\n} from '@renderers/bundlers/utils'\nimport { buildNestedTokenObject, getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { buildTokenDeprecationComment, buildTokenDescriptionComment } from './metadata'\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: 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 assertFileRequired(context.buildPath, context.output.file, context.output.name, 'JS module')\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: Required<JsModuleRendererOptions>,\n ): Promise<string> {\n const lines: string[] = []\n lines.push(...this.formatAsObject(tokens, options))\n\n const code = lines.join('\\n')\n\n if (options.minify) {\n return code\n }\n\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 private formatAsObject(\n tokens: ResolvedTokens,\n options: Required<JsModuleRendererOptions>,\n ): string[] {\n const lines: string[] = []\n const tokenMap = this.buildTokenMap(tokens)\n const varName = options.moduleName !== '' ? options.moduleName : 'tokens'\n\n if (options.structure === 'flat') {\n lines.push(`const ${varName} = {`)\n this.addFlatProperties(lines, tokens, 1)\n lines.push('}')\n } else {\n lines.push(`const ${varName} = {`)\n const tokenObj = this.tokensToPlainObject(tokens, 'nested')\n this.addNestedProperties(lines, tokenObj, tokenMap, 1)\n lines.push('}')\n }\n\n lines.push('')\n lines.push(`export default ${varName}`)\n\n return lines\n }\n\n private buildTokenMap(tokens: ResolvedTokens): Map<string, ResolvedToken> {\n const map = new Map<string, ResolvedToken>()\n for (const [name, token] of Object.entries(tokens)) {\n map.set(name, token)\n }\n return map\n }\n\n private addFlatProperties(lines: string[], tokens: ResolvedTokens, indent: number): void {\n const indentStr = ' '.repeat(indent)\n const sortedEntries = getSortedTokenEntries(tokens)\n\n for (let i = 0; i < sortedEntries.length; i++) {\n const [name, token] = sortedEntries[i]!\n const isLast = i === sortedEntries.length - 1\n\n this.pushTokenComments(lines, token, indentStr)\n\n lines.push(\n `${indentStr}${this.quoteKey(name)}: ${JSON.stringify(token.$value)}${isLast ? '' : ','}`,\n )\n }\n }\n\n private pushTokenComments(lines: string[], token: ResolvedToken, indent: string): void {\n const deprecationComment = buildTokenDeprecationComment(token, 'js')\n if (deprecationComment) {\n lines.push(`${indent}${deprecationComment}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'js')\n if (descriptionComment) {\n lines.push(`${indent}${descriptionComment}`)\n }\n }\n\n private tokensToPlainObject(\n tokens: ResolvedTokens,\n structure: 'flat' | 'nested',\n ): Record<string, unknown> {\n if (structure === 'nested') {\n return buildNestedTokenObject(tokens, (token) => token.$value)\n }\n\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 private addNestedProperties(\n lines: string[],\n obj: Record<string, unknown>,\n tokenMap: Map<string, ResolvedToken>,\n indent: number,\n ): 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 const isNestedObject = typeof value === 'object' && value !== null && !Array.isArray(value)\n\n if (!isNestedObject) {\n const token = tokenMap.get(key)\n if (token) {\n this.pushTokenComments(lines, token, indentStr)\n }\n\n lines.push(\n `${indentStr}${this.quoteKey(key)}: ${JSON.stringify(value)}${isLast ? '' : ','}`,\n )\n continue\n }\n\n lines.push(`${indentStr}${this.quoteKey(key)}: {`)\n this.addNestedProperties(lines, value as Record<string, unknown>, tokenMap, indent + 1)\n lines.push(`${indentStr}}${isLast ? '' : ','}`)\n }\n }\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\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 assertFileRequired,\n buildInMemoryOutputKey,\n isBasePermutation,\n resolveFileName,\n stripInternalMetadata,\n} from '@renderers/bundlers/utils'\nimport { buildNestedTokenObject, 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: 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 assertFileRequired(context.buildPath, context.output.file, context.output.name, 'JSON')\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 private nestValues(tokens: ResolvedTokens): Record<string, unknown> {\n return buildNestedTokenObject(tokens, (token) => token.$value)\n }\n\n private nestTokens(tokens: ResolvedTokens): Record<string, unknown> {\n return buildNestedTokenObject(tokens, (token) => this.serializeToken(token))\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\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 { colorObjectToHex, isColorObject } from '@processing/transforms/built-in/color-converter'\nimport {\n dimensionObjectToString,\n isDimensionObject,\n} from '@processing/transforms/built-in/dimension-converter'\nimport {\n durationObjectToString,\n isDurationObject,\n} from '@processing/transforms/built-in/duration-converter'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { DimensionValue, ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { bundleAsTailwind } from './bundlers/tailwind'\nimport {\n assertFileRequired,\n buildInMemoryOutputKey,\n isBasePermutation,\n resolveFileName,\n stripInternalMetadata,\n} from './bundlers/utils'\nimport { buildTokenDeprecationComment, buildTokenDescriptionComment } from './metadata'\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\n const deprecationComment = buildTokenDeprecationComment(token, 'tailwind')\n if (deprecationComment) {\n lines.push(`${indent}${deprecationComment}${newline}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'tailwind')\n if (descriptionComment) {\n lines.push(`${indent}${descriptionComment}${newline}`)\n }\n\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\n const deprecationComment = buildTokenDeprecationComment(token, 'tailwind')\n if (deprecationComment) {\n lines.push(`${tokenIndent}${deprecationComment}${newline}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'tailwind')\n if (descriptionComment) {\n lines.push(`${tokenIndent}${descriptionComment}${newline}`)\n }\n\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' && isDurationObject(value)) {\n return durationObjectToString(value)\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 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: 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 assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone Tailwind',\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\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\nfunction resolveModifierSelectorAndMedia(\n options: ResolvedTailwindOptions,\n modifier: string,\n context: string,\n modifierInputs: Record<string, string>,\n): { selector: string; mediaQuery: string } {\n const normalized = normalizeModifierInputs(modifierInputs)\n return {\n selector: resolveSelector(options.selector, modifier, context, false, normalized),\n mediaQuery: resolveMediaQuery(options.mediaQuery, modifier, context, false, normalized),\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 const differenceCount = countModifierDifferences(modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n return undefined\n }\n\n // Value-based filtering catches alias tokens that change indirectly\n // (e.g., background-base references gray.25 which differs in dark mode).\n const tokensToInclude = filterTokensByValueChange(tokens, baseItem.tokens)\n if (Object.keys(tokensToInclude).length === 0) {\n return undefined\n }\n\n const expectedSource = getExpectedSource(modifierInputs, baseItem.modifierInputs)\n const [modifier, context] = parseModifierSource(expectedSource)\n const cleanTokens = stripInternalMetadata(tokensToInclude)\n const { selector, mediaQuery } = resolveModifierSelectorAndMedia(\n options,\n modifier,\n context,\n 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/filters/types'\nimport { nameKebabCase } from '@processing/transforms/built-in/name-transforms'\nimport type { Transform } from '@processing/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 `build()`.\n *\n * @example Basic CSS bundle with transforms\n * ```typescript\n * import { css } from 'dispersa'\n * import { colorToHex } from 'dispersa/transforms'\n *\n * // nameKebabCase() is applied automatically before your transforms\n * const config = css({\n * name: 'css',\n * file: 'tokens.css',\n * preset: 'bundle',\n * selector: ':root',\n * transforms: [colorToHex()]\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 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: [nameKebabCase(), ...(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 `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 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 `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 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"]}