@damarkuncoro/meta-architecture-style-engine 0.1.3 → 0.1.4

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/cli/index.ts","../../../src/cli/commands/init.ts","../../../src/cli/commands/compile.ts","../../../src/dsl/lexer/TokenizerError.ts","../../../src/dsl/lexer/Tokenizer.ts","../../../src/dsl/parser/ParserError.ts","../../../src/dsl/parser/Parser.ts","../../../src/dsl/validator/ValidationError.ts","../../../src/dsl/validator/Validator.ts","../../../src/dsl/compiler/Compiler.ts","../../../src/cli/utils/ErrorHandler.ts","../../../src/cli/commands/validate.ts","../../../src/cli/commands/generate-css.ts","../../../src/materializer/targets/CSSMaterializer.ts","../../../src/integration/atomic/reset.ts","../../../src/integration/atomic/core/BaseGenerator.ts","../../../src/integration/shared/utils.ts","../../../src/integration/atomic/core/ThemeGenerator.ts","../../../src/integration/atomic/handlers/BaseHandler.ts","../../../src/integration/atomic/handlers/ColorHandler.ts","../../../src/integration/atomic/handlers/SpaceHandler.ts","../../../src/integration/atomic/handlers/TypographyHandler.ts","../../../src/integration/atomic/handlers/EffectHandler.ts","../../../src/integration/atomic/handlers/LayoutHandler.ts","../../../src/integration/atomic/handlers/FlexboxHandler.ts","../../../src/integration/atomic/handlers/GridHandler.ts","../../../src/integration/atomic/handlers/BackgroundHandler.ts","../../../src/integration/atomic/handlers/BorderHandler.ts","../../../src/integration/atomic/handlers/TransformHandler.ts","../../../src/integration/atomic/handlers/TransitionHandler.ts","../../../src/integration/atomic/handlers/InteractivityHandler.ts","../../../src/integration/atomic/handlers/TableHandler.ts","../../../src/integration/atomic/handlers/SVGHandler.ts","../../../src/integration/atomic/handlers/AccessibilityHandler.ts","../../../src/integration/atomic/handlers/FilterHandler.ts","../../../src/integration/atomic/core/UtilityGenerator.ts","../../../src/integration/atomic/AtomicCSSGenerator.ts","../../../src/data/tokens.ts","../../../src/cli/commands/watch.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * MASE CLI Tool\n * \n * Command-line interface for Meta-Architecture Style Engine.\n * \n * Key Principles:\n * - DRY: Single CLI logic\n * - SOLID: Single responsibility\n * - YAGNI: Only implement what's needed\n * - DDD: Domain-specific CLI commands\n */\n\nimport { Command } from 'commander';\nimport { initCommand } from './commands/init';\nimport { compileCommand } from './commands/compile';\nimport { validateCommand } from './commands/validate';\nimport { generateCssCommand } from './commands/generate-css';\nimport { watchCommand } from './commands/watch';\n\nconst program = new Command();\n\nprogram\n .name('mase')\n .description('Meta-Architecture Style Engine CLI')\n .version('1.0.0');\n\n// Register Commands\nprogram.addCommand(initCommand);\nprogram.addCommand(compileCommand);\nprogram.addCommand(validateCommand);\nprogram.addCommand(generateCssCommand);\nprogram.addCommand(watchCommand);\n\n// Parse Arguments\nprogram.parse(process.argv);\n","import { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as readline from 'readline';\n\n// Templates\nconst POSTCSS_CONFIG = `module.exports = {\n plugins: [\n require('@damarkuncoro/meta-architecture-style-engine/postcss')({\n prefix: '--mase-',\n rootSelector: ':root',\n })\n ]\n};\n`;\n\nconst TAILWIND_CONFIG = `const { createMasePreset } = require('@damarkuncoro/meta-architecture-style-engine/tailwind');\nconst fs = require('fs');\nconst path = require('path');\n\n// Try to load local mase.tokens.js if available\nlet tokens;\nconst localTokensPath = path.resolve(__dirname, 'mase.tokens.js');\nif (fs.existsSync(localTokensPath)) {\n tokens = require(localTokensPath);\n}\n\n/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n content: [\n \"./src/**/*.{js,ts,jsx,tsx}\",\n ],\n presets: [\n createMasePreset({\n tokens: tokens, // Use local tokens if found, otherwise defaults to internal\n useCssVariables: true,\n })\n ],\n theme: {\n extend: {},\n },\n plugins: [],\n};\n`;\n\nconst EXAMPLE_MASE = `contract DesignSystem {\n domain color {\n token primary: #007bff;\n token secondary: #6c757d;\n token success: #28a745;\n token danger: #dc3545;\n }\n \n domain typography {\n token base: 16px;\n token heading: 32px;\n }\n \n domain space {\n token small: 4px;\n token medium: 8px;\n token large: 16px;\n }\n}\n`;\n\nconst TOKENS_CONFIG = `/**\n * MASE Tokens Configuration\n * \n * Defines your design tokens for the Atomic Engine.\n * Use 'mase generate-css --format atomic' to generate utility classes.\n */\nmodule.exports = {\n // Colors\n 'color.primary': { id: 'color.primary', domain: 'color', value: '#2563eb' },\n 'color.secondary': { id: 'color.secondary', domain: 'color', value: '#4b5563' },\n 'color.accent': { id: 'color.accent', domain: 'color', value: '#f59e0b' },\n \n // Theme Aware Colors\n 'surface.card': { \n id: 'surface.card', \n domain: 'color', \n value: { light: '#ffffff', dark: '#1e293b' } \n },\n 'text.base': { \n id: 'text.base', \n domain: 'color', \n value: { light: '#111827', dark: '#f9fafb' } \n },\n\n // Spacing\n 'space.sm': { id: 'space.sm', domain: 'layout', value: '0.5rem' },\n 'space.md': { id: 'space.md', domain: 'layout', value: '1rem' },\n 'space.lg': { id: 'space.lg', domain: 'layout', value: '1.5rem' },\n 'space.xl': { id: 'space.xl', domain: 'layout', value: '2rem' },\n \n // Typography\n 'text.sm': { id: 'text.sm', domain: 'typography', value: '0.875rem' },\n 'text.lg': { id: 'text.lg', domain: 'typography', value: '1.125rem' },\n 'weight.bold': { id: 'weight.bold', domain: 'typography', value: '700' },\n \n // Radius\n 'radius.md': { id: 'radius.md', domain: 'effect', value: '0.375rem' },\n 'radius.full': { id: 'radius.full', domain: 'effect', value: '9999px' },\n};\n`;\n\nfunction askQuestion(query: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise(resolve => rl.question(query, ans => {\n rl.close();\n resolve(ans);\n }));\n}\n\nexport const initCommand = new Command('init')\n .description('Initialize a new MASE project configuration')\n .option('-p, --postcss', 'Generate postcss.config.js')\n .option('-t, --tailwind', 'Generate tailwind.config.js')\n .option('-e, --example', 'Generate example.mase file')\n .option('-a, --atomic', 'Generate mase.tokens.js for Atomic Engine')\n .option('-y, --yes', 'Skip prompts and generate all defaults')\n .action(async (options) => {\n const cwd = process.cwd();\n console.log('🚀 Initializing MASE project...\\n');\n\n let generatePostcss = options.postcss;\n let generateTailwind = options.tailwind;\n let generateExample = options.example;\n let generateAtomic = options.atomic;\n\n // If no specific flags and not yes mode, ask interactively\n if (!options.yes && !options.postcss && !options.tailwind && !options.example && !options.atomic) {\n const answerAtomic = await askQuestion('Generate mase.tokens.js for Atomic Engine? (Y/n) ');\n generateAtomic = answerAtomic.toLowerCase() !== 'n';\n\n const answerPostcss = await askQuestion('Generate postcss.config.js? (Y/n) ');\n generatePostcss = answerPostcss.toLowerCase() !== 'n';\n\n const answerTailwind = await askQuestion('Generate tailwind.config.js? (Y/n) ');\n generateTailwind = answerTailwind.toLowerCase() !== 'n';\n \n const answerExample = await askQuestion('Generate example.mase? (Y/n) ');\n generateExample = answerExample.toLowerCase() !== 'n';\n } else if (options.yes) {\n generatePostcss = true;\n generateTailwind = true;\n generateExample = true;\n generateAtomic = true;\n }\n\n if (generateAtomic) {\n const filePath = path.join(cwd, 'mase.tokens.js');\n if (!fs.existsSync(filePath)) {\n fs.writeFileSync(filePath, TOKENS_CONFIG);\n console.log('✅ Created mase.tokens.js');\n } else {\n console.log('⚠️ mase.tokens.js already exists, skipping.');\n }\n }\n\n if (generatePostcss) {\n const filePath = path.join(cwd, 'postcss.config.js');\n if (!fs.existsSync(filePath)) {\n fs.writeFileSync(filePath, POSTCSS_CONFIG);\n console.log('✅ Created postcss.config.js');\n } else {\n console.log('⚠️ postcss.config.js already exists, skipping.');\n }\n }\n\n if (generateTailwind) {\n const filePath = path.join(cwd, 'tailwind.config.js');\n if (!fs.existsSync(filePath)) {\n fs.writeFileSync(filePath, TAILWIND_CONFIG);\n console.log('✅ Created tailwind.config.js');\n } else {\n console.log('⚠️ tailwind.config.js already exists, skipping.');\n }\n }\n\n if (generateExample) {\n const filePath = path.join(cwd, 'example.mase');\n if (!fs.existsSync(filePath)) {\n fs.writeFileSync(filePath, EXAMPLE_MASE);\n console.log('✅ Created example.mase');\n } else {\n console.log('⚠️ example.mase already exists, skipping.');\n }\n }\n\n console.log('\\n✨ Initialization complete!');\n });\n","import { Command } from 'commander';\nimport { ContractDSLTokenizer, ContractDSLParser, ContractDSLValidator, ContractDSLCompiler } from '../../dsl';\nimport { ErrorHandler, CLIError } from '../utils';\nimport * as fs from 'fs';\n\nexport const compileCommand = new Command('compile')\n .description('Compile a contract DSL file to TypeScript')\n .argument('<contract-file>', 'Contract DSL file to compile')\n .option('-o, --output <file>', 'Output file (default: stdout)')\n .option('--format <format>', 'Output format (ts, json, ast)', 'ts')\n .option('--watch', 'Watch for changes', false)\n .action((contractFile, options) => {\n console.log(`ℹ️ Compiling ${contractFile}...`);\n \n try {\n // Read contract file\n const source = fs.readFileSync(contractFile, 'utf-8');\n \n // Tokenize\n const tokenizer = new ContractDSLTokenizer();\n const tokens = tokenizer.tokenize(source);\n \n // Parse\n const parser = new ContractDSLParser();\n const ast = parser.parse(tokens);\n \n // Validate\n const validator = new ContractDSLValidator();\n const validationResult = validator.validate(ast);\n \n if (!validationResult.isValid) {\n const error = new CLIError(\n 'Contract validation failed',\n 'VALIDATION_ERROR'\n );\n ErrorHandler.handle(error);\n }\n \n // Compile\n const compiler = new ContractDSLCompiler();\n const result = compiler.compile(ast);\n \n if (result.errors.length > 0) {\n const error = new CLIError(\n 'Contract compilation failed',\n 'COMPILATION_ERROR'\n );\n ErrorHandler.handle(error);\n }\n \n // Output based on format\n let output: string;\n \n switch (options.format) {\n case 'json':\n output = JSON.stringify(ast, null, 2);\n break;\n case 'ast':\n output = JSON.stringify(ast, null, 2);\n break;\n case 'ts':\n default:\n output = compiler.generateTypeScriptFile(ast);\n break;\n }\n \n if (options.output) {\n fs.writeFileSync(options.output, output, 'utf-8');\n console.log(`✅ Compiled to ${options.output}`);\n } else {\n console.log(output);\n }\n \n if (options.watch) {\n console.log('ℹ️ Watching for changes...');\n // TODO: Implement watch mode\n }\n \n } catch (error) {\n ErrorHandler.handle(error);\n }\n });\n","export class TokenizerError extends Error {\n readonly line: number;\n readonly column: number;\n \n constructor(message: string, line: number, column: number) {\n super(message);\n this.name = 'TokenizerError';\n this.line = line;\n this.column = column;\n }\n}\n","/**\n * Contract DSL Tokenizer\n * \n * Tokenizes Contract DSL source code into tokens for parsing.\n * \n * Responsibilities:\n * - Convert DSL source to tokens\n * - Handle whitespace and comments\n * - Provide error locations\n * \n * Key Principles:\n * - DRY: Single tokenization logic\n * - SOLID: Single responsibility\n * - YAGNI: Only tokenize what's needed\n * - DDD: Domain-specific token types\n */\n\n/**\n * TokenType\n * Enum of all token types in Contract DSL.\n */\nexport type TokenType =\n // Keywords\n | 'CONTRACT'\n | 'DOMAIN'\n | 'ALLOWS'\n | 'DEFAULT'\n | 'CONSTRAINTS'\n | 'CONFLICTS'\n \n // Contexts\n | 'MOBILE'\n | 'TABLET'\n | 'DESKTOP'\n | 'LIGHT'\n | 'DARK'\n | 'WEB'\n | 'NATIVE'\n | 'CANVAS'\n | 'DEFAULT_CTX'\n | 'HOVER'\n | 'ACTIVE'\n | 'DISABLED'\n \n // Domains\n | 'LAYOUT'\n | 'TYPOGRAPHY'\n | 'COLOR'\n | 'EFFECT'\n | 'INTERACTION'\n \n // Punctuation\n | 'LBRACE'\n | 'RBRACE'\n | 'LBRACKET'\n | 'RBRACKET'\n | 'COLON'\n | 'SEMICOLON'\n | 'COMMA'\n \n // Literals\n | 'IDENTIFIER'\n \n // Special\n | 'EOF'\n | 'UNKNOWN';\n\nexport const TokenType = {\n // Keywords\n CONTRACT: 'CONTRACT' as const,\n DOMAIN: 'DOMAIN' as const,\n ALLOWS: 'ALLOWS' as const,\n DEFAULT: 'DEFAULT' as const,\n CONSTRAINTS: 'CONSTRAINTS' as const,\n CONFLICTS: 'CONFLICTS' as const,\n \n // Contexts\n MOBILE: 'MOBILE' as const,\n TABLET: 'TABLET' as const,\n DESKTOP: 'DESKTOP' as const,\n LIGHT: 'LIGHT' as const,\n DARK: 'DARK' as const,\n WEB: 'WEB' as const,\n NATIVE: 'NATIVE' as const,\n CANVAS: 'CANVAS' as const,\n DEFAULT_CTX: 'DEFAULT_CTX' as const,\n HOVER: 'HOVER' as const,\n ACTIVE: 'ACTIVE' as const,\n DISABLED: 'DISABLED' as const,\n \n // Domains\n LAYOUT: 'LAYOUT' as const,\n TYPOGRAPHY: 'TYPOGRAPHY' as const,\n COLOR: 'COLOR' as const,\n EFFECT: 'EFFECT' as const,\n INTERACTION: 'INTERACTION' as const,\n \n // Punctuation\n LBRACE: 'LBRACE' as const,\n RBRACE: 'RBRACE' as const,\n LBRACKET: 'LBRACKET' as const,\n RBRACKET: 'RBRACKET' as const,\n COLON: 'COLON' as const,\n SEMICOLON: 'SEMICOLON' as const,\n COMMA: 'COMMA' as const,\n \n // Literals\n IDENTIFIER: 'IDENTIFIER' as const,\n \n // Special\n EOF: 'EOF' as const,\n UNKNOWN: 'UNKNOWN' as const\n};\n\n/**\n * Token\n * Represents a single token in the DSL.\n */\nexport interface Token {\n readonly type: TokenType;\n readonly value: string;\n readonly line: number;\n readonly column: number;\n}\n\nimport { TokenizerError } from './TokenizerError';\n\n/**\n * ContractDSLTokenizer\n * Tokenizes Contract DSL source code.\n */\nexport class ContractDSLTokenizer {\n private source: string = '';\n private position: number = 0;\n private line: number = 1;\n private column: number = 1;\n \n // Keyword map\n private readonly keywords: Map<string, TokenType> = new Map([\n ['contract', TokenType.CONTRACT],\n ['domain', TokenType.DOMAIN],\n ['allows', TokenType.ALLOWS],\n ['default', TokenType.DEFAULT],\n ['constraints', TokenType.CONSTRAINTS],\n ['conflicts', TokenType.CONFLICTS],\n \n // Contexts\n ['mobile', TokenType.MOBILE],\n ['tablet', TokenType.TABLET],\n ['desktop', TokenType.DESKTOP],\n ['light', TokenType.LIGHT],\n ['dark', TokenType.DARK],\n ['web', TokenType.WEB],\n ['native', TokenType.NATIVE],\n ['canvas', TokenType.CANVAS],\n // ['default', TokenType.DEFAULT_CTX], // Removed duplicate mapping\n ['hover', TokenType.HOVER],\n ['active', TokenType.ACTIVE],\n ['disabled', TokenType.DISABLED],\n \n // Domains\n ['layout', TokenType.LAYOUT],\n ['typography', TokenType.TYPOGRAPHY],\n ['color', TokenType.COLOR],\n ['effect', TokenType.EFFECT],\n ['interaction', TokenType.INTERACTION]\n ]);\n \n /**\n * Tokenize source code\n * @param source - DSL source code\n * @returns Array of tokens\n */\n tokenize(source: string): Token[] {\n this.source = source;\n this.position = 0;\n this.line = 1;\n this.column = 1;\n \n const tokens: Token[] = [];\n \n while (this.position < this.source.length) {\n const char = this.source[this.position];\n \n // Skip whitespace\n if (this.isWhitespace(char)) {\n this.advance();\n continue;\n }\n \n // Skip comments\n if (char === '/' && this.peek() === '/') {\n this.skipComment();\n continue;\n }\n \n // Tokenize\n const token = this.nextToken();\n if (token) {\n tokens.push(token);\n }\n }\n \n // Add EOF token\n tokens.push({\n type: TokenType.EOF,\n value: '',\n line: this.line,\n column: this.column\n });\n \n return tokens;\n }\n \n /**\n * Get next token\n * @returns Token or null if EOF\n */\n private nextToken(): Token | null {\n const char = this.source[this.position];\n \n // Punctuation\n if (char === '{') return this.createToken(TokenType.LBRACE, char);\n if (char === '}') return this.createToken(TokenType.RBRACE, char);\n if (char === '[') return this.createToken(TokenType.LBRACKET, char);\n if (char === ']') return this.createToken(TokenType.RBRACKET, char);\n if (char === ':') return this.createToken(TokenType.COLON, char);\n if (char === ';') return this.createToken(TokenType.SEMICOLON, char);\n if (char === ',') return this.createToken(TokenType.COMMA, char);\n \n // Identifier or keyword\n if (this.isLetter(char) || char === '_' || char === '-') {\n return this.readIdentifier();\n }\n \n // Unknown character\n throw new TokenizerError(\n `Unknown character: '${char}'`,\n this.line,\n this.column\n );\n }\n \n /**\n * Read identifier or keyword\n * @returns Token\n */\n private readIdentifier(): Token {\n const start = this.position;\n const startLine = this.line;\n const startColumn = this.column;\n \n while (\n this.position < this.source.length &&\n (this.isLetter(this.source[this.position]) ||\n this.isDigit(this.source[this.position]) ||\n this.source[this.position] === '_' ||\n this.source[this.position] === '-' ||\n this.source[this.position] === '.')\n ) {\n this.advance();\n }\n \n const value = this.source.substring(start, this.position);\n const type = this.keywords.get(value) || TokenType.IDENTIFIER;\n \n return {\n type,\n value,\n line: startLine,\n column: startColumn\n };\n }\n \n /**\n * Skip single-line comment\n */\n private skipComment(): void {\n while (this.position < this.source.length && this.source[this.position] !== '\\n') {\n this.advance();\n }\n }\n \n /**\n * Create token\n * @param type - Token type\n * @param value - Token value\n * @returns Token\n */\n private createToken(type: TokenType, value: string): Token {\n const token = {\n type,\n value,\n line: this.line,\n column: this.column\n };\n \n this.advance();\n return token;\n }\n \n /**\n * Advance to next character\n */\n private advance(): void {\n if (this.source[this.position] === '\\n') {\n this.line++;\n this.column = 1;\n } else {\n this.column++;\n }\n this.position++;\n }\n \n /**\n * Peek at next character\n * @returns Next character or empty string\n */\n private peek(): string {\n if (this.position + 1 < this.source.length) {\n return this.source[this.position + 1];\n }\n return '';\n }\n \n /**\n * Check if character is whitespace\n * @param char - Character to check\n * @returns True if whitespace\n */\n private isWhitespace(char: string): boolean {\n return char === ' ' || char === '\\t' || char === '\\n' || char === '\\r';\n }\n \n /**\n * Check if character is letter\n * @param char - Character to check\n * @returns True if letter\n */\n private isLetter(char: string): boolean {\n return /[a-zA-Z]/.test(char);\n }\n \n /**\n * Check if character is digit\n * @param char - Character to check\n * @returns True if digit\n */\n private isDigit(char: string): boolean {\n return /[0-9]/.test(char);\n }\n}","export class ParserError extends Error {\n readonly line: number;\n readonly column: number;\n \n constructor(message: string, line: number, column: number) {\n super(message);\n this.name = 'ParserError';\n this.line = line;\n this.column = column;\n }\n}\n","/**\n * Contract DSL Parser\n * \n * Parses tokens from Contract DSL into Abstract Syntax Tree (AST).\n * \n * Responsibilities:\n * - Parse tokens into AST\n * - Implement EBNF grammar\n * - Provide syntax errors\n * \n * Key Principles:\n * - DRY: Single parsing logic\n * - SOLID: Single responsibility\n * - YAGNI: Only parse what's needed\n * - DDD: Domain-specific AST structure\n */\n\nimport type { Token, TokenType } from '../lexer/Tokenizer';\nimport { TokenType as TT } from '../lexer/Tokenizer';\nimport { ParserError } from './ParserError';\n\n/**\n * ContractAST\n * Abstract Syntax Tree for a contract.\n */\nexport interface ContractAST {\n readonly name: string;\n readonly domain: string;\n readonly properties: PropertyAST[];\n}\n\n/**\n * PropertyAST\n * AST for a property declaration.\n */\nexport interface PropertyAST {\n readonly name: string;\n readonly allows: string[];\n readonly default?: string;\n readonly constraints?: ConstraintAST[];\n readonly conflicts?: string[];\n}\n\n/**\n * ConstraintAST\n * AST for a constraint declaration.\n */\nexport interface ConstraintAST {\n readonly context: string;\n readonly allows: string[];\n}\n\n/**\n * ContractDSLParser\n * Parses Contract DSL tokens into AST.\n */\nexport class ContractDSLParser {\n private tokens: Token[] = [];\n private position: number = 0;\n \n /**\n * Parse tokens into AST\n * @param tokens - Array of tokens\n * @returns Contract AST\n */\n parse(tokens: Token[]): ContractAST {\n this.tokens = tokens;\n this.position = 0;\n \n // Parse contract\n const contract = this.parseContract();\n \n // Expect EOF\n this.expect(TT.EOF);\n \n return contract;\n }\n \n /**\n * Parse contract\n * @returns Contract AST\n */\n private parseContract(): ContractAST {\n // Expect 'contract'\n this.expect(TT.CONTRACT);\n \n // Expect identifier (contract name)\n const name = this.expectIdentifier();\n \n // Expect '{'\n this.expect(TT.LBRACE);\n \n // Parse domain\n const domain = this.parseDomain();\n \n // Parse properties\n const properties: PropertyAST[] = [];\n while (this.peek()?.type === TT.IDENTIFIER) {\n properties.push(this.parseProperty());\n }\n \n // Expect '}'\n this.expect(TT.RBRACE);\n \n return {\n name,\n domain,\n properties\n };\n }\n \n /**\n * Parse domain declaration\n * @returns Domain name\n */\n private parseDomain(): string {\n // Expect 'domain'\n this.expect(TT.DOMAIN);\n \n // Expect ':'\n this.expect(TT.COLON);\n \n // Expect domain identifier\n const domain = this.expectDomain();\n \n // Expect ';'\n this.expect(TT.SEMICOLON);\n \n return domain;\n }\n \n /**\n * Parse property declaration\n * @returns Property AST\n */\n private parseProperty(): PropertyAST {\n // Expect identifier (property name)\n const name = this.expectIdentifier();\n \n // Expect '{'\n this.expect(TT.LBRACE);\n \n // Parse property body\n const allows = this.parseAllows();\n const defaultVal = this.parseDefault();\n const constraints = this.parseConstraints();\n const conflicts = this.parseConflicts();\n \n // Expect '}'\n this.expect(TT.RBRACE);\n \n return {\n name,\n allows,\n default: defaultVal,\n constraints,\n conflicts\n };\n }\n \n /**\n * Parse allows declaration\n * @returns Array of allowed tokens\n */\n private parseAllows(): string[] {\n // Expect 'allows'\n this.expect(TT.ALLOWS);\n \n // Expect ':'\n this.expect(TT.COLON);\n \n // Expect '['\n this.expect(TT.LBRACKET);\n \n // Parse token list\n const tokens: string[] = [];\n if (this.peek()?.type === TT.IDENTIFIER) {\n tokens.push(this.expectIdentifier());\n \n while (this.peek()?.type === TT.COMMA) {\n this.expect(TT.COMMA);\n tokens.push(this.expectIdentifier());\n }\n }\n \n // Expect ']'\n this.expect(TT.RBRACKET);\n \n // Expect ';'\n this.expect(TT.SEMICOLON);\n \n return tokens;\n }\n \n /**\n * Parse default declaration\n * @returns Default token or undefined\n */\n private parseDefault(): string | undefined {\n // Check if 'default' keyword\n if (this.peek()?.type !== TT.DEFAULT) {\n return undefined;\n }\n \n // Expect 'default'\n this.expect(TT.DEFAULT);\n \n // Expect ':'\n this.expect(TT.COLON);\n \n // Expect identifier\n const value = this.expectIdentifier();\n \n // Expect ';'\n this.expect(TT.SEMICOLON);\n \n return value;\n }\n \n /**\n * Parse constraints declaration\n * @returns Array of constraints or undefined\n */\n private parseConstraints(): ConstraintAST[] | undefined {\n // Check if 'constraints' keyword\n if (this.peek()?.type !== TT.CONSTRAINTS) {\n return undefined;\n }\n \n // Expect 'constraints'\n this.expect(TT.CONSTRAINTS);\n \n // Expect '{'\n this.expect(TT.LBRACE);\n \n // Parse constraint list\n const constraints: ConstraintAST[] = [];\n while (this.peek()?.type === TT.MOBILE || \n this.peek()?.type === TT.TABLET || \n this.peek()?.type === TT.DESKTOP ||\n this.peek()?.type === TT.LIGHT || \n this.peek()?.type === TT.DARK ||\n this.peek()?.type === TT.WEB || \n this.peek()?.type === TT.NATIVE ||\n this.peek()?.type === TT.CANVAS ||\n this.peek()?.type === TT.DEFAULT_CTX ||\n this.peek()?.type === TT.HOVER || \n this.peek()?.type === TT.ACTIVE ||\n this.peek()?.type === TT.DISABLED) {\n constraints.push(this.parseConstraint());\n }\n \n // Expect '}'\n this.expect(TT.RBRACE);\n \n return constraints;\n }\n \n /**\n * Parse constraint\n * @returns Constraint AST\n */\n private parseConstraint(): ConstraintAST {\n // Expect context\n const context = this.expectContext();\n \n // Expect ':'\n this.expect(TT.COLON);\n \n // Expect '['\n this.expect(TT.LBRACKET);\n \n // Parse token list\n const tokens: string[] = [];\n if (this.peek()?.type === TT.IDENTIFIER) {\n tokens.push(this.expectIdentifier());\n \n while (this.peek()?.type === TT.COMMA) {\n this.expect(TT.COMMA);\n tokens.push(this.expectIdentifier());\n }\n }\n \n // Expect ']'\n this.expect(TT.RBRACKET);\n \n // Expect ';'\n this.expect(TT.SEMICOLON);\n \n return {\n context,\n allows: tokens\n };\n }\n \n /**\n * Parse conflicts declaration\n * @returns Array of conflicting properties or undefined\n */\n private parseConflicts(): string[] | undefined {\n // Check if 'conflicts' keyword\n if (this.peek()?.type !== TT.CONFLICTS) {\n return undefined;\n }\n \n // Expect 'conflicts'\n this.expect(TT.CONFLICTS);\n \n // Expect ':'\n this.expect(TT.COLON);\n \n // Expect '['\n this.expect(TT.LBRACKET);\n \n // Parse property list\n const properties: string[] = [];\n if (this.peek()?.type === TT.IDENTIFIER) {\n properties.push(this.expectIdentifier());\n \n while (this.peek()?.type === TT.COMMA) {\n this.expect(TT.COMMA);\n properties.push(this.expectIdentifier());\n }\n }\n \n // Expect ']'\n this.expect(TT.RBRACKET);\n \n // Expect ';'\n this.expect(TT.SEMICOLON);\n \n return properties;\n }\n \n /**\n * Expect identifier token\n * @returns Identifier value\n */\n private expectIdentifier(): string {\n const token = this.peek();\n if (!token || token.type !== TT.IDENTIFIER) {\n throw new ParserError(\n `Expected identifier, got ${token?.type || 'EOF'}`,\n token?.line || 0,\n token?.column || 0\n );\n }\n \n this.advance();\n return token.value;\n }\n \n /**\n * Expect domain token\n * @returns Domain value\n */\n private expectDomain(): string {\n const token = this.peek();\n if (!token || \n (token.type !== TT.LAYOUT && \n token.type !== TT.TYPOGRAPHY && \n token.type !== TT.COLOR &&\n token.type !== TT.EFFECT &&\n token.type !== TT.INTERACTION &&\n token.type !== TT.IDENTIFIER)) {\n throw new ParserError(\n `Expected domain, got ${token?.type || 'EOF'}`,\n token?.line || 0,\n token?.column || 0\n );\n }\n \n this.advance();\n return token.value;\n }\n\n /**\n * Expect context token\n * @returns Context value\n */\n private expectContext(): string {\n const token = this.peek();\n if (!token || \n (token.type !== TT.MOBILE && \n token.type !== TT.TABLET && \n token.type !== TT.DESKTOP &&\n token.type !== TT.LIGHT && \n token.type !== TT.DARK &&\n token.type !== TT.WEB && \n token.type !== TT.NATIVE &&\n token.type !== TT.CANVAS &&\n token.type !== TT.DEFAULT_CTX &&\n token.type !== TT.DEFAULT &&\n token.type !== TT.HOVER && \n token.type !== TT.ACTIVE &&\n token.type !== TT.DISABLED)) {\n throw new ParserError(\n `Expected context, got ${token?.type || 'EOF'}`,\n token?.line || 0,\n token?.column || 0\n );\n }\n \n this.advance();\n return token.value;\n }\n \n /**\n * Expect specific token type\n * @param type - Expected token type\n */\n private expect(type: TokenType): void {\n const token = this.peek();\n if (!token || token.type !== type) {\n throw new ParserError(\n `Expected ${type}, got ${token?.type || 'EOF'}`,\n token?.line || 0,\n token?.column || 0\n );\n }\n \n this.advance();\n }\n \n /**\n * Peek at current token\n * @returns Current token or undefined\n */\n private peek(): Token | undefined {\n return this.tokens[this.position];\n }\n \n /**\n * Advance to next token\n */\n private advance(): void {\n this.position++;\n }\n}","export class ValidationError extends Error {\n readonly path: string;\n \n constructor(message: string, path: string) {\n super(message);\n this.name = 'ValidationError';\n this.path = path;\n }\n}\n","/**\n * Contract DSL Validator\n * \n * Validates Contract DSL AST structure and semantics.\n * \n * Responsibilities:\n * - Validate AST structure\n * - Check token references\n * - Validate constraints\n * \n * Key Principles:\n * - DRY: Single validation logic\n * - SOLID: Single responsibility\n * - YAGNI: Only validate what's needed\n * - DDD: Domain-specific validation rules\n */\n\nimport type { ContractAST, PropertyAST, ConstraintAST } from '../parser/Parser';\nimport type { StyleDomain } from '../../domain';\nimport { ValidationError } from './ValidationError';\n\n/**\n * ValidationResult\n * Result of validation.\n */\nexport interface ValidationResult {\n readonly isValid: boolean;\n readonly errors: ValidationError[];\n}\n\n/**\n * ContractDSLValidator\n * Validates Contract DSL AST.\n */\nexport class ContractDSLValidator {\n private readonly validDomains: Set<StyleDomain> = new Set([\n 'layout',\n 'typography',\n 'color',\n 'effect',\n 'interaction'\n ]);\n \n private readonly validContexts: Set<string> = new Set([\n 'mobile',\n 'tablet',\n 'desktop',\n 'light',\n 'dark',\n 'web',\n 'native',\n 'canvas',\n 'default',\n 'hover',\n 'active',\n 'disabled'\n ]);\n \n /**\n * Validate contract AST\n * @param ast - Contract AST\n * @returns Validation result\n */\n validate(ast: ContractAST): ValidationResult {\n const errors: ValidationError[] = [];\n \n // Validate contract name\n this.validateContractName(ast.name, errors);\n \n // Validate domain\n this.validateDomain(ast.domain, errors);\n \n // Validate properties\n this.validateProperties(ast.properties, errors);\n \n return {\n isValid: errors.length === 0,\n errors\n };\n }\n \n /**\n * Validate contract name\n * @param name - Contract name\n * @param errors - Array to collect errors\n */\n private validateContractName(name: string, errors: ValidationError[]): void {\n if (!name || name.trim().length === 0) {\n errors.push(new ValidationError(\n 'Contract name cannot be empty',\n 'contract.name'\n ));\n }\n \n if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name)) {\n errors.push(new ValidationError(\n `Invalid contract name: '${name}'. Must start with a letter and contain only letters, digits, underscores, and hyphens.`,\n 'contract.name'\n ));\n }\n }\n \n /**\n * Validate domain\n * @param domain - Domain name\n * @param errors - Array to collect errors\n */\n private validateDomain(domain: string, errors: ValidationError[]): void {\n if (!domain || domain.trim().length === 0) {\n errors.push(new ValidationError(\n 'Domain cannot be empty',\n 'contract.domain'\n ));\n return;\n }\n \n if (!this.validDomains.has(domain as StyleDomain)) {\n errors.push(new ValidationError(\n `Invalid domain: '${domain}'. Must be one of: ${Array.from(this.validDomains).join(', ')}`,\n 'contract.domain'\n ));\n }\n }\n \n /**\n * Validate properties\n * @param properties - Array of properties\n * @param errors - Array to collect errors\n */\n private validateProperties(properties: PropertyAST[], errors: ValidationError[]): void {\n if (!properties || properties.length === 0) {\n errors.push(new ValidationError(\n 'Contract must have at least one property',\n 'contract.properties'\n ));\n return;\n }\n \n // Check for duplicate property names\n const propertyNames = new Set<string>();\n for (const property of properties) {\n if (propertyNames.has(property.name)) {\n errors.push(new ValidationError(\n `Duplicate property name: '${property.name}'`,\n `contract.properties.${property.name}`\n ));\n }\n propertyNames.add(property.name);\n \n // Validate individual property\n this.validateProperty(property, errors);\n }\n }\n \n /**\n * Validate property\n * @param property - Property AST\n * @param errors - Array to collect errors\n */\n private validateProperty(property: PropertyAST, errors: ValidationError[]): void {\n const path = `contract.properties.${property.name}`;\n \n // Validate property name\n if (!property.name || property.name.trim().length === 0) {\n errors.push(new ValidationError(\n 'Property name cannot be empty',\n `${path}.name`\n ));\n }\n \n // Validate allows\n this.validateAllows(property.allows, `${path}.allows`, errors);\n \n // Validate default\n if (property.default) {\n this.validateDefault(property.default, property.allows, `${path}.default`, errors);\n }\n \n // Validate constraints\n if (property.constraints) {\n this.validateConstraints(property.constraints, property.allows, `${path}.constraints`, errors);\n }\n \n // Validate conflicts\n if (property.conflicts) {\n this.validateConflicts(property.conflicts, `${path}.conflicts`, errors);\n }\n }\n \n /**\n * Validate allows\n * @param allows - Array of allowed tokens\n * @param path - Path for error reporting\n * @param errors - Array to collect errors\n */\n private validateAllows(allows: string[], path: string, errors: ValidationError[]): void {\n if (!allows || allows.length === 0) {\n errors.push(new ValidationError(\n 'Property must have at least one allowed token',\n path\n ));\n return;\n }\n \n // Check for duplicate tokens\n const tokenSet = new Set<string>();\n for (const token of allows) {\n if (tokenSet.has(token)) {\n errors.push(new ValidationError(\n `Duplicate allowed token: '${token}'`,\n path\n ));\n }\n tokenSet.add(token);\n \n // Validate token format\n this.validateTokenFormat(token, path, errors);\n }\n }\n \n /**\n * Validate default\n * @param defaultVal - Default token\n * @param allows - Array of allowed tokens\n * @param path - Path for error reporting\n * @param errors - Array to collect errors\n */\n private validateDefault(defaultVal: string, allows: string[], path: string, errors: ValidationError[]): void {\n // Validate token format\n this.validateTokenFormat(defaultVal, path, errors);\n \n // Check if default is in allows\n if (!allows.includes(defaultVal)) {\n errors.push(new ValidationError(\n `Default token '${defaultVal}' is not in allowed tokens`,\n path\n ));\n }\n }\n \n /**\n * Validate constraints\n * @param constraints - Array of constraints\n * @param allows - Array of allowed tokens\n * @param path - Path for error reporting\n * @param errors - Array to collect errors\n */\n private validateConstraints(constraints: ConstraintAST[], allows: string[], path: string, errors: ValidationError[]): void {\n if (!constraints || constraints.length === 0) {\n return;\n }\n \n // Check for duplicate contexts\n const contextSet = new Set<string>();\n for (const constraint of constraints) {\n if (contextSet.has(constraint.context)) {\n errors.push(new ValidationError(\n `Duplicate context: '${constraint.context}'`,\n `${path}.${constraint.context}`\n ));\n }\n contextSet.add(constraint.context);\n \n // Validate individual constraint\n this.validateConstraint(constraint, allows, `${path}.${constraint.context}`, errors);\n }\n }\n \n /**\n * Validate constraint\n * @param constraint - Constraint AST\n * @param allows - Array of allowed tokens\n * @param path - Path for error reporting\n * @param errors - Array to collect errors\n */\n private validateConstraint(constraint: ConstraintAST, allows: string[], path: string, errors: ValidationError[]): void {\n // Validate context\n if (!this.validContexts.has(constraint.context)) {\n errors.push(new ValidationError(\n `Invalid context: '${constraint.context}'. Must be one of: ${Array.from(this.validContexts).join(', ')}`,\n `${path}.context`\n ));\n }\n \n // Validate allows\n if (!constraint.allows || constraint.allows.length === 0) {\n errors.push(new ValidationError(\n 'Constraint must have at least one allowed token',\n `${path}.allows`\n ));\n return;\n }\n \n // Check if constraint allows are subset of property allows\n for (const token of constraint.allows) {\n if (!allows.includes(token)) {\n errors.push(new ValidationError(\n `Constraint token '${token}' is not in property allowed tokens`,\n `${path}.allows`\n ));\n }\n \n // Validate token format\n this.validateTokenFormat(token, `${path}.allows`, errors);\n }\n }\n \n /**\n * Validate conflicts\n * @param conflicts - Array of conflicting properties\n * @param path - Path for error reporting\n * @param errors - Array to collect errors\n */\n private validateConflicts(conflicts: string[], path: string, errors: ValidationError[]): void {\n if (!conflicts || conflicts.length === 0) {\n return;\n }\n \n // Check for duplicate properties\n const propertySet = new Set<string>();\n for (const property of conflicts) {\n if (propertySet.has(property)) {\n errors.push(new ValidationError(\n `Duplicate conflicting property: '${property}'`,\n path\n ));\n }\n propertySet.add(property);\n \n // Validate property name format\n if (!property || property.trim().length === 0) {\n errors.push(new ValidationError(\n 'Conflicting property name cannot be empty',\n path\n ));\n }\n }\n }\n \n /**\n * Validate token format\n * @param token - Token to validate\n * @param path - Path for error reporting\n * @param errors - Array to collect errors\n */\n private validateTokenFormat(token: string, path: string, errors: ValidationError[]): void {\n if (!token || token.trim().length === 0) {\n errors.push(new ValidationError(\n 'Token cannot be empty',\n path\n ));\n return;\n }\n \n // Token should be in format: category.subcategory.value\n const parts = token.split('.');\n if (parts.length < 2) {\n errors.push(new ValidationError(\n `Invalid token format: '${token}'. Must be in format: 'category.subcategory.value'`,\n path\n ));\n }\n \n // Each part should be valid identifier\n for (const part of parts) {\n if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(part)) {\n errors.push(new ValidationError(\n `Invalid token part: '${part}'. Must start with a letter and contain only letters, digits, underscores, and hyphens.`,\n path\n ));\n }\n }\n }\n}","/**\n * Contract DSL Compiler\n * \n * Compiles Contract DSL AST to ComponentConstitution and StyleContractDefinition.\n * \n * Responsibilities:\n * - Compile AST to ComponentConstitution\n * - Generate StyleContractDefinition\n * - Provide compile errors\n * \n * Key Principles:\n * - DRY: Single compilation logic\n * - SOLID: Single responsibility\n * - YAGNI: Only compile what's needed\n * - DDD: Domain-specific compilation\n */\n\nimport type { ContractAST, PropertyAST, ConstraintAST } from '../parser/Parser';\nimport type { ComponentConstitution, StyleContractDefinition, StyleRule, StyleDomain } from '../../domain';\nimport { CompilerError } from './CompilerError';\n\n/**\n * CompileResult\n * Result of compilation.\n */\nexport interface CompileResult {\n readonly constitution: ComponentConstitution;\n readonly contract: StyleContractDefinition;\n readonly errors: string[];\n}\n\n/**\n * ContractDSLCompiler\n * Compiles Contract DSL AST to ComponentConstitution and StyleContractDefinition.\n */\nexport class ContractDSLCompiler {\n /**\n * Compile AST to ComponentConstitution and StyleContractDefinition\n * @param ast - Contract AST\n * @returns Compile result\n */\n compile(ast: ContractAST): CompileResult {\n const errors: string[] = [];\n \n // Compile to ComponentConstitution\n const constitution = this.compileToConstitution(ast, errors);\n \n // Compile to StyleContractDefinition\n const contract = this.compileToContractDefinition(ast, errors);\n \n return {\n constitution,\n contract,\n errors\n };\n }\n \n /**\n * Compile AST to ComponentConstitution\n * @param ast - Contract AST\n * @param errors - Array to collect errors\n * @returns ComponentConstitution\n */\n private compileToConstitution(ast: ContractAST, errors: string[]): ComponentConstitution {\n const rules: StyleRule[] = [];\n \n for (const property of ast.properties) {\n const rule = this.compilePropertyToRule(property, errors);\n rules.push(rule);\n }\n \n return {\n componentName: ast.name,\n rules\n };\n }\n \n /**\n * Compile property to StyleRule\n * @param property - Property AST\n * @param errors - Array to collect errors\n * @returns StyleRule\n */\n private compilePropertyToRule(property: PropertyAST, errors: string[]): StyleRule {\n return {\n property: property.name,\n domain: this.inferDomain(property.name, errors),\n allowedTokens: property.allows,\n conflictsWith: property.conflicts\n };\n }\n \n /**\n * Infer domain from property name\n * @param propertyName - Property name\n * @param errors - Array to collect errors\n * @returns Inferred domain\n */\n private inferDomain(propertyName: string, errors: string[]): StyleDomain {\n // Simple heuristic to infer domain from property name\n const layoutProperties = ['padding', 'margin', 'spacing', 'gap', 'width', 'height', 'radius', 'shadow'];\n const typographyProperties = ['size', 'weight', 'line-height', 'color', 'font'];\n const colorProperties = ['background', 'foreground', 'border', 'text', 'intent'];\n const effectProperties = ['opacity', 'blur', 'transform', 'transition', 'animation'];\n const interactionProperties = ['hover', 'active', 'focus', 'disabled', 'state'];\n \n if (layoutProperties.some(prop => propertyName.includes(prop))) {\n return 'layout';\n }\n \n if (typographyProperties.some(prop => propertyName.includes(prop))) {\n return 'typography';\n }\n \n if (colorProperties.some(prop => propertyName.includes(prop))) {\n return 'color';\n }\n \n if (effectProperties.some(prop => propertyName.includes(prop))) {\n return 'effect';\n }\n \n if (interactionProperties.some(prop => propertyName.includes(prop))) {\n return 'interaction';\n }\n \n // Default to layout if unknown\n errors.push(`Warning: Could not infer domain for property '${propertyName}', defaulting to 'layout'`);\n return 'layout';\n }\n \n /**\n * Compile AST to StyleContractDefinition\n * @param ast - Contract AST\n * @param errors - Array to collect errors\n * @returns StyleContractDefinition\n */\n private compileToContractDefinition(ast: ContractAST, errors: string[]): StyleContractDefinition {\n const contract: Record<string, string> = {};\n \n for (const property of ast.properties) {\n const defaultValue = property.default || property.allows[0];\n contract[property.name] = defaultValue;\n }\n \n return contract as StyleContractDefinition;\n }\n \n /**\n * Generate TypeScript code for ComponentConstitution\n * @param ast - Contract AST\n * @returns TypeScript code\n */\n generateConstitutionCode(ast: ContractAST): string {\n const lines: string[] = [];\n \n lines.push(`import type { ComponentConstitution } from '../domain/types';`);\n lines.push('');\n lines.push(`export const ${ast.name}Constitution: ComponentConstitution = {`);\n lines.push(` componentName: '${ast.name}',`);\n lines.push(` domain: '${ast.domain}',`);\n lines.push(` rules: [`);\n \n for (const property of ast.properties) {\n lines.push(` {`);\n lines.push(` property: '${property.name}',`);\n lines.push(` domain: '${this.inferDomain(property.name, [])}',`);\n lines.push(` allowedTokens: [${property.allows.map((t: string) => `'${t}'`).join(', ')}],`);\n \n if (property.conflicts && property.conflicts.length > 0) {\n lines.push(` conflictsWith: [${property.conflicts.map((c: string) => `'${c}'`).join(', ')}],`);\n }\n \n lines.push(` },`);\n }\n \n lines.push(` ]`);\n lines.push(`};`);\n \n return lines.join('\\n');\n }\n \n /**\n * Generate TypeScript code for StyleContractDefinition\n * @param ast - Contract AST\n * @returns TypeScript code\n */\n generateContractCode(ast: ContractAST): string {\n const lines: string[] = [];\n \n lines.push(`import type { StyleContractDefinition } from '../domain/types';`);\n lines.push('');\n lines.push(`export const ${ast.name}Contract: StyleContractDefinition = {`);\n \n for (const property of ast.properties) {\n const defaultValue = property.default || property.allows[0];\n lines.push(` ${property.name}: '${defaultValue}',`);\n }\n \n lines.push(`};`);\n \n return lines.join('\\n');\n }\n \n /**\n * Generate complete TypeScript file\n * @param ast - Contract AST\n * @returns TypeScript file content\n */\n generateTypeScriptFile(ast: ContractAST): string {\n const lines: string[] = [];\n \n lines.push(`/**`);\n lines.push(` * ${ast.name} Contract`);\n lines.push(` * Generated from Contract DSL`);\n lines.push(` */`);\n lines.push('');\n lines.push(this.generateConstitutionCode(ast));\n lines.push('');\n lines.push(this.generateContractCode(ast));\n \n return lines.join('\\n');\n }\n}","\n/**\n * CLI Error Handler\n * \n * Provides enhanced error handling for CLI commands with helpful suggestions.\n * \n * Key Principles:\n * - User-friendly: Clear, actionable error messages\n * - Context-aware: Suggestions based on error type\n * - Consistent: Uniform error formatting\n * - Helpful: Provides solutions, not just problems\n */\n\nexport interface ErrorSuggestion {\n readonly message: string;\n readonly command?: string;\n readonly example?: string;\n}\n\nexport interface ErrorContext {\n readonly command: string;\n readonly args: readonly string[];\n readonly options: Readonly<Record<string, unknown>>;\n}\n\nexport class CLIError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly suggestions: ErrorSuggestion[] = [],\n public readonly exitCode: number = 1\n ) {\n super(message);\n this.name = 'CLIError';\n }\n}\n\n/**\n * Error Handler\n * Handles CLI errors with helpful messages and suggestions.\n */\nexport class ErrorHandler {\n private static readonly ERROR_SUGGESTIONS: Record<string, ErrorSuggestion[]> = {\n 'ENOENT': [\n {\n message: 'File not found. Check the file path and try again.',\n example: 'mase compile ./contracts/Button.contract'\n },\n {\n message: 'Make sure the file exists in the specified location.',\n example: 'ls -la ./contracts/'\n }\n ],\n 'EACCES': [\n {\n message: 'Permission denied. Check file permissions.',\n example: 'chmod +x ./contracts/Button.contract'\n }\n ],\n 'SYNTAX_ERROR': [\n {\n message: 'Syntax error in contract file. Check for typos and missing brackets.',\n example: 'contract Button {\\n domain: color;\\n padding {\\n allows: [space.sm, space.md];\\n }\\n}'\n }\n ],\n 'VALIDATION_ERROR': [\n {\n message: 'Contract validation failed. Check the constitution rules.',\n example: 'mase validate ./contracts/Button.contract'\n }\n ]\n };\n\n static handle(error: unknown): void {\n if (error instanceof CLIError) {\n console.error(`❌ ${error.message}`);\n if (error.suggestions.length > 0) {\n console.log('\\n💡 Suggestions:');\n error.suggestions.forEach(s => {\n console.log(` - ${s.message}`);\n if (s.command) console.log(` Command: ${s.command}`);\n if (s.example) console.log(` Example: ${s.example}`);\n });\n }\n process.exit(error.exitCode);\n }\n\n const code = error && typeof error === 'object' ? (error as any).code : undefined;\n const suggestions = code ? this.ERROR_SUGGESTIONS[code] : undefined;\n\n if (error instanceof Error) {\n console.error(`❌ ${error.message}`);\n } else {\n console.error(`❌ An unexpected error occurred: ${String(error)}`);\n }\n\n if (suggestions) {\n console.log('\\n💡 Suggestions:');\n suggestions.forEach(s => {\n console.log(` - ${s.message}`);\n if (s.example) console.log(` Example: ${s.example}`);\n });\n }\n\n process.exit(1);\n }\n}\n","import { Command } from 'commander';\nimport { ContractDSLTokenizer, ContractDSLParser, ContractDSLValidator } from '../../dsl';\nimport * as fs from 'fs';\n\nexport const validateCommand = new Command('validate')\n .description('Validate a contract DSL file')\n .argument('<contract-file>', 'Contract DSL file to validate')\n .option('--strict', 'Enable strict validation', false)\n .option('--fix', 'Auto-fix issues', false)\n .option('--watch', 'Watch for changes', false)\n .action((contractFile, options) => {\n console.log(`Validating ${contractFile}...`);\n \n try {\n // Read contract file\n const source = fs.readFileSync(contractFile, 'utf-8');\n \n // Tokenize\n const tokenizer = new ContractDSLTokenizer();\n const tokens = tokenizer.tokenize(source);\n \n // Parse\n const parser = new ContractDSLParser();\n const ast = parser.parse(tokens);\n \n // Validate\n const validator = new ContractDSLValidator();\n const validationResult = validator.validate(ast);\n \n if (validationResult.isValid) {\n console.log('✅ Contract is valid!');\n } else {\n console.error('❌ Validation errors:');\n validationResult.errors.forEach(error => {\n console.error(` - ${error.path}: ${error.message}`);\n });\n process.exit(1);\n }\n \n if (options.watch) {\n console.log('👀 Watching for changes...');\n // TODO: Implement watch mode\n }\n \n } catch (error) {\n console.error('❌ Error:', error);\n process.exit(1);\n }\n });\n","import { Command } from 'commander';\nimport { ContractDSLTokenizer, ContractDSLParser, ContractDSLValidator, ContractDSLCompiler } from '../../dsl';\nimport { CSSMaterializer } from '../../materializer';\nimport { AtomicCSSGenerator } from '../../integration/atomic';\nimport { TOKENS } from '../../data/tokens';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport const generateCssCommand = new Command('generate-css')\n .description('Generate CSS from a contract DSL file or Token source')\n .argument('[source]', 'Contract DSL file or Tokens file (optional for atomic)')\n .option('-o, --output <file>', 'Output file (default: stdout)')\n .option('--format <format>', 'Output format (class, variable, inline, atomic)', 'class')\n .option('--theme <theme>', 'Theme (light, dark)', 'light')\n .option('--device <device>', 'Device (mobile, tablet, desktop)', 'desktop')\n .option('-w, --watch', 'Watch for changes and regenerate', false)\n .action(async (source, options) => {\n // Mode Atomic: Generate Utility Classes from Tokens\n if (options.format === 'atomic') {\n const runAtomicGeneration = () => {\n console.log('⚛️ Generating Atomic CSS...');\n \n let tokens = TOKENS; // Default to internal tokens\n \n if (source) {\n try {\n const fullPath = path.resolve(process.cwd(), source);\n // Clear cache to ensure fresh reload\n delete require.cache[require.resolve(fullPath)];\n \n if (fs.existsSync(fullPath)) {\n const loaded = require(fullPath);\n tokens = loaded.default || loaded.TOKENS || loaded;\n console.log(`Loaded tokens from ${source}`);\n } else {\n console.warn(`⚠️ Source file ${source} not found. Using default tokens.`);\n }\n } catch (e) {\n console.warn('⚠️ Could not load tokens from file, using defaults:', (e as Error).message);\n }\n } else {\n console.log('ℹ️ No source provided, using default built-in tokens.');\n }\n \n const generator = new AtomicCSSGenerator();\n const css = generator.generate(tokens);\n \n if (options.output) {\n fs.writeFileSync(options.output, css, 'utf-8');\n console.log(`✅ Atomic CSS generated to ${options.output}`);\n } else {\n console.log(css);\n }\n };\n\n // Initial run\n runAtomicGeneration();\n\n // Watch mode\n if (options.watch && source) {\n console.log(`👀 Watching for changes in ${source}...`);\n const fullPath = path.resolve(process.cwd(), source);\n fs.watch(fullPath, (eventType) => {\n if (eventType === 'change') {\n console.log('🔄 File changed, regenerating...');\n runAtomicGeneration();\n }\n });\n \n // Keep process alive\n await new Promise(() => {});\n } else if (options.watch && !source) {\n console.warn('⚠️ Watch mode requires a source file. Ignoring --watch.');\n }\n \n return;\n }\n\n // Default Mode: Contract DSL -> CSS\n if (!source) {\n console.error('❌ Error: Contract file argument is required for non-atomic format.');\n process.exit(1);\n }\n\n console.log(`Generating CSS from ${source}...`);\n \n try {\n // Read contract file\n const contractContent = fs.readFileSync(source, 'utf-8');\n \n // Tokenize\n const tokenizer = new ContractDSLTokenizer();\n const tokens = tokenizer.tokenize(contractContent);\n \n // Parse\n const parser = new ContractDSLParser();\n const ast = parser.parse(tokens);\n \n // Validate\n const validator = new ContractDSLValidator();\n const validationResult = validator.validate(ast);\n \n if (!validationResult.isValid) {\n console.error('❌ Validation errors:');\n validationResult.errors.forEach(error => {\n console.error(` - ${error.path}: ${error.message}`);\n });\n process.exit(1);\n }\n \n // Compile\n const compiler = new ContractDSLCompiler();\n const result = compiler.compile(ast);\n \n // Materialize to CSS\n const materializer = new CSSMaterializer();\n const cssResult = materializer.materialize(\n result.constitution.rules.map(rule => ({\n domain: rule.domain,\n semantic: rule.property,\n tokenRef: rule.allowedTokens[0]\n })),\n {\n platform: 'web',\n theme: options.theme as 'light' | 'dark',\n device: options.device as 'mobile' | 'tablet' | 'desktop',\n outputFormat: options.format as 'class' | 'variable' | 'inline'\n }\n );\n \n // Output based on format\n let output: string;\n \n switch (options.format) {\n case 'variable':\n output = cssResult.output.variables;\n break;\n case 'inline':\n output = cssResult.output.inline;\n break;\n case 'class':\n default:\n output = cssResult.output.classes;\n break;\n }\n \n if (options.output) {\n fs.writeFileSync(options.output, output, 'utf-8');\n console.log(`✅ CSS generated to ${options.output}`);\n } else {\n console.log(output);\n }\n \n } catch (error) {\n console.error('❌ Error:', error);\n process.exit(1);\n }\n });\n","/**\n * CSS Materializer\n * \n * Converts semantic nodes to CSS output for web platform.\n * \n * Responsibilities:\n * - Map semantic → CSS property\n * - Map token → CSS value\n * - Map domain → CSS layer\n * - Generate CSS classes or variables\n * - Support responsive variants\n * \n * Key Principles:\n * - DRY: Single materialization logic\n * - SOLID: Single responsibility\n * - YAGNI: Only materialize what's needed\n * - DDD: Domain-specific CSS generation\n */\n\nimport type { Materializer, MaterializationContext, MaterializationResult } from '../core/Materializer';\nimport type { SemanticNode } from '../../domain';\nimport { MaterializationError } from '../core/MaterializationError';\n\n/**\n * CSSOutput\n * CSS output format.\n */\nexport interface CSSOutput {\n readonly classes: string;\n readonly variables: string;\n readonly inline: string;\n}\n\n/**\n * SemanticToCSSMapping\n * Mapping from semantic to CSS property.\n */\ninterface SemanticToCSSMapping {\n readonly [semantic: string]: string;\n}\n\n/**\n * CSSMaterializer\n * Materializes semantic nodes to CSS output.\n */\nexport class CSSMaterializer implements Materializer<CSSOutput> {\n private readonly semanticToCSS: SemanticToCSSMapping;\n \n constructor() {\n this.semanticToCSS = this.buildSemanticToCSSMapping();\n }\n \n /**\n * Materialize semantic nodes to CSS output\n * @param nodes - Resolved semantic nodes\n * @param context - Materialization context\n * @returns CSS output\n */\n materialize(\n nodes: readonly SemanticNode[],\n context: MaterializationContext\n ): MaterializationResult<CSSOutput> {\n const classes: string[] = [];\n const variables: string[] = [];\n const inline: string[] = [];\n \n for (const node of nodes) {\n const cssProperty = this.mapSemanticToCSS(node.semantic);\n const cssValue = this.mapTokenToCSS(node.tokenRef, context.theme);\n \n // Generate based on output format\n switch (context.outputFormat) {\n case 'class':\n classes.push(this.generateCSSClass(node.semantic, cssProperty, cssValue));\n break;\n case 'variable':\n variables.push(this.generateCSSVariable(node.tokenRef, cssValue));\n break;\n case 'inline':\n inline.push(this.generateInlineStyle(cssProperty, cssValue));\n break;\n }\n }\n \n return {\n output: {\n classes: classes.join('\\n'),\n variables: variables.join('\\n'),\n inline: inline.join('; ')\n },\n metadata: {\n platform: context.platform,\n theme: context.theme,\n device: context.device,\n format: context.outputFormat,\n timestamp: new Date().toISOString()\n }\n };\n }\n \n /**\n * Build semantic to CSS mapping\n * @returns Mapping object\n */\n private buildSemanticToCSSMapping(): SemanticToCSSMapping {\n return {\n // Spacing\n 'spacing.padding.small': 'padding',\n 'spacing.padding.medium': 'padding',\n 'spacing.padding.large': 'padding',\n 'spacing.margin.small': 'margin',\n 'spacing.margin.medium': 'margin',\n 'spacing.margin.large': 'margin',\n 'spacing.gap.small': 'gap',\n 'spacing.gap.medium': 'gap',\n 'spacing.gap.large': 'gap',\n \n // Color\n 'color.background.primary': 'background-color',\n 'color.background.secondary': 'background-color',\n 'color.background.tertiary': 'background-color',\n 'color.text.primary': 'color',\n 'color.text.secondary': 'color',\n 'color.text.tertiary': 'color',\n 'color.border.primary': 'border-color',\n 'color.border.secondary': 'border-color',\n \n // Typography\n 'typography.size.small': 'font-size',\n 'typography.size.base': 'font-size',\n 'typography.size.large': 'font-size',\n 'typography.weight.light': 'font-weight',\n 'typography.weight.normal': 'font-weight',\n 'typography.weight.bold': 'font-weight',\n 'typography.line-height.tight': 'line-height',\n 'typography.line-height.normal': 'line-height',\n 'typography.line-height.relaxed': 'line-height',\n \n // Effect\n 'effect.shadow.small': 'box-shadow',\n 'effect.shadow.medium': 'box-shadow',\n 'effect.shadow.large': 'box-shadow',\n 'effect.radius.small': 'border-radius',\n 'effect.radius.medium': 'border-radius',\n 'effect.radius.large': 'border-radius',\n 'effect.opacity.low': 'opacity',\n 'effect.opacity.medium': 'opacity',\n 'effect.opacity.high': 'opacity'\n };\n }\n \n /**\n * Map semantic to CSS property\n * @param semantic - Semantic string\n * @returns CSS property\n */\n private mapSemanticToCSS(semantic: string): string {\n const cssProperty = this.semanticToCSS[semantic];\n \n if (!cssProperty) {\n // Fallback: extract last part of semantic\n const parts = semantic.split('.');\n const lastPart = parts[parts.length - 1];\n \n // Map common patterns\n if (lastPart === 'small' || lastPart === 'medium' || lastPart === 'large') {\n return parts[parts.length - 2]; // e.g., padding, margin\n }\n \n return lastPart;\n }\n \n return cssProperty;\n }\n \n /**\n * Map token to CSS value\n * @param tokenRef - Token reference\n * @param theme - Theme\n * @returns CSS value\n */\n private mapTokenToCSS(tokenRef: string, theme: string): string {\n // In a real implementation, this would resolve the token from a token registry\n // For now, we'll use CSS variables as the default approach\n \n // Convert token reference to CSS variable name\n const cssVarName = tokenRef.replace(/\\./g, '-');\n \n // Add theme suffix if dark mode\n if (theme === 'dark') {\n return `var(--${cssVarName}-dark)`;\n }\n \n return `var(--${cssVarName})`;\n }\n \n /**\n * Generate CSS class\n * @param semantic - Semantic string\n * @param property - CSS property\n * @param value - CSS value\n * @returns CSS class string\n */\n private generateCSSClass(semantic: string, property: string, value: string): string {\n // Generate class name from semantic\n const className = this.generateClassName(semantic);\n \n return `.${className} { ${property}: ${value}; }`;\n }\n \n /**\n * Generate CSS variable\n * @param tokenRef - Token reference\n * @param value - CSS value\n * @returns CSS variable string\n */\n private generateCSSVariable(tokenRef: string, value: string): string {\n const varName = tokenRef.replace(/\\./g, '-');\n \n return `--${varName}: ${value};`;\n }\n \n /**\n * Generate inline style\n * @param property - CSS property\n * @param value - CSS value\n * @returns Inline style string\n */\n private generateInlineStyle(property: string, value: string): string {\n return `${property}: ${value}`;\n }\n \n /**\n * Generate class name from semantic\n * @param semantic - Semantic string\n * @returns Class name\n */\n private generateClassName(semantic: string): string {\n // Convert semantic to kebab-case class name\n return semantic\n .replace(/\\./g, '-')\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .toLowerCase();\n }\n}","export const CSS_RESET = `/* MASE Grounding (Reset) */\n*, ::before, ::after {\n box-sizing: border-box;\n border-width: 0;\n border-style: solid;\n border-color: currentColor;\n}\n\nhtml, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n -moz-tab-size: 4;\n tab-size: 4;\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-feature-settings: normal;\n font-variation-settings: normal;\n -webkit-tap-highlight-color: transparent;\n}\n\nbody {\n margin: 0;\n line-height: inherit;\n}\n\nhr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n}\n\nabbr:where([title]) {\n text-decoration: underline dotted;\n}\n\nh1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\nb, strong {\n font-weight: bolder;\n}\n\ncode, kbd, samp, pre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\ntable {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n}\n\nbutton, input, optgroup, select, textarea {\n font-family: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n font-size: 100%;\n font-weight: inherit;\n line-height: inherit;\n color: inherit;\n margin: 0;\n padding: 0;\n}\n\nbutton, select {\n text-transform: none;\n}\n\nbutton, [type=\"button\"], [type=\"reset\"], [type=\"submit\"] {\n -webkit-appearance: button;\n background-color: transparent;\n background-image: none;\n}\n\n:-moz-focusring {\n outline: auto;\n}\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n -webkit-appearance: textfield;\n outline-offset: -2px;\n}\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n -webkit-appearance: button;\n font: inherit;\n}\n\nsummary {\n display: list-item;\n}\n\nblockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol, ul, menu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\ntextarea {\n resize: vertical;\n}\n\ninput::placeholder, textarea::placeholder {\n opacity: 1;\n color: #9ca3af;\n}\n\nbutton, [role=\"button\"] {\n cursor: pointer;\n}\n\n:disabled {\n cursor: default;\n}\n\nimg, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n}\n\nimg, video {\n max-width: 100%;\n height: auto;\n}\n\n[hidden] {\n display: none;\n}\n`;","import { CSS_RESET } from '../reset';\n\n/**\n * Handles the generation of the Base layer (CSS Reset).\n */\nexport class BaseGenerator {\n generate(includeReset: boolean = true): string {\n if (!includeReset) return '';\n \n let css = '@layer base {\\n';\n css += CSS_RESET;\n css += '}\\n\\n';\n \n return css;\n }\n}\n","import { Token } from '../../domain/types';\n\n/**\n * Shared utility functions for integration layer\n * Reduces code duplication and ensures consistency\n */\n\n/**\n * Format token ID to CSS variable name\n * @param tokenId - The token ID (e.g., 'color.primary')\n * @param prefix - Variable prefix (default: '--')\n * @returns Formatted CSS variable name (e.g., '--color-primary')\n */\nexport function formatVarName(tokenId: string, prefix: string = '--'): string {\n return `${prefix}${tokenId.replace(/\\./g, '-')}`;\n}\n\n/**\n * Format token ID to utility class suffix\n * @param tokenId - The token ID (e.g., 'color.primary')\n * @returns Suffix for utility class (e.g., 'primary')\n */\nexport function formatSuffix(tokenId: string): string {\n const parts = tokenId.split('.');\n return parts.length > 1 ? parts.slice(1).join('-') : parts[0];\n}\n\n/**\n * Type guard to check if value is theme-aware (object with light/dark)\n * @param value - The token value to check\n * @returns True if value is theme-aware\n */\nexport function isThemeAware(value: unknown): value is { light?: string; dark?: string } {\n return typeof value === 'object' && value !== null;\n}\n\n/**\n * Get light theme value from token\n * @param token - The token\n * @returns Light theme value or fallback\n */\nexport function getLightValue(token: Token): string {\n if (typeof token.value === 'string') {\n return token.value;\n }\n \n if (isThemeAware(token.value)) {\n return token.value.light || Object.values(token.value)[0] || '';\n }\n \n return String(token.value);\n}\n\n/**\n * Get dark theme value from token\n * @param token - The token\n * @returns Dark theme value or null if not available\n */\nexport function getDarkValue(token: Token): string | null {\n if (typeof token.value === 'string') {\n return null;\n }\n \n if (isThemeAware(token.value)) {\n return token.value.dark || null;\n }\n \n return null;\n}\n\n/**\n * Check if token has dark mode value\n * @param token - The token\n * @returns True if token has dark mode value\n */\nexport function hasDarkMode(token: Token): boolean {\n return getDarkValue(token) !== null;\n}\n\n/**\n * Create CSS variable declaration\n * @param varName - CSS variable name\n * @param value - Variable value\n * @returns CSS declaration string\n */\nexport function createVarDeclaration(varName: string, value: string): string {\n return `${varName}: ${value}`;\n}\n\n/**\n * Create CSS variable reference\n * @param varName - CSS variable name\n * @returns CSS variable reference string\n */\nexport function createVarReference(varName: string): string {\n return `var(${varName})`;\n}\n\n/**\n * Validate token has required properties\n * @param token - The token to validate\n * @returns True if token is valid\n */\nexport function isValidToken(token: Token): boolean {\n return !!token && !!token.id && token.value !== undefined && token.value !== null;\n}\n\n/**\n * Filter valid tokens from a record\n * @param tokens - Record of tokens\n * @returns Array of valid tokens\n */\nexport function filterValidTokens(tokens: Record<string, Token>): Token[] {\n return Object.values(tokens).filter(isValidToken);\n}\n\n/**\n * Group tokens by domain\n * @param tokens - Record of tokens\n * @returns Object mapping domains to tokens\n */\nexport function groupTokensByDomain(tokens: Record<string, Token>): Record<string, Token[]> {\n const grouped: Record<string, Token[]> = {};\n \n Object.values(tokens).forEach(token => {\n if (!grouped[token.domain]) {\n grouped[token.domain] = [];\n }\n grouped[token.domain].push(token);\n });\n \n return grouped;\n}\n\n/**\n * Create CSS rule with properties\n * @param selector - CSS selector\n * @param properties - Array of CSS property declarations\n * @param indent - Indentation level (default: 2 spaces)\n * @returns Formatted CSS rule\n */\nexport function createCssRule(selector: string, properties: string[], indent: number = 2): string {\n if (properties.length === 0) return '';\n \n const spaces = ' '.repeat(indent);\n const props = properties.map(p => `${spaces}${p}`).join('\\n');\n \n return `${selector} {\\n${props}\\n}`;\n}\n\n/**\n * Create CSS layer wrapper\n * @param layerName - Layer name\n * @param content - CSS content\n * @returns CSS with layer wrapper\n */\nexport function createLayer(layerName: string, content: string): string {\n return `@layer ${layerName} {\\n${content}\\n}\\n`;\n}\n\n/**\n * Sanitize CSS value to prevent injection\n * @param value - CSS value to sanitize\n * @returns Sanitized value\n */\nexport function sanitizeCssValue(value: string): string {\n // Remove potentially dangerous characters\n return value.replace(/[<>{}]/g, '');\n}\n\n/**\n * Format CSS comment\n * @param text - Comment text\n * @returns Formatted CSS comment\n */\nexport function createComment(text: string): string {\n return `/* ${text} */`;\n}","import { Token } from '../../../domain';\nimport { GeneratorContext } from '../types';\nimport {\n formatVarName,\n getLightValue,\n getDarkValue,\n createVarDeclaration,\n createCssRule,\n createLayer,\n isValidToken,\n filterValidTokens\n} from '../../shared/utils';\n\n/**\n * Handles the generation of CSS variables (Theme layer).\n */\nexport class ThemeGenerator {\n /**\n * Mini function: Get prefix with CSS variable prefix\n */\n private getFullPrefix(context: GeneratorContext): string {\n return `--${context.prefix}`;\n }\n\n /**\n * Mini function: Get dark mode selector\n */\n private getDarkModeSelector(): string {\n return '[data-theme=\"dark\"]';\n }\n\n /**\n * Mini function: Process a single token\n */\n private processToken(token: Token, fullPrefix: string): { default: string; dark?: string } {\n if (!isValidToken(token)) {\n return { default: '' };\n }\n\n const varName = formatVarName(token.id, fullPrefix);\n const lightValue = getLightValue(token);\n const darkValue = getDarkValue(token);\n\n const result: { default: string; dark?: string } = {\n default: createVarDeclaration(varName, lightValue)\n };\n\n if (darkValue) {\n result.dark = createVarDeclaration(varName, darkValue);\n }\n\n return result;\n }\n\n /**\n * Mini function: Collect variable declarations from tokens\n */\n private collectVariables(tokens: Record<string, Token>, fullPrefix: string): { default: string[]; dark: string[] } {\n const validTokens = filterValidTokens(tokens);\n const defaultVars: string[] = [];\n const darkVars: string[] = [];\n\n validTokens.forEach(token => {\n const processed = this.processToken(token, fullPrefix);\n \n if (processed.default) {\n defaultVars.push(` ${processed.default};`);\n }\n \n if (processed.dark) {\n darkVars.push(` ${processed.dark};`);\n }\n });\n\n return { default: defaultVars, dark: darkVars };\n }\n\n /**\n * Mini function: Generate default theme block\n */\n private generateDefaultBlock(selector: string, vars: string[]): string {\n if (vars.length === 0) return '';\n return createCssRule(selector, vars, 2);\n }\n\n /**\n * Mini function: Generate dark mode block\n */\n private generateDarkModeBlock(vars: string[]): string {\n if (vars.length === 0) return '';\n return createCssRule(this.getDarkModeSelector(), vars, 2);\n }\n\n generate(tokens: Record<string, Token>, context: GeneratorContext): string {\n const fullPrefix = this.getFullPrefix(context);\n const { default: defaultVars, dark: darkVars } = this.collectVariables(tokens, fullPrefix);\n\n let content = '';\n content += this.generateDefaultBlock(context.selector, defaultVars);\n content += '\\n';\n content += this.generateDarkModeBlock(darkVars);\n\n return createLayer('theme', content);\n }\n}\n","import { Token } from '../../../domain';\nimport { TokenHandler } from '../types';\nimport { isValidToken, sanitizeCssValue } from '../../shared/utils';\n\n/**\n * Base class for token handlers\n * Provides common functionality and enforces type safety\n */\nexport abstract class BaseHandler implements TokenHandler {\n /**\n * Check if this handler can process the token\n * Must be implemented by subclasses\n */\n abstract canHandle(token: Token): boolean;\n\n /**\n * Generate CSS for the token\n * Must be implemented by subclasses\n */\n abstract generate(token: Token, varName: string, suffix: string): string;\n\n /**\n * Mini function: Validate token before processing\n */\n protected validateToken(token: Token): boolean {\n return isValidToken(token);\n }\n\n /**\n * Mini function: Sanitize CSS value\n */\n protected sanitize(value: string): string {\n return sanitizeCssValue(value);\n }\n\n /**\n * Mini function: Create CSS rule\n */\n protected createRule(selector: string, property: string, value: string): string {\n const sanitizedValue = this.sanitize(value);\n return ` .${selector} { ${property}: ${sanitizedValue}; }\\n`;\n }\n\n /**\n * Mini function: Create multiple CSS rules\n */\n protected createRules(rules: Array<{ selector: string; property: string; value: string }>): string {\n return rules.map(rule => this.createRule(rule.selector, rule.property, rule.value)).join('');\n }\n\n /**\n * Mini function: Extract suffix from token ID\n */\n protected extractSuffix(tokenId: string): string {\n const parts = tokenId.split('.');\n return parts.length > 1 ? parts.slice(1).join('-') : parts[0];\n }\n\n /**\n * Mini function: Check if token ID contains a keyword\n */\n protected containsKeyword(tokenId: string, keyword: string): boolean {\n return tokenId.toLowerCase().includes(keyword.toLowerCase());\n }\n\n /**\n * Mini function: Generate directional rules (top, right, bottom, left, x, y, all)\n * DRY implementation for properties that have directional variants\n */\n protected generateDirectionalRules(\n baseSelector: string,\n suffix: string,\n value: string,\n mappings: Record<string, string | string[]> // key is direction suffix (e.g., 't', 'x', ''), value is property\n ): string {\n const rules: Array<{ selector: string; property: string; value: string }> = [];\n \n for (const [dir, prop] of Object.entries(mappings)) {\n // Construct selector: base + dir + suffix\n // e.g. base='p', dir='t', suffix='4' -> pt-4\n // e.g. base='p', dir='', suffix='4' -> p-4\n const selectorPart = dir ? `${baseSelector}${dir}` : baseSelector;\n const fullSelector = `${selectorPart}-${suffix}`;\n \n if (Array.isArray(prop)) {\n prop.forEach(p => rules.push({ selector: fullSelector, property: p, value }));\n } else {\n rules.push({ selector: fullSelector, property: prop as string, value });\n }\n }\n return this.createRules(rules);\n }\n\n /**\n * Mini function: Generate rules by matching token ID against a prefix map (Scenario B)\n * Use this when the token ID itself dictates the property (e.g. 'p-4' -> padding, 'mt-4' -> margin-top)\n */\n protected generateRulesFromPrefix(\n token: Token,\n varName: string,\n suffix: string,\n prefixMap: Record<string, string | string[] | { property: string; valueTransform?: (value: string) => string }>\n ): string {\n // Sort keys by length descending to ensure longest match wins\n const prefixes = Object.keys(prefixMap).sort((a, b) => b.length - a.length);\n\n for (const prefix of prefixes) {\n // Check if token.id starts with prefix (e.g. 'p-4' starts with 'p-')\n // Also check suffix, as it handles dot-to-hyphen conversion (e.g. 'text.xl' -> 'text-xl')\n console.log('Checking prefix:', prefix);\n console.log('Token ID:', token.id);\n console.log('Suffix:', suffix);\n console.log('Match ID:', token.id === prefix || token.id.startsWith(`${prefix}-`));\n console.log('Match Suffix:', suffix === prefix || suffix.startsWith(`${prefix}-`));\n \n if (token.id === prefix || token.id.startsWith(`${prefix}-`) ||\n suffix === prefix || suffix.startsWith(`${prefix}-`)) {\n const definition = prefixMap[prefix];\n const selector = suffix; \n\n if (typeof definition === 'string') {\n return this.createRule(selector, definition, varName);\n } else if (Array.isArray(definition)) {\n return this.createRules(definition.map(p => ({ selector, property: p, value: varName })));\n } else {\n // Object definition\n const val = definition.valueTransform ? definition.valueTransform(varName) : varName;\n return this.createRule(selector, definition.property, val);\n }\n }\n }\n return '';\n }\n\n /**\n * Mini function: Generate utilities based on a configuration map\n * This implements DRY by allowing handlers to define mappings instead of writing repetitive if-blocks.\n */\n protected generateUtilities(\n token: Token,\n varName: string,\n suffix: string,\n config: Record<string, string | { property: string; classPrefix?: string; valueMap?: Record<string, string>; valueTransform?: (value: string) => string }>\n ): string {\n const rules: Array<{ selector: string; property: string; value: string }> = [];\n\n for (const [match, definition] of Object.entries(config)) {\n if (this.containsKeyword(token.id, match)) {\n let property: string;\n let classPrefix: string | undefined;\n let valueMap: Record<string, string> | undefined;\n let valueTransform: ((value: string) => string) | undefined;\n\n if (typeof definition === 'string') {\n property = definition;\n classPrefix = match; // Default to the match keyword as prefix\n } else {\n property = definition.property;\n // Allow empty string as valid classPrefix\n classPrefix = definition.classPrefix !== undefined ? definition.classPrefix : match;\n valueMap = definition.valueMap;\n valueTransform = definition.valueTransform;\n }\n\n // Determine the class suffix (selector part)\n // If there's a map, try to map the current suffix.\n // Otherwise use the suffix directly.\n let finalSuffix = suffix;\n\n // If suffix starts with the match string, strip it to avoid duplication in selector\n // BUT only if classPrefix is the same as the match key.\n // This ensures that for cases like match='bold' (classPrefix='font'), we DON'T strip 'bold' from suffix.\n // But for cases like match='text' (classPrefix='text'), we DO strip 'text' from suffix.\n if (classPrefix === match && finalSuffix.startsWith(match)) {\n finalSuffix = finalSuffix.substring(match.length);\n // Also strip leading hyphen if present\n if (finalSuffix.startsWith('-')) {\n finalSuffix = finalSuffix.substring(1);\n }\n }\n\n if (valueMap && valueMap[finalSuffix]) {\n finalSuffix = valueMap[finalSuffix];\n }\n\n // Construct selector\n // Handle cases where prefix might be empty or suffix might be part of prefix logic\n // If finalSuffix is empty, use classPrefix as selector\n const selector = finalSuffix ? (classPrefix ? `${classPrefix}-${finalSuffix}` : finalSuffix) : (classPrefix || match);\n \n let finalValue = varName;\n if (valueTransform) {\n finalValue = valueTransform(varName);\n }\n \n rules.push({ selector, property, value: finalValue });\n }\n }\n\n return this.createRules(rules);\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\nexport class ColorHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n token.domain === 'color' && \n !this.containsKeyword(token.id, 'border') &&\n !this.containsKeyword(token.id, 'outline') &&\n !this.containsKeyword(token.id, 'ring');\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n const standardRules = this.createRules([\n // Text Color\n { selector: `text-${suffix}`, property: 'color', value: varName },\n \n // Background Color\n { selector: `bg-${suffix}`, property: 'background-color', value: varName },\n \n // Outline Color\n { selector: `outline-${suffix}`, property: 'outline-color', value: varName },\n \n // Ring Color (Simplified)\n { selector: `ring-${suffix}`, property: '--tw-ring-color', value: varName },\n { selector: `ring-offset-${suffix}`, property: 'outline-color', value: varName }, \n \n // Decoration Color\n { selector: `decoration-${suffix}`, property: 'text-decoration-color', value: varName },\n \n // Accent Color\n { selector: `accent-${suffix}`, property: 'accent-color', value: varName },\n \n // Caret Color\n { selector: `caret-${suffix}`, property: 'caret-color', value: varName },\n \n // Placeholder Color\n { selector: `placeholder-${suffix}::placeholder`, property: 'color', value: varName }\n ]);\n\n // Border Colors (Directional)\n // Uses helper to generate border-red-500, border-t-red-500, etc.\n // Note: Keys start with hyphen because baseSelector is 'border' and we want 'border-t'\n const borderRules = this.generateDirectionalRules('border', suffix, varName, {\n '': 'border-color',\n '-t': 'border-top-color',\n '-r': 'border-right-color',\n '-b': 'border-bottom-color',\n '-l': 'border-left-color',\n '-x': ['border-left-color', 'border-right-color'],\n '-y': ['border-top-color', 'border-bottom-color']\n });\n\n return standardRules + borderRules;\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\nexport class SpaceHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) &&\n (this.containsKeyword(token.id, 'padding') ||\n this.containsKeyword(token.id, 'margin') ||\n this.containsKeyword(token.id, 'width') ||\n this.containsKeyword(token.id, 'height') ||\n this.containsKeyword(token.id, 'gap') ||\n this.containsKeyword(token.id, 'space') ||\n // Shorthand prefixes (simplified check)\n /^[pmwh]([xytrbl]|in|ax)?-?/.test(token.id) ||\n /^gap-?/.test(token.id) ||\n /^space-?/.test(token.id));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) return '';\n\n // Handle space-between special cases (complex value transforms)\n if (token.id.startsWith('space-x')) {\n return this.createRule(`space-x-${this.extractValueSuffix(token.id)}`, 'margin-left', `calc(${varName} * var(--tw-space-x-reverse))`);\n }\n if (token.id.startsWith('space-y')) {\n return this.createRule(`space-y-${this.extractValueSuffix(token.id)}`, 'margin-top', `calc(${varName} * var(--tw-space-y-reverse))`);\n }\n\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Padding\n 'pt': 'padding-top',\n 'pr': 'padding-right',\n 'pb': 'padding-bottom',\n 'pl': 'padding-left',\n 'px': ['padding-left', 'padding-right'],\n 'py': ['padding-top', 'padding-bottom'],\n 'p': 'padding',\n\n // Margin\n 'mt': 'margin-top',\n 'mr': 'margin-right',\n 'mb': 'margin-bottom',\n 'ml': 'margin-left',\n 'mx': ['margin-left', 'margin-right'],\n 'my': ['margin-top', 'margin-bottom'],\n 'm': 'margin',\n\n // Width/Height\n 'min-w': 'min-width',\n 'max-w': 'max-width',\n 'min-h': 'min-height',\n 'max-h': 'max-height',\n 'w': 'width',\n 'h': 'height',\n\n // Gap\n 'gap-x': 'column-gap',\n 'gap-y': 'row-gap',\n 'gap': 'gap',\n });\n }\n\n /**\n * Helper to extract the value part of the suffix for space-x/y\n * e.g. space-x-4 -> 4\n */\n private extractValueSuffix(id: string): string {\n const parts = id.split('-');\n return parts.slice(2).join('-');\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\nexport class TypographyHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && token.domain === 'typography';\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n \n // Use generateRulesFromPrefix for cleaner mapping\n // Ensure suffix is the full class name (e.g. text-xl from text.xl)\n const fullSuffix = token.id.replace(/\\./g, '-');\n \n const rules = this.generateRulesFromPrefix(token, varName, fullSuffix, {\n // Font Weight\n 'font-thin': { property: 'font-weight' },\n 'font-extralight': { property: 'font-weight' },\n 'font-light': { property: 'font-weight' },\n 'font-normal': { property: 'font-weight' },\n 'font-medium': { property: 'font-weight' },\n 'font-semibold': { property: 'font-weight' },\n 'font-bold': { property: 'font-weight' },\n 'font-extrabold': { property: 'font-weight' },\n 'font-black': { property: 'font-weight' },\n \n // Font Family\n 'font-sans': { property: 'font-family' },\n 'font-serif': { property: 'font-family' },\n 'font-mono': { property: 'font-family' },\n \n // Font Size\n 'text': { property: 'font-size' },\n \n // Line Height\n 'leading': { property: 'line-height' },\n \n // Letter Spacing\n 'tracking': { property: 'letter-spacing' },\n \n // Font Style\n 'italic': { property: 'font-style', valueTransform: () => 'italic' },\n 'not-italic': { property: 'font-style', valueTransform: () => 'normal' },\n \n // Text Decoration\n 'underline': { property: 'text-decoration-line', valueTransform: () => 'underline' },\n 'no-underline': { property: 'text-decoration-line', valueTransform: () => 'none' },\n 'line-through': { property: 'text-decoration-line', valueTransform: () => 'line-through' },\n 'decoration': { property: 'text-decoration-line' },\n \n // Text Transform\n 'uppercase': { property: 'text-transform', valueTransform: () => 'uppercase' },\n 'lowercase': { property: 'text-transform', valueTransform: () => 'lowercase' },\n 'capitalize': { property: 'text-transform', valueTransform: () => 'capitalize' },\n 'normal-case': { property: 'text-transform', valueTransform: () => 'none' },\n });\n\n if (rules) return rules;\n\n // Fallback for cases not covered by strict prefixes (if any)\n return '';\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\nexport class EffectHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) &&\n (this.containsKeyword(token.id, 'shadow') ||\n this.containsKeyword(token.id, 'opacity'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n if (this.containsKeyword(token.id, 'drop-shadow')) return ''; // Handled by FilterHandler\n\n return this.generateRulesFromPrefix(token, varName, suffix, {\n 'shadow': 'box-shadow',\n 'opacity': 'opacity'\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * LayoutHandler\n * Handles layout-related CSS properties:\n * - display, position, visibility, z-index\n * - overflow, isolation\n * - object-fit, object-position\n * - inset (top, right, bottom, left)\n */\nexport class LayoutHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n if (this.containsKeyword(token.id, 'background')) return false; // Delegate to BackgroundHandler\n \n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'display') ||\n this.containsKeyword(token.id, 'position') ||\n this.containsKeyword(token.id, 'visibility') ||\n this.containsKeyword(token.id, 'z-index') ||\n this.containsKeyword(token.id, 'overflow') ||\n this.containsKeyword(token.id, 'isolation') ||\n this.containsKeyword(token.id, 'object') ||\n // Positioning\n this.containsKeyword(token.id, 'inset') ||\n this.containsKeyword(token.id, 'top') ||\n this.containsKeyword(token.id, 'right') ||\n this.containsKeyword(token.id, 'bottom') ||\n this.containsKeyword(token.id, 'left') ||\n // Specific values for display/position/visibility\n this.containsKeyword(token.id, 'block') ||\n this.containsKeyword(token.id, 'inline') ||\n this.containsKeyword(token.id, 'hidden') ||\n this.containsKeyword(token.id, 'static') ||\n this.containsKeyword(token.id, 'fixed') ||\n this.containsKeyword(token.id, 'absolute') ||\n this.containsKeyword(token.id, 'relative') ||\n this.containsKeyword(token.id, 'sticky') ||\n this.containsKeyword(token.id, 'visible') ||\n this.containsKeyword(token.id, 'invisible') ||\n this.containsKeyword(token.id, 'isolate') ||\n this.containsKeyword(token.id, 'z-'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Positioning Utilities (Scenario B)\n // Use generateRulesFromPrefix for precise matching\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Positioning\n 'inset-x': ['left', 'right'],\n 'inset-y': ['top', 'bottom'],\n 'inset': ['top', 'right', 'bottom', 'left'],\n 'top': 'top',\n 'right': 'right',\n 'bottom': 'bottom',\n 'left': 'left',\n\n // Display\n 'block': { property: 'display', valueTransform: () => 'block' },\n 'inline-block': { property: 'display', valueTransform: () => 'inline-block' },\n 'inline-flex': { property: 'display', valueTransform: () => 'inline-flex' },\n 'flex': { property: 'display', valueTransform: () => 'flex' },\n 'inline-grid': { property: 'display', valueTransform: () => 'inline-grid' },\n 'grid': { property: 'display', valueTransform: () => 'grid' },\n 'hidden': { property: 'display', valueTransform: () => 'none' },\n 'display': { property: 'display' },\n\n // Position\n 'static': { property: 'position', valueTransform: () => 'static' },\n 'fixed': { property: 'position', valueTransform: () => 'fixed' },\n 'absolute': { property: 'position', valueTransform: () => 'absolute' },\n 'relative': { property: 'position', valueTransform: () => 'relative' },\n 'sticky': { property: 'position', valueTransform: () => 'sticky' },\n 'position': { property: 'position' },\n\n // Visibility\n 'visible': { property: 'visibility', valueTransform: () => 'visible' },\n 'invisible': { property: 'visibility', valueTransform: () => 'hidden' },\n 'visibility': { property: 'visibility' },\n\n // Z-Index\n 'z': 'z-index',\n 'z-index': 'z-index',\n\n // Overflow\n 'overflow-x': 'overflow-x',\n 'overflow-y': 'overflow-y',\n 'overflow': 'overflow',\n\n // Isolation\n 'isolate': { property: 'isolation', valueTransform: () => 'isolate' },\n 'isolation-auto': { property: 'isolation', valueTransform: () => 'auto' },\n 'isolation': 'isolation',\n\n // Object Fit\n 'object-contain': { property: 'object-fit', valueTransform: () => 'contain' },\n 'object-cover': { property: 'object-fit', valueTransform: () => 'cover' },\n 'object-fill': { property: 'object-fit', valueTransform: () => 'fill' },\n 'object-none': { property: 'object-fit', valueTransform: () => 'none' },\n 'object-scale-down': { property: 'object-fit', valueTransform: () => 'scale-down' },\n \n // Object Position (fallback for other object-*)\n 'object': { property: 'object-position' }\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * FlexboxHandler\n * Handles Flexbox-related CSS properties:\n * - flex, flex-direction, flex-wrap, flex-grow, flex-shrink, flex-basis\n * - justify-content, justify-items, justify-self\n * - align-content, align-items, align-self\n * - order\n */\nexport class FlexboxHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'flex') ||\n this.containsKeyword(token.id, 'justify') ||\n this.containsKeyword(token.id, 'align') ||\n this.containsKeyword(token.id, 'place') ||\n (this.containsKeyword(token.id, 'order') && !this.containsKeyword(token.id, 'border')));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Special case: 'flex' token -> display: flex\n if (token.id === 'flex') {\n return this.createRule(suffix, 'display', 'flex');\n }\n\n // Use generateRulesFromPrefix for precise matching (longest prefix wins)\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Flex Direction\n 'flex-row': { property: 'flex-direction', valueTransform: () => 'row' },\n 'flex-row-reverse': { property: 'flex-direction', valueTransform: () => 'row-reverse' },\n 'flex-col': { property: 'flex-direction', valueTransform: () => 'column' },\n 'flex-col-reverse': { property: 'flex-direction', valueTransform: () => 'column-reverse' },\n \n // Flex Wrap\n 'flex-wrap': { property: 'flex-wrap', valueTransform: () => 'wrap' },\n 'flex-wrap-reverse': { property: 'flex-wrap', valueTransform: () => 'wrap-reverse' },\n 'flex-nowrap': { property: 'flex-wrap', valueTransform: () => 'nowrap' },\n\n // Flex Grow/Shrink/Basis\n 'flex-grow': 'flex-grow',\n 'grow': 'flex-grow', // Alias\n 'flex-shrink': 'flex-shrink',\n 'shrink': 'flex-shrink', // Alias\n 'flex-basis': 'flex-basis',\n 'basis': 'flex-basis', // Alias\n \n // Alignment\n 'justify-content': 'justify-content',\n 'justify-items': 'justify-items',\n 'justify-self': 'justify-self',\n 'justify': 'justify-content', // Short alias\n\n 'align-content': 'align-content',\n 'align-items': 'align-items',\n 'align-self': 'align-self',\n 'align': 'align-items', // Short alias\n 'items': 'align-items', // Tailwind alias\n 'content': 'align-content', // Tailwind alias\n 'self': 'align-self', // Tailwind alias\n\n 'place-content': 'place-content',\n 'place-items': 'place-items',\n 'place-self': 'place-self',\n\n 'order': 'order',\n \n // Generic Flex (e.g. flex-1, flex-auto)\n // Must be checked after specific flex-* properties (handled by length sort in generateRulesFromPrefix)\n 'flex': 'flex'\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * GridHandler\n * Handles Grid-related CSS properties:\n * - grid-template-columns, grid-template-rows\n * - grid-column, grid-row\n * - grid-auto-flow, grid-auto-columns, grid-auto-rows\n * - gap is handled in FlexboxHandler (or shared) but usually Grid also uses gap.\n * (Note: The previous implementation didn't strictly separate them, but FlexboxHandler handles gap for both usually in Tailwind)\n */\nexport class GridHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n // Prevent handling flexbox tokens that happen to have 'row' or 'col' in them\n if (token.id.startsWith('flex-')) {\n return false;\n }\n\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'grid') ||\n (this.containsKeyword(token.id, 'col') && !this.containsKeyword(token.id, 'color') && !this.containsKeyword(token.id, 'collapse')) ||\n this.containsKeyword(token.id, 'row'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Use generateRulesFromPrefix for cleaner handling\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Grid Template\n 'grid-cols': 'grid-template-columns',\n 'grid-rows': 'grid-template-rows',\n 'grid-template-columns': 'grid-template-columns',\n 'grid-template-rows': 'grid-template-rows',\n \n // Auto Flow/Cols/Rows\n 'grid-flow': 'grid-auto-flow',\n 'auto-cols': 'grid-auto-columns',\n 'auto-rows': 'grid-auto-rows',\n 'grid-auto-flow': 'grid-auto-flow',\n 'grid-auto-columns': 'grid-auto-columns',\n 'grid-auto-rows': 'grid-auto-rows',\n\n // Grid Column\n 'col-start': 'grid-column-start',\n 'col-end': 'grid-column-end',\n 'col': 'grid-column', // Fallback for col-span-* or generic col-*\n \n // Grid Row\n 'row-start': 'grid-row-start',\n 'row-end': 'grid-row-end',\n 'row': 'grid-row',\n\n // Display Grid\n 'grid': { property: 'display', valueTransform: () => 'grid' }\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * BackgroundHandler\n * Handles Background-related CSS properties:\n * - background-attachment, background-clip, background-color\n * - background-image, background-origin, background-position\n * - background-repeat, background-size\n */\nexport class BackgroundHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n if (token.domain === 'color') {\n return false;\n }\n \n // Exclude effect domain if it looks like a transform/filter/transition\n // But bg-cover IS in effect domain in the test data.\n // So we should be careful.\n \n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'background') ||\n this.containsKeyword(token.id, 'bg') ||\n this.containsKeyword(token.id, 'gradient'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Background Size\n 'bg-cover': { property: 'background-size', valueTransform: () => 'cover' },\n 'bg-contain': { property: 'background-size', valueTransform: () => 'contain' },\n 'background-size': { property: 'background-size' },\n\n // Background Position\n 'bg-top': { property: 'background-position', valueTransform: () => 'top' },\n 'bg-bottom': { property: 'background-position', valueTransform: () => 'bottom' },\n 'bg-center': { property: 'background-position', valueTransform: () => 'center' },\n 'bg-left': { property: 'background-position', valueTransform: () => 'left' },\n 'bg-right': { property: 'background-position', valueTransform: () => 'right' },\n 'background-position': { property: 'background-position' },\n\n // Background Repeat\n 'bg-no-repeat': { property: 'background-repeat', valueTransform: () => 'no-repeat' },\n 'bg-repeat-x': { property: 'background-repeat', valueTransform: () => 'repeat-x' },\n 'bg-repeat-y': { property: 'background-repeat', valueTransform: () => 'repeat-y' },\n 'bg-repeat': { property: 'background-repeat', valueTransform: () => 'repeat' },\n 'background-repeat': { property: 'background-repeat' },\n\n // Background Attachment\n 'bg-fixed': { property: 'background-attachment', valueTransform: () => 'fixed' },\n 'bg-local': { property: 'background-attachment', valueTransform: () => 'local' },\n 'bg-scroll': { property: 'background-attachment', valueTransform: () => 'scroll' },\n 'background-attachment': { property: 'background-attachment' },\n\n // Background Clip\n 'bg-clip': { property: 'background-clip' },\n 'background-clip': { property: 'background-clip' },\n\n // Background Origin\n 'bg-origin': { property: 'background-origin' },\n 'background-origin': { property: 'background-origin' },\n\n // Background Image / Gradient\n 'bg-gradient': { property: 'background-image' },\n 'gradient': { property: 'background-image' },\n 'background-image': { property: 'background-image' },\n \n // Generic fallback for other bg- properties (e.g. background-image)\n // Note: background-color is handled by ColorHandler\n 'bg': { property: 'background-image' },\n 'background-color': { property: 'background-color' }\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\nexport class BorderHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n if (!this.validateToken(token)) return false;\n\n // Specific check for color domain to avoid claiming all colors\n if (token.domain === 'color') {\n return this.containsKeyword(token.id, 'border') ||\n this.containsKeyword(token.id, 'outline') ||\n this.containsKeyword(token.id, 'ring');\n }\n\n // Check for border-related keywords\n // We explicitly exclude 'collapse' because that's handled by TableHandler\n // We explicitly exclude 'bg'/'background' to avoid claiming background tokens that might be misclassified\n if (this.containsKeyword(token.id, 'background') || this.containsKeyword(token.id, 'bg')) {\n return false;\n }\n\n return (this.containsKeyword(token.id, 'border') && !this.containsKeyword(token.id, 'collapse')) ||\n this.containsKeyword(token.id, 'radius') ||\n this.containsKeyword(token.id, 'outline') ||\n this.containsKeyword(token.id, 'ring');\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Radius Utilities (Scenario A: Generic token 'radius' -> Specific 'rounded-*')\n // We check for 'radius' keyword and generate 'rounded-*' classes\n if (this.containsKeyword(token.id, 'border-radius') || this.containsKeyword(token.id, 'radius')) {\n return this.generateDirectionalRules('rounded', suffix, varName, {\n '': 'border-radius',\n 't': ['border-top-left-radius', 'border-top-right-radius'],\n 'r': ['border-top-right-radius', 'border-bottom-right-radius'],\n 'b': ['border-bottom-right-radius', 'border-bottom-left-radius'],\n 'l': ['border-bottom-left-radius', 'border-top-left-radius'],\n 'tl': 'border-top-left-radius',\n 'tr': 'border-top-right-radius',\n 'br': 'border-bottom-right-radius',\n 'bl': 'border-bottom-left-radius'\n });\n }\n\n // Border Width Utilities (Scenario B: Specific token 'border-t-2' -> 'border-top-width')\n // Ensure we don't process colors as widths (e.g. border-blue-500)\n if (token.domain !== 'color') {\n const widthRules = this.generateRulesFromPrefix(token, varName, suffix, {\n 'border-t': 'border-top-width',\n 'border-r': 'border-right-width',\n 'border-b': 'border-bottom-width',\n 'border-l': 'border-left-width',\n 'border-x': ['border-left-width', 'border-right-width'],\n 'border-y': ['border-top-width', 'border-bottom-width'],\n 'border': 'border-width' // Generic border width\n });\n if (widthRules) return widthRules;\n }\n\n // Border Color Utilities\n if (token.domain === 'color' && this.containsKeyword(token.id, 'border')) {\n return this.generateRulesFromPrefix(token, varName, suffix, {\n 'border-t': 'border-top-color',\n 'border-r': 'border-right-color',\n 'border-b': 'border-bottom-color',\n 'border-l': 'border-left-color',\n 'border-x': ['border-left-color', 'border-right-color'],\n 'border-y': ['border-top-color', 'border-bottom-color'],\n 'border': 'border-color'\n });\n }\n\n // Standard utilities\n // Border Style\n if (this.containsKeyword(token.id, 'border-style')) {\n const value = this.extractSuffix(token.id);\n return this.createRule(`border-${value}`, 'border-style', value);\n }\n\n // Outline\n if (this.containsKeyword(token.id, 'outline')) {\n const value = this.extractSuffix(token.id);\n if (this.containsKeyword(token.id, 'width')) {\n return this.createRule(`outline-${value}`, 'outline-width', varName);\n }\n if (this.containsKeyword(token.id, 'color')) {\n return this.createRule(`outline-${value}`, 'outline-color', varName);\n }\n if (this.containsKeyword(token.id, 'style')) {\n return this.createRule(`outline-${value}`, 'outline-style', varName);\n }\n if (this.containsKeyword(token.id, 'offset')) {\n return this.createRule(`outline-offset-${value}`, 'outline-offset', varName);\n }\n }\n\n // Ring\n if (this.containsKeyword(token.id, 'ring')) {\n // Use generateRulesFromPrefix for ring to handle ring-* classes\n // Assuming ring tokens are like 'ring.2' -> ring-2\n const fullSuffix = token.id.replace(/\\./g, '-');\n return this.generateRulesFromPrefix(token, varName, fullSuffix, {\n 'ring': { property: 'box-shadow' }\n });\n }\n\n return '';\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * TransformHandler\n * Handles Transform-related CSS properties\n */\nexport class TransformHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'transform') ||\n this.containsKeyword(token.id, 'scale') ||\n this.containsKeyword(token.id, 'rotate') ||\n this.containsKeyword(token.id, 'translate') ||\n this.containsKeyword(token.id, 'skew') ||\n this.containsKeyword(token.id, 'perspective') ||\n this.containsKeyword(token.id, 'origin'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n \n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Scale\n 'scale-x': { property: 'transform', valueTransform: (v) => `scaleX(${v})` },\n 'scale-y': { property: 'transform', valueTransform: (v) => `scaleY(${v})` },\n 'scale': { property: 'transform', valueTransform: (v) => `scale(${v})` },\n \n // Rotate\n 'rotate': { property: 'transform', valueTransform: (v) => `rotate(${v})` },\n\n // Translate\n 'translate-x': { property: 'transform', valueTransform: (v) => `translateX(${v})` },\n 'translate-y': { property: 'transform', valueTransform: (v) => `translateY(${v})` },\n\n // Skew\n 'skew-x': { property: 'transform', valueTransform: (v) => `skewX(${v})` },\n 'skew-y': { property: 'transform', valueTransform: (v) => `skewY(${v})` },\n\n // Origin\n 'origin-center': { property: 'transform-origin', valueTransform: () => 'center' },\n 'origin-top': { property: 'transform-origin', valueTransform: () => 'top' },\n 'origin-top-right': { property: 'transform-origin', valueTransform: () => 'top right' },\n 'origin-right': { property: 'transform-origin', valueTransform: () => 'right' },\n 'origin-bottom-right': { property: 'transform-origin', valueTransform: () => 'bottom right' },\n 'origin-bottom': { property: 'transform-origin', valueTransform: () => 'bottom' },\n 'origin-bottom-left': { property: 'transform-origin', valueTransform: () => 'bottom left' },\n 'origin-left': { property: 'transform-origin', valueTransform: () => 'left' },\n 'origin-top-left': { property: 'transform-origin', valueTransform: () => 'top left' },\n \n // Generic Origin (for arbitrary values)\n 'origin': 'transform-origin',\n\n // Perspective\n 'perspective': 'perspective',\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * TransitionHandler\n * Handles Transition & Animation-related CSS properties\n */\nexport class TransitionHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'transition') ||\n this.containsKeyword(token.id, 'animation') ||\n this.containsKeyword(token.id, 'animate') ||\n this.containsKeyword(token.id, 'duration') ||\n this.containsKeyword(token.id, 'delay') ||\n this.containsKeyword(token.id, 'ease'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Transition Property\n 'transition-none': { property: 'transition-property', valueTransform: () => 'none' },\n 'transition-all': { property: 'transition-property', valueTransform: () => 'all' },\n 'transition-colors': { property: 'transition-property', valueTransform: () => 'color, background-color, border-color, text-decoration-color, fill, stroke' },\n 'transition-opacity': { property: 'transition-property', valueTransform: () => 'opacity' },\n 'transition-shadow': { property: 'transition-property', valueTransform: () => 'box-shadow' },\n 'transition-transform': { property: 'transition-property', valueTransform: () => 'transform' },\n 'transition': { property: 'transition-property' },\n\n // Transition Behavior\n 'transition-normal': { property: 'transition-behavior', valueTransform: () => 'normal' },\n 'transition-allow-discrete': { property: 'transition-behavior', valueTransform: () => 'allow-discrete' },\n\n // Duration\n 'duration': 'transition-duration',\n 'transition-duration': 'transition-duration',\n\n // Timing Function (Ease)\n 'ease-linear': { property: 'transition-timing-function', valueTransform: () => 'linear' },\n 'ease-in': { property: 'transition-timing-function', valueTransform: () => 'cubic-bezier(0.4, 0, 1, 1)' },\n 'ease-out': { property: 'transition-timing-function', valueTransform: () => 'cubic-bezier(0, 0, 0.2, 1)' },\n 'ease-in-out': { property: 'transition-timing-function', valueTransform: () => 'cubic-bezier(0.4, 0, 0.2, 1)' },\n 'ease': 'transition-timing-function',\n\n // Delay\n 'delay': 'transition-delay',\n 'transition-delay': 'transition-delay',\n\n // Animation\n 'animate-none': { property: 'animation', valueTransform: () => 'none' },\n 'animate-spin': { property: 'animation', valueTransform: () => 'spin 1s linear infinite' },\n 'animate-ping': { property: 'animation', valueTransform: () => 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite' },\n 'animate-pulse': { property: 'animation', valueTransform: () => 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite' },\n 'animate-bounce': { property: 'animation', valueTransform: () => 'bounce 1s infinite' },\n 'animate': 'animation',\n 'animation': 'animation'\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * InteractivityHandler\n * Handles Interactivity-related CSS properties\n */\nexport class InteractivityHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'cursor') ||\n this.containsKeyword(token.id, 'pointer') ||\n this.containsKeyword(token.id, 'select') ||\n this.containsKeyword(token.id, 'scroll') ||\n this.containsKeyword(token.id, 'touch') ||\n this.containsKeyword(token.id, 'accent') ||\n this.containsKeyword(token.id, 'appearance') ||\n this.containsKeyword(token.id, 'caret') ||\n this.containsKeyword(token.id, 'resize') ||\n this.containsKeyword(token.id, 'will-change'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Use generateRulesFromPrefix for cleaner handling\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Scroll Margin\n 'scroll-m': 'scroll-margin',\n 'scroll-mx': 'scroll-margin-inline',\n 'scroll-my': 'scroll-margin-block',\n 'scroll-mt': 'scroll-margin-top',\n 'scroll-mr': 'scroll-margin-right',\n 'scroll-mb': 'scroll-margin-bottom',\n 'scroll-ml': 'scroll-margin-left',\n \n // Scroll Padding\n 'scroll-p': 'scroll-padding',\n 'scroll-px': 'scroll-padding-inline',\n 'scroll-py': 'scroll-padding-block',\n 'scroll-pt': 'scroll-padding-top',\n 'scroll-pr': 'scroll-padding-right',\n 'scroll-pb': 'scroll-padding-bottom',\n 'scroll-pl': 'scroll-padding-left',\n \n // Resize\n 'resize-none': { property: 'resize', valueTransform: () => 'none' },\n 'resize-y': { property: 'resize', valueTransform: () => 'vertical' },\n 'resize-x': { property: 'resize', valueTransform: () => 'horizontal' },\n 'resize': { property: 'resize', valueTransform: () => 'both' }, // Default resize\n\n // Accent\n 'accent': 'accent-color',\n\n // Appearance\n 'appearance': 'appearance',\n\n // Caret\n 'caret': 'caret-color',\n\n // Cursor\n 'cursor': 'cursor',\n\n // Pointer Events\n 'pointer-events': 'pointer-events',\n\n // Scroll Behavior\n 'scroll-auto': { property: 'scroll-behavior', valueTransform: () => 'auto' },\n 'scroll-smooth': { property: 'scroll-behavior', valueTransform: () => 'smooth' },\n\n // Scroll Snap\n 'snap-start': { property: 'scroll-snap-align', valueTransform: () => 'start' },\n 'snap-end': { property: 'scroll-snap-align', valueTransform: () => 'end' },\n 'snap-center': { property: 'scroll-snap-align', valueTransform: () => 'center' },\n 'snap-align-none': { property: 'scroll-snap-align', valueTransform: () => 'none' },\n \n 'snap-normal': { property: 'scroll-snap-stop', valueTransform: () => 'normal' },\n 'snap-always': { property: 'scroll-snap-stop', valueTransform: () => 'always' },\n \n 'snap-none': { property: 'scroll-snap-type', valueTransform: () => 'none' },\n 'snap-x': { property: 'scroll-snap-type', valueTransform: () => 'x var(--scroll-snap-strictness)' },\n 'snap-y': { property: 'scroll-snap-type', valueTransform: () => 'y var(--scroll-snap-strictness)' },\n 'snap-both': { property: 'scroll-snap-type', valueTransform: () => 'both var(--scroll-snap-strictness)' },\n 'snap-mandatory': { property: '--scroll-snap-strictness', valueTransform: () => 'mandatory' },\n 'snap-proximity': { property: '--scroll-snap-strictness', valueTransform: () => 'proximity' },\n\n // Touch Action\n 'touch': 'touch-action',\n\n // User Select\n 'select': 'user-select',\n\n // Will Change\n 'will-change': 'will-change'\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * TableHandler\n * Handles Table-related CSS properties\n */\nexport class TableHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'table') ||\n this.containsKeyword(token.id, 'border-collapse') ||\n this.containsKeyword(token.id, 'border-separate') || // Added explicit check\n this.containsKeyword(token.id, 'border-spacing') ||\n this.containsKeyword(token.id, 'caption'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n \n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Border Collapse\n 'border-collapse': { property: 'border-collapse', valueTransform: () => 'collapse' },\n 'border-separate': { property: 'border-collapse', valueTransform: () => 'separate' },\n \n // Border Spacing\n 'border-spacing-x': { property: 'border-spacing' },\n 'border-spacing-y': { property: 'border-spacing' },\n 'border-spacing': { property: 'border-spacing' },\n\n // Table Layout\n 'table-auto': { property: 'table-layout', valueTransform: () => 'auto' },\n 'table-fixed': { property: 'table-layout', valueTransform: () => 'fixed' },\n \n // Caption Side\n 'caption-top': { property: 'caption-side', valueTransform: () => 'top' },\n 'caption-bottom': { property: 'caption-side', valueTransform: () => 'bottom' },\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * SVGHandler\n * Handles SVG-related CSS properties\n */\nexport class SVGHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'fill') ||\n this.containsKeyword(token.id, 'stroke'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Use generateRulesFromPrefix for precise matching\n return this.generateRulesFromPrefix(token, varName, suffix, {\n 'stroke-width': { property: 'stroke-width' },\n 'stroke': { property: 'stroke' },\n 'fill': { property: 'fill' }\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * AccessibilityHandler\n * Handles Accessibility-related CSS properties:\n * - forced-color-adjust\n * - screen reader utilities (sr-only, not-sr-only)\n * - focus-visible, focus-within\n */\nexport class AccessibilityHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'forced-color') ||\n this.containsKeyword(token.id, 'accessibility') ||\n this.containsKeyword(token.id, 'a11y') ||\n this.containsKeyword(token.id, 'sr-only') ||\n this.containsKeyword(token.id, 'focus-visible') ||\n this.containsKeyword(token.id, 'focus-within'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Use full token ID as suffix (replacing dots with hyphens) for class generation\n const fullSuffix = token.id.replace(/\\./g, '-');\n\n // Standard utilities\n const standardOutput = this.generateRulesFromPrefix(token, varName, fullSuffix, {\n 'forced-color-adjust': { property: 'forced-color-adjust' },\n 'focus-visible': { property: 'outline', valueTransform: () => '2px solid var(--color-primary)' }, \n 'focus-within': { property: 'outline', valueTransform: () => '2px solid var(--color-primary)' }\n });\n\n if (standardOutput) return standardOutput;\n\n // Screen reader only utilities (Complex properties)\n if (this.containsKeyword(token.id, 'sr-only')) {\n if (token.id === 'not-sr-only' || suffix === 'not-sr-only') {\n return this.createRule('not-sr-only', 'position', 'static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal');\n }\n return this.createRule('sr-only', 'position', 'absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0');\n }\n\n // Handle specific not-sr-only if checking id\n if (this.containsKeyword(token.id, 'not-sr-only')) {\n return this.createRule('not-sr-only', 'position', 'static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal');\n }\n\n return '';\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * FilterHandler\n * Handles Filter-related CSS properties:\n * - filter (blur, brightness, contrast, drop-shadow, grayscale, hue-rotate, invert, saturate, sepia)\n * - backdrop-filter (blur, brightness, contrast, grayscale, hue-rotate, invert, opacity, saturate, sepia)\n */\nexport class FilterHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'filter') ||\n this.containsKeyword(token.id, 'blur') ||\n this.containsKeyword(token.id, 'brightness') ||\n this.containsKeyword(token.id, 'contrast') ||\n this.containsKeyword(token.id, 'drop-shadow') ||\n this.containsKeyword(token.id, 'grayscale') ||\n this.containsKeyword(token.id, 'hue-rotate') ||\n this.containsKeyword(token.id, 'invert') ||\n this.containsKeyword(token.id, 'saturate') ||\n this.containsKeyword(token.id, 'sepia') ||\n this.containsKeyword(token.id, 'backdrop'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Unified handling using generateRulesFromPrefix\n // It automatically handles longest match (backdrop-blur vs blur)\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Backdrop Filter\n 'backdrop-blur': { property: 'backdrop-filter', valueTransform: (v) => `blur(${v})` },\n 'backdrop-brightness': { property: 'backdrop-filter', valueTransform: (v) => `brightness(${v})` },\n 'backdrop-contrast': { property: 'backdrop-filter', valueTransform: (v) => `contrast(${v})` },\n 'backdrop-grayscale': { property: 'backdrop-filter', valueTransform: (v) => `grayscale(${v})` },\n 'backdrop-hue-rotate': { property: 'backdrop-filter', valueTransform: (v) => `hue-rotate(${v})` },\n 'backdrop-invert': { property: 'backdrop-filter', valueTransform: (v) => `invert(${v})` },\n 'backdrop-opacity': { property: 'backdrop-filter', valueTransform: (v) => `opacity(${v})` },\n 'backdrop-saturate': { property: 'backdrop-filter', valueTransform: (v) => `saturate(${v})` },\n 'backdrop-sepia': { property: 'backdrop-filter', valueTransform: (v) => `sepia(${v})` },\n\n // Filter\n 'blur': { property: 'filter', valueTransform: (v) => `blur(${v})` },\n 'brightness': { property: 'filter', valueTransform: (v) => `brightness(${v})` },\n 'contrast': { property: 'filter', valueTransform: (v) => `contrast(${v})` },\n 'drop-shadow': { property: 'filter', valueTransform: (v) => `drop-shadow(${v})` },\n 'grayscale': { property: 'filter', valueTransform: (v) => `grayscale(${v})` },\n 'hue-rotate': { property: 'filter', valueTransform: (v) => `hue-rotate(${v})` },\n 'invert': { property: 'filter', valueTransform: (v) => `invert(${v})` },\n 'saturate': { property: 'filter', valueTransform: (v) => `saturate(${v})` },\n 'sepia': { property: 'filter', valueTransform: (v) => `sepia(${v})` },\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { GeneratorContext, TokenHandler } from '../types';\nimport { ColorHandler } from '../handlers/ColorHandler';\nimport { SpaceHandler } from '../handlers/SpaceHandler';\nimport { TypographyHandler } from '../handlers/TypographyHandler';\nimport { EffectHandler } from '../handlers/EffectHandler';\nimport { LayoutHandler } from '../handlers/LayoutHandler';\nimport { FlexboxHandler } from '../handlers/FlexboxHandler';\nimport { GridHandler } from '../handlers/GridHandler';\nimport { BackgroundHandler } from '../handlers/BackgroundHandler';\nimport { BorderHandler } from '../handlers/BorderHandler';\nimport { TransformHandler } from '../handlers/TransformHandler';\nimport { TransitionHandler } from '../handlers/TransitionHandler';\nimport { InteractivityHandler } from '../handlers/InteractivityHandler';\nimport { TableHandler } from '../handlers/TableHandler';\nimport { SVGHandler } from '../handlers/SVGHandler';\nimport { AccessibilityHandler } from '../handlers/AccessibilityHandler';\nimport { FilterHandler } from '../handlers/FilterHandler';\nimport {\n formatVarName,\n formatSuffix,\n createVarReference,\n createLayer,\n isValidToken,\n filterValidTokens\n} from '../../shared/utils';\n\n/**\n * Handles the generation of Utility classes (Utilities layer).\n * Uses Strategy Pattern to delegate generation to specific handlers.\n */\nexport class UtilityGenerator {\n private handlers: TokenHandler[];\n\n constructor() {\n // Register handlers here. Order matters if domains overlap.\n // Specific handlers (Flexbox, Grid) should come before generic LayoutHandler\n this.handlers = [\n new FlexboxHandler(),\n new GridHandler(),\n new LayoutHandler(),\n new SVGHandler(),\n new BorderHandler(),\n new TypographyHandler(),\n new BackgroundHandler(),\n new ColorHandler(),\n new SpaceHandler(),\n new EffectHandler(),\n new FilterHandler(),\n new TableHandler(),\n new TransformHandler(),\n new TransitionHandler(),\n new InteractivityHandler(),\n new AccessibilityHandler()\n ];\n }\n\n /**\n * Mini function: Get full variable name with prefix\n */\n private getFullVarName(tokenId: string, prefix: string): string {\n const varName = formatVarName(tokenId, `--${prefix}`);\n return createVarReference(varName);\n }\n\n /**\n * Mini function: Find appropriate handler for token\n */\n private findHandler(token: Token): TokenHandler | undefined {\n return this.handlers.find(h => h.canHandle(token));\n }\n\n /**\n * Mini function: Process a single token\n */\n private processToken(token: Token, context: GeneratorContext): string {\n if (!isValidToken(token)) {\n return '';\n }\n\n const handler = this.findHandler(token);\n if (!handler) {\n return '';\n }\n\n const varName = this.getFullVarName(token.id, context.prefix);\n const suffix = formatSuffix(token.id);\n\n return handler.generate(token, varName, suffix);\n }\n\n /**\n * Mini function: Collect utility classes from tokens\n */\n private collectUtilities(tokens: Record<string, Token>, context: GeneratorContext): string[] {\n const validTokens = filterValidTokens(tokens);\n const utilities: string[] = [];\n\n validTokens.forEach(token => {\n const utility = this.processToken(token, context);\n if (utility) {\n utilities.push(utility);\n }\n });\n\n return utilities;\n }\n\n /**\n * Generate CSS for all tokens\n */\n generate(tokens: Record<string, Token>, context: GeneratorContext = { prefix: 'tw', selector: ':root' }): string {\n const utilities = this.collectUtilities(tokens, context);\n return createLayer('utilities', utilities.join('\\n'));\n }\n}\n","import { Token } from '../../domain';\nimport { AtomicOptions, GeneratorContext } from './types';\nimport { BaseGenerator } from './core/BaseGenerator';\nimport { ThemeGenerator } from './core/ThemeGenerator';\nimport { UtilityGenerator } from './core/UtilityGenerator';\n\nexport class AtomicCSSGenerator {\n private baseGenerator: BaseGenerator;\n private themeGenerator: ThemeGenerator;\n private utilityGenerator: UtilityGenerator;\n\n constructor() {\n this.baseGenerator = new BaseGenerator();\n this.themeGenerator = new ThemeGenerator();\n this.utilityGenerator = new UtilityGenerator();\n }\n\n generate(tokens: Record<string, Token>, options: AtomicOptions = {}): string {\n const context = this.createContext(options);\n const includeReset = options.includeReset !== false;\n\n return this.assembleCss(tokens, context, includeReset);\n }\n\n /**\n * Mini function: Create generator context\n */\n private createContext(options: AtomicOptions): GeneratorContext {\n return {\n prefix: options.prefix || 'mase-',\n selector: options.selector || ':root',\n };\n }\n\n /**\n * Mini function: Assemble CSS parts\n */\n private assembleCss(\n tokens: Record<string, Token>, \n context: GeneratorContext, \n includeReset: boolean\n ): string {\n let css = '/* Generated by MASE Atomic Engine */\\n';\n css += '@layer base, theme, utilities;\\n\\n';\n\n css += this.baseGenerator.generate(includeReset);\n css += this.themeGenerator.generate(tokens, context);\n css += this.utilityGenerator.generate(tokens, context);\n\n return css;\n }\n}\n","import type { Token } from '../domain';\n\n// 1. Token Registry (Mata Uang Negara)\nexport const TOKENS: Record<string, Token> = {\n // Colors - Intent based\n 'color.primary': { id: 'color.primary', domain: 'color', value: '#2563eb' }, // blue-600\n 'color.secondary': { id: 'color.secondary', domain: 'color', value: '#4b5563' }, // gray-600\n 'color.danger': { id: 'color.danger', domain: 'color', value: '#dc2626' }, // red-600\n\n // Spacing - Scale based\n 'space.sm': { id: 'space.sm', domain: 'layout', value: '0.5rem' }, // 8px\n 'space.md': { id: 'space.md', domain: 'layout', value: '1rem' }, // 16px\n 'space.lg': { id: 'space.lg', domain: 'layout', value: '1.5rem' }, // 24px\n \n // Forbidden/Raw tokens (for demo)\n 'raw.hex': { id: 'raw.hex', domain: 'color', value: '#123456' }, // Illegal\n\n // Surface (Theme Aware!)\n 'surface.card': { \n id: 'surface.card', \n domain: 'color', \n value: {\n light: '#ffffff', // white\n dark: '#1e293b' // slate-800\n } \n },\n 'surface.ground': { \n id: 'surface.ground', \n domain: 'color', \n value: {\n light: '#f9fafb', // gray-50\n dark: '#0f172a' // slate-900\n } \n },\n 'surface.paper': {\n id: 'surface.paper',\n domain: 'color',\n value: {\n light: '#ffffff', // white\n dark: '#334155' // slate-700\n }\n },\n\n // Text (Theme Aware!)\n 'text.light': { \n id: 'text.light', \n domain: 'color', \n value: {\n light: '#ffffff', // white\n dark: '#f3f4f6' // gray-100\n }\n },\n 'text.dark': { \n id: 'text.dark', \n domain: 'color', \n value: {\n light: '#111827', // gray-900\n dark: '#ffffff' // white\n }\n },\n 'text.primary': {\n id: 'text.primary',\n domain: 'color',\n value: {\n light: '#111827', // gray-900\n dark: '#f9fafb' // gray-50\n }\n },\n 'text.secondary': {\n id: 'text.secondary',\n domain: 'color',\n value: {\n light: '#6b7280', // gray-500\n dark: '#9ca3af' // gray-400\n }\n },\n \n // Effects\n 'shadow.sm': { id: 'shadow.sm', domain: 'effect', value: '0 1px 2px 0 rgb(0 0 0 / 0.05)' },\n 'shadow.md': { id: 'shadow.md', domain: 'effect', value: '0 4px 6px -1px rgb(0 0 0 / 0.1)' },\n 'shadow.lg': { id: 'shadow.lg', domain: 'effect', value: '0 10px 15px -3px rgb(0 0 0 / 0.1)' },\n \n // Radius (Moved to effect domain for consistency)\n 'radius.md': { id: 'radius.md', domain: 'effect', value: '0.375rem' }, // 6px\n 'radius.lg': { id: 'radius.lg', domain: 'effect', value: '0.5rem' }, // 8px\n 'radius.full': { id: 'radius.full', domain: 'effect', value: '9999px' },\n\n // Typography - Font Sizes\n 'text.sm': { id: 'text.sm', domain: 'typography', value: '0.875rem' },\n 'text.base': { id: 'text.base', domain: 'typography', value: '1rem' },\n 'text.lg': { id: 'text.lg', domain: 'typography', value: '1.125rem' },\n 'text.xl': { id: 'text.xl', domain: 'typography', value: '1.25rem' },\n\n // Typography - Font Weights\n 'weight.normal': { id: 'weight.normal', domain: 'typography', value: '400' },\n 'weight.medium': { id: 'weight.medium', domain: 'typography', value: '500' },\n 'weight.bold': { id: 'weight.bold', domain: 'typography', value: '700' },\n};\n","import { Command } from 'commander';\n\nexport const watchCommand = new Command('watch')\n .description('Watch for changes and recompile')\n .argument('<contract-file>', 'Contract DSL file to watch')\n .option('--command <command>', 'Command to run on change', 'mase compile')\n .option('--debounce <ms>', 'Debounce time in ms', '300')\n .action((contractFile, options) => {\n console.log(`Watching ${contractFile}...`);\n console.log(`Command: ${options.command}`);\n console.log(`Debounce: ${options.debounce}ms`);\n // TODO: Implement watch mode logic using fs.watch or chokidar\n console.log('Watch mode started (Ctrl+C to stop)');\n });\n"],"mappings":"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","names":["import_commander","resolve","import_commander","path","path","fs","import_commander","fs","import_commander","fs","path","import_commander"]}
1
+ {"version":3,"sources":["../../../src/cli/index.ts","../../../src/cli/commands/init.ts","../../../src/cli/commands/compile.ts","../../../src/dsl/lexer/TokenizerError.ts","../../../src/dsl/lexer/Tokenizer.ts","../../../src/dsl/parser/ParserError.ts","../../../src/dsl/parser/Parser.ts","../../../src/dsl/validator/ValidationError.ts","../../../src/dsl/validator/Validator.ts","../../../src/dsl/compiler/Compiler.ts","../../../src/cli/utils/ErrorHandler.ts","../../../src/cli/commands/validate.ts","../../../src/cli/commands/generate-css.ts","../../../src/materializer/targets/CSSMaterializer.ts","../../../src/data/tokens.ts","../../../src/integration/atomic/reset.ts","../../../src/integration/atomic/core/BaseGenerator.ts","../../../src/integration/shared/utils.ts","../../../src/integration/atomic/core/ThemeGenerator.ts","../../../src/integration/atomic/core/VariantGenerator.ts","../../../src/integration/atomic/handlers/BaseHandler.ts","../../../src/integration/atomic/handlers/ColorHandler.ts","../../../src/integration/atomic/handlers/SpaceHandler.ts","../../../src/integration/atomic/handlers/TypographyHandler.ts","../../../src/integration/atomic/handlers/EffectHandler.ts","../../../src/integration/atomic/handlers/LayoutHandler.ts","../../../src/integration/atomic/handlers/FlexboxHandler.ts","../../../src/integration/atomic/handlers/GridHandler.ts","../../../src/integration/atomic/handlers/BackgroundHandler.ts","../../../src/integration/atomic/handlers/BorderHandler.ts","../../../src/integration/atomic/handlers/TransformHandler.ts","../../../src/integration/atomic/handlers/TransitionHandler.ts","../../../src/integration/atomic/handlers/InteractivityHandler.ts","../../../src/integration/atomic/handlers/TableHandler.ts","../../../src/integration/atomic/handlers/SVGHandler.ts","../../../src/integration/atomic/handlers/AccessibilityHandler.ts","../../../src/integration/atomic/handlers/FilterHandler.ts","../../../src/integration/atomic/handlers/ContainerHandler.ts","../../../src/integration/atomic/core/UtilityGenerator.ts","../../../src/integration/atomic/AtomicCSSGenerator.ts","../../../src/cli/commands/watch.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * MASE CLI Tool\n * \n * Command-line interface for Meta-Architecture Style Engine.\n * \n * Key Principles:\n * - DRY: Single CLI logic\n * - SOLID: Single responsibility\n * - YAGNI: Only implement what's needed\n * - DDD: Domain-specific CLI commands\n */\n\nimport { Command } from 'commander';\nimport { initCommand } from './commands/init';\nimport { compileCommand } from './commands/compile';\nimport { validateCommand } from './commands/validate';\nimport { generateCssCommand } from './commands/generate-css';\nimport { watchCommand } from './commands/watch';\n\nconst program = new Command();\n\nprogram\n .name('mase')\n .description('Meta-Architecture Style Engine CLI')\n .version('1.0.0');\n\n// Register Commands\nprogram.addCommand(initCommand);\nprogram.addCommand(compileCommand);\nprogram.addCommand(validateCommand);\nprogram.addCommand(generateCssCommand);\nprogram.addCommand(watchCommand);\n\n// Parse Arguments\nprogram.parse(process.argv);\n","import { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as readline from 'readline';\n\n// Templates\nconst POSTCSS_CONFIG = `module.exports = {\n plugins: [\n require('@damarkuncoro/meta-architecture-style-engine/postcss')({\n prefix: '--mase-',\n rootSelector: ':root',\n })\n ]\n};\n`;\n\nconst TAILWIND_CONFIG = `const { createMasePreset } = require('@damarkuncoro/meta-architecture-style-engine/tailwind');\nconst fs = require('fs');\nconst path = require('path');\n\n// Try to load local mase.tokens.js if available\nlet tokens;\nconst localTokensPath = path.resolve(__dirname, 'mase.tokens.js');\nif (fs.existsSync(localTokensPath)) {\n tokens = require(localTokensPath);\n}\n\n/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n content: [\n \"./src/**/*.{js,ts,jsx,tsx}\",\n ],\n presets: [\n createMasePreset({\n tokens: tokens, // Use local tokens if found, otherwise defaults to internal\n useCssVariables: true,\n })\n ],\n theme: {\n extend: {},\n },\n plugins: [],\n};\n`;\n\nconst EXAMPLE_MASE = `contract DesignSystem {\n domain color {\n token primary: #007bff;\n token secondary: #6c757d;\n token success: #28a745;\n token danger: #dc3545;\n }\n \n domain typography {\n token base: 16px;\n token heading: 32px;\n }\n \n domain space {\n token small: 4px;\n token medium: 8px;\n token large: 16px;\n }\n}\n`;\n\nconst TOKENS_CONFIG = `/**\n * MASE Tokens Configuration\n * \n * Defines your design tokens for the Atomic Engine.\n * Use 'mase generate-css --format atomic' to generate utility classes.\n */\nmodule.exports = {\n // Colors\n 'color.primary': { id: 'color.primary', domain: 'color', value: '#2563eb' },\n 'color.secondary': { id: 'color.secondary', domain: 'color', value: '#4b5563' },\n 'color.accent': { id: 'color.accent', domain: 'color', value: '#f59e0b' },\n \n // Theme Aware Colors\n 'surface.card': { \n id: 'surface.card', \n domain: 'color', \n value: { light: '#ffffff', dark: '#1e293b' } \n },\n 'text.base': { \n id: 'text.base', \n domain: 'color', \n value: { light: '#111827', dark: '#f9fafb' } \n },\n\n // Spacing\n 'space.sm': { id: 'space.sm', domain: 'layout', value: '0.5rem' },\n 'space.md': { id: 'space.md', domain: 'layout', value: '1rem' },\n 'space.lg': { id: 'space.lg', domain: 'layout', value: '1.5rem' },\n 'space.xl': { id: 'space.xl', domain: 'layout', value: '2rem' },\n \n // Typography\n 'text.sm': { id: 'text.sm', domain: 'typography', value: '0.875rem' },\n 'text.lg': { id: 'text.lg', domain: 'typography', value: '1.125rem' },\n 'weight.bold': { id: 'weight.bold', domain: 'typography', value: '700' },\n \n // Radius\n 'radius.md': { id: 'radius.md', domain: 'effect', value: '0.375rem' },\n 'radius.full': { id: 'radius.full', domain: 'effect', value: '9999px' },\n};\n`;\n\nfunction askQuestion(query: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise(resolve => rl.question(query, ans => {\n rl.close();\n resolve(ans);\n }));\n}\n\nexport const initCommand = new Command('init')\n .description('Initialize a new MASE project configuration')\n .option('-p, --postcss', 'Generate postcss.config.js')\n .option('-t, --tailwind', 'Generate tailwind.config.js')\n .option('-e, --example', 'Generate example.mase file')\n .option('-a, --atomic', 'Generate mase.tokens.js for Atomic Engine')\n .option('-y, --yes', 'Skip prompts and generate all defaults')\n .action(async (options) => {\n const cwd = process.cwd();\n console.log('🚀 Initializing MASE project...\\n');\n\n let generatePostcss = options.postcss;\n let generateTailwind = options.tailwind;\n let generateExample = options.example;\n let generateAtomic = options.atomic;\n\n // If no specific flags and not yes mode, ask interactively\n if (!options.yes && !options.postcss && !options.tailwind && !options.example && !options.atomic) {\n const answerAtomic = await askQuestion('Generate mase.tokens.js for Atomic Engine? (Y/n) ');\n generateAtomic = answerAtomic.toLowerCase() !== 'n';\n\n const answerPostcss = await askQuestion('Generate postcss.config.js? (Y/n) ');\n generatePostcss = answerPostcss.toLowerCase() !== 'n';\n\n const answerTailwind = await askQuestion('Generate tailwind.config.js? (Y/n) ');\n generateTailwind = answerTailwind.toLowerCase() !== 'n';\n \n const answerExample = await askQuestion('Generate example.mase? (Y/n) ');\n generateExample = answerExample.toLowerCase() !== 'n';\n } else if (options.yes) {\n generatePostcss = true;\n generateTailwind = true;\n generateExample = true;\n generateAtomic = true;\n }\n\n if (generateAtomic) {\n const filePath = path.join(cwd, 'mase.tokens.js');\n if (!fs.existsSync(filePath)) {\n fs.writeFileSync(filePath, TOKENS_CONFIG);\n console.log('✅ Created mase.tokens.js');\n } else {\n console.log('⚠️ mase.tokens.js already exists, skipping.');\n }\n }\n\n if (generatePostcss) {\n const filePath = path.join(cwd, 'postcss.config.js');\n if (!fs.existsSync(filePath)) {\n fs.writeFileSync(filePath, POSTCSS_CONFIG);\n console.log('✅ Created postcss.config.js');\n } else {\n console.log('⚠️ postcss.config.js already exists, skipping.');\n }\n }\n\n if (generateTailwind) {\n const filePath = path.join(cwd, 'tailwind.config.js');\n if (!fs.existsSync(filePath)) {\n fs.writeFileSync(filePath, TAILWIND_CONFIG);\n console.log('✅ Created tailwind.config.js');\n } else {\n console.log('⚠️ tailwind.config.js already exists, skipping.');\n }\n }\n\n if (generateExample) {\n const filePath = path.join(cwd, 'example.mase');\n if (!fs.existsSync(filePath)) {\n fs.writeFileSync(filePath, EXAMPLE_MASE);\n console.log('✅ Created example.mase');\n } else {\n console.log('⚠️ example.mase already exists, skipping.');\n }\n }\n\n console.log('\\n✨ Initialization complete!');\n });\n","import { Command } from 'commander';\nimport { ContractDSLTokenizer, ContractDSLParser, ContractDSLValidator, ContractDSLCompiler } from '../../dsl';\nimport { ErrorHandler, CLIError } from '../utils';\nimport * as fs from 'fs';\n\nexport const compileCommand = new Command('compile')\n .description('Compile a contract DSL file to TypeScript')\n .argument('<contract-file>', 'Contract DSL file to compile')\n .option('-o, --output <file>', 'Output file (default: stdout)')\n .option('--format <format>', 'Output format (ts, json, ast)', 'ts')\n .option('--watch', 'Watch for changes', false)\n .action((contractFile, options) => {\n console.log(`ℹ️ Compiling ${contractFile}...`);\n \n try {\n // Read contract file\n const source = fs.readFileSync(contractFile, 'utf-8');\n \n // Tokenize\n const tokenizer = new ContractDSLTokenizer();\n const tokens = tokenizer.tokenize(source);\n \n // Parse\n const parser = new ContractDSLParser();\n const ast = parser.parse(tokens);\n \n // Validate\n const validator = new ContractDSLValidator();\n const validationResult = validator.validate(ast);\n \n if (!validationResult.isValid) {\n const error = new CLIError(\n 'Contract validation failed',\n 'VALIDATION_ERROR'\n );\n ErrorHandler.handle(error);\n }\n \n // Compile\n const compiler = new ContractDSLCompiler();\n const result = compiler.compile(ast);\n \n if (result.errors.length > 0) {\n const error = new CLIError(\n 'Contract compilation failed',\n 'COMPILATION_ERROR'\n );\n ErrorHandler.handle(error);\n }\n \n // Output based on format\n let output: string;\n \n switch (options.format) {\n case 'json':\n output = JSON.stringify(ast, null, 2);\n break;\n case 'ast':\n output = JSON.stringify(ast, null, 2);\n break;\n case 'ts':\n default:\n output = compiler.generateTypeScriptFile(ast);\n break;\n }\n \n if (options.output) {\n fs.writeFileSync(options.output, output, 'utf-8');\n console.log(`✅ Compiled to ${options.output}`);\n } else {\n console.log(output);\n }\n \n if (options.watch) {\n console.log('ℹ️ Watching for changes...');\n // TODO: Implement watch mode\n }\n \n } catch (error) {\n ErrorHandler.handle(error);\n }\n });\n","export class TokenizerError extends Error {\n readonly line: number;\n readonly column: number;\n \n constructor(message: string, line: number, column: number) {\n super(message);\n this.name = 'TokenizerError';\n this.line = line;\n this.column = column;\n }\n}\n","/**\n * Contract DSL Tokenizer\n * \n * Tokenizes Contract DSL source code into tokens for parsing.\n * \n * Responsibilities:\n * - Convert DSL source to tokens\n * - Handle whitespace and comments\n * - Provide error locations\n * \n * Key Principles:\n * - DRY: Single tokenization logic\n * - SOLID: Single responsibility\n * - YAGNI: Only tokenize what's needed\n * - DDD: Domain-specific token types\n */\n\n/**\n * TokenType\n * Enum of all token types in Contract DSL.\n */\nexport type TokenType =\n // Keywords\n | 'CONTRACT'\n | 'DOMAIN'\n | 'ALLOWS'\n | 'DEFAULT'\n | 'CONSTRAINTS'\n | 'CONFLICTS'\n \n // Contexts\n | 'MOBILE'\n | 'TABLET'\n | 'DESKTOP'\n | 'LIGHT'\n | 'DARK'\n | 'WEB'\n | 'NATIVE'\n | 'CANVAS'\n | 'DEFAULT_CTX'\n | 'HOVER'\n | 'ACTIVE'\n | 'DISABLED'\n | 'CONTAINER'\n \n // Domains\n | 'LAYOUT'\n | 'TYPOGRAPHY'\n | 'COLOR'\n | 'EFFECT'\n | 'INTERACTION'\n \n // Punctuation\n | 'LBRACE'\n | 'RBRACE'\n | 'LBRACKET'\n | 'RBRACKET'\n | 'LPAREN'\n | 'RPAREN'\n | 'COLON'\n | 'SEMICOLON'\n | 'COMMA'\n \n // Literals\n | 'IDENTIFIER'\n \n // Special\n | 'EOF'\n | 'UNKNOWN';\n\nexport const TokenType = {\n // Keywords\n CONTRACT: 'CONTRACT' as const,\n DOMAIN: 'DOMAIN' as const,\n ALLOWS: 'ALLOWS' as const,\n DEFAULT: 'DEFAULT' as const,\n CONSTRAINTS: 'CONSTRAINTS' as const,\n CONFLICTS: 'CONFLICTS' as const,\n \n // Contexts\n MOBILE: 'MOBILE' as const,\n TABLET: 'TABLET' as const,\n DESKTOP: 'DESKTOP' as const,\n LIGHT: 'LIGHT' as const,\n DARK: 'DARK' as const,\n WEB: 'WEB' as const,\n NATIVE: 'NATIVE' as const,\n CANVAS: 'CANVAS' as const,\n DEFAULT_CTX: 'DEFAULT_CTX' as const,\n HOVER: 'HOVER' as const,\n ACTIVE: 'ACTIVE' as const,\n DISABLED: 'DISABLED' as const,\n CONTAINER: 'CONTAINER' as const,\n \n // Domains\n LAYOUT: 'LAYOUT' as const,\n TYPOGRAPHY: 'TYPOGRAPHY' as const,\n COLOR: 'COLOR' as const,\n EFFECT: 'EFFECT' as const,\n INTERACTION: 'INTERACTION' as const,\n \n // Punctuation\n LBRACE: 'LBRACE' as const,\n RBRACE: 'RBRACE' as const,\n LBRACKET: 'LBRACKET' as const,\n RBRACKET: 'RBRACKET' as const,\n LPAREN: 'LPAREN' as const,\n RPAREN: 'RPAREN' as const,\n COLON: 'COLON' as const,\n SEMICOLON: 'SEMICOLON' as const,\n COMMA: 'COMMA' as const,\n \n // Literals\n IDENTIFIER: 'IDENTIFIER' as const,\n \n // Special\n EOF: 'EOF' as const,\n UNKNOWN: 'UNKNOWN' as const\n};\n\n/**\n * Token\n * Represents a single token in the DSL.\n */\nexport interface Token {\n readonly type: TokenType;\n readonly value: string;\n readonly line: number;\n readonly column: number;\n}\n\nimport { TokenizerError } from './TokenizerError';\n\n/**\n * ContractDSLTokenizer\n * Tokenizes Contract DSL source code.\n */\nexport class ContractDSLTokenizer {\n private source: string = '';\n private position: number = 0;\n private line: number = 1;\n private column: number = 1;\n \n // Keyword map\n private readonly keywords: Map<string, TokenType> = new Map([\n ['contract', TokenType.CONTRACT],\n ['domain', TokenType.DOMAIN],\n ['allows', TokenType.ALLOWS],\n ['default', TokenType.DEFAULT],\n ['constraints', TokenType.CONSTRAINTS],\n ['conflicts', TokenType.CONFLICTS],\n \n // Contexts\n ['mobile', TokenType.MOBILE],\n ['tablet', TokenType.TABLET],\n ['desktop', TokenType.DESKTOP],\n ['light', TokenType.LIGHT],\n ['dark', TokenType.DARK],\n ['web', TokenType.WEB],\n ['native', TokenType.NATIVE],\n ['canvas', TokenType.CANVAS],\n // ['default', TokenType.DEFAULT_CTX], // Removed duplicate mapping\n ['hover', TokenType.HOVER],\n ['active', TokenType.ACTIVE],\n ['disabled', TokenType.DISABLED],\n ['container', TokenType.CONTAINER],\n \n // Domains\n ['layout', TokenType.LAYOUT],\n ['typography', TokenType.TYPOGRAPHY],\n ['color', TokenType.COLOR],\n ['effect', TokenType.EFFECT],\n ['interaction', TokenType.INTERACTION]\n ]);\n \n /**\n * Tokenize source code\n * @param source - DSL source code\n * @returns Array of tokens\n */\n tokenize(source: string): Token[] {\n this.source = source;\n this.position = 0;\n this.line = 1;\n this.column = 1;\n \n const tokens: Token[] = [];\n \n while (this.position < this.source.length) {\n const char = this.source[this.position];\n \n // Skip whitespace\n if (this.isWhitespace(char)) {\n this.advance();\n continue;\n }\n \n // Skip comments\n if (char === '/' && this.peek() === '/') {\n this.skipComment();\n continue;\n }\n \n // Tokenize\n const token = this.nextToken();\n if (token) {\n tokens.push(token);\n }\n }\n \n // Add EOF token\n tokens.push({\n type: TokenType.EOF,\n value: '',\n line: this.line,\n column: this.column\n });\n \n return tokens;\n }\n \n /**\n * Get next token\n * @returns Token or null if EOF\n */\n private nextToken(): Token | null {\n const char = this.source[this.position];\n \n // Punctuation\n if (char === '{') return this.createToken(TokenType.LBRACE, char);\n if (char === '}') return this.createToken(TokenType.RBRACE, char);\n if (char === '[') return this.createToken(TokenType.LBRACKET, char);\n if (char === ']') return this.createToken(TokenType.RBRACKET, char);\n if (char === '(') return this.createToken(TokenType.LPAREN, char);\n if (char === ')') return this.createToken(TokenType.RPAREN, char);\n if (char === ':') return this.createToken(TokenType.COLON, char);\n if (char === ';') return this.createToken(TokenType.SEMICOLON, char);\n if (char === ',') return this.createToken(TokenType.COMMA, char);\n \n // Identifier or keyword\n if (this.isLetter(char) || char === '_' || char === '-') {\n return this.readIdentifier();\n }\n \n // Unknown character\n throw new TokenizerError(\n `Unknown character: '${char}'`,\n this.line,\n this.column\n );\n }\n \n /**\n * Read identifier or keyword\n * @returns Token\n */\n private readIdentifier(): Token {\n const start = this.position;\n const startLine = this.line;\n const startColumn = this.column;\n \n while (\n this.position < this.source.length &&\n (this.isLetter(this.source[this.position]) ||\n this.isDigit(this.source[this.position]) ||\n this.source[this.position] === '_' ||\n this.source[this.position] === '-' ||\n this.source[this.position] === '.')\n ) {\n this.advance();\n }\n \n const value = this.source.substring(start, this.position);\n const type = this.keywords.get(value) || TokenType.IDENTIFIER;\n \n return {\n type,\n value,\n line: startLine,\n column: startColumn\n };\n }\n \n /**\n * Skip single-line comment\n */\n private skipComment(): void {\n while (this.position < this.source.length && this.source[this.position] !== '\\n') {\n this.advance();\n }\n }\n \n /**\n * Create token\n * @param type - Token type\n * @param value - Token value\n * @returns Token\n */\n private createToken(type: TokenType, value: string): Token {\n const token = {\n type,\n value,\n line: this.line,\n column: this.column\n };\n \n this.advance();\n return token;\n }\n \n /**\n * Advance to next character\n */\n private advance(): void {\n if (this.source[this.position] === '\\n') {\n this.line++;\n this.column = 1;\n } else {\n this.column++;\n }\n this.position++;\n }\n \n /**\n * Peek at next character\n * @returns Next character or empty string\n */\n private peek(): string {\n if (this.position + 1 < this.source.length) {\n return this.source[this.position + 1];\n }\n return '';\n }\n \n /**\n * Check if character is whitespace\n * @param char - Character to check\n * @returns True if whitespace\n */\n private isWhitespace(char: string): boolean {\n return char === ' ' || char === '\\t' || char === '\\n' || char === '\\r';\n }\n \n /**\n * Check if character is letter\n * @param char - Character to check\n * @returns True if letter\n */\n private isLetter(char: string): boolean {\n return /[a-zA-Z]/.test(char);\n }\n \n /**\n * Check if character is digit\n * @param char - Character to check\n * @returns True if digit\n */\n private isDigit(char: string): boolean {\n return /[0-9]/.test(char);\n }\n}","export class ParserError extends Error {\n readonly line: number;\n readonly column: number;\n \n constructor(message: string, line: number, column: number) {\n super(message);\n this.name = 'ParserError';\n this.line = line;\n this.column = column;\n }\n}\n","/**\n * Contract DSL Parser\n * \n * Parses tokens from Contract DSL into Abstract Syntax Tree (AST).\n * \n * Responsibilities:\n * - Parse tokens into AST\n * - Implement EBNF grammar\n * - Provide syntax errors\n * \n * Key Principles:\n * - DRY: Single parsing logic\n * - SOLID: Single responsibility\n * - YAGNI: Only parse what's needed\n * - DDD: Domain-specific AST structure\n */\n\nimport type { Token, TokenType } from '../lexer/Tokenizer';\nimport { TokenType as TT } from '../lexer/Tokenizer';\nimport { ParserError } from './ParserError';\n\n/**\n * ContractAST\n * Abstract Syntax Tree for a contract.\n */\nexport interface ContractAST {\n readonly name: string;\n readonly domain: string;\n readonly properties: PropertyAST[];\n}\n\n/**\n * PropertyAST\n * AST for a property declaration.\n */\nexport interface PropertyAST {\n readonly name: string;\n readonly allows: string[];\n readonly default?: string;\n readonly constraints?: ConstraintAST[];\n readonly conflicts?: string[];\n}\n\n/**\n * ConstraintAST\n * AST for a constraint declaration.\n */\nexport interface ConstraintAST {\n readonly context: string;\n readonly allows: string[];\n}\n\n/**\n * ContractDSLParser\n * Parses Contract DSL tokens into AST.\n */\nexport class ContractDSLParser {\n private tokens: Token[] = [];\n private position: number = 0;\n \n /**\n * Parse tokens into AST\n * @param tokens - Array of tokens\n * @returns Contract AST\n */\n parse(tokens: Token[]): ContractAST {\n this.tokens = tokens;\n this.position = 0;\n \n // Parse contract\n const contract = this.parseContract();\n \n // Expect EOF\n this.expect(TT.EOF);\n \n return contract;\n }\n \n /**\n * Parse contract\n * @returns Contract AST\n */\n private parseContract(): ContractAST {\n // Expect 'contract'\n this.expect(TT.CONTRACT);\n \n // Expect identifier (contract name)\n const name = this.expectIdentifier();\n \n // Expect '{'\n this.expect(TT.LBRACE);\n \n // Parse domain\n const domain = this.parseDomain();\n \n // Parse properties\n const properties: PropertyAST[] = [];\n while (this.peek()?.type === TT.IDENTIFIER) {\n properties.push(this.parseProperty());\n }\n \n // Expect '}'\n this.expect(TT.RBRACE);\n \n return {\n name,\n domain,\n properties\n };\n }\n \n /**\n * Parse domain declaration\n * @returns Domain name\n */\n private parseDomain(): string {\n // Expect 'domain'\n this.expect(TT.DOMAIN);\n \n // Expect ':'\n this.expect(TT.COLON);\n \n // Expect domain identifier\n const domain = this.expectDomain();\n \n // Expect ';'\n this.expect(TT.SEMICOLON);\n \n return domain;\n }\n \n /**\n * Parse property declaration\n * @returns Property AST\n */\n private parseProperty(): PropertyAST {\n // Expect identifier (property name)\n const name = this.expectIdentifier();\n \n // Expect '{'\n this.expect(TT.LBRACE);\n \n // Parse property body\n const allows = this.parseAllows();\n const defaultVal = this.parseDefault();\n const constraints = this.parseConstraints();\n const conflicts = this.parseConflicts();\n \n // Expect '}'\n this.expect(TT.RBRACE);\n \n return {\n name,\n allows,\n default: defaultVal,\n constraints,\n conflicts\n };\n }\n \n /**\n * Parse allows declaration\n * @returns Array of allowed tokens\n */\n private parseAllows(): string[] {\n // Expect 'allows'\n this.expect(TT.ALLOWS);\n \n // Expect ':'\n this.expect(TT.COLON);\n \n // Expect '['\n this.expect(TT.LBRACKET);\n \n // Parse token list\n const tokens: string[] = [];\n if (this.peek()?.type === TT.IDENTIFIER) {\n tokens.push(this.expectIdentifier());\n \n while (this.peek()?.type === TT.COMMA) {\n this.expect(TT.COMMA);\n tokens.push(this.expectIdentifier());\n }\n }\n \n // Expect ']'\n this.expect(TT.RBRACKET);\n \n // Expect ';'\n this.expect(TT.SEMICOLON);\n \n return tokens;\n }\n \n /**\n * Parse default declaration\n * @returns Default token or undefined\n */\n private parseDefault(): string | undefined {\n // Check if 'default' keyword\n if (this.peek()?.type !== TT.DEFAULT) {\n return undefined;\n }\n \n // Expect 'default'\n this.expect(TT.DEFAULT);\n \n // Expect ':'\n this.expect(TT.COLON);\n \n // Expect identifier\n const value = this.expectIdentifier();\n \n // Expect ';'\n this.expect(TT.SEMICOLON);\n \n return value;\n }\n \n /**\n * Parse constraints declaration\n * @returns Array of constraints or undefined\n */\n private parseConstraints(): ConstraintAST[] | undefined {\n // Check if 'constraints' keyword\n if (this.peek()?.type !== TT.CONSTRAINTS) {\n return undefined;\n }\n \n // Expect 'constraints'\n this.expect(TT.CONSTRAINTS);\n \n // Expect '{'\n this.expect(TT.LBRACE);\n \n // Parse constraint list\n const constraints: ConstraintAST[] = [];\n while (this.peek()?.type === TT.MOBILE || \n this.peek()?.type === TT.TABLET || \n this.peek()?.type === TT.DESKTOP ||\n this.peek()?.type === TT.LIGHT || \n this.peek()?.type === TT.DARK ||\n this.peek()?.type === TT.WEB || \n this.peek()?.type === TT.NATIVE ||\n this.peek()?.type === TT.CANVAS ||\n this.peek()?.type === TT.DEFAULT_CTX ||\n this.peek()?.type === TT.HOVER || \n this.peek()?.type === TT.ACTIVE ||\n this.peek()?.type === TT.DISABLED ||\n this.peek()?.type === TT.CONTAINER) {\n constraints.push(this.parseConstraint());\n }\n \n // Expect '}'\n this.expect(TT.RBRACE);\n \n return constraints;\n }\n \n /**\n * Parse constraint\n * @returns Constraint AST\n */\n private parseConstraint(): ConstraintAST {\n // Expect context\n let context = this.expectContext();\n \n // Handle container(name)\n if (context === 'container' && this.peek()?.type === TT.LPAREN) {\n this.expect(TT.LPAREN);\n const name = this.expectIdentifier();\n this.expect(TT.RPAREN);\n context = `container(${name})`;\n }\n \n // Expect ':'\n this.expect(TT.COLON);\n \n // Expect '['\n this.expect(TT.LBRACKET);\n \n // Parse token list\n const tokens: string[] = [];\n if (this.peek()?.type === TT.IDENTIFIER) {\n tokens.push(this.expectIdentifier());\n \n while (this.peek()?.type === TT.COMMA) {\n this.expect(TT.COMMA);\n tokens.push(this.expectIdentifier());\n }\n }\n \n // Expect ']'\n this.expect(TT.RBRACKET);\n \n // Expect ';'\n this.expect(TT.SEMICOLON);\n \n return {\n context,\n allows: tokens\n };\n }\n \n /**\n * Parse conflicts declaration\n * @returns Array of conflicting properties or undefined\n */\n private parseConflicts(): string[] | undefined {\n // Check if 'conflicts' keyword\n if (this.peek()?.type !== TT.CONFLICTS) {\n return undefined;\n }\n \n // Expect 'conflicts'\n this.expect(TT.CONFLICTS);\n \n // Expect ':'\n this.expect(TT.COLON);\n \n // Expect '['\n this.expect(TT.LBRACKET);\n \n // Parse property list\n const properties: string[] = [];\n if (this.peek()?.type === TT.IDENTIFIER) {\n properties.push(this.expectIdentifier());\n \n while (this.peek()?.type === TT.COMMA) {\n this.expect(TT.COMMA);\n properties.push(this.expectIdentifier());\n }\n }\n \n // Expect ']'\n this.expect(TT.RBRACKET);\n \n // Expect ';'\n this.expect(TT.SEMICOLON);\n \n return properties;\n }\n \n /**\n * Expect identifier token\n * @returns Identifier value\n */\n private expectIdentifier(): string {\n const token = this.peek();\n if (!token || token.type !== TT.IDENTIFIER) {\n throw new ParserError(\n `Expected identifier, got ${token?.type || 'EOF'}`,\n token?.line || 0,\n token?.column || 0\n );\n }\n \n this.advance();\n return token.value;\n }\n \n /**\n * Expect domain token\n * @returns Domain value\n */\n private expectDomain(): string {\n const token = this.peek();\n if (!token || \n (token.type !== TT.LAYOUT && \n token.type !== TT.TYPOGRAPHY && \n token.type !== TT.COLOR &&\n token.type !== TT.EFFECT &&\n token.type !== TT.INTERACTION &&\n token.type !== TT.IDENTIFIER)) {\n throw new ParserError(\n `Expected domain, got ${token?.type || 'EOF'}`,\n token?.line || 0,\n token?.column || 0\n );\n }\n \n this.advance();\n return token.value;\n }\n\n /**\n * Expect context token\n * @returns Context value\n */\n private expectContext(): string {\n const token = this.peek();\n if (!token || \n (token.type !== TT.MOBILE && \n token.type !== TT.TABLET && \n token.type !== TT.DESKTOP &&\n token.type !== TT.LIGHT && \n token.type !== TT.DARK &&\n token.type !== TT.WEB && \n token.type !== TT.NATIVE &&\n token.type !== TT.CANVAS &&\n token.type !== TT.DEFAULT_CTX &&\n token.type !== TT.DEFAULT &&\n token.type !== TT.HOVER && \n token.type !== TT.ACTIVE &&\n token.type !== TT.DISABLED &&\n token.type !== TT.CONTAINER)) {\n throw new ParserError(\n `Expected context, got ${token?.type || 'EOF'}`,\n token?.line || 0,\n token?.column || 0\n );\n }\n \n this.advance();\n return token.value;\n }\n \n /**\n * Expect specific token type\n * @param type - Expected token type\n */\n private expect(type: TokenType): void {\n const token = this.peek();\n if (!token || token.type !== type) {\n throw new ParserError(\n `Expected ${type}, got ${token?.type || 'EOF'}`,\n token?.line || 0,\n token?.column || 0\n );\n }\n \n this.advance();\n }\n \n /**\n * Peek at current token\n * @returns Current token or undefined\n */\n private peek(): Token | undefined {\n return this.tokens[this.position];\n }\n \n /**\n * Advance to next token\n */\n private advance(): void {\n this.position++;\n }\n}","export class ValidationError extends Error {\n readonly path: string;\n \n constructor(message: string, path: string) {\n super(message);\n this.name = 'ValidationError';\n this.path = path;\n }\n}\n","/**\n * Contract DSL Validator\n * \n * Validates Contract DSL AST structure and semantics.\n * \n * Responsibilities:\n * - Validate AST structure\n * - Check token references\n * - Validate constraints\n * \n * Key Principles:\n * - DRY: Single validation logic\n * - SOLID: Single responsibility\n * - YAGNI: Only validate what's needed\n * - DDD: Domain-specific validation rules\n */\n\nimport type { ContractAST, PropertyAST, ConstraintAST } from '../parser/Parser';\nimport type { StyleDomain } from '../../domain';\nimport { ValidationError } from './ValidationError';\n\n/**\n * ValidationResult\n * Result of validation.\n */\nexport interface ValidationResult {\n readonly isValid: boolean;\n readonly errors: ValidationError[];\n}\n\n/**\n * ContractDSLValidator\n * Validates Contract DSL AST.\n */\nexport class ContractDSLValidator {\n private readonly validDomains: Set<StyleDomain> = new Set([\n 'layout',\n 'typography',\n 'color',\n 'effect',\n 'interaction'\n ]);\n \n private readonly validContexts: Set<string> = new Set([\n 'mobile',\n 'tablet',\n 'desktop',\n 'light',\n 'dark',\n 'web',\n 'native',\n 'canvas',\n 'default',\n 'hover',\n 'active',\n 'disabled'\n ]);\n \n /**\n * Validate contract AST\n * @param ast - Contract AST\n * @returns Validation result\n */\n validate(ast: ContractAST): ValidationResult {\n const errors: ValidationError[] = [];\n \n // Validate contract name\n this.validateContractName(ast.name, errors);\n \n // Validate domain\n this.validateDomain(ast.domain, errors);\n \n // Validate properties\n this.validateProperties(ast.properties, errors);\n \n return {\n isValid: errors.length === 0,\n errors\n };\n }\n \n /**\n * Validate contract name\n * @param name - Contract name\n * @param errors - Array to collect errors\n */\n private validateContractName(name: string, errors: ValidationError[]): void {\n if (!name || name.trim().length === 0) {\n errors.push(new ValidationError(\n 'Contract name cannot be empty',\n 'contract.name'\n ));\n }\n \n if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name)) {\n errors.push(new ValidationError(\n `Invalid contract name: '${name}'. Must start with a letter and contain only letters, digits, underscores, and hyphens.`,\n 'contract.name'\n ));\n }\n }\n \n /**\n * Validate domain\n * @param domain - Domain name\n * @param errors - Array to collect errors\n */\n private validateDomain(domain: string, errors: ValidationError[]): void {\n if (!domain || domain.trim().length === 0) {\n errors.push(new ValidationError(\n 'Domain cannot be empty',\n 'contract.domain'\n ));\n return;\n }\n \n if (!this.validDomains.has(domain as StyleDomain)) {\n errors.push(new ValidationError(\n `Invalid domain: '${domain}'. Must be one of: ${Array.from(this.validDomains).join(', ')}`,\n 'contract.domain'\n ));\n }\n }\n \n /**\n * Validate properties\n * @param properties - Array of properties\n * @param errors - Array to collect errors\n */\n private validateProperties(properties: PropertyAST[], errors: ValidationError[]): void {\n if (!properties || properties.length === 0) {\n errors.push(new ValidationError(\n 'Contract must have at least one property',\n 'contract.properties'\n ));\n return;\n }\n \n // Check for duplicate property names\n const propertyNames = new Set<string>();\n for (const property of properties) {\n if (propertyNames.has(property.name)) {\n errors.push(new ValidationError(\n `Duplicate property name: '${property.name}'`,\n `contract.properties.${property.name}`\n ));\n }\n propertyNames.add(property.name);\n \n // Validate individual property\n this.validateProperty(property, errors);\n }\n }\n \n /**\n * Validate property\n * @param property - Property AST\n * @param errors - Array to collect errors\n */\n private validateProperty(property: PropertyAST, errors: ValidationError[]): void {\n const path = `contract.properties.${property.name}`;\n \n // Validate property name\n if (!property.name || property.name.trim().length === 0) {\n errors.push(new ValidationError(\n 'Property name cannot be empty',\n `${path}.name`\n ));\n }\n \n // Validate allows\n this.validateAllows(property.allows, `${path}.allows`, errors);\n \n // Validate default\n if (property.default) {\n this.validateDefault(property.default, property.allows, `${path}.default`, errors);\n }\n \n // Validate constraints\n if (property.constraints) {\n this.validateConstraints(property.constraints, property.allows, `${path}.constraints`, errors);\n }\n \n // Validate conflicts\n if (property.conflicts) {\n this.validateConflicts(property.conflicts, `${path}.conflicts`, errors);\n }\n }\n \n /**\n * Validate allows\n * @param allows - Array of allowed tokens\n * @param path - Path for error reporting\n * @param errors - Array to collect errors\n */\n private validateAllows(allows: string[], path: string, errors: ValidationError[]): void {\n if (!allows || allows.length === 0) {\n errors.push(new ValidationError(\n 'Property must have at least one allowed token',\n path\n ));\n return;\n }\n \n // Check for duplicate tokens\n const tokenSet = new Set<string>();\n for (const token of allows) {\n if (tokenSet.has(token)) {\n errors.push(new ValidationError(\n `Duplicate allowed token: '${token}'`,\n path\n ));\n }\n tokenSet.add(token);\n \n // Validate token format\n this.validateTokenFormat(token, path, errors);\n }\n }\n \n /**\n * Validate default\n * @param defaultVal - Default token\n * @param allows - Array of allowed tokens\n * @param path - Path for error reporting\n * @param errors - Array to collect errors\n */\n private validateDefault(defaultVal: string, allows: string[], path: string, errors: ValidationError[]): void {\n // Validate token format\n this.validateTokenFormat(defaultVal, path, errors);\n \n // Check if default is in allows\n if (!allows.includes(defaultVal)) {\n errors.push(new ValidationError(\n `Default token '${defaultVal}' is not in allowed tokens`,\n path\n ));\n }\n }\n \n /**\n * Validate constraints\n * @param constraints - Array of constraints\n * @param allows - Array of allowed tokens\n * @param path - Path for error reporting\n * @param errors - Array to collect errors\n */\n private validateConstraints(constraints: ConstraintAST[], allows: string[], path: string, errors: ValidationError[]): void {\n if (!constraints || constraints.length === 0) {\n return;\n }\n \n // Check for duplicate contexts\n const contextSet = new Set<string>();\n for (const constraint of constraints) {\n if (contextSet.has(constraint.context)) {\n errors.push(new ValidationError(\n `Duplicate context: '${constraint.context}'`,\n `${path}.${constraint.context}`\n ));\n }\n contextSet.add(constraint.context);\n \n // Validate individual constraint\n this.validateConstraint(constraint, allows, `${path}.${constraint.context}`, errors);\n }\n }\n \n /**\n * Validate constraint\n * @param constraint - Constraint AST\n * @param allows - Array of allowed tokens\n * @param path - Path for error reporting\n * @param errors - Array to collect errors\n */\n private validateConstraint(constraint: ConstraintAST, allows: string[], path: string, errors: ValidationError[]): void {\n // Validate context\n if (!this.validContexts.has(constraint.context) && !constraint.context.startsWith('container')) {\n errors.push(new ValidationError(\n `Invalid context: '${constraint.context}'. Must be one of: ${Array.from(this.validContexts).join(', ')} or start with 'container'`,\n `${path}.context`\n ));\n }\n \n // Validate allows\n if (!constraint.allows || constraint.allows.length === 0) {\n errors.push(new ValidationError(\n 'Constraint must have at least one allowed token',\n `${path}.allows`\n ));\n return;\n }\n \n // Check if constraint allows are subset of property allows\n for (const token of constraint.allows) {\n if (!allows.includes(token)) {\n errors.push(new ValidationError(\n `Constraint token '${token}' is not in property allowed tokens`,\n `${path}.allows`\n ));\n }\n \n // Validate token format\n this.validateTokenFormat(token, `${path}.allows`, errors);\n }\n }\n \n /**\n * Validate conflicts\n * @param conflicts - Array of conflicting properties\n * @param path - Path for error reporting\n * @param errors - Array to collect errors\n */\n private validateConflicts(conflicts: string[], path: string, errors: ValidationError[]): void {\n if (!conflicts || conflicts.length === 0) {\n return;\n }\n \n // Check for duplicate properties\n const propertySet = new Set<string>();\n for (const property of conflicts) {\n if (propertySet.has(property)) {\n errors.push(new ValidationError(\n `Duplicate conflicting property: '${property}'`,\n path\n ));\n }\n propertySet.add(property);\n \n // Validate property name format\n if (!property || property.trim().length === 0) {\n errors.push(new ValidationError(\n 'Conflicting property name cannot be empty',\n path\n ));\n }\n }\n }\n \n /**\n * Validate token format\n * @param token - Token to validate\n * @param path - Path for error reporting\n * @param errors - Array to collect errors\n */\n private validateTokenFormat(token: string, path: string, errors: ValidationError[]): void {\n if (!token || token.trim().length === 0) {\n errors.push(new ValidationError(\n 'Token cannot be empty',\n path\n ));\n return;\n }\n \n // Token should be in format: category.subcategory.value\n const parts = token.split('.');\n if (parts.length < 2) {\n errors.push(new ValidationError(\n `Invalid token format: '${token}'. Must be in format: 'category.subcategory.value'`,\n path\n ));\n }\n \n // Each part should be valid identifier\n for (const part of parts) {\n if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(part)) {\n errors.push(new ValidationError(\n `Invalid token part: '${part}'. Must start with a letter and contain only letters, digits, underscores, and hyphens.`,\n path\n ));\n }\n }\n }\n}","/**\n * Contract DSL Compiler\n * \n * Compiles Contract DSL AST to ComponentConstitution and StyleContractDefinition.\n * \n * Responsibilities:\n * - Compile AST to ComponentConstitution\n * - Generate StyleContractDefinition\n * - Provide compile errors\n * \n * Key Principles:\n * - DRY: Single compilation logic\n * - SOLID: Single responsibility\n * - YAGNI: Only compile what's needed\n * - DDD: Domain-specific compilation\n */\n\nimport type { ContractAST, PropertyAST, ConstraintAST } from '../parser/Parser';\nimport type { ComponentConstitution, StyleContractDefinition, StyleRule, StyleDomain } from '../../domain';\nimport { CompilerError } from './CompilerError';\n\n/**\n * CompileResult\n * Result of compilation.\n */\nexport interface CompileResult {\n readonly constitution: ComponentConstitution;\n readonly contract: StyleContractDefinition;\n readonly errors: string[];\n}\n\n/**\n * ContractDSLCompiler\n * Compiles Contract DSL AST to ComponentConstitution and StyleContractDefinition.\n */\nexport class ContractDSLCompiler {\n /**\n * Compile AST to ComponentConstitution and StyleContractDefinition\n * @param ast - Contract AST\n * @returns Compile result\n */\n compile(ast: ContractAST): CompileResult {\n const errors: string[] = [];\n \n // Compile to ComponentConstitution\n const constitution = this.compileToConstitution(ast, errors);\n \n // Compile to StyleContractDefinition\n const contract = this.compileToContractDefinition(ast, errors);\n \n return {\n constitution,\n contract,\n errors\n };\n }\n \n /**\n * Compile AST to ComponentConstitution\n * @param ast - Contract AST\n * @param errors - Array to collect errors\n * @returns ComponentConstitution\n */\n private compileToConstitution(ast: ContractAST, errors: string[]): ComponentConstitution {\n const rules: StyleRule[] = [];\n \n for (const property of ast.properties) {\n const rule = this.compilePropertyToRule(property, errors);\n rules.push(rule);\n }\n \n return {\n componentName: ast.name,\n rules\n };\n }\n \n /**\n * Compile property to StyleRule\n * @param property - Property AST\n * @param errors - Array to collect errors\n * @returns StyleRule\n */\n private compilePropertyToRule(property: PropertyAST, errors: string[]): StyleRule {\n const rule: StyleRule = {\n property: property.name,\n domain: this.inferDomain(property.name, errors),\n allowedTokens: property.allows,\n conflictsWith: property.conflicts\n };\n\n if (property.constraints && property.constraints.length > 0) {\n const constraints: Record<string, ReadonlyArray<string>> = {};\n for (const constraint of property.constraints) {\n constraints[constraint.context] = constraint.allows;\n }\n return {\n ...rule,\n constraints\n };\n }\n\n return rule;\n }\n \n /**\n * Infer domain from property name\n * @param propertyName - Property name\n * @param errors - Array to collect errors\n * @returns Inferred domain\n */\n private inferDomain(propertyName: string, errors: string[]): StyleDomain {\n // Simple heuristic to infer domain from property name\n const layoutProperties = ['padding', 'margin', 'spacing', 'gap', 'width', 'height', 'radius', 'shadow'];\n const typographyProperties = ['size', 'weight', 'line-height', 'color', 'font'];\n const colorProperties = ['background', 'foreground', 'border', 'text', 'intent'];\n const effectProperties = ['opacity', 'blur', 'transform', 'transition', 'animation'];\n const interactionProperties = ['hover', 'active', 'focus', 'disabled', 'state'];\n \n if (layoutProperties.some(prop => propertyName.includes(prop))) {\n return 'layout';\n }\n \n if (typographyProperties.some(prop => propertyName.includes(prop))) {\n return 'typography';\n }\n \n if (colorProperties.some(prop => propertyName.includes(prop))) {\n return 'color';\n }\n \n if (effectProperties.some(prop => propertyName.includes(prop))) {\n return 'effect';\n }\n \n if (interactionProperties.some(prop => propertyName.includes(prop))) {\n return 'interaction';\n }\n \n // Default to layout if unknown\n errors.push(`Warning: Could not infer domain for property '${propertyName}', defaulting to 'layout'`);\n return 'layout';\n }\n \n /**\n * Compile AST to StyleContractDefinition\n * @param ast - Contract AST\n * @param errors - Array to collect errors\n * @returns StyleContractDefinition\n */\n private compileToContractDefinition(ast: ContractAST, errors: string[]): StyleContractDefinition {\n const contract: Record<string, string> = {};\n \n for (const property of ast.properties) {\n const defaultValue = property.default || property.allows[0];\n contract[property.name] = defaultValue;\n }\n \n return contract as StyleContractDefinition;\n }\n \n /**\n * Generate TypeScript code for ComponentConstitution\n * @param ast - Contract AST\n * @returns TypeScript code\n */\n generateConstitutionCode(ast: ContractAST): string {\n const lines: string[] = [];\n \n lines.push(`import type { ComponentConstitution } from '../domain/types';`);\n lines.push('');\n lines.push(`export const ${ast.name}Constitution: ComponentConstitution = {`);\n lines.push(` componentName: '${ast.name}',`);\n lines.push(` domain: '${ast.domain}',`);\n lines.push(` rules: [`);\n \n for (const property of ast.properties) {\n lines.push(` {`);\n lines.push(` property: '${property.name}',`);\n lines.push(` domain: '${this.inferDomain(property.name, [])}',`);\n lines.push(` allowedTokens: [${property.allows.map((t: string) => `'${t}'`).join(', ')}],`);\n \n if (property.conflicts && property.conflicts.length > 0) {\n lines.push(` conflictsWith: [${property.conflicts.map((c: string) => `'${c}'`).join(', ')}],`);\n }\n \n lines.push(` },`);\n }\n \n lines.push(` ]`);\n lines.push(`};`);\n \n return lines.join('\\n');\n }\n \n /**\n * Generate TypeScript code for StyleContractDefinition\n * @param ast - Contract AST\n * @returns TypeScript code\n */\n generateContractCode(ast: ContractAST): string {\n const lines: string[] = [];\n \n lines.push(`import type { StyleContractDefinition } from '../domain/types';`);\n lines.push('');\n lines.push(`export const ${ast.name}Contract: StyleContractDefinition = {`);\n \n for (const property of ast.properties) {\n const defaultValue = property.default || property.allows[0];\n lines.push(` ${property.name}: '${defaultValue}',`);\n }\n \n lines.push(`};`);\n \n return lines.join('\\n');\n }\n \n /**\n * Generate complete TypeScript file\n * @param ast - Contract AST\n * @returns TypeScript file content\n */\n generateTypeScriptFile(ast: ContractAST): string {\n const lines: string[] = [];\n \n lines.push(`/**`);\n lines.push(` * ${ast.name} Contract`);\n lines.push(` * Generated from Contract DSL`);\n lines.push(` */`);\n lines.push('');\n lines.push(this.generateConstitutionCode(ast));\n lines.push('');\n lines.push(this.generateContractCode(ast));\n \n return lines.join('\\n');\n }\n}","\n/**\n * CLI Error Handler\n * \n * Provides enhanced error handling for CLI commands with helpful suggestions.\n * \n * Key Principles:\n * - User-friendly: Clear, actionable error messages\n * - Context-aware: Suggestions based on error type\n * - Consistent: Uniform error formatting\n * - Helpful: Provides solutions, not just problems\n */\n\nexport interface ErrorSuggestion {\n readonly message: string;\n readonly command?: string;\n readonly example?: string;\n}\n\nexport interface ErrorContext {\n readonly command: string;\n readonly args: readonly string[];\n readonly options: Readonly<Record<string, unknown>>;\n}\n\nexport class CLIError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly suggestions: ErrorSuggestion[] = [],\n public readonly exitCode: number = 1\n ) {\n super(message);\n this.name = 'CLIError';\n }\n}\n\n/**\n * Error Handler\n * Handles CLI errors with helpful messages and suggestions.\n */\nexport class ErrorHandler {\n private static readonly ERROR_SUGGESTIONS: Record<string, ErrorSuggestion[]> = {\n 'ENOENT': [\n {\n message: 'File not found. Check the file path and try again.',\n example: 'mase compile ./contracts/Button.contract'\n },\n {\n message: 'Make sure the file exists in the specified location.',\n example: 'ls -la ./contracts/'\n }\n ],\n 'EACCES': [\n {\n message: 'Permission denied. Check file permissions.',\n example: 'chmod +x ./contracts/Button.contract'\n }\n ],\n 'SYNTAX_ERROR': [\n {\n message: 'Syntax error in contract file. Check for typos and missing brackets.',\n example: 'contract Button {\\n domain: color;\\n padding {\\n allows: [space.sm, space.md];\\n }\\n}'\n }\n ],\n 'VALIDATION_ERROR': [\n {\n message: 'Contract validation failed. Check the constitution rules.',\n example: 'mase validate ./contracts/Button.contract'\n }\n ]\n };\n\n static handle(error: unknown): void {\n if (error instanceof CLIError) {\n console.error(`❌ ${error.message}`);\n if (error.suggestions.length > 0) {\n console.log('\\n💡 Suggestions:');\n error.suggestions.forEach(s => {\n console.log(` - ${s.message}`);\n if (s.command) console.log(` Command: ${s.command}`);\n if (s.example) console.log(` Example: ${s.example}`);\n });\n }\n process.exit(error.exitCode);\n }\n\n const code = error && typeof error === 'object' ? (error as any).code : undefined;\n const suggestions = code ? this.ERROR_SUGGESTIONS[code] : undefined;\n\n if (error instanceof Error) {\n console.error(`❌ ${error.message}`);\n } else {\n console.error(`❌ An unexpected error occurred: ${String(error)}`);\n }\n\n if (suggestions) {\n console.log('\\n💡 Suggestions:');\n suggestions.forEach(s => {\n console.log(` - ${s.message}`);\n if (s.example) console.log(` Example: ${s.example}`);\n });\n }\n\n process.exit(1);\n }\n}\n","import { Command } from 'commander';\nimport { ContractDSLTokenizer, ContractDSLParser, ContractDSLValidator } from '../../dsl';\nimport * as fs from 'fs';\n\nexport const validateCommand = new Command('validate')\n .description('Validate a contract DSL file')\n .argument('<contract-file>', 'Contract DSL file to validate')\n .option('--strict', 'Enable strict validation', false)\n .option('--fix', 'Auto-fix issues', false)\n .option('--watch', 'Watch for changes', false)\n .action((contractFile, options) => {\n console.log(`Validating ${contractFile}...`);\n \n try {\n // Read contract file\n const source = fs.readFileSync(contractFile, 'utf-8');\n \n // Tokenize\n const tokenizer = new ContractDSLTokenizer();\n const tokens = tokenizer.tokenize(source);\n \n // Parse\n const parser = new ContractDSLParser();\n const ast = parser.parse(tokens);\n \n // Validate\n const validator = new ContractDSLValidator();\n const validationResult = validator.validate(ast);\n \n if (validationResult.isValid) {\n console.log('✅ Contract is valid!');\n } else {\n console.error('❌ Validation errors:');\n validationResult.errors.forEach(error => {\n console.error(` - ${error.path}: ${error.message}`);\n });\n process.exit(1);\n }\n \n if (options.watch) {\n console.log('👀 Watching for changes...');\n // TODO: Implement watch mode\n }\n \n } catch (error) {\n console.error('❌ Error:', error);\n process.exit(1);\n }\n });\n","import { Command } from 'commander';\nimport { ContractDSLTokenizer, ContractDSLParser, ContractDSLValidator, ContractDSLCompiler } from '../../dsl';\nimport { CSSMaterializer } from '../../materializer';\nimport { AtomicCSSGenerator } from '../../integration/atomic';\nimport { TOKENS } from '../../data/tokens';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport const generateCssCommand = new Command('generate-css')\n .description('Generate CSS from a contract DSL file or Token source')\n .argument('[source]', 'Contract DSL file or Tokens file (optional for atomic)')\n .option('-o, --output <file>', 'Output file (default: stdout)')\n .option('--format <format>', 'Output format (class, variable, inline, atomic)', 'class')\n .option('--theme <theme>', 'Theme (light, dark)', 'light')\n .option('--device <device>', 'Device (mobile, tablet, desktop)', 'desktop')\n .option('-w, --watch', 'Watch for changes and regenerate', false)\n .action(async (source, options) => {\n // Mode Atomic: Generate Utility Classes from Tokens\n if (options.format === 'atomic') {\n const runAtomicGeneration = () => {\n console.log('⚛️ Generating Atomic CSS...');\n \n let tokens = TOKENS; // Default to internal tokens\n \n if (source) {\n try {\n const fullPath = path.resolve(process.cwd(), source);\n // Clear cache to ensure fresh reload\n delete require.cache[require.resolve(fullPath)];\n \n if (fs.existsSync(fullPath)) {\n const loaded = require(fullPath);\n tokens = loaded.default || loaded.TOKENS || loaded;\n console.log(`Loaded tokens from ${source}`);\n } else {\n console.warn(`⚠️ Source file ${source} not found. Using default tokens.`);\n }\n } catch (e) {\n console.warn('⚠️ Could not load tokens from file, using defaults:', (e as Error).message);\n }\n } else {\n console.log('ℹ️ No source provided, using default built-in tokens.');\n }\n \n const generator = new AtomicCSSGenerator();\n const css = generator.generate(tokens);\n \n if (options.output) {\n fs.writeFileSync(options.output, css, 'utf-8');\n console.log(`✅ Atomic CSS generated to ${options.output}`);\n } else {\n console.log(css);\n }\n };\n\n // Initial run\n runAtomicGeneration();\n\n // Watch mode\n if (options.watch && source) {\n console.log(`👀 Watching for changes in ${source}...`);\n const fullPath = path.resolve(process.cwd(), source);\n fs.watch(fullPath, (eventType) => {\n if (eventType === 'change') {\n console.log('🔄 File changed, regenerating...');\n runAtomicGeneration();\n }\n });\n \n // Keep process alive\n await new Promise(() => {});\n } else if (options.watch && !source) {\n console.warn('⚠️ Watch mode requires a source file. Ignoring --watch.');\n }\n \n return;\n }\n\n // Default Mode: Contract DSL -> CSS\n if (!source) {\n console.error('❌ Error: Contract file argument is required for non-atomic format.');\n process.exit(1);\n }\n\n console.log(`Generating CSS from ${source}...`);\n \n try {\n // Read contract file\n const contractContent = fs.readFileSync(source, 'utf-8');\n \n // Tokenize\n const tokenizer = new ContractDSLTokenizer();\n const tokens = tokenizer.tokenize(contractContent);\n \n // Parse\n const parser = new ContractDSLParser();\n const ast = parser.parse(tokens);\n \n // Validate\n const validator = new ContractDSLValidator();\n const validationResult = validator.validate(ast);\n \n if (!validationResult.isValid) {\n console.error('❌ Validation errors:');\n validationResult.errors.forEach(error => {\n console.error(` - ${error.path}: ${error.message}`);\n });\n process.exit(1);\n }\n \n // Compile\n const compiler = new ContractDSLCompiler();\n const result = compiler.compile(ast);\n \n // Materialize to CSS\n const materializer = new CSSMaterializer();\n const cssResult = materializer.materialize(\n result.constitution.rules.map(rule => ({\n domain: rule.domain,\n semantic: rule.property,\n tokenRef: rule.allowedTokens[0]\n })),\n {\n platform: 'web',\n theme: options.theme as 'light' | 'dark',\n device: options.device as 'mobile' | 'tablet' | 'desktop',\n outputFormat: options.format as 'class' | 'variable' | 'inline'\n }\n );\n \n // Output based on format\n let output: string;\n \n switch (options.format) {\n case 'variable':\n output = cssResult.output.variables;\n break;\n case 'inline':\n output = cssResult.output.inline;\n break;\n case 'class':\n default:\n output = cssResult.output.classes;\n break;\n }\n \n if (options.output) {\n fs.writeFileSync(options.output, output, 'utf-8');\n console.log(`✅ CSS generated to ${options.output}`);\n } else {\n console.log(output);\n }\n \n } catch (error) {\n console.error('❌ Error:', error);\n process.exit(1);\n }\n });\n","/**\n * CSS Materializer\n * \n * Converts semantic nodes to CSS output for web platform.\n * \n * Responsibilities:\n * - Map semantic → CSS property\n * - Map token → CSS value\n * - Map domain → CSS layer\n * - Generate CSS classes or variables\n * - Support responsive variants\n * \n * Key Principles:\n * - DRY: Single materialization logic\n * - SOLID: Single responsibility\n * - YAGNI: Only materialize what's needed\n * - DDD: Domain-specific CSS generation\n */\n\nimport type { Materializer, MaterializationContext, MaterializationResult } from '../core/Materializer';\nimport type { SemanticNode } from '../../domain';\nimport { MaterializationError } from '../core/MaterializationError';\n\n/**\n * CSSOutput\n * CSS output format.\n */\nexport interface CSSOutput {\n readonly classes: string;\n readonly variables: string;\n readonly inline: string;\n}\n\n/**\n * SemanticToCSSMapping\n * Mapping from semantic to CSS property.\n */\ninterface SemanticToCSSMapping {\n readonly [semantic: string]: string;\n}\n\n/**\n * CSSMaterializer\n * Materializes semantic nodes to CSS output.\n */\nexport class CSSMaterializer implements Materializer<CSSOutput> {\n private readonly semanticToCSS: SemanticToCSSMapping;\n \n constructor() {\n this.semanticToCSS = this.buildSemanticToCSSMapping();\n }\n \n /**\n * Materialize semantic nodes to CSS output\n * @param nodes - Resolved semantic nodes\n * @param context - Materialization context\n * @returns CSS output\n */\n materialize(\n nodes: readonly SemanticNode[],\n context: MaterializationContext\n ): MaterializationResult<CSSOutput> {\n const classes: string[] = [];\n const variables: string[] = [];\n const inline: string[] = [];\n \n for (const node of nodes) {\n const cssProperty = this.mapSemanticToCSS(node.semantic);\n const cssValue = this.mapTokenToCSS(node.tokenRef, context.theme);\n \n // Generate based on output format\n switch (context.outputFormat) {\n case 'class':\n classes.push(this.generateCSSClass(node.semantic, cssProperty, cssValue));\n break;\n case 'variable':\n variables.push(this.generateCSSVariable(node.tokenRef, cssValue));\n break;\n case 'inline':\n inline.push(this.generateInlineStyle(cssProperty, cssValue));\n break;\n }\n }\n \n return {\n output: {\n classes: classes.join('\\n'),\n variables: variables.join('\\n'),\n inline: inline.join('; ')\n },\n metadata: {\n platform: context.platform,\n theme: context.theme,\n device: context.device,\n format: context.outputFormat,\n timestamp: new Date().toISOString()\n }\n };\n }\n \n /**\n * Build semantic to CSS mapping\n * @returns Mapping object\n */\n private buildSemanticToCSSMapping(): SemanticToCSSMapping {\n return {\n // Spacing\n 'spacing.padding.small': 'padding',\n 'spacing.padding.medium': 'padding',\n 'spacing.padding.large': 'padding',\n 'spacing.margin.small': 'margin',\n 'spacing.margin.medium': 'margin',\n 'spacing.margin.large': 'margin',\n 'spacing.gap.small': 'gap',\n 'spacing.gap.medium': 'gap',\n 'spacing.gap.large': 'gap',\n \n // Color\n 'color.background.primary': 'background-color',\n 'color.background.secondary': 'background-color',\n 'color.background.tertiary': 'background-color',\n 'color.text.primary': 'color',\n 'color.text.secondary': 'color',\n 'color.text.tertiary': 'color',\n 'color.border.primary': 'border-color',\n 'color.border.secondary': 'border-color',\n \n // Typography\n 'typography.size.small': 'font-size',\n 'typography.size.base': 'font-size',\n 'typography.size.large': 'font-size',\n 'typography.weight.light': 'font-weight',\n 'typography.weight.normal': 'font-weight',\n 'typography.weight.bold': 'font-weight',\n 'typography.line-height.tight': 'line-height',\n 'typography.line-height.normal': 'line-height',\n 'typography.line-height.relaxed': 'line-height',\n \n // Effect\n 'effect.shadow.small': 'box-shadow',\n 'effect.shadow.medium': 'box-shadow',\n 'effect.shadow.large': 'box-shadow',\n 'effect.radius.small': 'border-radius',\n 'effect.radius.medium': 'border-radius',\n 'effect.radius.large': 'border-radius',\n 'effect.opacity.low': 'opacity',\n 'effect.opacity.medium': 'opacity',\n 'effect.opacity.high': 'opacity'\n };\n }\n \n /**\n * Map semantic to CSS property\n * @param semantic - Semantic string\n * @returns CSS property\n */\n private mapSemanticToCSS(semantic: string): string {\n const cssProperty = this.semanticToCSS[semantic];\n \n if (!cssProperty) {\n // Fallback: extract last part of semantic\n const parts = semantic.split('.');\n const lastPart = parts[parts.length - 1];\n \n // Map common patterns\n if (lastPart === 'small' || lastPart === 'medium' || lastPart === 'large') {\n return parts[parts.length - 2]; // e.g., padding, margin\n }\n \n return lastPart;\n }\n \n return cssProperty;\n }\n \n /**\n * Map token to CSS value\n * @param tokenRef - Token reference\n * @param theme - Theme\n * @returns CSS value\n */\n private mapTokenToCSS(tokenRef: string, theme: string): string {\n // In a real implementation, this would resolve the token from a token registry\n // For now, we'll use CSS variables as the default approach\n \n // Convert token reference to CSS variable name\n const cssVarName = tokenRef.replace(/\\./g, '-');\n \n // Add theme suffix if dark mode\n if (theme === 'dark') {\n return `var(--${cssVarName}-dark)`;\n }\n \n return `var(--${cssVarName})`;\n }\n \n /**\n * Generate CSS class\n * @param semantic - Semantic string\n * @param property - CSS property\n * @param value - CSS value\n * @returns CSS class string\n */\n private generateCSSClass(semantic: string, property: string, value: string): string {\n // Generate class name from semantic\n const className = this.generateClassName(semantic);\n \n return `.${className} { ${property}: ${value}; }`;\n }\n \n /**\n * Generate CSS variable\n * @param tokenRef - Token reference\n * @param value - CSS value\n * @returns CSS variable string\n */\n private generateCSSVariable(tokenRef: string, value: string): string {\n const varName = tokenRef.replace(/\\./g, '-');\n \n return `--${varName}: ${value};`;\n }\n \n /**\n * Generate inline style\n * @param property - CSS property\n * @param value - CSS value\n * @returns Inline style string\n */\n private generateInlineStyle(property: string, value: string): string {\n return `${property}: ${value}`;\n }\n \n /**\n * Generate class name from semantic\n * @param semantic - Semantic string\n * @returns Class name\n */\n private generateClassName(semantic: string): string {\n // Convert semantic to kebab-case class name\n return semantic\n .replace(/\\./g, '-')\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .toLowerCase();\n }\n}","import type { Token } from '../domain';\n\n// 1. Token Registry (Mata Uang Negara)\nexport const TOKENS: Record<string, Token> = {\n // Colors - Intent based\n 'color.primary': { id: 'color.primary', domain: 'color', value: '#2563eb' }, // blue-600\n 'color.secondary': { id: 'color.secondary', domain: 'color', value: '#4b5563' }, // gray-600\n 'color.danger': { id: 'color.danger', domain: 'color', value: '#dc2626' }, // red-600\n\n // Spacing - Scale based\n 'space.sm': { id: 'space.sm', domain: 'layout', value: '0.5rem' }, // 8px\n 'space.md': { id: 'space.md', domain: 'layout', value: '1rem' }, // 16px\n 'space.lg': { id: 'space.lg', domain: 'layout', value: '1.5rem' }, // 24px\n \n // Forbidden/Raw tokens (for demo)\n 'raw.hex': { id: 'raw.hex', domain: 'color', value: '#123456' }, // Illegal\n\n // Surface (Theme Aware!)\n 'surface.card': { \n id: 'surface.card', \n domain: 'color', \n value: {\n light: '#ffffff', // white\n dark: '#1e293b' // slate-800\n } \n },\n 'surface.ground': { \n id: 'surface.ground', \n domain: 'color', \n value: {\n light: '#f9fafb', // gray-50\n dark: '#0f172a' // slate-900\n } \n },\n 'surface.paper': {\n id: 'surface.paper',\n domain: 'color',\n value: {\n light: '#ffffff', // white\n dark: '#334155' // slate-700\n }\n },\n\n // Text (Theme Aware!)\n 'text.light': { \n id: 'text.light', \n domain: 'color', \n value: {\n light: '#ffffff', // white\n dark: '#f3f4f6' // gray-100\n }\n },\n 'text.dark': { \n id: 'text.dark', \n domain: 'color', \n value: {\n light: '#111827', // gray-900\n dark: '#ffffff' // white\n }\n },\n 'text.primary': {\n id: 'text.primary',\n domain: 'color',\n value: {\n light: '#111827', // gray-900\n dark: '#f9fafb' // gray-50\n }\n },\n 'text.secondary': {\n id: 'text.secondary',\n domain: 'color',\n value: {\n light: '#6b7280', // gray-500\n dark: '#9ca3af' // gray-400\n }\n },\n \n // Effects\n 'shadow.sm': { id: 'shadow.sm', domain: 'effect', value: '0 1px 2px 0 rgb(0 0 0 / 0.05)' },\n 'shadow.md': { id: 'shadow.md', domain: 'effect', value: '0 4px 6px -1px rgb(0 0 0 / 0.1)' },\n 'shadow.lg': { id: 'shadow.lg', domain: 'effect', value: '0 10px 15px -3px rgb(0 0 0 / 0.1)' },\n \n // Radius (Moved to effect domain for consistency)\n 'radius.md': { id: 'radius.md', domain: 'effect', value: '0.375rem' }, // 6px\n 'radius.lg': { id: 'radius.lg', domain: 'effect', value: '0.5rem' }, // 8px\n 'radius.full': { id: 'radius.full', domain: 'effect', value: '9999px' },\n\n // Typography - Font Sizes\n 'text.sm': { id: 'text.sm', domain: 'typography', value: '0.875rem' },\n 'text.base': { id: 'text.base', domain: 'typography', value: '1rem' },\n 'text.lg': { id: 'text.lg', domain: 'typography', value: '1.125rem' },\n 'text.xl': { id: 'text.xl', domain: 'typography', value: '1.25rem' },\n\n // Typography - Font Weights\n 'weight.normal': { id: 'weight.normal', domain: 'typography', value: '400' },\n 'weight.medium': { id: 'weight.medium', domain: 'typography', value: '500' },\n 'weight.bold': { id: 'weight.bold', domain: 'typography', value: '700' },\n};\n","export const CSS_RESET = `/* MASE Grounding (Reset) */\n*, ::before, ::after {\n box-sizing: border-box;\n border-width: 0;\n border-style: solid;\n border-color: currentColor;\n}\n\nhtml, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n -moz-tab-size: 4;\n tab-size: 4;\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-feature-settings: normal;\n font-variation-settings: normal;\n -webkit-tap-highlight-color: transparent;\n}\n\nbody {\n margin: 0;\n line-height: inherit;\n}\n\nhr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n}\n\nabbr:where([title]) {\n text-decoration: underline dotted;\n}\n\nh1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\nb, strong {\n font-weight: bolder;\n}\n\ncode, kbd, samp, pre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\ntable {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n}\n\nbutton, input, optgroup, select, textarea {\n font-family: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n font-size: 100%;\n font-weight: inherit;\n line-height: inherit;\n color: inherit;\n margin: 0;\n padding: 0;\n}\n\nbutton, select {\n text-transform: none;\n}\n\nbutton, [type=\"button\"], [type=\"reset\"], [type=\"submit\"] {\n -webkit-appearance: button;\n background-color: transparent;\n background-image: none;\n}\n\n:-moz-focusring {\n outline: auto;\n}\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n -webkit-appearance: textfield;\n outline-offset: -2px;\n}\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n -webkit-appearance: button;\n font: inherit;\n}\n\nsummary {\n display: list-item;\n}\n\nblockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol, ul, menu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\ntextarea {\n resize: vertical;\n}\n\ninput::placeholder, textarea::placeholder {\n opacity: 1;\n color: #9ca3af;\n}\n\nbutton, [role=\"button\"] {\n cursor: pointer;\n}\n\n:disabled {\n cursor: default;\n}\n\nimg, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n}\n\nimg, video {\n max-width: 100%;\n height: auto;\n}\n\n[hidden] {\n display: none;\n}\n`;","import { CSS_RESET } from '../reset';\n\n/**\n * Handles the generation of the Base layer (CSS Reset).\n */\nexport class BaseGenerator {\n generate(includeReset: boolean = true): string {\n if (!includeReset) return '';\n \n let css = '@layer base {\\n';\n css += CSS_RESET;\n css += '}\\n\\n';\n \n return css;\n }\n}\n","import { Token } from '../../domain/types';\n\n/**\n * Shared utility functions for integration layer\n * Reduces code duplication and ensures consistency\n */\n\n/**\n * Format token ID to CSS variable name\n * @param tokenId - The token ID (e.g., 'color.primary')\n * @param prefix - Variable prefix (default: '--')\n * @returns Formatted CSS variable name (e.g., '--color-primary')\n */\nexport function formatVarName(tokenId: string, prefix: string = '--'): string {\n return `${prefix}${tokenId.replace(/\\./g, '-')}`;\n}\n\n/**\n * Format token ID to utility class suffix\n * @param tokenId - The token ID (e.g., 'color.primary')\n * @returns Suffix for utility class (e.g., 'primary')\n */\nexport function formatSuffix(tokenId: string): string {\n const parts = tokenId.split('.');\n return parts.length > 1 ? parts.slice(1).join('-') : parts[0];\n}\n\n/**\n * Type guard to check if value is theme-aware (object with light/dark)\n * @param value - The token value to check\n * @returns True if value is theme-aware\n */\nexport function isThemeAware(value: unknown): value is { light?: string; dark?: string } {\n return typeof value === 'object' && value !== null;\n}\n\n/**\n * Get light theme value from token\n * @param token - The token\n * @returns Light theme value or fallback\n */\nexport function getLightValue(token: Token): string {\n if (typeof token.value === 'string') {\n return token.value;\n }\n \n if (isThemeAware(token.value)) {\n return token.value.light || Object.values(token.value)[0] || '';\n }\n \n return String(token.value);\n}\n\n/**\n * Get dark theme value from token\n * @param token - The token\n * @returns Dark theme value or null if not available\n */\nexport function getDarkValue(token: Token): string | null {\n if (typeof token.value === 'string') {\n return null;\n }\n \n if (isThemeAware(token.value)) {\n return token.value.dark || null;\n }\n \n return null;\n}\n\n/**\n * Check if token has dark mode value\n * @param token - The token\n * @returns True if token has dark mode value\n */\nexport function hasDarkMode(token: Token): boolean {\n return getDarkValue(token) !== null;\n}\n\n/**\n * Create CSS variable declaration\n * @param varName - CSS variable name\n * @param value - Variable value\n * @returns CSS declaration string\n */\nexport function createVarDeclaration(varName: string, value: string): string {\n return `${varName}: ${value}`;\n}\n\n/**\n * Create CSS variable reference\n * @param varName - CSS variable name\n * @returns CSS variable reference string\n */\nexport function createVarReference(varName: string): string {\n return `var(${varName})`;\n}\n\n/**\n * Validate token has required properties\n * @param token - The token to validate\n * @returns True if token is valid\n */\nexport function isValidToken(token: Token): boolean {\n return !!token && !!token.id && token.value !== undefined && token.value !== null;\n}\n\n/**\n * Filter valid tokens from a record\n * @param tokens - Record of tokens\n * @returns Array of valid tokens\n */\nexport function filterValidTokens(tokens: Record<string, Token>): Token[] {\n return Object.values(tokens).filter(isValidToken);\n}\n\n/**\n * Group tokens by domain\n * @param tokens - Record of tokens\n * @returns Object mapping domains to tokens\n */\nexport function groupTokensByDomain(tokens: Record<string, Token>): Record<string, Token[]> {\n const grouped: Record<string, Token[]> = {};\n \n Object.values(tokens).forEach(token => {\n if (!grouped[token.domain]) {\n grouped[token.domain] = [];\n }\n grouped[token.domain].push(token);\n });\n \n return grouped;\n}\n\n/**\n * Create CSS rule with properties\n * @param selector - CSS selector\n * @param properties - Array of CSS property declarations\n * @param indent - Indentation level (default: 2 spaces)\n * @returns Formatted CSS rule\n */\nexport function createCssRule(selector: string, properties: string[], indent: number = 2): string {\n if (properties.length === 0) return '';\n \n const spaces = ' '.repeat(indent);\n const props = properties.map(p => `${spaces}${p}`).join('\\n');\n \n return `${selector} {\\n${props}\\n}`;\n}\n\n/**\n * Create CSS layer wrapper\n * @param layerName - Layer name\n * @param content - CSS content\n * @returns CSS with layer wrapper\n */\nexport function createLayer(layerName: string, content: string): string {\n return `@layer ${layerName} {\\n${content}\\n}\\n`;\n}\n\n/**\n * Sanitize CSS value to prevent injection\n * @param value - CSS value to sanitize\n * @returns Sanitized value\n */\nexport function sanitizeCssValue(value: string): string {\n // Remove potentially dangerous characters\n return value.replace(/[<>{}]/g, '');\n}\n\n/**\n * Format CSS comment\n * @param text - Comment text\n * @returns Formatted CSS comment\n */\nexport function createComment(text: string): string {\n return `/* ${text} */`;\n}","import { Token } from '../../../domain';\nimport { GeneratorContext } from '../types';\nimport {\n formatVarName,\n getLightValue,\n getDarkValue,\n createVarDeclaration,\n createCssRule,\n createLayer,\n isValidToken,\n filterValidTokens\n} from '../../shared/utils';\n\n/**\n * Handles the generation of CSS variables (Theme layer).\n */\nexport class ThemeGenerator {\n /**\n * Mini function: Get prefix with CSS variable prefix\n */\n private getFullPrefix(context: GeneratorContext): string {\n return `--${context.prefix}`;\n }\n\n /**\n * Mini function: Get dark mode selector\n */\n private getDarkModeSelector(): string {\n return '[data-theme=\"dark\"]';\n }\n\n /**\n * Mini function: Process a single token\n */\n private processToken(token: Token, fullPrefix: string): { default: string; dark?: string } {\n if (!isValidToken(token)) {\n return { default: '' };\n }\n\n const varName = formatVarName(token.id, fullPrefix);\n const lightValue = getLightValue(token);\n const darkValue = getDarkValue(token);\n\n const result: { default: string; dark?: string } = {\n default: createVarDeclaration(varName, lightValue)\n };\n\n if (darkValue) {\n result.dark = createVarDeclaration(varName, darkValue);\n }\n\n return result;\n }\n\n /**\n * Mini function: Collect variable declarations from tokens\n */\n private collectVariables(tokens: Record<string, Token>, fullPrefix: string): { default: string[]; dark: string[] } {\n const validTokens = filterValidTokens(tokens);\n const defaultVars: string[] = [];\n const darkVars: string[] = [];\n\n validTokens.forEach(token => {\n const processed = this.processToken(token, fullPrefix);\n \n if (processed.default) {\n defaultVars.push(` ${processed.default};`);\n }\n \n if (processed.dark) {\n darkVars.push(` ${processed.dark};`);\n }\n });\n\n return { default: defaultVars, dark: darkVars };\n }\n\n /**\n * Mini function: Generate default theme block\n */\n private generateDefaultBlock(selector: string, vars: string[]): string {\n if (vars.length === 0) return '';\n return createCssRule(selector, vars, 2);\n }\n\n /**\n * Mini function: Generate dark mode block\n */\n private generateDarkModeBlock(vars: string[]): string {\n if (vars.length === 0) return '';\n return createCssRule(this.getDarkModeSelector(), vars, 2);\n }\n\n generate(tokens: Record<string, Token>, context: GeneratorContext): string {\n const fullPrefix = this.getFullPrefix(context);\n const { default: defaultVars, dark: darkVars } = this.collectVariables(tokens, fullPrefix);\n\n let content = '';\n content += this.generateDefaultBlock(context.selector, defaultVars);\n content += '\\n';\n content += this.generateDarkModeBlock(darkVars);\n\n return createLayer('theme', content);\n }\n}\n","\nimport { GeneratorContext } from '../types';\n\n/**\n * Variant definition\n */\nexport interface Variant {\n name: string;\n media?: string; // e.g. (min-width: 768px)\n container?: string; // e.g. sidebar (min-width: 300px)\n selector?: string; // e.g. :hover, :focus\n}\n\n/**\n * Handles the generation of variants for utilities.\n * \n * Responsibilities:\n * - Define standard variants (responsive, pseudo-classes)\n * - Define container query variants\n * - Wrap utility CSS in appropriate media/container queries or selectors\n */\nexport class VariantGenerator {\n private variants: Map<string, Variant>;\n\n constructor() {\n this.variants = new Map();\n this.registerStandardVariants();\n }\n\n private registerStandardVariants() {\n // Pseudo-classes\n this.registerVariant('hover', { name: 'hover', selector: ':hover' });\n this.registerVariant('focus', { name: 'focus', selector: ':focus' });\n this.registerVariant('active', { name: 'active', selector: ':active' });\n this.registerVariant('disabled', { name: 'disabled', selector: ':disabled' });\n this.registerVariant('group-hover', { name: 'group-hover', selector: '.group:hover &' });\n \n // Responsive (Standard) - These should match project config ideally\n this.registerVariant('sm', { name: 'sm', media: '(min-width: 640px)' });\n this.registerVariant('md', { name: 'md', media: '(min-width: 768px)' });\n this.registerVariant('lg', { name: 'lg', media: '(min-width: 1024px)' });\n this.registerVariant('xl', { name: 'xl', media: '(min-width: 1280px)' });\n this.registerVariant('2xl', { name: '2xl', media: '(min-width: 1536px)' });\n }\n\n registerVariant(name: string, definition: Variant) {\n this.variants.set(name, definition);\n }\n\n /**\n * Apply variant to a CSS utility string\n * @param css - Original utility CSS (e.g. .w-full { width: 100%; })\n * @param variantName - Name of variant to apply (e.g. 'hover', 'md', '@sidebar')\n * @returns Transformed CSS\n */\n applyVariant(css: string, variantName: string): string {\n // Check if it's a registered variant\n let variant = this.variants.get(variantName);\n \n // Handle dynamic container variants (e.g. @sidebar)\n if (!variant && variantName.startsWith('@')) {\n const containerName = variantName.substring(1); // Remove @\n // For now assume generic container query, but ideally we need config\n variant = { \n name: variantName, \n container: `${containerName} (min-width: 0px)` // Placeholder\n };\n }\n\n if (!variant) return '';\n\n // Parse the CSS to modify selector\n // Simple regex replacement for now (assuming standard class structure)\n // .w-full { ... } -> .hover\\:w-full:hover { ... }\n // .w-full { ... } -> @media ... { .md\\:w-full { ... } }\n \n const classMatch = css.match(/^\\.([^{]+)/);\n if (!classMatch) return '';\n \n const originalClass = classMatch[1].trim(); // e.g. \"w-full\" or \"bg-red-500\"\n // Escape colons in variant prefix if needed, usually just name\\:class\n const variantPrefix = variant.name.replace(/[^a-zA-Z0-9-_]/g, '\\\\$&'); \n const newClass = `.${variantPrefix}\\\\:${originalClass}`;\n \n let newCss = css.replace(/^\\.[^{]+/, newClass);\n\n // Apply selector modification\n if (variant.selector) {\n if (variant.selector.includes('&')) {\n // Complex selector like .group:hover &\n // Replace & with the class name\n const complexSelector = variant.selector.replace('&', newClass);\n newCss = newCss.replace(newClass, complexSelector);\n } else {\n newCss = newCss.replace(newClass, `${newClass}${variant.selector}`);\n }\n }\n\n // Wrap in Media Query\n if (variant.media) {\n newCss = `@media ${variant.media} {\\n ${newCss.replace(/\\n/g, '\\n ')}\\n}`;\n }\n\n // Wrap in Container Query\n if (variant.container) {\n newCss = `@container ${variant.container} {\\n ${newCss.replace(/\\n/g, '\\n ')}\\n}`;\n }\n\n return newCss;\n }\n}\n","import { Token } from '../../../domain';\nimport { TokenHandler } from '../types';\nimport { isValidToken, sanitizeCssValue } from '../../shared/utils';\n\n/**\n * Base class for token handlers\n * Provides common functionality and enforces type safety\n */\nexport abstract class BaseHandler implements TokenHandler {\n /**\n * Check if this handler can process the token\n * Must be implemented by subclasses\n */\n abstract canHandle(token: Token): boolean;\n\n /**\n * Generate CSS for the token\n * Must be implemented by subclasses\n */\n abstract generate(token: Token, varName: string, suffix: string): string;\n\n /**\n * Mini function: Validate token before processing\n */\n protected validateToken(token: Token): boolean {\n return isValidToken(token);\n }\n\n /**\n * Mini function: Sanitize CSS value\n */\n protected sanitize(value: string): string {\n return sanitizeCssValue(value);\n }\n\n /**\n * Mini function: Create CSS rule\n */\n protected createRule(selector: string, property: string, value: string): string {\n const sanitizedValue = this.sanitize(value);\n return ` .${selector} { ${property}: ${sanitizedValue}; }\\n`;\n }\n\n /**\n * Mini function: Create multiple CSS rules\n */\n protected createRules(rules: Array<{ selector: string; property: string; value: string }>): string {\n return rules.map(rule => this.createRule(rule.selector, rule.property, rule.value)).join('');\n }\n\n /**\n * Mini function: Extract suffix from token ID\n */\n protected extractSuffix(tokenId: string): string {\n const parts = tokenId.split('.');\n return parts.length > 1 ? parts.slice(1).join('-') : parts[0];\n }\n\n /**\n * Mini function: Check if token ID contains a keyword\n */\n protected containsKeyword(tokenId: string, keyword: string): boolean {\n return tokenId.toLowerCase().includes(keyword.toLowerCase());\n }\n\n /**\n * Mini function: Generate directional rules (top, right, bottom, left, x, y, all)\n * DRY implementation for properties that have directional variants\n */\n protected generateDirectionalRules(\n baseSelector: string,\n suffix: string,\n value: string,\n mappings: Record<string, string | string[]> // key is direction suffix (e.g., 't', 'x', ''), value is property\n ): string {\n const rules: Array<{ selector: string; property: string; value: string }> = [];\n \n for (const [dir, prop] of Object.entries(mappings)) {\n // Construct selector: base + dir + suffix\n // e.g. base='p', dir='t', suffix='4' -> pt-4\n // e.g. base='p', dir='', suffix='4' -> p-4\n const selectorPart = dir ? `${baseSelector}${dir}` : baseSelector;\n const fullSelector = `${selectorPart}-${suffix}`;\n \n if (Array.isArray(prop)) {\n prop.forEach(p => rules.push({ selector: fullSelector, property: p, value }));\n } else {\n rules.push({ selector: fullSelector, property: prop as string, value });\n }\n }\n return this.createRules(rules);\n }\n\n /**\n * Mini function: Generate rules by matching token ID against a prefix map (Scenario B)\n * Use this when the token ID itself dictates the property (e.g. 'p-4' -> padding, 'mt-4' -> margin-top)\n */\n protected generateRulesFromPrefix(\n token: Token,\n varName: string,\n suffix: string,\n prefixMap: Record<string, string | string[] | { property: string; valueTransform?: (value: string) => string }>\n ): string {\n // Sort keys by length descending to ensure longest match wins\n const prefixes = Object.keys(prefixMap).sort((a, b) => b.length - a.length);\n\n for (const prefix of prefixes) {\n // Check if token.id starts with prefix (e.g. 'p-4' starts with 'p-')\n // Also check suffix, as it handles dot-to-hyphen conversion (e.g. 'text.xl' -> 'text-xl')\n \n if (token.id === prefix || token.id.startsWith(`${prefix}-`) ||\n suffix === prefix || suffix.startsWith(`${prefix}-`)) {\n const definition = prefixMap[prefix];\n const selector = suffix; \n\n if (typeof definition === 'string') {\n return this.createRule(selector, definition, varName);\n } else if (Array.isArray(definition)) {\n return this.createRules(definition.map(p => ({ selector, property: p, value: varName })));\n } else {\n // Object definition\n const val = definition.valueTransform ? definition.valueTransform(varName) : varName;\n return this.createRule(selector, definition.property, val);\n }\n }\n }\n return '';\n }\n\n /**\n * Mini function: Generate utilities based on a configuration map\n * This implements DRY by allowing handlers to define mappings instead of writing repetitive if-blocks.\n */\n protected generateUtilities(\n token: Token,\n varName: string,\n suffix: string,\n config: Record<string, string | { property: string; classPrefix?: string; valueMap?: Record<string, string>; valueTransform?: (value: string) => string }>\n ): string {\n const rules: Array<{ selector: string; property: string; value: string }> = [];\n\n for (const [match, definition] of Object.entries(config)) {\n if (this.containsKeyword(token.id, match)) {\n let property: string;\n let classPrefix: string | undefined;\n let valueMap: Record<string, string> | undefined;\n let valueTransform: ((value: string) => string) | undefined;\n\n if (typeof definition === 'string') {\n property = definition;\n classPrefix = match; // Default to the match keyword as prefix\n } else {\n property = definition.property;\n // Allow empty string as valid classPrefix\n classPrefix = definition.classPrefix !== undefined ? definition.classPrefix : match;\n valueMap = definition.valueMap;\n valueTransform = definition.valueTransform;\n }\n\n // Determine the class suffix (selector part)\n // If there's a map, try to map the current suffix.\n // Otherwise use the suffix directly.\n let finalSuffix = suffix;\n\n // If suffix starts with the match string, strip it to avoid duplication in selector\n // BUT only if classPrefix is the same as the match key.\n // This ensures that for cases like match='bold' (classPrefix='font'), we DON'T strip 'bold' from suffix.\n // But for cases like match='text' (classPrefix='text'), we DO strip 'text' from suffix.\n if (classPrefix === match && finalSuffix.startsWith(match)) {\n finalSuffix = finalSuffix.substring(match.length);\n // Also strip leading hyphen if present\n if (finalSuffix.startsWith('-')) {\n finalSuffix = finalSuffix.substring(1);\n }\n }\n\n if (valueMap && valueMap[finalSuffix]) {\n finalSuffix = valueMap[finalSuffix];\n }\n\n // Construct selector\n // Handle cases where prefix might be empty or suffix might be part of prefix logic\n // If finalSuffix is empty, use classPrefix as selector\n const selector = finalSuffix ? (classPrefix ? `${classPrefix}-${finalSuffix}` : finalSuffix) : (classPrefix || match);\n \n let finalValue = varName;\n if (valueTransform) {\n finalValue = valueTransform(varName);\n }\n \n rules.push({ selector, property, value: finalValue });\n }\n }\n\n return this.createRules(rules);\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\nexport class ColorHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n token.domain === 'color' && \n !this.containsKeyword(token.id, 'border') &&\n !this.containsKeyword(token.id, 'outline') &&\n !this.containsKeyword(token.id, 'ring');\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n const standardRules = this.createRules([\n // Text Color\n { selector: `text-${suffix}`, property: 'color', value: varName },\n \n // Background Color\n { selector: `bg-${suffix}`, property: 'background-color', value: varName },\n \n // Outline Color\n { selector: `outline-${suffix}`, property: 'outline-color', value: varName },\n \n // Ring Color (Simplified)\n { selector: `ring-${suffix}`, property: '--tw-ring-color', value: varName },\n { selector: `ring-offset-${suffix}`, property: 'outline-color', value: varName }, \n \n // Decoration Color\n { selector: `decoration-${suffix}`, property: 'text-decoration-color', value: varName },\n \n // Accent Color\n { selector: `accent-${suffix}`, property: 'accent-color', value: varName },\n \n // Caret Color\n { selector: `caret-${suffix}`, property: 'caret-color', value: varName },\n \n // Placeholder Color\n { selector: `placeholder-${suffix}::placeholder`, property: 'color', value: varName }\n ]);\n\n // Border Colors (Directional)\n // Uses helper to generate border-red-500, border-t-red-500, etc.\n // Note: Keys start with hyphen because baseSelector is 'border' and we want 'border-t'\n const borderRules = this.generateDirectionalRules('border', suffix, varName, {\n '': 'border-color',\n '-t': 'border-top-color',\n '-r': 'border-right-color',\n '-b': 'border-bottom-color',\n '-l': 'border-left-color',\n '-x': ['border-left-color', 'border-right-color'],\n '-y': ['border-top-color', 'border-bottom-color']\n });\n\n return standardRules + borderRules;\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\nexport class SpaceHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) &&\n (this.containsKeyword(token.id, 'padding') ||\n this.containsKeyword(token.id, 'margin') ||\n this.containsKeyword(token.id, 'width') ||\n this.containsKeyword(token.id, 'height') ||\n this.containsKeyword(token.id, 'gap') ||\n this.containsKeyword(token.id, 'space') ||\n // Shorthand prefixes (simplified check)\n /^[pmwh]([xytrbl]|in|ax)?-?/.test(token.id) ||\n /^gap-?/.test(token.id) ||\n /^space-?/.test(token.id));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) return '';\n\n // Handle space-between special cases (complex value transforms)\n if (token.id.startsWith('space-x')) {\n return this.createRule(`space-x-${this.extractValueSuffix(token.id)}`, 'margin-left', `calc(${varName} * var(--tw-space-x-reverse))`);\n }\n if (token.id.startsWith('space-y')) {\n return this.createRule(`space-y-${this.extractValueSuffix(token.id)}`, 'margin-top', `calc(${varName} * var(--tw-space-y-reverse))`);\n }\n\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Padding\n 'pt': 'padding-top',\n 'pr': 'padding-right',\n 'pb': 'padding-bottom',\n 'pl': 'padding-left',\n 'px': ['padding-left', 'padding-right'],\n 'py': ['padding-top', 'padding-bottom'],\n 'p': 'padding',\n\n // Margin\n 'mt': 'margin-top',\n 'mr': 'margin-right',\n 'mb': 'margin-bottom',\n 'ml': 'margin-left',\n 'mx': ['margin-left', 'margin-right'],\n 'my': ['margin-top', 'margin-bottom'],\n 'm': 'margin',\n\n // Width/Height\n 'min-w': 'min-width',\n 'max-w': 'max-width',\n 'min-h': 'min-height',\n 'max-h': 'max-height',\n 'w': 'width',\n 'h': 'height',\n\n // Gap\n 'gap-x': 'column-gap',\n 'gap-y': 'row-gap',\n 'gap': 'gap',\n });\n }\n\n /**\n * Helper to extract the value part of the suffix for space-x/y\n * e.g. space-x-4 -> 4\n */\n private extractValueSuffix(id: string): string {\n const parts = id.split('-');\n return parts.slice(2).join('-');\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\nexport class TypographyHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && token.domain === 'typography';\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n \n // Use generateRulesFromPrefix for cleaner mapping\n // Ensure suffix is the full class name (e.g. text-xl from text.xl)\n const fullSuffix = token.id.replace(/\\./g, '-');\n \n const rules = this.generateRulesFromPrefix(token, varName, fullSuffix, {\n // Font Weight\n 'font-thin': { property: 'font-weight' },\n 'font-extralight': { property: 'font-weight' },\n 'font-light': { property: 'font-weight' },\n 'font-normal': { property: 'font-weight' },\n 'font-medium': { property: 'font-weight' },\n 'font-semibold': { property: 'font-weight' },\n 'font-bold': { property: 'font-weight' },\n 'font-extrabold': { property: 'font-weight' },\n 'font-black': { property: 'font-weight' },\n \n // Font Family\n 'font-sans': { property: 'font-family' },\n 'font-serif': { property: 'font-family' },\n 'font-mono': { property: 'font-family' },\n \n // Font Size\n 'text': { property: 'font-size' },\n \n // Line Height\n 'leading': { property: 'line-height' },\n \n // Letter Spacing\n 'tracking': { property: 'letter-spacing' },\n \n // Font Style\n 'italic': { property: 'font-style', valueTransform: () => 'italic' },\n 'not-italic': { property: 'font-style', valueTransform: () => 'normal' },\n \n // Text Decoration\n 'underline': { property: 'text-decoration-line', valueTransform: () => 'underline' },\n 'no-underline': { property: 'text-decoration-line', valueTransform: () => 'none' },\n 'line-through': { property: 'text-decoration-line', valueTransform: () => 'line-through' },\n 'decoration': { property: 'text-decoration-line' },\n \n // Text Transform\n 'uppercase': { property: 'text-transform', valueTransform: () => 'uppercase' },\n 'lowercase': { property: 'text-transform', valueTransform: () => 'lowercase' },\n 'capitalize': { property: 'text-transform', valueTransform: () => 'capitalize' },\n 'normal-case': { property: 'text-transform', valueTransform: () => 'none' },\n });\n\n if (rules) return rules;\n\n // Fallback for cases not covered by strict prefixes (if any)\n return '';\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\nexport class EffectHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) &&\n (this.containsKeyword(token.id, 'shadow') ||\n this.containsKeyword(token.id, 'opacity'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n if (this.containsKeyword(token.id, 'drop-shadow')) return ''; // Handled by FilterHandler\n\n return this.generateRulesFromPrefix(token, varName, suffix, {\n 'shadow': 'box-shadow',\n 'opacity': 'opacity'\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * LayoutHandler\n * Handles layout-related CSS properties:\n * - display, position, visibility, z-index\n * - overflow, isolation\n * - object-fit, object-position\n * - inset (top, right, bottom, left)\n */\nexport class LayoutHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n if (this.containsKeyword(token.id, 'background')) return false; // Delegate to BackgroundHandler\n \n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'display') ||\n this.containsKeyword(token.id, 'position') ||\n this.containsKeyword(token.id, 'visibility') ||\n this.containsKeyword(token.id, 'z-index') ||\n this.containsKeyword(token.id, 'overflow') ||\n this.containsKeyword(token.id, 'isolation') ||\n this.containsKeyword(token.id, 'object') ||\n // Positioning\n this.containsKeyword(token.id, 'inset') ||\n this.containsKeyword(token.id, 'top') ||\n this.containsKeyword(token.id, 'right') ||\n this.containsKeyword(token.id, 'bottom') ||\n this.containsKeyword(token.id, 'left') ||\n // Specific values for display/position/visibility\n this.containsKeyword(token.id, 'block') ||\n this.containsKeyword(token.id, 'inline') ||\n this.containsKeyword(token.id, 'hidden') ||\n this.containsKeyword(token.id, 'static') ||\n this.containsKeyword(token.id, 'fixed') ||\n this.containsKeyword(token.id, 'absolute') ||\n this.containsKeyword(token.id, 'relative') ||\n this.containsKeyword(token.id, 'sticky') ||\n this.containsKeyword(token.id, 'visible') ||\n this.containsKeyword(token.id, 'invisible') ||\n this.containsKeyword(token.id, 'isolate') ||\n this.containsKeyword(token.id, 'z-'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Positioning Utilities (Scenario B)\n // Use generateRulesFromPrefix for precise matching\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Positioning\n 'inset-x': ['left', 'right'],\n 'inset-y': ['top', 'bottom'],\n 'inset': ['top', 'right', 'bottom', 'left'],\n 'top': 'top',\n 'right': 'right',\n 'bottom': 'bottom',\n 'left': 'left',\n\n // Display\n 'block': { property: 'display', valueTransform: () => 'block' },\n 'inline-block': { property: 'display', valueTransform: () => 'inline-block' },\n 'inline-flex': { property: 'display', valueTransform: () => 'inline-flex' },\n 'flex': { property: 'display', valueTransform: () => 'flex' },\n 'inline-grid': { property: 'display', valueTransform: () => 'inline-grid' },\n 'grid': { property: 'display', valueTransform: () => 'grid' },\n 'hidden': { property: 'display', valueTransform: () => 'none' },\n 'display': { property: 'display' },\n\n // Position\n 'static': { property: 'position', valueTransform: () => 'static' },\n 'fixed': { property: 'position', valueTransform: () => 'fixed' },\n 'absolute': { property: 'position', valueTransform: () => 'absolute' },\n 'relative': { property: 'position', valueTransform: () => 'relative' },\n 'sticky': { property: 'position', valueTransform: () => 'sticky' },\n 'position': { property: 'position' },\n\n // Visibility\n 'visible': { property: 'visibility', valueTransform: () => 'visible' },\n 'invisible': { property: 'visibility', valueTransform: () => 'hidden' },\n 'visibility': { property: 'visibility' },\n\n // Z-Index\n 'z': 'z-index',\n 'z-index': 'z-index',\n\n // Overflow\n 'overflow-x': 'overflow-x',\n 'overflow-y': 'overflow-y',\n 'overflow': 'overflow',\n\n // Isolation\n 'isolate': { property: 'isolation', valueTransform: () => 'isolate' },\n 'isolation-auto': { property: 'isolation', valueTransform: () => 'auto' },\n 'isolation': 'isolation',\n\n // Object Fit\n 'object-contain': { property: 'object-fit', valueTransform: () => 'contain' },\n 'object-cover': { property: 'object-fit', valueTransform: () => 'cover' },\n 'object-fill': { property: 'object-fit', valueTransform: () => 'fill' },\n 'object-none': { property: 'object-fit', valueTransform: () => 'none' },\n 'object-scale-down': { property: 'object-fit', valueTransform: () => 'scale-down' },\n \n // Object Position (fallback for other object-*)\n 'object': { property: 'object-position' }\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * FlexboxHandler\n * Handles Flexbox-related CSS properties:\n * - flex, flex-direction, flex-wrap, flex-grow, flex-shrink, flex-basis\n * - justify-content, justify-items, justify-self\n * - align-content, align-items, align-self\n * - order\n */\nexport class FlexboxHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'flex') ||\n this.containsKeyword(token.id, 'justify') ||\n this.containsKeyword(token.id, 'align') ||\n this.containsKeyword(token.id, 'place') ||\n (this.containsKeyword(token.id, 'order') && !this.containsKeyword(token.id, 'border')));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Special case: 'flex' token -> display: flex\n if (token.id === 'flex') {\n return this.createRule(suffix, 'display', 'flex');\n }\n\n // Use generateRulesFromPrefix for precise matching (longest prefix wins)\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Flex Direction\n 'flex-row': { property: 'flex-direction', valueTransform: () => 'row' },\n 'flex-row-reverse': { property: 'flex-direction', valueTransform: () => 'row-reverse' },\n 'flex-col': { property: 'flex-direction', valueTransform: () => 'column' },\n 'flex-col-reverse': { property: 'flex-direction', valueTransform: () => 'column-reverse' },\n \n // Flex Wrap\n 'flex-wrap': { property: 'flex-wrap', valueTransform: () => 'wrap' },\n 'flex-wrap-reverse': { property: 'flex-wrap', valueTransform: () => 'wrap-reverse' },\n 'flex-nowrap': { property: 'flex-wrap', valueTransform: () => 'nowrap' },\n\n // Flex Grow/Shrink/Basis\n 'flex-grow': 'flex-grow',\n 'grow': 'flex-grow', // Alias\n 'flex-shrink': 'flex-shrink',\n 'shrink': 'flex-shrink', // Alias\n 'flex-basis': 'flex-basis',\n 'basis': 'flex-basis', // Alias\n \n // Alignment\n 'justify-content': 'justify-content',\n 'justify-items': 'justify-items',\n 'justify-self': 'justify-self',\n 'justify': 'justify-content', // Short alias\n\n 'align-content': 'align-content',\n 'align-items': 'align-items',\n 'align-self': 'align-self',\n 'align': 'align-items', // Short alias\n 'items': 'align-items', // Tailwind alias\n 'content': 'align-content', // Tailwind alias\n 'self': 'align-self', // Tailwind alias\n\n 'place-content': 'place-content',\n 'place-items': 'place-items',\n 'place-self': 'place-self',\n\n 'order': 'order',\n \n // Generic Flex (e.g. flex-1, flex-auto)\n // Must be checked after specific flex-* properties (handled by length sort in generateRulesFromPrefix)\n 'flex': 'flex'\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * GridHandler\n * Handles Grid-related CSS properties:\n * - grid-template-columns, grid-template-rows\n * - grid-column, grid-row\n * - grid-auto-flow, grid-auto-columns, grid-auto-rows\n * - gap is handled in FlexboxHandler (or shared) but usually Grid also uses gap.\n * (Note: The previous implementation didn't strictly separate them, but FlexboxHandler handles gap for both usually in Tailwind)\n */\nexport class GridHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n // Prevent handling flexbox tokens that happen to have 'row' or 'col' in them\n if (token.id.startsWith('flex-')) {\n return false;\n }\n\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'grid') ||\n (this.containsKeyword(token.id, 'col') && !this.containsKeyword(token.id, 'color') && !this.containsKeyword(token.id, 'collapse')) ||\n this.containsKeyword(token.id, 'row'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Use generateRulesFromPrefix for cleaner handling\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Grid Template\n 'grid-cols': 'grid-template-columns',\n 'grid-rows': 'grid-template-rows',\n 'grid-template-columns': 'grid-template-columns',\n 'grid-template-rows': 'grid-template-rows',\n \n // Auto Flow/Cols/Rows\n 'grid-flow': 'grid-auto-flow',\n 'auto-cols': 'grid-auto-columns',\n 'auto-rows': 'grid-auto-rows',\n 'grid-auto-flow': 'grid-auto-flow',\n 'grid-auto-columns': 'grid-auto-columns',\n 'grid-auto-rows': 'grid-auto-rows',\n\n // Grid Column\n 'col-start': 'grid-column-start',\n 'col-end': 'grid-column-end',\n 'col': 'grid-column', // Fallback for col-span-* or generic col-*\n \n // Grid Row\n 'row-start': 'grid-row-start',\n 'row-end': 'grid-row-end',\n 'row': 'grid-row',\n\n // Display Grid\n 'grid': { property: 'display', valueTransform: () => 'grid' }\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * BackgroundHandler\n * Handles Background-related CSS properties:\n * - background-attachment, background-clip, background-color\n * - background-image, background-origin, background-position\n * - background-repeat, background-size\n */\nexport class BackgroundHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n if (token.domain === 'color') {\n return false;\n }\n \n // Exclude effect domain if it looks like a transform/filter/transition\n // But bg-cover IS in effect domain in the test data.\n // So we should be careful.\n \n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'background') ||\n this.containsKeyword(token.id, 'bg') ||\n this.containsKeyword(token.id, 'gradient'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Background Size\n 'bg-cover': { property: 'background-size', valueTransform: () => 'cover' },\n 'bg-contain': { property: 'background-size', valueTransform: () => 'contain' },\n 'background-size': { property: 'background-size' },\n\n // Background Position\n 'bg-top': { property: 'background-position', valueTransform: () => 'top' },\n 'bg-bottom': { property: 'background-position', valueTransform: () => 'bottom' },\n 'bg-center': { property: 'background-position', valueTransform: () => 'center' },\n 'bg-left': { property: 'background-position', valueTransform: () => 'left' },\n 'bg-right': { property: 'background-position', valueTransform: () => 'right' },\n 'background-position': { property: 'background-position' },\n\n // Background Repeat\n 'bg-no-repeat': { property: 'background-repeat', valueTransform: () => 'no-repeat' },\n 'bg-repeat-x': { property: 'background-repeat', valueTransform: () => 'repeat-x' },\n 'bg-repeat-y': { property: 'background-repeat', valueTransform: () => 'repeat-y' },\n 'bg-repeat': { property: 'background-repeat', valueTransform: () => 'repeat' },\n 'background-repeat': { property: 'background-repeat' },\n\n // Background Attachment\n 'bg-fixed': { property: 'background-attachment', valueTransform: () => 'fixed' },\n 'bg-local': { property: 'background-attachment', valueTransform: () => 'local' },\n 'bg-scroll': { property: 'background-attachment', valueTransform: () => 'scroll' },\n 'background-attachment': { property: 'background-attachment' },\n\n // Background Clip\n 'bg-clip': { property: 'background-clip' },\n 'background-clip': { property: 'background-clip' },\n\n // Background Origin\n 'bg-origin': { property: 'background-origin' },\n 'background-origin': { property: 'background-origin' },\n\n // Background Image / Gradient\n 'bg-gradient': { property: 'background-image' },\n 'gradient': { property: 'background-image' },\n 'background-image': { property: 'background-image' },\n \n // Generic fallback for other bg- properties (e.g. background-image)\n // Note: background-color is handled by ColorHandler\n 'bg': { property: 'background-image' },\n 'background-color': { property: 'background-color' }\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\nexport class BorderHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n if (!this.validateToken(token)) return false;\n\n // Specific check for color domain to avoid claiming all colors\n if (token.domain === 'color') {\n return this.containsKeyword(token.id, 'border') ||\n this.containsKeyword(token.id, 'outline') ||\n this.containsKeyword(token.id, 'ring');\n }\n\n // Check for border-related keywords\n // We explicitly exclude 'collapse' because that's handled by TableHandler\n // We explicitly exclude 'bg'/'background' to avoid claiming background tokens that might be misclassified\n if (this.containsKeyword(token.id, 'background') || this.containsKeyword(token.id, 'bg')) {\n return false;\n }\n\n return (this.containsKeyword(token.id, 'border') && !this.containsKeyword(token.id, 'collapse')) ||\n this.containsKeyword(token.id, 'radius') ||\n this.containsKeyword(token.id, 'outline') ||\n this.containsKeyword(token.id, 'ring');\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Radius Utilities (Scenario A: Generic token 'radius' -> Specific 'rounded-*')\n // We check for 'radius' keyword and generate 'rounded-*' classes\n if (this.containsKeyword(token.id, 'border-radius') || this.containsKeyword(token.id, 'radius')) {\n return this.generateDirectionalRules('rounded', suffix, varName, {\n '': 'border-radius',\n 't': ['border-top-left-radius', 'border-top-right-radius'],\n 'r': ['border-top-right-radius', 'border-bottom-right-radius'],\n 'b': ['border-bottom-right-radius', 'border-bottom-left-radius'],\n 'l': ['border-bottom-left-radius', 'border-top-left-radius'],\n 'tl': 'border-top-left-radius',\n 'tr': 'border-top-right-radius',\n 'br': 'border-bottom-right-radius',\n 'bl': 'border-bottom-left-radius'\n });\n }\n\n // Border Width Utilities (Scenario B: Specific token 'border-t-2' -> 'border-top-width')\n // Ensure we don't process colors as widths (e.g. border-blue-500)\n if (token.domain !== 'color') {\n const widthRules = this.generateRulesFromPrefix(token, varName, suffix, {\n 'border-t': 'border-top-width',\n 'border-r': 'border-right-width',\n 'border-b': 'border-bottom-width',\n 'border-l': 'border-left-width',\n 'border-x': ['border-left-width', 'border-right-width'],\n 'border-y': ['border-top-width', 'border-bottom-width'],\n 'border': 'border-width' // Generic border width\n });\n if (widthRules) return widthRules;\n }\n\n // Border Color Utilities\n if (token.domain === 'color' && this.containsKeyword(token.id, 'border')) {\n return this.generateRulesFromPrefix(token, varName, suffix, {\n 'border-t': 'border-top-color',\n 'border-r': 'border-right-color',\n 'border-b': 'border-bottom-color',\n 'border-l': 'border-left-color',\n 'border-x': ['border-left-color', 'border-right-color'],\n 'border-y': ['border-top-color', 'border-bottom-color'],\n 'border': 'border-color'\n });\n }\n\n // Standard utilities\n // Border Style\n if (this.containsKeyword(token.id, 'border-style')) {\n const value = this.extractSuffix(token.id);\n return this.createRule(`border-${value}`, 'border-style', value);\n }\n\n // Outline\n if (this.containsKeyword(token.id, 'outline')) {\n const value = this.extractSuffix(token.id);\n if (this.containsKeyword(token.id, 'width')) {\n return this.createRule(`outline-${value}`, 'outline-width', varName);\n }\n if (this.containsKeyword(token.id, 'color')) {\n return this.createRule(`outline-${value}`, 'outline-color', varName);\n }\n if (this.containsKeyword(token.id, 'style')) {\n return this.createRule(`outline-${value}`, 'outline-style', varName);\n }\n if (this.containsKeyword(token.id, 'offset')) {\n return this.createRule(`outline-offset-${value}`, 'outline-offset', varName);\n }\n }\n\n // Ring\n if (this.containsKeyword(token.id, 'ring')) {\n // Use generateRulesFromPrefix for ring to handle ring-* classes\n // Assuming ring tokens are like 'ring.2' -> ring-2\n const fullSuffix = token.id.replace(/\\./g, '-');\n return this.generateRulesFromPrefix(token, varName, fullSuffix, {\n 'ring': { property: 'box-shadow' }\n });\n }\n\n return '';\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * TransformHandler\n * Handles Transform-related CSS properties\n */\nexport class TransformHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'transform') ||\n this.containsKeyword(token.id, 'scale') ||\n this.containsKeyword(token.id, 'rotate') ||\n this.containsKeyword(token.id, 'translate') ||\n this.containsKeyword(token.id, 'skew') ||\n this.containsKeyword(token.id, 'perspective') ||\n this.containsKeyword(token.id, 'origin'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n \n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Scale\n 'scale-x': { property: 'transform', valueTransform: (v) => `scaleX(${v})` },\n 'scale-y': { property: 'transform', valueTransform: (v) => `scaleY(${v})` },\n 'scale': { property: 'transform', valueTransform: (v) => `scale(${v})` },\n \n // Rotate\n 'rotate': { property: 'transform', valueTransform: (v) => `rotate(${v})` },\n\n // Translate\n 'translate-x': { property: 'transform', valueTransform: (v) => `translateX(${v})` },\n 'translate-y': { property: 'transform', valueTransform: (v) => `translateY(${v})` },\n\n // Skew\n 'skew-x': { property: 'transform', valueTransform: (v) => `skewX(${v})` },\n 'skew-y': { property: 'transform', valueTransform: (v) => `skewY(${v})` },\n\n // Origin\n 'origin-center': { property: 'transform-origin', valueTransform: () => 'center' },\n 'origin-top': { property: 'transform-origin', valueTransform: () => 'top' },\n 'origin-top-right': { property: 'transform-origin', valueTransform: () => 'top right' },\n 'origin-right': { property: 'transform-origin', valueTransform: () => 'right' },\n 'origin-bottom-right': { property: 'transform-origin', valueTransform: () => 'bottom right' },\n 'origin-bottom': { property: 'transform-origin', valueTransform: () => 'bottom' },\n 'origin-bottom-left': { property: 'transform-origin', valueTransform: () => 'bottom left' },\n 'origin-left': { property: 'transform-origin', valueTransform: () => 'left' },\n 'origin-top-left': { property: 'transform-origin', valueTransform: () => 'top left' },\n \n // Generic Origin (for arbitrary values)\n 'origin': 'transform-origin',\n\n // Perspective\n 'perspective': 'perspective',\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * TransitionHandler\n * Handles Transition & Animation-related CSS properties\n */\nexport class TransitionHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'transition') ||\n this.containsKeyword(token.id, 'animation') ||\n this.containsKeyword(token.id, 'animate') ||\n this.containsKeyword(token.id, 'duration') ||\n this.containsKeyword(token.id, 'delay') ||\n this.containsKeyword(token.id, 'ease'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Transition Property\n 'transition-none': { property: 'transition-property', valueTransform: () => 'none' },\n 'transition-all': { property: 'transition-property', valueTransform: () => 'all' },\n 'transition-colors': { property: 'transition-property', valueTransform: () => 'color, background-color, border-color, text-decoration-color, fill, stroke' },\n 'transition-opacity': { property: 'transition-property', valueTransform: () => 'opacity' },\n 'transition-shadow': { property: 'transition-property', valueTransform: () => 'box-shadow' },\n 'transition-transform': { property: 'transition-property', valueTransform: () => 'transform' },\n 'transition': { property: 'transition-property' },\n\n // Transition Behavior\n 'transition-normal': { property: 'transition-behavior', valueTransform: () => 'normal' },\n 'transition-allow-discrete': { property: 'transition-behavior', valueTransform: () => 'allow-discrete' },\n\n // Duration\n 'duration': 'transition-duration',\n 'transition-duration': 'transition-duration',\n\n // Timing Function (Ease)\n 'ease-linear': { property: 'transition-timing-function', valueTransform: () => 'linear' },\n 'ease-in': { property: 'transition-timing-function', valueTransform: () => 'cubic-bezier(0.4, 0, 1, 1)' },\n 'ease-out': { property: 'transition-timing-function', valueTransform: () => 'cubic-bezier(0, 0, 0.2, 1)' },\n 'ease-in-out': { property: 'transition-timing-function', valueTransform: () => 'cubic-bezier(0.4, 0, 0.2, 1)' },\n 'ease': 'transition-timing-function',\n\n // Delay\n 'delay': 'transition-delay',\n 'transition-delay': 'transition-delay',\n\n // Animation\n 'animate-none': { property: 'animation', valueTransform: () => 'none' },\n 'animate-spin': { property: 'animation', valueTransform: () => 'spin 1s linear infinite' },\n 'animate-ping': { property: 'animation', valueTransform: () => 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite' },\n 'animate-pulse': { property: 'animation', valueTransform: () => 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite' },\n 'animate-bounce': { property: 'animation', valueTransform: () => 'bounce 1s infinite' },\n 'animate': 'animation',\n 'animation': 'animation'\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * InteractivityHandler\n * Handles Interactivity-related CSS properties\n */\nexport class InteractivityHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'cursor') ||\n this.containsKeyword(token.id, 'pointer') ||\n this.containsKeyword(token.id, 'select') ||\n this.containsKeyword(token.id, 'scroll') ||\n this.containsKeyword(token.id, 'touch') ||\n this.containsKeyword(token.id, 'accent') ||\n this.containsKeyword(token.id, 'appearance') ||\n this.containsKeyword(token.id, 'caret') ||\n this.containsKeyword(token.id, 'resize') ||\n this.containsKeyword(token.id, 'will-change'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Use generateRulesFromPrefix for cleaner handling\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Scroll Margin\n 'scroll-m': 'scroll-margin',\n 'scroll-mx': 'scroll-margin-inline',\n 'scroll-my': 'scroll-margin-block',\n 'scroll-mt': 'scroll-margin-top',\n 'scroll-mr': 'scroll-margin-right',\n 'scroll-mb': 'scroll-margin-bottom',\n 'scroll-ml': 'scroll-margin-left',\n \n // Scroll Padding\n 'scroll-p': 'scroll-padding',\n 'scroll-px': 'scroll-padding-inline',\n 'scroll-py': 'scroll-padding-block',\n 'scroll-pt': 'scroll-padding-top',\n 'scroll-pr': 'scroll-padding-right',\n 'scroll-pb': 'scroll-padding-bottom',\n 'scroll-pl': 'scroll-padding-left',\n \n // Resize\n 'resize-none': { property: 'resize', valueTransform: () => 'none' },\n 'resize-y': { property: 'resize', valueTransform: () => 'vertical' },\n 'resize-x': { property: 'resize', valueTransform: () => 'horizontal' },\n 'resize': { property: 'resize', valueTransform: () => 'both' }, // Default resize\n\n // Accent\n 'accent': 'accent-color',\n\n // Appearance\n 'appearance': 'appearance',\n\n // Caret\n 'caret': 'caret-color',\n\n // Cursor\n 'cursor': 'cursor',\n\n // Pointer Events\n 'pointer-events': 'pointer-events',\n\n // Scroll Behavior\n 'scroll-auto': { property: 'scroll-behavior', valueTransform: () => 'auto' },\n 'scroll-smooth': { property: 'scroll-behavior', valueTransform: () => 'smooth' },\n\n // Scroll Snap\n 'snap-start': { property: 'scroll-snap-align', valueTransform: () => 'start' },\n 'snap-end': { property: 'scroll-snap-align', valueTransform: () => 'end' },\n 'snap-center': { property: 'scroll-snap-align', valueTransform: () => 'center' },\n 'snap-align-none': { property: 'scroll-snap-align', valueTransform: () => 'none' },\n \n 'snap-normal': { property: 'scroll-snap-stop', valueTransform: () => 'normal' },\n 'snap-always': { property: 'scroll-snap-stop', valueTransform: () => 'always' },\n \n 'snap-none': { property: 'scroll-snap-type', valueTransform: () => 'none' },\n 'snap-x': { property: 'scroll-snap-type', valueTransform: () => 'x var(--scroll-snap-strictness)' },\n 'snap-y': { property: 'scroll-snap-type', valueTransform: () => 'y var(--scroll-snap-strictness)' },\n 'snap-both': { property: 'scroll-snap-type', valueTransform: () => 'both var(--scroll-snap-strictness)' },\n 'snap-mandatory': { property: '--scroll-snap-strictness', valueTransform: () => 'mandatory' },\n 'snap-proximity': { property: '--scroll-snap-strictness', valueTransform: () => 'proximity' },\n\n // Touch Action\n 'touch': 'touch-action',\n\n // User Select\n 'select': 'user-select',\n\n // Will Change\n 'will-change': 'will-change'\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * TableHandler\n * Handles Table-related CSS properties\n */\nexport class TableHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'table') ||\n this.containsKeyword(token.id, 'border-collapse') ||\n this.containsKeyword(token.id, 'border-separate') || // Added explicit check\n this.containsKeyword(token.id, 'border-spacing') ||\n this.containsKeyword(token.id, 'caption'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n \n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Border Collapse\n 'border-collapse': { property: 'border-collapse', valueTransform: () => 'collapse' },\n 'border-separate': { property: 'border-collapse', valueTransform: () => 'separate' },\n \n // Border Spacing\n 'border-spacing-x': { property: 'border-spacing' },\n 'border-spacing-y': { property: 'border-spacing' },\n 'border-spacing': { property: 'border-spacing' },\n\n // Table Layout\n 'table-auto': { property: 'table-layout', valueTransform: () => 'auto' },\n 'table-fixed': { property: 'table-layout', valueTransform: () => 'fixed' },\n \n // Caption Side\n 'caption-top': { property: 'caption-side', valueTransform: () => 'top' },\n 'caption-bottom': { property: 'caption-side', valueTransform: () => 'bottom' },\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * SVGHandler\n * Handles SVG-related CSS properties\n */\nexport class SVGHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'fill') ||\n this.containsKeyword(token.id, 'stroke'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Use generateRulesFromPrefix for precise matching\n return this.generateRulesFromPrefix(token, varName, suffix, {\n 'stroke-width': { property: 'stroke-width' },\n 'stroke': { property: 'stroke' },\n 'fill': { property: 'fill' }\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * AccessibilityHandler\n * Handles Accessibility-related CSS properties:\n * - forced-color-adjust\n * - screen reader utilities (sr-only, not-sr-only)\n * - focus-visible, focus-within\n */\nexport class AccessibilityHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'forced-color') ||\n this.containsKeyword(token.id, 'accessibility') ||\n this.containsKeyword(token.id, 'a11y') ||\n this.containsKeyword(token.id, 'sr-only') ||\n this.containsKeyword(token.id, 'focus-visible') ||\n this.containsKeyword(token.id, 'focus-within'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Use full token ID as suffix (replacing dots with hyphens) for class generation\n const fullSuffix = token.id.replace(/\\./g, '-');\n\n // Standard utilities\n const standardOutput = this.generateRulesFromPrefix(token, varName, fullSuffix, {\n 'forced-color-adjust': { property: 'forced-color-adjust' },\n 'focus-visible': { property: 'outline', valueTransform: () => '2px solid var(--color-primary)' }, \n 'focus-within': { property: 'outline', valueTransform: () => '2px solid var(--color-primary)' }\n });\n\n if (standardOutput) return standardOutput;\n\n // Screen reader only utilities (Complex properties)\n if (this.containsKeyword(token.id, 'sr-only')) {\n if (token.id === 'not-sr-only' || suffix === 'not-sr-only') {\n return this.createRule('not-sr-only', 'position', 'static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal');\n }\n return this.createRule('sr-only', 'position', 'absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0');\n }\n\n // Handle specific not-sr-only if checking id\n if (this.containsKeyword(token.id, 'not-sr-only')) {\n return this.createRule('not-sr-only', 'position', 'static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal');\n }\n\n return '';\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * FilterHandler\n * Handles Filter-related CSS properties:\n * - filter (blur, brightness, contrast, drop-shadow, grayscale, hue-rotate, invert, saturate, sepia)\n * - backdrop-filter (blur, brightness, contrast, grayscale, hue-rotate, invert, opacity, saturate, sepia)\n */\nexport class FilterHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'filter') ||\n this.containsKeyword(token.id, 'blur') ||\n this.containsKeyword(token.id, 'brightness') ||\n this.containsKeyword(token.id, 'contrast') ||\n this.containsKeyword(token.id, 'drop-shadow') ||\n this.containsKeyword(token.id, 'grayscale') ||\n this.containsKeyword(token.id, 'hue-rotate') ||\n this.containsKeyword(token.id, 'invert') ||\n this.containsKeyword(token.id, 'saturate') ||\n this.containsKeyword(token.id, 'sepia') ||\n this.containsKeyword(token.id, 'backdrop'));\n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Unified handling using generateRulesFromPrefix\n // It automatically handles longest match (backdrop-blur vs blur)\n return this.generateRulesFromPrefix(token, varName, suffix, {\n // Backdrop Filter\n 'backdrop-blur': { property: 'backdrop-filter', valueTransform: (v) => `blur(${v})` },\n 'backdrop-brightness': { property: 'backdrop-filter', valueTransform: (v) => `brightness(${v})` },\n 'backdrop-contrast': { property: 'backdrop-filter', valueTransform: (v) => `contrast(${v})` },\n 'backdrop-grayscale': { property: 'backdrop-filter', valueTransform: (v) => `grayscale(${v})` },\n 'backdrop-hue-rotate': { property: 'backdrop-filter', valueTransform: (v) => `hue-rotate(${v})` },\n 'backdrop-invert': { property: 'backdrop-filter', valueTransform: (v) => `invert(${v})` },\n 'backdrop-opacity': { property: 'backdrop-filter', valueTransform: (v) => `opacity(${v})` },\n 'backdrop-saturate': { property: 'backdrop-filter', valueTransform: (v) => `saturate(${v})` },\n 'backdrop-sepia': { property: 'backdrop-filter', valueTransform: (v) => `sepia(${v})` },\n\n // Filter\n 'blur': { property: 'filter', valueTransform: (v) => `blur(${v})` },\n 'brightness': { property: 'filter', valueTransform: (v) => `brightness(${v})` },\n 'contrast': { property: 'filter', valueTransform: (v) => `contrast(${v})` },\n 'drop-shadow': { property: 'filter', valueTransform: (v) => `drop-shadow(${v})` },\n 'grayscale': { property: 'filter', valueTransform: (v) => `grayscale(${v})` },\n 'hue-rotate': { property: 'filter', valueTransform: (v) => `hue-rotate(${v})` },\n 'invert': { property: 'filter', valueTransform: (v) => `invert(${v})` },\n 'saturate': { property: 'filter', valueTransform: (v) => `saturate(${v})` },\n 'sepia': { property: 'filter', valueTransform: (v) => `sepia(${v})` },\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { BaseHandler } from './BaseHandler';\n\n/**\n * ContainerHandler\n * Handles CSS Container Queries properties:\n * - container-type (size, inline-size, normal)\n * - container-name\n */\nexport class ContainerHandler extends BaseHandler {\n canHandle(token: Token): boolean {\n return this.validateToken(token) && \n (this.containsKeyword(token.id, 'container.type') ||\n this.containsKeyword(token.id, 'container.name') ||\n this.containsKeyword(token.id, 'container-type') ||\n this.containsKeyword(token.id, 'container-name') ||\n // Explicitly handle 'container' keyword if it's related to queries\n (this.containsKeyword(token.id, 'container') && !this.containsKeyword(token.id, 'width'))); \n }\n\n generate(token: Token, varName: string, suffix: string): string {\n if (!this.validateToken(token)) {\n return '';\n }\n\n // Prioritize specific properties to avoid 'container' keyword overlap\n if (this.containsKeyword(token.id, 'container.type') || this.containsKeyword(token.id, 'container-type')) {\n return this.generateUtilities(token, varName, suffix, {\n 'container.type': { property: 'container-type', classPrefix: 'container-type' },\n 'container-type': 'container-type'\n });\n }\n\n if (this.containsKeyword(token.id, 'container.name') || this.containsKeyword(token.id, 'container-name')) {\n return this.generateUtilities(token, varName, suffix, {\n 'container.name': { property: 'container-name', classPrefix: 'container-name' },\n 'container-name': 'container-name'\n });\n }\n\n // Handle shortcuts\n // Use 'container-type' as prefix for @container shortcut to match expected output\n return this.generateUtilities(token, varName, suffix, {\n '@container': { property: 'container-type', classPrefix: 'container-type', valueTransform: () => 'inline-size' },\n // Only match 'container' if it's not one of the above (already handled by if-blocks)\n 'container': { property: 'container-type', valueTransform: (val) => val === 'normal' ? 'normal' : 'inline-size' }\n });\n }\n}\n","import { Token } from '../../../domain';\nimport { GeneratorContext, TokenHandler } from '../types';\nimport { VariantGenerator } from './VariantGenerator';\nimport { ColorHandler } from '../handlers/ColorHandler';\nimport { SpaceHandler } from '../handlers/SpaceHandler';\nimport { TypographyHandler } from '../handlers/TypographyHandler';\nimport { EffectHandler } from '../handlers/EffectHandler';\nimport { LayoutHandler } from '../handlers/LayoutHandler';\nimport { FlexboxHandler } from '../handlers/FlexboxHandler';\nimport { GridHandler } from '../handlers/GridHandler';\nimport { BackgroundHandler } from '../handlers/BackgroundHandler';\nimport { BorderHandler } from '../handlers/BorderHandler';\nimport { TransformHandler } from '../handlers/TransformHandler';\nimport { TransitionHandler } from '../handlers/TransitionHandler';\nimport { InteractivityHandler } from '../handlers/InteractivityHandler';\nimport { TableHandler } from '../handlers/TableHandler';\nimport { SVGHandler } from '../handlers/SVGHandler';\nimport { AccessibilityHandler } from '../handlers/AccessibilityHandler';\nimport { FilterHandler } from '../handlers/FilterHandler';\nimport { ContainerHandler } from '../handlers/ContainerHandler';\nimport {\n formatVarName,\n formatSuffix,\n createVarReference,\n createLayer,\n isValidToken,\n filterValidTokens\n} from '../../shared/utils';\n\n/**\n * Handles the generation of Utility classes (Utilities layer).\n * Uses Strategy Pattern to delegate generation to specific handlers.\n */\nexport class UtilityGenerator {\n private handlers: TokenHandler[];\n private variantGenerator: VariantGenerator;\n\n constructor() {\n this.variantGenerator = new VariantGenerator();\n // Register handlers here. Order matters if domains overlap.\n // Specific handlers (Flexbox, Grid) should come before generic LayoutHandler\n this.handlers = [\n new FlexboxHandler(),\n new GridHandler(),\n new LayoutHandler(),\n new SVGHandler(),\n new BorderHandler(),\n new TypographyHandler(),\n new BackgroundHandler(),\n new ColorHandler(),\n new SpaceHandler(),\n new EffectHandler(),\n new FilterHandler(),\n new TableHandler(),\n new TransformHandler(),\n new TransitionHandler(),\n new InteractivityHandler(),\n new AccessibilityHandler(),\n new ContainerHandler()\n ];\n }\n\n /**\n * Mini function: Get full variable name with prefix\n */\n private getFullVarName(tokenId: string, prefix: string): string {\n const varName = formatVarName(tokenId, `--${prefix}`);\n return createVarReference(varName);\n }\n\n /**\n * Mini function: Find appropriate handler for token\n */\n private findHandler(token: Token): TokenHandler | undefined {\n return this.handlers.find(h => h.canHandle(token));\n }\n\n /**\n * Mini function: Process a single token\n */\n private processToken(token: Token, context: GeneratorContext): string {\n if (!isValidToken(token)) {\n return '';\n }\n\n const handler = this.findHandler(token);\n if (!handler) {\n return '';\n }\n\n const varName = this.getFullVarName(token.id, context.prefix);\n const suffix = formatSuffix(token.id);\n\n return handler.generate(token, varName, suffix);\n }\n\n /**\n * Mini function: Collect utility classes from tokens\n */\n private collectUtilities(tokens: Record<string, Token>, context: GeneratorContext): string[] {\n const validTokens = filterValidTokens(tokens);\n const utilities: string[] = [];\n\n validTokens.forEach(token => {\n const utility = this.processToken(token, context);\n if (utility) {\n utilities.push(utility);\n \n // Generate variants if requested\n if (context.variants && context.variants.length > 0) {\n context.variants.forEach(variant => {\n const variantUtility = this.variantGenerator.applyVariant(utility, variant);\n if (variantUtility) {\n utilities.push(variantUtility);\n }\n });\n }\n }\n });\n\n return utilities;\n }\n\n /**\n * Generate CSS for all tokens\n */\n generate(tokens: Record<string, Token>, context: GeneratorContext = { prefix: 'tw', selector: ':root' }): string {\n const utilities = this.collectUtilities(tokens, context);\n return createLayer('utilities', utilities.join('\\n'));\n }\n}\n","import { Token } from '../../domain';\nimport { AtomicOptions, GeneratorContext } from './types';\nimport { BaseGenerator } from './core/BaseGenerator';\nimport { ThemeGenerator } from './core/ThemeGenerator';\nimport { UtilityGenerator } from './core/UtilityGenerator';\n\nexport class AtomicCSSGenerator {\n private baseGenerator: BaseGenerator;\n private themeGenerator: ThemeGenerator;\n private utilityGenerator: UtilityGenerator;\n\n constructor() {\n this.baseGenerator = new BaseGenerator();\n this.themeGenerator = new ThemeGenerator();\n this.utilityGenerator = new UtilityGenerator();\n }\n\n generate(tokens: Record<string, Token>, options: AtomicOptions = {}): string {\n const context = this.createContext(options);\n const includeReset = options.includeReset !== false;\n\n return this.assembleCss(tokens, context, includeReset);\n }\n\n /**\n * Mini function: Create generator context\n */\n private createContext(options: AtomicOptions): GeneratorContext {\n return {\n prefix: options.prefix || 'mase-',\n selector: options.selector || ':root',\n variants: options.variants,\n };\n }\n\n /**\n * Mini function: Assemble CSS parts\n */\n private assembleCss(\n tokens: Record<string, Token>, \n context: GeneratorContext, \n includeReset: boolean\n ): string {\n let css = '/* Generated by MASE Atomic Engine */\\n';\n css += '@layer base, theme, utilities;\\n\\n';\n\n css += this.baseGenerator.generate(includeReset);\n css += this.themeGenerator.generate(tokens, context);\n css += this.utilityGenerator.generate(tokens, context);\n\n return css;\n }\n}\n","import { Command } from 'commander';\n\nexport const watchCommand = new Command('watch')\n .description('Watch for changes and recompile')\n .argument('<contract-file>', 'Contract DSL file to watch')\n .option('--command <command>', 'Command to run on change', 'mase compile')\n .option('--debounce <ms>', 'Debounce time in ms', '300')\n .action((contractFile, options) => {\n console.log(`Watching ${contractFile}...`);\n console.log(`Command: ${options.command}`);\n console.log(`Debounce: ${options.debounce}ms`);\n // TODO: Implement watch mode logic using fs.watch or chokidar\n console.log('Watch mode started (Ctrl+C to stop)');\n });\n"],"mappings":"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","names":["import_commander","resolve","import_commander","path","path","fs","import_commander","fs","import_commander","fs","path","import_commander"]}