@ryndesign/cli 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin.cjs CHANGED
@@ -84,6 +84,9 @@ function getDefaultTokens() {
84
84
  black: { $value: "#000000" },
85
85
  gray: {
86
86
  50: { $value: "#F9FAFB" },
87
+ 100: { $value: "#F3F4F6" },
88
+ 400: { $value: "#9CA3AF" },
89
+ 800: { $value: "#1F2937" },
87
90
  900: { $value: "#111827" }
88
91
  }
89
92
  },
package/dist/bin.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/init.ts","../src/config.ts","../src/commands/generate.ts","../src/commands/validate.ts","../src/commands/preview.ts","../src/commands/add.ts","../src/commands/figma-pull.ts","../src/commands/figma-push.ts","../src/commands/figma-diff.ts","../src/commands/figma.ts","../src/commands/eject.ts","../src/bin.ts","../src/commands/main.ts"],"sourcesContent":["import { defineCommand } from 'citty';\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport fs from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { execSync } from 'node:child_process';\n\nexport default defineCommand({\n meta: {\n name: 'init',\n description: 'Initialize a new RynDesign project',\n },\n args: {\n template: {\n type: 'string',\n description: 'Template to use (minimal or full)',\n default: 'minimal',\n },\n platforms: {\n type: 'string',\n description: 'Comma-separated list of target platforms',\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(' RynDesign Init ')));\n\n const template = args.template || await p.select({\n message: 'Choose a template:',\n options: [\n { value: 'minimal', label: 'Minimal', hint: 'Basic color, spacing, typography tokens' },\n { value: 'full', label: 'Full', hint: 'Complete token set with shadows, borders, gradients' },\n ],\n }) as string;\n\n if (p.isCancel(template)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platformsInput = args.platforms || await p.multiselect({\n message: 'Select target platforms:',\n initialValues: ['react', 'swiftui'],\n options: [\n { value: 'react', label: 'React', hint: 'recommended' },\n { value: 'swiftui', label: 'SwiftUI', hint: 'recommended' },\n { value: 'vue', label: 'Vue' },\n { value: 'svelte', label: 'Svelte' },\n { value: 'rails', label: 'Rails' },\n { value: 'uikit', label: 'UIKit' },\n { value: 'compose', label: 'Jetpack Compose' },\n { value: 'android-view', label: 'Android View' },\n ],\n required: true,\n }) as string[];\n\n if (p.isCancel(platformsInput)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platforms = Array.isArray(platformsInput)\n ? platformsInput\n : (platformsInput as string).split(',').map(s => s.trim());\n\n const darkMode = await p.confirm({\n message: 'Enable dark mode support?',\n initialValue: true,\n });\n\n if (p.isCancel(darkMode)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const s = p.spinner();\n s.start('Creating project files...');\n\n const cwd = process.cwd();\n\n // Create directories\n await fs.mkdir(path.join(cwd, 'tokens'), { recursive: true });\n await fs.mkdir(path.join(cwd, 'components'), { recursive: true });\n await fs.mkdir(path.join(cwd, 'generated'), { recursive: true });\n\n // Copy template tokens\n // ESM-compatible path resolution\n const templateDir = path.resolve(\n typeof __dirname !== 'undefined'\n ? path.resolve(__dirname, '../../templates')\n : path.resolve(new URL('.', import.meta.url).pathname, '../../templates')\n );\n const templateFile = template === 'full' ? 'full.tokens.json' : 'minimal.tokens.json';\n\n try {\n const templateContent = await fs.readFile(\n path.join(templateDir, templateFile),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'tokens', 'base.tokens.json'),\n templateContent\n );\n } catch {\n // If templates not found, create a basic one inline\n await fs.writeFile(\n path.join(cwd, 'tokens', 'base.tokens.json'),\n JSON.stringify(getDefaultTokens(), null, 2)\n );\n }\n\n // Create semantic tokens\n await fs.writeFile(\n path.join(cwd, 'tokens', 'semantic.tokens.json'),\n JSON.stringify(getSemanticTokens(), null, 2)\n );\n\n // Create dark theme if enabled\n if (darkMode) {\n try {\n const darkContent = await fs.readFile(\n path.join(templateDir, 'dark.tokens.json'),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'tokens', 'dark.tokens.json'),\n darkContent\n );\n } catch {\n await fs.writeFile(\n path.join(cwd, 'tokens', 'dark.tokens.json'),\n JSON.stringify(getDarkTokens(), null, 2)\n );\n }\n }\n\n // Create config file\n const configContent = generateConfig(platforms, darkMode as boolean);\n await fs.writeFile(path.join(cwd, 'ryndesign.config.ts'), configContent);\n\n // Copy button component\n try {\n const buttonComp = await fs.readFile(\n path.join(templateDir, '../components/button.component.json'),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'components', 'button.component.json'),\n buttonComp\n );\n } catch {\n // Skip if not found\n }\n\n // Add generated/ to .gitignore\n const gitignorePath = path.join(cwd, '.gitignore');\n try {\n let gitignore = '';\n try {\n gitignore = await fs.readFile(gitignorePath, 'utf-8');\n } catch {\n // File doesn't exist yet\n }\n if (!gitignore.includes('generated/')) {\n gitignore += (gitignore.endsWith('\\n') || gitignore === '' ? '' : '\\n') + 'generated/\\n';\n await fs.writeFile(gitignorePath, gitignore);\n }\n } catch {\n // Skip if can't write .gitignore\n }\n\n // Ensure package.json exists, then add scripts and dependencies\n const pkgJsonPath = path.join(cwd, 'package.json');\n let pkg: Record<string, unknown>;\n try {\n const pkgContent = await fs.readFile(pkgJsonPath, 'utf-8');\n pkg = JSON.parse(pkgContent);\n } catch {\n // No package.json yet — create one\n const dirName = path.basename(cwd);\n pkg = {\n name: dirName,\n version: '1.0.0',\n private: true,\n type: 'module',\n };\n }\n\n if (!pkg.scripts || typeof pkg.scripts !== 'object') pkg.scripts = {};\n const scripts = pkg.scripts as Record<string, string>;\n if (!scripts['generate']) scripts['generate'] = 'ryndesign generate';\n if (!scripts['preview']) scripts['preview'] = 'ryndesign preview';\n\n // Add generator packages as devDependencies\n if (!pkg.devDependencies || typeof pkg.devDependencies !== 'object') pkg.devDependencies = {};\n const devDeps = pkg.devDependencies as Record<string, string>;\n devDeps['@ryndesign/cli'] = 'latest';\n for (const platform of platforms) {\n devDeps[`@ryndesign/generator-${platform}`] = 'latest';\n }\n\n await fs.writeFile(pkgJsonPath, JSON.stringify(pkg, null, 2) + '\\n');\n\n s.stop('Project files created!');\n\n // Install dependencies\n const installSpinner = p.spinner();\n installSpinner.start('Installing dependencies...');\n try {\n const pm = detectPackageManager(cwd);\n execSync(`${pm} install`, { cwd, stdio: 'pipe' });\n installSpinner.stop('Dependencies installed!');\n } catch {\n installSpinner.stop(pc.yellow('Could not auto-install. Run `npm install` manually.'));\n }\n\n p.note(\n [\n `${pc.green('tokens/')} - Your design tokens`,\n `${pc.green('components/')} - Component definitions`,\n `${pc.green('generated/')} - Generated output (gitignored)`,\n `${pc.green('ryndesign.config.ts')} - Configuration`,\n ].join('\\n'),\n 'Project structure'\n );\n\n p.outro(pc.green('Run `ryndesign generate` to generate your design system!'));\n },\n});\n\nfunction generateConfig(platforms: string[], darkMode: boolean): string {\n const imports: string[] = [];\n const generators: string[] = [];\n\n for (const platform of platforms) {\n const pkgName = `@ryndesign/generator-${platform}`;\n const varName = platform.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n imports.push(`import ${varName} from '${pkgName}';`);\n\n if (['react', 'vue', 'svelte'].includes(platform)) {\n generators.push(` ${varName}({\n outDir: 'generated/${platform}',\n cssStrategy: 'css-variables',\n typescript: true,${darkMode ? \"\\n darkMode: 'media+class',\" : ''}\n })`);\n } else {\n generators.push(` ${varName}({\n outDir: 'generated/${platform}',\n })`);\n }\n }\n\n return `import { defineConfig } from '@ryndesign/cli';\n${imports.join('\\n')}\n\nexport default defineConfig({\n tokens: ['tokens/**/*.tokens.json'],\n components: ['components/**/*.component.json'],\n outDir: 'generated',\n${darkMode ? `\n themes: {\n default: 'light',\n dark: { file: 'tokens/dark.tokens.json' },\n },\n` : ''}\n generators: [\n${generators.join(',\\n')}\n ],\n\n preview: { port: 4400, open: true },\n});\n`;\n}\n\nfunction getDefaultTokens() {\n return {\n color: {\n $type: 'color',\n primary: { $value: '#3B82F6' },\n white: { $value: '#FFFFFF' },\n black: { $value: '#000000' },\n gray: {\n 50: { $value: '#F9FAFB' },\n 900: { $value: '#111827' },\n },\n },\n spacing: {\n $type: 'dimension',\n sm: { $value: '8px' },\n md: { $value: '16px' },\n lg: { $value: '24px' },\n },\n };\n}\n\nfunction getSemanticTokens() {\n return {\n color: {\n $type: 'color',\n background: {\n primary: { $value: '{color.white}' },\n secondary: { $value: '{color.gray.50}' },\n },\n text: {\n primary: { $value: '{color.gray.900}' },\n },\n },\n };\n}\n\nfunction getDarkTokens() {\n return {\n $description: 'Dark theme overrides',\n $extensions: { 'com.ryndesign.theme': { name: 'dark', extends: 'default' } },\n color: {\n $type: 'color',\n background: {\n primary: { $value: '{color.gray.900}' },\n secondary: { $value: '{color.gray.800}' },\n },\n text: {\n primary: { $value: '{color.gray.50}' },\n },\n },\n };\n}\n\nfunction detectPackageManager(cwd: string): string {\n try {\n const userAgent = process.env.npm_config_user_agent || '';\n if (userAgent.startsWith('pnpm')) return 'pnpm';\n if (userAgent.startsWith('yarn')) return 'yarn';\n if (userAgent.startsWith('bun')) return 'bun';\n } catch {}\n\n // Check for lock files\n if (existsSync(path.join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(path.join(cwd, 'yarn.lock'))) return 'yarn';\n if (existsSync(path.join(cwd, 'bun.lockb'))) return 'bun';\n return 'npm';\n}\n","import type { RynDesignConfig } from '@ryndesign/plugin-api';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { createRequire } from 'node:module';\n\nconst CONFIG_NAMES = [\n 'ryndesign.config.ts',\n 'ryndesign.config.js',\n 'ryndesign.config.mjs',\n 'ryndesign.config.json',\n];\n\nexport async function loadConfig(configPath?: string): Promise<RynDesignConfig | null> {\n const cwd = process.cwd();\n\n // If explicit path provided, try only that\n if (configPath) {\n return loadConfigFile(path.resolve(cwd, configPath));\n }\n\n // Try each config name in order\n for (const name of CONFIG_NAMES) {\n const absolutePath = path.resolve(cwd, name);\n try {\n await fs.access(absolutePath);\n return loadConfigFile(absolutePath);\n } catch {\n continue;\n }\n }\n\n return null;\n}\n\nasync function loadConfigFile(absolutePath: string): Promise<RynDesignConfig | null> {\n try {\n await fs.access(absolutePath);\n } catch {\n return null;\n }\n\n // JSON config\n if (absolutePath.endsWith('.json')) {\n try {\n const content = await fs.readFile(absolutePath, 'utf-8');\n const config = JSON.parse(content) as RynDesignConfig;\n return validateConfig(config, absolutePath);\n } catch (err) {\n throw new Error(`Failed to parse config ${absolutePath}: ${(err as Error).message}`);\n }\n }\n\n // JS/TS config\n try {\n // Discover all @ryndesign/* packages from the CLI's own node_modules\n // so globally-installed generators are resolvable even without local node_modules.\n const alias = await resolveCliPackageAlias();\n\n const { createJiti } = await import('jiti');\n const loader = createJiti(absolutePath, {\n interopDefault: true,\n alias,\n });\n const config = await loader.import(absolutePath) as Record<string, unknown>;\n const resolved = (config.default ?? config) as RynDesignConfig;\n return validateConfig(resolved, absolutePath);\n } catch (err) {\n // Fallback: try dynamic import\n try {\n const mod = await import(absolutePath);\n const resolved = mod.default ?? mod;\n return validateConfig(resolved, absolutePath);\n } catch {\n throw new Error(`Failed to load config ${absolutePath}: ${(err as Error).message}`);\n }\n }\n}\n\nfunction validateConfig(config: RynDesignConfig, filePath: string): RynDesignConfig {\n if (!config.tokens || !Array.isArray(config.tokens) || config.tokens.length === 0) {\n throw new Error(`Invalid config in ${filePath}: \"tokens\" must be a non-empty array of glob patterns`);\n }\n\n if (config.components && !Array.isArray(config.components)) {\n throw new Error(`Invalid config in ${filePath}: \"components\" must be an array of glob patterns`);\n }\n\n if (config.generators && !Array.isArray(config.generators)) {\n throw new Error(`Invalid config in ${filePath}: \"generators\" must be an array`);\n }\n\n return config;\n}\n\nasync function resolveCliPackageAlias(): Promise<Record<string, string>> {\n const alias: Record<string, string> = {};\n try {\n const cliRequire = createRequire(import.meta.url);\n const pluginApiPkg = cliRequire.resolve('@ryndesign/plugin-api/package.json');\n const ryndesignDir = path.resolve(path.dirname(pluginApiPkg), '..');\n\n const entries = await fs.readdir(ryndesignDir);\n for (const entry of entries) {\n const pkgJsonPath = path.join(ryndesignDir, entry, 'package.json');\n try {\n await fs.access(pkgJsonPath);\n alias[`@ryndesign/${entry}`] = path.join(ryndesignDir, entry);\n } catch {\n // Not a valid package, skip\n }\n }\n } catch {\n // CLI packages not discoverable, alias stays empty\n }\n return alias;\n}\n\n// Re-export defineConfig for convenience\nexport { defineConfig } from '@ryndesign/plugin-api';\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { buildTokenSet, loadComponents, resolveComponent, createGeneratorHelpers } from '@ryndesign/core';\nimport { loadConfig } from '../config.js';\nimport type { GeneratedFile, GeneratorPlugin } from '@ryndesign/plugin-api';\n\nexport default defineCommand({\n meta: {\n name: 'generate',\n description: 'Generate design system files for target platforms',\n },\n args: {\n platform: {\n type: 'string',\n alias: 'p',\n description: 'Comma-separated list of platforms to generate',\n },\n watch: {\n type: 'boolean',\n alias: 'w',\n description: 'Watch for changes and regenerate',\n default: false,\n },\n clean: {\n type: 'boolean',\n description: 'Clean output directory before generating',\n default: false,\n },\n 'dry-run': {\n type: 'boolean',\n description: 'Show what would be generated without writing files',\n default: false,\n },\n config: {\n type: 'string',\n alias: 'c',\n description: 'Path to config file',\n default: 'ryndesign.config.ts',\n },\n },\n async run({ args }) {\n const dryRun = args['dry-run'] as boolean;\n console.log(pc.cyan(`⚡ RynDesign Generate${dryRun ? ' (dry run)' : ''}\\n`));\n\n const config = await loadConfig(args.config);\n if (!config) {\n console.error(pc.red('Config file not found. Run `ryndesign init` first.'));\n process.exit(1);\n }\n\n const cwd = process.cwd();\n\n // Clean output directory if requested\n if (args.clean && config.outDir) {\n const outDir = path.resolve(cwd, config.outDir);\n await fs.rm(outDir, { recursive: true, force: true });\n await fs.mkdir(outDir, { recursive: true });\n console.log(pc.yellow(`Cleaned ${config.outDir}/`));\n }\n\n // Build token set\n console.log(pc.gray('Building token set...'));\n const tokenSet = await buildTokenSet({\n tokens: config.tokens,\n basePath: cwd,\n themes: config.themes as any,\n name: 'design-system',\n });\n\n console.log(pc.green(`✓ Resolved ${tokenSet.tokens.length} tokens`));\n if (Object.keys(tokenSet.themes.themes).length > 0) {\n console.log(pc.green(`✓ Resolved themes: ${Object.keys(tokenSet.themes.themes).join(', ')}`));\n }\n\n // Filter generators by platform if specified\n let generators = config.generators ?? [];\n if (args.platform) {\n const targetPlatforms = (args.platform as string).split(',').map(s => s.trim());\n generators = generators.filter(g => targetPlatforms.includes(g.name));\n }\n\n if (generators.length === 0) {\n console.log(pc.yellow('No generators configured. Add generators to your ryndesign.config.ts'));\n return;\n }\n\n // Load and resolve components\n const components = config.components\n ? await loadComponents(config.components, cwd)\n : [];\n\n if (components.length > 0) {\n console.log(pc.green(`✓ Loaded ${components.length} component(s)`));\n }\n\n // Resolve all components\n const resolvedComponents = components.map(compDef => resolveComponent(compDef, tokenSet));\n\n // Run generators\n const allFiles: GeneratedFile[] = [];\n const summary: { name: string; files: number; bytes: number }[] = [];\n\n for (const generator of generators) {\n console.log(pc.gray(`\\nGenerating ${generator.displayName}...`));\n let genFiles = 0;\n let genBytes = 0;\n\n const ctx = {\n tokenSet,\n config: { outDir: config.outDir ?? 'generated', ...generator },\n outputDir: path.resolve(cwd, config.outDir ?? 'generated'),\n helpers: createGeneratorHelpers(),\n components: resolvedComponents,\n };\n\n try {\n // Generate tokens\n const tokenFiles = await generator.generateTokens(ctx);\n allFiles.push(...tokenFiles);\n\n for (const file of tokenFiles) {\n genFiles++;\n genBytes += Buffer.byteLength(file.content, 'utf-8');\n if (!dryRun) {\n const filePath = path.resolve(ctx.outputDir, file.path);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, file.content, 'utf-8');\n }\n }\n\n // Generate components\n for (const resolvedComp of resolvedComponents) {\n const compFiles = await generator.generateComponent(resolvedComp, ctx);\n allFiles.push(...compFiles);\n\n for (const file of compFiles) {\n genFiles++;\n genBytes += Buffer.byteLength(file.content, 'utf-8');\n if (!dryRun) {\n const filePath = path.resolve(ctx.outputDir, file.path);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, file.content, 'utf-8');\n }\n }\n }\n\n console.log(pc.green(` ✓ ${genFiles} files generated for ${generator.displayName}`));\n summary.push({ name: generator.displayName, files: genFiles, bytes: genBytes });\n } catch (err) {\n console.error(pc.red(` ✗ ${generator.displayName} failed: ${(err as Error).message}`));\n }\n }\n\n // Summary table\n if (summary.length > 0) {\n console.log(pc.gray('\\n Platform Files Size'));\n console.log(pc.gray(' ─────────────────────────────────'));\n for (const s of summary) {\n const sizeStr = s.bytes < 1024 ? `${s.bytes} B` : `${(s.bytes / 1024).toFixed(1)} KB`;\n console.log(` ${s.name.padEnd(18)} ${String(s.files).padStart(5)} ${sizeStr}`);\n }\n }\n\n // Run hooks\n if (config.hooks?.['generate:complete']) {\n await config.hooks['generate:complete'](allFiles);\n }\n\n console.log(pc.green(`\\n✓ Generation complete! ${allFiles.length} files ${dryRun ? 'would be written' : 'written'}.`));\n\n // Watch mode\n if (args.watch) {\n console.log(pc.cyan('\\nWatching for changes...'));\n const { watch } = await import('chokidar');\n const watchPatterns = [...config.tokens, ...(config.components ?? [])];\n const watcher = watch(watchPatterns, {\n cwd,\n ignoreInitial: true,\n });\n\n watcher.on('change', async (changedPath) => {\n console.log(pc.gray(`\\nFile changed: ${changedPath}`));\n try {\n const newTokenSet = await buildTokenSet({\n tokens: config.tokens,\n basePath: cwd,\n themes: config.themes as any,\n });\n\n // Reload components\n const newComponents = config.components\n ? await loadComponents(config.components, cwd)\n : [];\n const newResolvedComponents = newComponents.map(c => resolveComponent(c, newTokenSet));\n\n // Re-run generators\n for (const generator of generators) {\n try {\n const ctx = {\n tokenSet: newTokenSet,\n config: { outDir: config.outDir ?? 'generated', ...generator },\n outputDir: path.resolve(cwd, config.outDir ?? 'generated'),\n helpers: createGeneratorHelpers(),\n components: newResolvedComponents,\n };\n\n const tokenFiles = await generator.generateTokens(ctx);\n for (const file of tokenFiles) {\n const filePath = path.resolve(ctx.outputDir, file.path);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, file.content, 'utf-8');\n }\n\n for (const resolvedComp of newResolvedComponents) {\n const compFiles = await generator.generateComponent(resolvedComp, ctx);\n for (const file of compFiles) {\n const filePath = path.resolve(ctx.outputDir, file.path);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, file.content, 'utf-8');\n }\n }\n } catch (err) {\n console.error(pc.red(` ✗ ${generator.displayName}: ${(err as Error).message}`));\n }\n }\n console.log(pc.green('✓ Rebuilt and regenerated'));\n } catch (err) {\n console.error(pc.red(`Error: ${(err as Error).message}`));\n }\n });\n }\n },\n});\n\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport { readAndMergeTokenFiles, validateTree, buildTokenSet, postValidate, TokenValidationError } from '@ryndesign/core';\nimport { loadConfig } from '../config.js';\n\nexport default defineCommand({\n meta: {\n name: 'validate',\n description: 'Validate design token files',\n },\n args: {\n path: {\n type: 'positional',\n description: 'Path to token file(s)',\n required: false,\n },\n config: {\n type: 'string',\n alias: 'c',\n description: 'Path to config file',\n default: 'ryndesign.config.ts',\n },\n strict: {\n type: 'boolean',\n description: 'Treat warnings as errors',\n default: false,\n },\n },\n async run({ args }) {\n console.log(pc.cyan(' RynDesign Validate\\n'));\n\n const config = await loadConfig(args.config as string);\n const patterns = args.path\n ? [args.path as string]\n : config?.tokens ?? ['tokens/**/*.tokens.json'];\n\n try {\n // Step 1: Parse and validate structure\n const tree = await readAndMergeTokenFiles(patterns);\n validateTree(tree);\n\n // Step 2: Build full token set for post-validation\n const tokenSet = await buildTokenSet({\n tokens: patterns,\n basePath: process.cwd(),\n });\n\n // Step 3: Post-resolution validation\n const issues = postValidate(tokenSet.tokens, tokenSet.themes);\n const errors = issues.filter(i => i.severity === 'error');\n const warnings = issues.filter(i => i.severity === 'warning');\n\n // Summary\n console.log(pc.green(` ${tokenSet.tokens.length} tokens resolved`));\n console.log(pc.green(` ${tokenSet.groups.length} groups`));\n const themeCount = Object.keys(tokenSet.themes.themes).length;\n if (themeCount > 0) {\n console.log(pc.green(` ${themeCount} theme(s): ${Object.keys(tokenSet.themes.themes).join(', ')}`));\n }\n\n if (errors.length > 0) {\n console.error(pc.red(`\\n ${errors.length} error(s):\\n`));\n for (const issue of errors) {\n console.error(` ${pc.red('x')} ${issue.path}: ${issue.message}`);\n }\n }\n\n if (warnings.length > 0) {\n console.log(pc.yellow(`\\n ${warnings.length} warning(s):\\n`));\n for (const issue of warnings) {\n console.log(` ${pc.yellow('!')} ${issue.path}: ${issue.message}`);\n }\n }\n\n if (errors.length === 0 && warnings.length === 0) {\n console.log(pc.green('\\n All tokens are valid!'));\n } else if (errors.length === 0) {\n console.log(pc.green('\\n Tokens are valid (with warnings)'));\n }\n\n // --strict: exit with error if any warnings\n if (args.strict && (errors.length > 0 || warnings.length > 0)) {\n process.exit(1);\n }\n if (errors.length > 0) {\n process.exit(1);\n }\n } catch (err) {\n if (err instanceof TokenValidationError) {\n console.error(pc.red(` Validation failed with ${err.errors.length} issue(s):\\n`));\n for (const issue of err.errors) {\n const icon = issue.severity === 'error' ? pc.red('x') : pc.yellow('!');\n console.error(` ${icon} ${issue.path.join('.')}: ${issue.message}`);\n }\n process.exit(1);\n }\n throw err;\n }\n },\n});\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport { loadConfig } from '../config.js';\n\nexport default defineCommand({\n meta: {\n name: 'preview',\n description: 'Start the design system preview server',\n },\n args: {\n config: {\n type: 'string',\n alias: 'c',\n description: 'Path to config file',\n default: 'ryndesign.config.ts',\n },\n port: {\n type: 'string',\n description: 'Port to run the preview server on',\n },\n open: {\n type: 'boolean',\n description: 'Open browser automatically',\n default: true,\n },\n },\n async run({ args }) {\n console.log(pc.cyan('🖥 RynDesign Preview\\n'));\n\n const config = await loadConfig(args.config as string);\n const port = args.port\n ? parseInt(args.port as string, 10)\n : config?.preview?.port ?? 4400;\n\n let previewModule;\n try {\n previewModule = await import('@ryndesign/preview');\n } catch {\n console.log(pc.yellow('Preview package not found. Install @ryndesign/preview'));\n console.log(pc.gray(' npm install @ryndesign/preview'));\n return;\n }\n\n await previewModule.startPreviewServer({\n port,\n open: args.open as boolean,\n });\n },\n});\n","import { defineCommand } from 'citty';\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nconst AVAILABLE_COMPONENTS = ['button', 'input', 'card', 'checkbox', 'toggle', 'badge', 'avatar'];\n\n// Token dependencies for each component\nconst COMPONENT_TOKENS: Record<string, Record<string, any>> = {\n button: {\n 'component.button': {\n $type: 'color',\n primary: {\n background: { $value: '{color.primary}' },\n text: { $value: '{color.white}' },\n hover: { background: { $value: '{color.primary}' } },\n pressed: { background: { $value: '{color.primary}' } },\n },\n secondary: {\n background: { $value: '{color.secondary}' },\n text: { $value: '{color.white}' },\n },\n borderRadius: { $type: 'dimension', $value: '8px' },\n sm: { paddingX: { $type: 'dimension', $value: '12px' }, paddingY: { $type: 'dimension', $value: '6px' }, fontSize: { $type: 'dimension', $value: '14px' } },\n md: { paddingX: { $type: 'dimension', $value: '16px' }, paddingY: { $type: 'dimension', $value: '10px' }, fontSize: { $type: 'dimension', $value: '16px' } },\n lg: { paddingX: { $type: 'dimension', $value: '24px' }, paddingY: { $type: 'dimension', $value: '14px' }, fontSize: { $type: 'dimension', $value: '18px' } },\n disabled: { background: { $value: '{color.gray.300}' } },\n },\n },\n};\n\nexport default defineCommand({\n meta: {\n name: 'add',\n description: 'Add a component definition',\n },\n args: {\n name: {\n type: 'positional',\n description: 'Component name to add',\n required: false,\n },\n 'with-tokens': {\n type: 'boolean',\n description: 'Also scaffold component tokens',\n default: false,\n },\n },\n async run({ args }) {\n const name = args.name as string || await p.select({\n message: 'Choose a component to add:',\n options: AVAILABLE_COMPONENTS.map(c => ({\n value: c,\n label: c.charAt(0).toUpperCase() + c.slice(1),\n })),\n }) as string;\n\n if (p.isCancel(name)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const cwd = process.cwd();\n const componentsDir = path.join(cwd, 'components');\n await fs.mkdir(componentsDir, { recursive: true });\n\n const destPath = path.join(componentsDir, `${name}.component.json`);\n\n // Check if already exists\n try {\n await fs.access(destPath);\n console.log(pc.yellow(`Component ${name} already exists at ${destPath}`));\n return;\n } catch {\n // Doesn't exist, proceed\n }\n\n // Try to copy from bundled components\n let copied = false;\n const searchPaths = [\n path.resolve(__dirname, `../../components/${name}.component.json`),\n // ESM fallback\n typeof __dirname !== 'undefined'\n ? path.resolve(__dirname, `../../components/${name}.component.json`)\n : path.resolve(new URL('.', import.meta.url).pathname, `../../components/${name}.component.json`),\n ];\n\n for (const srcPath of searchPaths) {\n try {\n const content = await fs.readFile(srcPath, 'utf-8');\n await fs.writeFile(destPath, content);\n console.log(pc.green(` Added ${name} component to ${destPath}`));\n copied = true;\n break;\n } catch {\n continue;\n }\n }\n\n if (!copied) {\n console.error(pc.red(`Component \"${name}\" not found in available components.`));\n console.log(pc.gray(`Available: ${AVAILABLE_COMPONENTS.join(', ')}`));\n return;\n }\n\n // Scaffold component tokens if requested\n const withTokens = args['with-tokens'] as boolean;\n if (withTokens && COMPONENT_TOKENS[name]) {\n const tokensDir = path.join(cwd, 'tokens');\n await fs.mkdir(tokensDir, { recursive: true });\n const tokenFile = path.join(tokensDir, `${name}.tokens.json`);\n\n try {\n await fs.access(tokenFile);\n console.log(pc.yellow(` Token file already exists: ${tokenFile}`));\n } catch {\n await fs.writeFile(tokenFile, JSON.stringify(COMPONENT_TOKENS[name], null, 2));\n console.log(pc.green(` Created component tokens: ${tokenFile}`));\n }\n }\n },\n});\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { loadConfig } from '../config.js';\n\nexport default defineCommand({\n meta: {\n name: 'pull',\n description: 'Pull design tokens from Figma',\n },\n args: {\n 'file-key': {\n type: 'string',\n description: 'Figma file key',\n },\n token: {\n type: 'string',\n description: 'Figma personal access token',\n },\n config: {\n type: 'string',\n alias: 'c',\n description: 'Path to config file',\n default: 'ryndesign.config.ts',\n },\n output: {\n type: 'string',\n alias: 'o',\n description: 'Output file path',\n default: 'tokens/figma.tokens.json',\n },\n merge: {\n type: 'boolean',\n description: 'Merge with existing local tokens instead of overwriting',\n default: false,\n },\n strategy: {\n type: 'string',\n description: 'Merge strategy: prefer-remote, prefer-local, remote-only-new',\n default: 'prefer-remote',\n },\n },\n async run({ args }) {\n console.log(pc.cyan('📥 Figma Pull\\n'));\n\n const config = await loadConfig(args.config as string);\n const fileKey = (args['file-key'] as string) || config?.figma?.fileKey;\n const pat = (args.token as string) || config?.figma?.personalAccessToken || process.env.FIGMA_TOKEN;\n\n if (!fileKey) {\n console.error(pc.red('Missing Figma file key. Use --file-key or set in config.'));\n process.exit(1);\n }\n if (!pat) {\n console.error(pc.red('Missing Figma token. Use --token, set FIGMA_TOKEN env var, or configure in ryndesign.config.ts'));\n process.exit(1);\n }\n\n const shouldMerge = args.merge as boolean;\n const strategy = args.strategy as string;\n const validStrategies = ['prefer-remote', 'prefer-local', 'remote-only-new'];\n if (shouldMerge && !validStrategies.includes(strategy)) {\n console.error(pc.red(`Invalid merge strategy \"${strategy}\". Use: ${validStrategies.join(', ')}`));\n process.exit(1);\n }\n\n try {\n const { fetchFigmaVariables, mapFigmaToTokens, resolveFigmaModes, mergeTokens } = await import('@ryndesign/figma');\n\n console.log(pc.gray('Fetching variables from Figma...'));\n\n const variables = await fetchFigmaVariables({\n fileKey,\n personalAccessToken: pat,\n });\n\n console.log(pc.green(`✓ Fetched ${variables.length} variables`));\n\n const cwd = process.cwd();\n const modeMapping = config?.figma?.modeMapping;\n\n if (modeMapping) {\n // Resolve modes into separate files\n const modeFiles = resolveFigmaModes(variables, modeMapping);\n\n for (const [filePath, tree] of Object.entries(modeFiles)) {\n const absolutePath = path.resolve(cwd, filePath);\n await fs.mkdir(path.dirname(absolutePath), { recursive: true });\n\n if (shouldMerge) {\n const existing = await readJsonSafe(absolutePath);\n if (existing) {\n // For mode files, filter tokens belonging to this mode\n const modeTokens = variables.filter(t => {\n const modeName = Object.keys(modeMapping).find(m => modeMapping[m] === filePath);\n return modeName && t.modes[modeName] !== undefined;\n });\n\n const result = mergeTokens(existing, modeTokens, { strategy: strategy as any });\n await fs.writeFile(absolutePath, JSON.stringify(result.merged, null, 2), 'utf-8');\n console.log(pc.green(` ✓ Merged ${filePath}`) + pc.gray(` (+${result.stats.added} new, ${result.stats.updated} updated, ${result.stats.kept} kept)`));\n continue;\n }\n }\n\n await fs.writeFile(absolutePath, JSON.stringify(tree, null, 2), 'utf-8');\n console.log(pc.green(` ✓ Written ${filePath}`));\n }\n } else {\n // Write all to single file\n const outPath = path.resolve(cwd, args.output as string);\n await fs.mkdir(path.dirname(outPath), { recursive: true });\n\n if (shouldMerge) {\n const existing = await readJsonSafe(outPath);\n if (existing) {\n const result = mergeTokens(existing, variables, { strategy: strategy as any });\n await fs.writeFile(outPath, JSON.stringify(result.merged, null, 2), 'utf-8');\n console.log(pc.green(` ✓ Merged tokens/figma.tokens.json`) + pc.gray(` (+${result.stats.added} new, ${result.stats.updated} updated, ${result.stats.kept} kept)`));\n } else {\n // No existing file, write fresh\n const tree = mapFigmaToTokens(variables);\n await fs.writeFile(outPath, JSON.stringify(tree, null, 2), 'utf-8');\n console.log(pc.green(` ✓ Written tokens/figma.tokens.json`));\n }\n } else {\n const tree = mapFigmaToTokens(variables);\n await fs.writeFile(outPath, JSON.stringify(tree, null, 2), 'utf-8');\n console.log(pc.green(` ✓ Written tokens/figma.tokens.json`));\n }\n }\n\n console.log(pc.green('\\n✓ Figma pull complete!'));\n } catch (err) {\n console.error(pc.red(`Error: ${(err as Error).message}`));\n process.exit(1);\n }\n },\n});\n\nasync function readJsonSafe(absolutePath: string): Promise<Record<string, unknown> | null> {\n try {\n const content = await fs.readFile(absolutePath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport { buildTokenSet } from '@ryndesign/core';\nimport { loadConfig } from '../config.js';\n\nexport default defineCommand({\n meta: {\n name: 'push',\n description: 'Push design tokens to Figma',\n },\n args: {\n 'file-key': {\n type: 'string',\n description: 'Figma file key',\n },\n token: {\n type: 'string',\n description: 'Figma personal access token',\n },\n config: {\n type: 'string',\n description: 'Path to config file',\n default: 'ryndesign.config.ts',\n },\n },\n async run({ args }) {\n console.log(pc.cyan('📤 Figma Push\\n'));\n\n const config = await loadConfig(args.config as string);\n const fileKey = (args['file-key'] as string) || config?.figma?.fileKey;\n const pat = (args.token as string) || config?.figma?.personalAccessToken || process.env.FIGMA_TOKEN;\n\n if (!fileKey) {\n console.error(pc.red('Missing Figma file key. Use --file-key or set in config.'));\n process.exit(1);\n }\n if (!pat) {\n console.error(pc.red('Missing Figma token. Use --token, set FIGMA_TOKEN env var, or configure in ryndesign.config.ts'));\n process.exit(1);\n }\n\n try {\n const { pushVariablesToFigma } = await import('@ryndesign/figma');\n\n const cwd = process.cwd();\n console.log(pc.gray('Building token set...'));\n\n const tokenSet = await buildTokenSet({\n tokens: config?.tokens ?? ['tokens/**/*.tokens.json'],\n basePath: cwd,\n themes: config?.themes as any,\n });\n\n console.log(pc.green(`✓ Resolved ${tokenSet.tokens.length} tokens`));\n console.log(pc.gray('Pushing to Figma...'));\n\n const darkTokens = tokenSet.themes.themes['dark']?.tokens;\n\n await pushVariablesToFigma({\n fileKey,\n personalAccessToken: pat,\n tokens: tokenSet.tokens,\n darkTokens,\n });\n\n console.log(pc.green('\\n✓ Figma push complete!'));\n } catch (err) {\n console.error(pc.red(`Error: ${(err as Error).message}`));\n process.exit(1);\n }\n },\n});\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport { buildTokenSet } from '@ryndesign/core';\nimport { loadConfig } from '../config.js';\n\nexport default defineCommand({\n meta: {\n name: 'diff',\n description: 'Compare local tokens with Figma',\n },\n args: {\n 'file-key': {\n type: 'string',\n description: 'Figma file key',\n },\n token: {\n type: 'string',\n description: 'Figma personal access token',\n },\n config: {\n type: 'string',\n description: 'Path to config file',\n default: 'ryndesign.config.ts',\n },\n },\n async run({ args }) {\n console.log(pc.cyan('🔍 Figma Diff\\n'));\n\n const config = await loadConfig(args.config as string);\n const fileKey = (args['file-key'] as string) || config?.figma?.fileKey;\n const pat = (args.token as string) || config?.figma?.personalAccessToken || process.env.FIGMA_TOKEN;\n\n if (!fileKey) {\n console.error(pc.red('Missing Figma file key. Use --file-key or set in config.'));\n process.exit(1);\n }\n if (!pat) {\n console.error(pc.red('Missing Figma token. Use --token, set FIGMA_TOKEN env var, or configure in ryndesign.config.ts'));\n process.exit(1);\n }\n\n try {\n const { fetchFigmaVariables, diffFigmaTokens } = await import('@ryndesign/figma');\n\n const cwd = process.cwd();\n\n // Build local tokens\n console.log(pc.gray('Building local token set...'));\n const tokenSet = await buildTokenSet({\n tokens: config?.tokens ?? ['tokens/**/*.tokens.json'],\n basePath: cwd,\n themes: config?.themes as any,\n });\n\n // Fetch remote tokens\n console.log(pc.gray('Fetching Figma variables...'));\n const remoteTokens = await fetchFigmaVariables({\n fileKey,\n personalAccessToken: pat,\n });\n\n // Diff\n const result = diffFigmaTokens(tokenSet.tokens, remoteTokens);\n\n // Display results\n if (result.added.length > 0) {\n console.log(pc.green(`\\n+ Added (local only): ${result.added.length}`));\n for (const entry of result.added) {\n console.log(pc.green(` + ${entry.path}: ${JSON.stringify(entry.local)}`));\n }\n }\n\n if (result.removed.length > 0) {\n console.log(pc.red(`\\n- Removed (Figma only): ${result.removed.length}`));\n for (const entry of result.removed) {\n console.log(pc.red(` - ${entry.path}: ${JSON.stringify(entry.remote)}`));\n }\n }\n\n if (result.modified.length > 0) {\n console.log(pc.yellow(`\\n~ Modified: ${result.modified.length}`));\n for (const entry of result.modified) {\n console.log(pc.yellow(` ~ ${entry.path}: ${JSON.stringify(entry.local)} ← ${JSON.stringify(entry.remote)}`));\n }\n }\n\n console.log(pc.gray(`\\n Unchanged: ${result.unchanged}`));\n\n const total = result.added.length + result.removed.length + result.modified.length;\n if (total === 0) {\n console.log(pc.green('\\n✓ Local and Figma tokens are in sync!'));\n } else {\n console.log(pc.yellow(`\\n${total} difference(s) found.`));\n }\n } catch (err) {\n console.error(pc.red(`Error: ${(err as Error).message}`));\n process.exit(1);\n }\n },\n});\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { loadConfig } from '../config.js';\n\nexport default defineCommand({\n meta: {\n name: 'figma',\n description: 'Figma integration commands',\n },\n subCommands: {\n pull: () => import('./figma-pull.js').then(m => m.default),\n push: () => import('./figma-push.js').then(m => m.default),\n diff: () => import('./figma-diff.js').then(m => m.default),\n },\n});\n","import { defineCommand } from 'citty';\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nconst GENERATORS = ['react', 'vue', 'svelte', 'rails', 'swiftui', 'uikit', 'compose', 'android-view'];\n\nexport default defineCommand({\n meta: {\n name: 'eject',\n description: 'Eject a generator for customization',\n },\n args: {\n name: {\n type: 'positional',\n description: 'Generator name to eject',\n required: false,\n },\n },\n async run({ args }) {\n p.intro(pc.bgYellow(pc.black(' RynDesign Eject ')));\n\n const name = args.name as string || await p.select({\n message: 'Select a generator to eject:',\n options: GENERATORS.map(g => ({ value: g, label: `@ryndesign/generator-${g}` })),\n }) as string;\n\n if (p.isCancel(name)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n if (!GENERATORS.includes(name)) {\n console.error(pc.red(`Unknown generator: ${name}`));\n console.log(pc.gray(`Available: ${GENERATORS.join(', ')}`));\n process.exit(1);\n }\n\n const cwd = process.cwd();\n const destDir = path.join(cwd, 'generators', name);\n\n // Check if already ejected\n try {\n await fs.access(destDir);\n console.error(pc.yellow(`Generator \"${name}\" already ejected at generators/${name}/`));\n process.exit(0);\n } catch {\n // Doesn't exist, proceed\n }\n\n const confirm = await p.confirm({\n message: `Eject @ryndesign/generator-${name} to generators/${name}/?`,\n initialValue: true,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const s = p.spinner();\n s.start(`Ejecting generator-${name}...`);\n\n try {\n // Find the installed package source\n const pkgPath = require.resolve(`@ryndesign/generator-${name}/package.json`, {\n paths: [cwd],\n });\n const pkgDir = path.dirname(pkgPath);\n const srcDir = path.join(pkgDir, 'src');\n\n // Check if source exists; if not, copy dist\n let sourceDir: string;\n try {\n await fs.access(srcDir);\n sourceDir = srcDir;\n } catch {\n // Fallback to dist\n sourceDir = path.join(pkgDir, 'dist');\n }\n\n // Create destination\n await fs.mkdir(destDir, { recursive: true });\n\n // Copy files\n await copyDir(sourceDir, destDir);\n\n s.stop(`Generator ejected!`);\n\n p.note(\n [\n `Files copied to: ${pc.green(`generators/${name}/`)}`,\n '',\n 'Update your ryndesign.config.ts:',\n pc.gray(` import customGenerator from './generators/${name}/index.js';`),\n '',\n 'Replace the original generator with your custom one.',\n ].join('\\n'),\n 'Next steps'\n );\n } catch (err) {\n s.stop('Eject failed');\n console.error(pc.red(`Error: ${(err as Error).message}`));\n\n // Fallback: create a skeleton generator\n s.start('Creating skeleton generator...');\n await createSkeletonGenerator(destDir, name);\n s.stop('Skeleton generator created!');\n\n p.note(\n [\n `Skeleton created at: ${pc.green(`generators/${name}/`)}`,\n '',\n 'Customize the generator files and update your config.',\n ].join('\\n'),\n 'Next steps'\n );\n }\n\n p.outro(pc.green('Done!'));\n },\n});\n\nasync function copyDir(src: string, dest: string): Promise<void> {\n await fs.mkdir(dest, { recursive: true });\n const entries = await fs.readdir(src, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n\n if (entry.isDirectory()) {\n await copyDir(srcPath, destPath);\n } else {\n await fs.copyFile(srcPath, destPath);\n }\n }\n}\n\nasync function createSkeletonGenerator(dir: string, name: string): Promise<void> {\n const pascalName = name.charAt(0).toUpperCase() + name.slice(1).replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n\n const indexContent = `import type { GeneratorPlugin, GeneratorContext, GeneratedFile, ResolvedComponent } from '@ryndesign/plugin-api';\n\nexport default function ${name.replace(/-/g, '')}Generator(options = {}): GeneratorPlugin {\n return {\n name: '${name}',\n displayName: '${pascalName}',\n platform: 'web',\n outputExtensions: ['.ts', '.css'],\n\n async generateTokens(ctx: GeneratorContext): Promise<GeneratedFile[]> {\n // TODO: Implement token generation\n return [];\n },\n\n async generateComponent(comp: ResolvedComponent, ctx: GeneratorContext): Promise<GeneratedFile[]> {\n // TODO: Implement component generation\n return [];\n },\n };\n}\n`;\n\n await fs.writeFile(path.join(dir, 'index.ts'), indexContent, 'utf-8');\n}\n","#!/usr/bin/env node\nimport { runMain } from 'citty';\nimport { main } from './commands/main.js';\n\nrunMain(main);\n","import { defineCommand } from 'citty';\n\nexport const main = defineCommand({\n meta: {\n name: 'ryndesign',\n version: '0.1.0',\n description: 'Multi-platform design system generator',\n },\n subCommands: {\n init: () => import('./init.js').then(m => m.default),\n generate: () => import('./generate.js').then(m => m.default),\n validate: () => import('./validate.js').then(m => m.default),\n preview: () => import('./preview.js').then(m => m.default),\n add: () => import('./add.js').then(m => m.default),\n figma: () => import('./figma.js').then(m => m.default),\n eject: () => import('./eject.js').then(m => m.default),\n },\n});\n"],"mappings":"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","names":["path","pc","s","fs","path","fs","import_meta","import_node_path","import_promises","import_citty","import_picocolors","import_node_path","import_promises","pc","path","fs","import_citty","import_picocolors","import_core","pc","import_citty","import_picocolors","pc","import_citty","p","import_picocolors","import_promises","import_node_path","import_meta","path","fs","pc","fs","import_citty","import_picocolors","import_promises","import_node_path","pc","path","import_citty","import_picocolors","import_core","pc","import_citty","import_picocolors","import_core","pc","import_citty","import_picocolors","import_node_path","import_promises","fs","path","import_citty","p","import_picocolors","import_promises","import_node_path","pc","confirm","import_citty","import_citty"]}
1
+ {"version":3,"sources":["../src/commands/init.ts","../src/config.ts","../src/commands/generate.ts","../src/commands/validate.ts","../src/commands/preview.ts","../src/commands/add.ts","../src/commands/figma-pull.ts","../src/commands/figma-push.ts","../src/commands/figma-diff.ts","../src/commands/figma.ts","../src/commands/eject.ts","../src/bin.ts","../src/commands/main.ts"],"sourcesContent":["import { defineCommand } from 'citty';\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport fs from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { execSync } from 'node:child_process';\n\nexport default defineCommand({\n meta: {\n name: 'init',\n description: 'Initialize a new RynDesign project',\n },\n args: {\n template: {\n type: 'string',\n description: 'Template to use (minimal or full)',\n default: 'minimal',\n },\n platforms: {\n type: 'string',\n description: 'Comma-separated list of target platforms',\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(' RynDesign Init ')));\n\n const template = args.template || await p.select({\n message: 'Choose a template:',\n options: [\n { value: 'minimal', label: 'Minimal', hint: 'Basic color, spacing, typography tokens' },\n { value: 'full', label: 'Full', hint: 'Complete token set with shadows, borders, gradients' },\n ],\n }) as string;\n\n if (p.isCancel(template)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platformsInput = args.platforms || await p.multiselect({\n message: 'Select target platforms:',\n initialValues: ['react', 'swiftui'],\n options: [\n { value: 'react', label: 'React', hint: 'recommended' },\n { value: 'swiftui', label: 'SwiftUI', hint: 'recommended' },\n { value: 'vue', label: 'Vue' },\n { value: 'svelte', label: 'Svelte' },\n { value: 'rails', label: 'Rails' },\n { value: 'uikit', label: 'UIKit' },\n { value: 'compose', label: 'Jetpack Compose' },\n { value: 'android-view', label: 'Android View' },\n ],\n required: true,\n }) as string[];\n\n if (p.isCancel(platformsInput)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platforms = Array.isArray(platformsInput)\n ? platformsInput\n : (platformsInput as string).split(',').map(s => s.trim());\n\n const darkMode = await p.confirm({\n message: 'Enable dark mode support?',\n initialValue: true,\n });\n\n if (p.isCancel(darkMode)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const s = p.spinner();\n s.start('Creating project files...');\n\n const cwd = process.cwd();\n\n // Create directories\n await fs.mkdir(path.join(cwd, 'tokens'), { recursive: true });\n await fs.mkdir(path.join(cwd, 'components'), { recursive: true });\n await fs.mkdir(path.join(cwd, 'generated'), { recursive: true });\n\n // Copy template tokens\n // ESM-compatible path resolution\n const templateDir = path.resolve(\n typeof __dirname !== 'undefined'\n ? path.resolve(__dirname, '../../templates')\n : path.resolve(new URL('.', import.meta.url).pathname, '../../templates')\n );\n const templateFile = template === 'full' ? 'full.tokens.json' : 'minimal.tokens.json';\n\n try {\n const templateContent = await fs.readFile(\n path.join(templateDir, templateFile),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'tokens', 'base.tokens.json'),\n templateContent\n );\n } catch {\n // If templates not found, create a basic one inline\n await fs.writeFile(\n path.join(cwd, 'tokens', 'base.tokens.json'),\n JSON.stringify(getDefaultTokens(), null, 2)\n );\n }\n\n // Create semantic tokens\n await fs.writeFile(\n path.join(cwd, 'tokens', 'semantic.tokens.json'),\n JSON.stringify(getSemanticTokens(), null, 2)\n );\n\n // Create dark theme if enabled\n if (darkMode) {\n try {\n const darkContent = await fs.readFile(\n path.join(templateDir, 'dark.tokens.json'),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'tokens', 'dark.tokens.json'),\n darkContent\n );\n } catch {\n await fs.writeFile(\n path.join(cwd, 'tokens', 'dark.tokens.json'),\n JSON.stringify(getDarkTokens(), null, 2)\n );\n }\n }\n\n // Create config file\n const configContent = generateConfig(platforms, darkMode as boolean);\n await fs.writeFile(path.join(cwd, 'ryndesign.config.ts'), configContent);\n\n // Copy button component\n try {\n const buttonComp = await fs.readFile(\n path.join(templateDir, '../components/button.component.json'),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'components', 'button.component.json'),\n buttonComp\n );\n } catch {\n // Skip if not found\n }\n\n // Add generated/ to .gitignore\n const gitignorePath = path.join(cwd, '.gitignore');\n try {\n let gitignore = '';\n try {\n gitignore = await fs.readFile(gitignorePath, 'utf-8');\n } catch {\n // File doesn't exist yet\n }\n if (!gitignore.includes('generated/')) {\n gitignore += (gitignore.endsWith('\\n') || gitignore === '' ? '' : '\\n') + 'generated/\\n';\n await fs.writeFile(gitignorePath, gitignore);\n }\n } catch {\n // Skip if can't write .gitignore\n }\n\n // Ensure package.json exists, then add scripts and dependencies\n const pkgJsonPath = path.join(cwd, 'package.json');\n let pkg: Record<string, unknown>;\n try {\n const pkgContent = await fs.readFile(pkgJsonPath, 'utf-8');\n pkg = JSON.parse(pkgContent);\n } catch {\n // No package.json yet — create one\n const dirName = path.basename(cwd);\n pkg = {\n name: dirName,\n version: '1.0.0',\n private: true,\n type: 'module',\n };\n }\n\n if (!pkg.scripts || typeof pkg.scripts !== 'object') pkg.scripts = {};\n const scripts = pkg.scripts as Record<string, string>;\n if (!scripts['generate']) scripts['generate'] = 'ryndesign generate';\n if (!scripts['preview']) scripts['preview'] = 'ryndesign preview';\n\n // Add generator packages as devDependencies\n if (!pkg.devDependencies || typeof pkg.devDependencies !== 'object') pkg.devDependencies = {};\n const devDeps = pkg.devDependencies as Record<string, string>;\n devDeps['@ryndesign/cli'] = 'latest';\n for (const platform of platforms) {\n devDeps[`@ryndesign/generator-${platform}`] = 'latest';\n }\n\n await fs.writeFile(pkgJsonPath, JSON.stringify(pkg, null, 2) + '\\n');\n\n s.stop('Project files created!');\n\n // Install dependencies\n const installSpinner = p.spinner();\n installSpinner.start('Installing dependencies...');\n try {\n const pm = detectPackageManager(cwd);\n execSync(`${pm} install`, { cwd, stdio: 'pipe' });\n installSpinner.stop('Dependencies installed!');\n } catch {\n installSpinner.stop(pc.yellow('Could not auto-install. Run `npm install` manually.'));\n }\n\n p.note(\n [\n `${pc.green('tokens/')} - Your design tokens`,\n `${pc.green('components/')} - Component definitions`,\n `${pc.green('generated/')} - Generated output (gitignored)`,\n `${pc.green('ryndesign.config.ts')} - Configuration`,\n ].join('\\n'),\n 'Project structure'\n );\n\n p.outro(pc.green('Run `ryndesign generate` to generate your design system!'));\n },\n});\n\nfunction generateConfig(platforms: string[], darkMode: boolean): string {\n const imports: string[] = [];\n const generators: string[] = [];\n\n for (const platform of platforms) {\n const pkgName = `@ryndesign/generator-${platform}`;\n const varName = platform.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n imports.push(`import ${varName} from '${pkgName}';`);\n\n if (['react', 'vue', 'svelte'].includes(platform)) {\n generators.push(` ${varName}({\n outDir: 'generated/${platform}',\n cssStrategy: 'css-variables',\n typescript: true,${darkMode ? \"\\n darkMode: 'media+class',\" : ''}\n })`);\n } else {\n generators.push(` ${varName}({\n outDir: 'generated/${platform}',\n })`);\n }\n }\n\n return `import { defineConfig } from '@ryndesign/cli';\n${imports.join('\\n')}\n\nexport default defineConfig({\n tokens: ['tokens/**/*.tokens.json'],\n components: ['components/**/*.component.json'],\n outDir: 'generated',\n${darkMode ? `\n themes: {\n default: 'light',\n dark: { file: 'tokens/dark.tokens.json' },\n },\n` : ''}\n generators: [\n${generators.join(',\\n')}\n ],\n\n preview: { port: 4400, open: true },\n});\n`;\n}\n\nfunction getDefaultTokens() {\n return {\n color: {\n $type: 'color',\n primary: { $value: '#3B82F6' },\n white: { $value: '#FFFFFF' },\n black: { $value: '#000000' },\n gray: {\n 50: { $value: '#F9FAFB' },\n 100: { $value: '#F3F4F6' },\n 400: { $value: '#9CA3AF' },\n 800: { $value: '#1F2937' },\n 900: { $value: '#111827' },\n },\n },\n spacing: {\n $type: 'dimension',\n sm: { $value: '8px' },\n md: { $value: '16px' },\n lg: { $value: '24px' },\n },\n };\n}\n\nfunction getSemanticTokens() {\n return {\n color: {\n $type: 'color',\n background: {\n primary: { $value: '{color.white}' },\n secondary: { $value: '{color.gray.50}' },\n },\n text: {\n primary: { $value: '{color.gray.900}' },\n },\n },\n };\n}\n\nfunction getDarkTokens() {\n return {\n $description: 'Dark theme overrides',\n $extensions: { 'com.ryndesign.theme': { name: 'dark', extends: 'default' } },\n color: {\n $type: 'color',\n background: {\n primary: { $value: '{color.gray.900}' },\n secondary: { $value: '{color.gray.800}' },\n },\n text: {\n primary: { $value: '{color.gray.50}' },\n },\n },\n };\n}\n\nfunction detectPackageManager(cwd: string): string {\n try {\n const userAgent = process.env.npm_config_user_agent || '';\n if (userAgent.startsWith('pnpm')) return 'pnpm';\n if (userAgent.startsWith('yarn')) return 'yarn';\n if (userAgent.startsWith('bun')) return 'bun';\n } catch {}\n\n // Check for lock files\n if (existsSync(path.join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(path.join(cwd, 'yarn.lock'))) return 'yarn';\n if (existsSync(path.join(cwd, 'bun.lockb'))) return 'bun';\n return 'npm';\n}\n","import type { RynDesignConfig } from '@ryndesign/plugin-api';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { createRequire } from 'node:module';\n\nconst CONFIG_NAMES = [\n 'ryndesign.config.ts',\n 'ryndesign.config.js',\n 'ryndesign.config.mjs',\n 'ryndesign.config.json',\n];\n\nexport async function loadConfig(configPath?: string): Promise<RynDesignConfig | null> {\n const cwd = process.cwd();\n\n // If explicit path provided, try only that\n if (configPath) {\n return loadConfigFile(path.resolve(cwd, configPath));\n }\n\n // Try each config name in order\n for (const name of CONFIG_NAMES) {\n const absolutePath = path.resolve(cwd, name);\n try {\n await fs.access(absolutePath);\n return loadConfigFile(absolutePath);\n } catch {\n continue;\n }\n }\n\n return null;\n}\n\nasync function loadConfigFile(absolutePath: string): Promise<RynDesignConfig | null> {\n try {\n await fs.access(absolutePath);\n } catch {\n return null;\n }\n\n // JSON config\n if (absolutePath.endsWith('.json')) {\n try {\n const content = await fs.readFile(absolutePath, 'utf-8');\n const config = JSON.parse(content) as RynDesignConfig;\n return validateConfig(config, absolutePath);\n } catch (err) {\n throw new Error(`Failed to parse config ${absolutePath}: ${(err as Error).message}`);\n }\n }\n\n // JS/TS config\n try {\n // Discover all @ryndesign/* packages from the CLI's own node_modules\n // so globally-installed generators are resolvable even without local node_modules.\n const alias = await resolveCliPackageAlias();\n\n const { createJiti } = await import('jiti');\n const loader = createJiti(absolutePath, {\n interopDefault: true,\n alias,\n });\n const config = await loader.import(absolutePath) as Record<string, unknown>;\n const resolved = (config.default ?? config) as RynDesignConfig;\n return validateConfig(resolved, absolutePath);\n } catch (err) {\n // Fallback: try dynamic import\n try {\n const mod = await import(absolutePath);\n const resolved = mod.default ?? mod;\n return validateConfig(resolved, absolutePath);\n } catch {\n throw new Error(`Failed to load config ${absolutePath}: ${(err as Error).message}`);\n }\n }\n}\n\nfunction validateConfig(config: RynDesignConfig, filePath: string): RynDesignConfig {\n if (!config.tokens || !Array.isArray(config.tokens) || config.tokens.length === 0) {\n throw new Error(`Invalid config in ${filePath}: \"tokens\" must be a non-empty array of glob patterns`);\n }\n\n if (config.components && !Array.isArray(config.components)) {\n throw new Error(`Invalid config in ${filePath}: \"components\" must be an array of glob patterns`);\n }\n\n if (config.generators && !Array.isArray(config.generators)) {\n throw new Error(`Invalid config in ${filePath}: \"generators\" must be an array`);\n }\n\n return config;\n}\n\nasync function resolveCliPackageAlias(): Promise<Record<string, string>> {\n const alias: Record<string, string> = {};\n try {\n const cliRequire = createRequire(import.meta.url);\n const pluginApiPkg = cliRequire.resolve('@ryndesign/plugin-api/package.json');\n const ryndesignDir = path.resolve(path.dirname(pluginApiPkg), '..');\n\n const entries = await fs.readdir(ryndesignDir);\n for (const entry of entries) {\n const pkgJsonPath = path.join(ryndesignDir, entry, 'package.json');\n try {\n await fs.access(pkgJsonPath);\n alias[`@ryndesign/${entry}`] = path.join(ryndesignDir, entry);\n } catch {\n // Not a valid package, skip\n }\n }\n } catch {\n // CLI packages not discoverable, alias stays empty\n }\n return alias;\n}\n\n// Re-export defineConfig for convenience\nexport { defineConfig } from '@ryndesign/plugin-api';\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { buildTokenSet, loadComponents, resolveComponent, createGeneratorHelpers } from '@ryndesign/core';\nimport { loadConfig } from '../config.js';\nimport type { GeneratedFile, GeneratorPlugin } from '@ryndesign/plugin-api';\n\nexport default defineCommand({\n meta: {\n name: 'generate',\n description: 'Generate design system files for target platforms',\n },\n args: {\n platform: {\n type: 'string',\n alias: 'p',\n description: 'Comma-separated list of platforms to generate',\n },\n watch: {\n type: 'boolean',\n alias: 'w',\n description: 'Watch for changes and regenerate',\n default: false,\n },\n clean: {\n type: 'boolean',\n description: 'Clean output directory before generating',\n default: false,\n },\n 'dry-run': {\n type: 'boolean',\n description: 'Show what would be generated without writing files',\n default: false,\n },\n config: {\n type: 'string',\n alias: 'c',\n description: 'Path to config file',\n default: 'ryndesign.config.ts',\n },\n },\n async run({ args }) {\n const dryRun = args['dry-run'] as boolean;\n console.log(pc.cyan(`⚡ RynDesign Generate${dryRun ? ' (dry run)' : ''}\\n`));\n\n const config = await loadConfig(args.config);\n if (!config) {\n console.error(pc.red('Config file not found. Run `ryndesign init` first.'));\n process.exit(1);\n }\n\n const cwd = process.cwd();\n\n // Clean output directory if requested\n if (args.clean && config.outDir) {\n const outDir = path.resolve(cwd, config.outDir);\n await fs.rm(outDir, { recursive: true, force: true });\n await fs.mkdir(outDir, { recursive: true });\n console.log(pc.yellow(`Cleaned ${config.outDir}/`));\n }\n\n // Build token set\n console.log(pc.gray('Building token set...'));\n const tokenSet = await buildTokenSet({\n tokens: config.tokens,\n basePath: cwd,\n themes: config.themes as any,\n name: 'design-system',\n });\n\n console.log(pc.green(`✓ Resolved ${tokenSet.tokens.length} tokens`));\n if (Object.keys(tokenSet.themes.themes).length > 0) {\n console.log(pc.green(`✓ Resolved themes: ${Object.keys(tokenSet.themes.themes).join(', ')}`));\n }\n\n // Filter generators by platform if specified\n let generators = config.generators ?? [];\n if (args.platform) {\n const targetPlatforms = (args.platform as string).split(',').map(s => s.trim());\n generators = generators.filter(g => targetPlatforms.includes(g.name));\n }\n\n if (generators.length === 0) {\n console.log(pc.yellow('No generators configured. Add generators to your ryndesign.config.ts'));\n return;\n }\n\n // Load and resolve components\n const components = config.components\n ? await loadComponents(config.components, cwd)\n : [];\n\n if (components.length > 0) {\n console.log(pc.green(`✓ Loaded ${components.length} component(s)`));\n }\n\n // Resolve all components\n const resolvedComponents = components.map(compDef => resolveComponent(compDef, tokenSet));\n\n // Run generators\n const allFiles: GeneratedFile[] = [];\n const summary: { name: string; files: number; bytes: number }[] = [];\n\n for (const generator of generators) {\n console.log(pc.gray(`\\nGenerating ${generator.displayName}...`));\n let genFiles = 0;\n let genBytes = 0;\n\n const ctx = {\n tokenSet,\n config: { outDir: config.outDir ?? 'generated', ...generator },\n outputDir: path.resolve(cwd, config.outDir ?? 'generated'),\n helpers: createGeneratorHelpers(),\n components: resolvedComponents,\n };\n\n try {\n // Generate tokens\n const tokenFiles = await generator.generateTokens(ctx);\n allFiles.push(...tokenFiles);\n\n for (const file of tokenFiles) {\n genFiles++;\n genBytes += Buffer.byteLength(file.content, 'utf-8');\n if (!dryRun) {\n const filePath = path.resolve(ctx.outputDir, file.path);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, file.content, 'utf-8');\n }\n }\n\n // Generate components\n for (const resolvedComp of resolvedComponents) {\n const compFiles = await generator.generateComponent(resolvedComp, ctx);\n allFiles.push(...compFiles);\n\n for (const file of compFiles) {\n genFiles++;\n genBytes += Buffer.byteLength(file.content, 'utf-8');\n if (!dryRun) {\n const filePath = path.resolve(ctx.outputDir, file.path);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, file.content, 'utf-8');\n }\n }\n }\n\n console.log(pc.green(` ✓ ${genFiles} files generated for ${generator.displayName}`));\n summary.push({ name: generator.displayName, files: genFiles, bytes: genBytes });\n } catch (err) {\n console.error(pc.red(` ✗ ${generator.displayName} failed: ${(err as Error).message}`));\n }\n }\n\n // Summary table\n if (summary.length > 0) {\n console.log(pc.gray('\\n Platform Files Size'));\n console.log(pc.gray(' ─────────────────────────────────'));\n for (const s of summary) {\n const sizeStr = s.bytes < 1024 ? `${s.bytes} B` : `${(s.bytes / 1024).toFixed(1)} KB`;\n console.log(` ${s.name.padEnd(18)} ${String(s.files).padStart(5)} ${sizeStr}`);\n }\n }\n\n // Run hooks\n if (config.hooks?.['generate:complete']) {\n await config.hooks['generate:complete'](allFiles);\n }\n\n console.log(pc.green(`\\n✓ Generation complete! ${allFiles.length} files ${dryRun ? 'would be written' : 'written'}.`));\n\n // Watch mode\n if (args.watch) {\n console.log(pc.cyan('\\nWatching for changes...'));\n const { watch } = await import('chokidar');\n const watchPatterns = [...config.tokens, ...(config.components ?? [])];\n const watcher = watch(watchPatterns, {\n cwd,\n ignoreInitial: true,\n });\n\n watcher.on('change', async (changedPath) => {\n console.log(pc.gray(`\\nFile changed: ${changedPath}`));\n try {\n const newTokenSet = await buildTokenSet({\n tokens: config.tokens,\n basePath: cwd,\n themes: config.themes as any,\n });\n\n // Reload components\n const newComponents = config.components\n ? await loadComponents(config.components, cwd)\n : [];\n const newResolvedComponents = newComponents.map(c => resolveComponent(c, newTokenSet));\n\n // Re-run generators\n for (const generator of generators) {\n try {\n const ctx = {\n tokenSet: newTokenSet,\n config: { outDir: config.outDir ?? 'generated', ...generator },\n outputDir: path.resolve(cwd, config.outDir ?? 'generated'),\n helpers: createGeneratorHelpers(),\n components: newResolvedComponents,\n };\n\n const tokenFiles = await generator.generateTokens(ctx);\n for (const file of tokenFiles) {\n const filePath = path.resolve(ctx.outputDir, file.path);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, file.content, 'utf-8');\n }\n\n for (const resolvedComp of newResolvedComponents) {\n const compFiles = await generator.generateComponent(resolvedComp, ctx);\n for (const file of compFiles) {\n const filePath = path.resolve(ctx.outputDir, file.path);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, file.content, 'utf-8');\n }\n }\n } catch (err) {\n console.error(pc.red(` ✗ ${generator.displayName}: ${(err as Error).message}`));\n }\n }\n console.log(pc.green('✓ Rebuilt and regenerated'));\n } catch (err) {\n console.error(pc.red(`Error: ${(err as Error).message}`));\n }\n });\n }\n },\n});\n\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport { readAndMergeTokenFiles, validateTree, buildTokenSet, postValidate, TokenValidationError } from '@ryndesign/core';\nimport { loadConfig } from '../config.js';\n\nexport default defineCommand({\n meta: {\n name: 'validate',\n description: 'Validate design token files',\n },\n args: {\n path: {\n type: 'positional',\n description: 'Path to token file(s)',\n required: false,\n },\n config: {\n type: 'string',\n alias: 'c',\n description: 'Path to config file',\n default: 'ryndesign.config.ts',\n },\n strict: {\n type: 'boolean',\n description: 'Treat warnings as errors',\n default: false,\n },\n },\n async run({ args }) {\n console.log(pc.cyan(' RynDesign Validate\\n'));\n\n const config = await loadConfig(args.config as string);\n const patterns = args.path\n ? [args.path as string]\n : config?.tokens ?? ['tokens/**/*.tokens.json'];\n\n try {\n // Step 1: Parse and validate structure\n const tree = await readAndMergeTokenFiles(patterns);\n validateTree(tree);\n\n // Step 2: Build full token set for post-validation\n const tokenSet = await buildTokenSet({\n tokens: patterns,\n basePath: process.cwd(),\n });\n\n // Step 3: Post-resolution validation\n const issues = postValidate(tokenSet.tokens, tokenSet.themes);\n const errors = issues.filter(i => i.severity === 'error');\n const warnings = issues.filter(i => i.severity === 'warning');\n\n // Summary\n console.log(pc.green(` ${tokenSet.tokens.length} tokens resolved`));\n console.log(pc.green(` ${tokenSet.groups.length} groups`));\n const themeCount = Object.keys(tokenSet.themes.themes).length;\n if (themeCount > 0) {\n console.log(pc.green(` ${themeCount} theme(s): ${Object.keys(tokenSet.themes.themes).join(', ')}`));\n }\n\n if (errors.length > 0) {\n console.error(pc.red(`\\n ${errors.length} error(s):\\n`));\n for (const issue of errors) {\n console.error(` ${pc.red('x')} ${issue.path}: ${issue.message}`);\n }\n }\n\n if (warnings.length > 0) {\n console.log(pc.yellow(`\\n ${warnings.length} warning(s):\\n`));\n for (const issue of warnings) {\n console.log(` ${pc.yellow('!')} ${issue.path}: ${issue.message}`);\n }\n }\n\n if (errors.length === 0 && warnings.length === 0) {\n console.log(pc.green('\\n All tokens are valid!'));\n } else if (errors.length === 0) {\n console.log(pc.green('\\n Tokens are valid (with warnings)'));\n }\n\n // --strict: exit with error if any warnings\n if (args.strict && (errors.length > 0 || warnings.length > 0)) {\n process.exit(1);\n }\n if (errors.length > 0) {\n process.exit(1);\n }\n } catch (err) {\n if (err instanceof TokenValidationError) {\n console.error(pc.red(` Validation failed with ${err.errors.length} issue(s):\\n`));\n for (const issue of err.errors) {\n const icon = issue.severity === 'error' ? pc.red('x') : pc.yellow('!');\n console.error(` ${icon} ${issue.path.join('.')}: ${issue.message}`);\n }\n process.exit(1);\n }\n throw err;\n }\n },\n});\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport { loadConfig } from '../config.js';\n\nexport default defineCommand({\n meta: {\n name: 'preview',\n description: 'Start the design system preview server',\n },\n args: {\n config: {\n type: 'string',\n alias: 'c',\n description: 'Path to config file',\n default: 'ryndesign.config.ts',\n },\n port: {\n type: 'string',\n description: 'Port to run the preview server on',\n },\n open: {\n type: 'boolean',\n description: 'Open browser automatically',\n default: true,\n },\n },\n async run({ args }) {\n console.log(pc.cyan('🖥 RynDesign Preview\\n'));\n\n const config = await loadConfig(args.config as string);\n const port = args.port\n ? parseInt(args.port as string, 10)\n : config?.preview?.port ?? 4400;\n\n let previewModule;\n try {\n previewModule = await import('@ryndesign/preview');\n } catch {\n console.log(pc.yellow('Preview package not found. Install @ryndesign/preview'));\n console.log(pc.gray(' npm install @ryndesign/preview'));\n return;\n }\n\n await previewModule.startPreviewServer({\n port,\n open: args.open as boolean,\n });\n },\n});\n","import { defineCommand } from 'citty';\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nconst AVAILABLE_COMPONENTS = ['button', 'input', 'card', 'checkbox', 'toggle', 'badge', 'avatar'];\n\n// Token dependencies for each component\nconst COMPONENT_TOKENS: Record<string, Record<string, any>> = {\n button: {\n 'component.button': {\n $type: 'color',\n primary: {\n background: { $value: '{color.primary}' },\n text: { $value: '{color.white}' },\n hover: { background: { $value: '{color.primary}' } },\n pressed: { background: { $value: '{color.primary}' } },\n },\n secondary: {\n background: { $value: '{color.secondary}' },\n text: { $value: '{color.white}' },\n },\n borderRadius: { $type: 'dimension', $value: '8px' },\n sm: { paddingX: { $type: 'dimension', $value: '12px' }, paddingY: { $type: 'dimension', $value: '6px' }, fontSize: { $type: 'dimension', $value: '14px' } },\n md: { paddingX: { $type: 'dimension', $value: '16px' }, paddingY: { $type: 'dimension', $value: '10px' }, fontSize: { $type: 'dimension', $value: '16px' } },\n lg: { paddingX: { $type: 'dimension', $value: '24px' }, paddingY: { $type: 'dimension', $value: '14px' }, fontSize: { $type: 'dimension', $value: '18px' } },\n disabled: { background: { $value: '{color.gray.300}' } },\n },\n },\n};\n\nexport default defineCommand({\n meta: {\n name: 'add',\n description: 'Add a component definition',\n },\n args: {\n name: {\n type: 'positional',\n description: 'Component name to add',\n required: false,\n },\n 'with-tokens': {\n type: 'boolean',\n description: 'Also scaffold component tokens',\n default: false,\n },\n },\n async run({ args }) {\n const name = args.name as string || await p.select({\n message: 'Choose a component to add:',\n options: AVAILABLE_COMPONENTS.map(c => ({\n value: c,\n label: c.charAt(0).toUpperCase() + c.slice(1),\n })),\n }) as string;\n\n if (p.isCancel(name)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const cwd = process.cwd();\n const componentsDir = path.join(cwd, 'components');\n await fs.mkdir(componentsDir, { recursive: true });\n\n const destPath = path.join(componentsDir, `${name}.component.json`);\n\n // Check if already exists\n try {\n await fs.access(destPath);\n console.log(pc.yellow(`Component ${name} already exists at ${destPath}`));\n return;\n } catch {\n // Doesn't exist, proceed\n }\n\n // Try to copy from bundled components\n let copied = false;\n const searchPaths = [\n path.resolve(__dirname, `../../components/${name}.component.json`),\n // ESM fallback\n typeof __dirname !== 'undefined'\n ? path.resolve(__dirname, `../../components/${name}.component.json`)\n : path.resolve(new URL('.', import.meta.url).pathname, `../../components/${name}.component.json`),\n ];\n\n for (const srcPath of searchPaths) {\n try {\n const content = await fs.readFile(srcPath, 'utf-8');\n await fs.writeFile(destPath, content);\n console.log(pc.green(` Added ${name} component to ${destPath}`));\n copied = true;\n break;\n } catch {\n continue;\n }\n }\n\n if (!copied) {\n console.error(pc.red(`Component \"${name}\" not found in available components.`));\n console.log(pc.gray(`Available: ${AVAILABLE_COMPONENTS.join(', ')}`));\n return;\n }\n\n // Scaffold component tokens if requested\n const withTokens = args['with-tokens'] as boolean;\n if (withTokens && COMPONENT_TOKENS[name]) {\n const tokensDir = path.join(cwd, 'tokens');\n await fs.mkdir(tokensDir, { recursive: true });\n const tokenFile = path.join(tokensDir, `${name}.tokens.json`);\n\n try {\n await fs.access(tokenFile);\n console.log(pc.yellow(` Token file already exists: ${tokenFile}`));\n } catch {\n await fs.writeFile(tokenFile, JSON.stringify(COMPONENT_TOKENS[name], null, 2));\n console.log(pc.green(` Created component tokens: ${tokenFile}`));\n }\n }\n },\n});\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { loadConfig } from '../config.js';\n\nexport default defineCommand({\n meta: {\n name: 'pull',\n description: 'Pull design tokens from Figma',\n },\n args: {\n 'file-key': {\n type: 'string',\n description: 'Figma file key',\n },\n token: {\n type: 'string',\n description: 'Figma personal access token',\n },\n config: {\n type: 'string',\n alias: 'c',\n description: 'Path to config file',\n default: 'ryndesign.config.ts',\n },\n output: {\n type: 'string',\n alias: 'o',\n description: 'Output file path',\n default: 'tokens/figma.tokens.json',\n },\n merge: {\n type: 'boolean',\n description: 'Merge with existing local tokens instead of overwriting',\n default: false,\n },\n strategy: {\n type: 'string',\n description: 'Merge strategy: prefer-remote, prefer-local, remote-only-new',\n default: 'prefer-remote',\n },\n },\n async run({ args }) {\n console.log(pc.cyan('📥 Figma Pull\\n'));\n\n const config = await loadConfig(args.config as string);\n const fileKey = (args['file-key'] as string) || config?.figma?.fileKey;\n const pat = (args.token as string) || config?.figma?.personalAccessToken || process.env.FIGMA_TOKEN;\n\n if (!fileKey) {\n console.error(pc.red('Missing Figma file key. Use --file-key or set in config.'));\n process.exit(1);\n }\n if (!pat) {\n console.error(pc.red('Missing Figma token. Use --token, set FIGMA_TOKEN env var, or configure in ryndesign.config.ts'));\n process.exit(1);\n }\n\n const shouldMerge = args.merge as boolean;\n const strategy = args.strategy as string;\n const validStrategies = ['prefer-remote', 'prefer-local', 'remote-only-new'];\n if (shouldMerge && !validStrategies.includes(strategy)) {\n console.error(pc.red(`Invalid merge strategy \"${strategy}\". Use: ${validStrategies.join(', ')}`));\n process.exit(1);\n }\n\n try {\n const { fetchFigmaVariables, mapFigmaToTokens, resolveFigmaModes, mergeTokens } = await import('@ryndesign/figma');\n\n console.log(pc.gray('Fetching variables from Figma...'));\n\n const variables = await fetchFigmaVariables({\n fileKey,\n personalAccessToken: pat,\n });\n\n console.log(pc.green(`✓ Fetched ${variables.length} variables`));\n\n const cwd = process.cwd();\n const modeMapping = config?.figma?.modeMapping;\n\n if (modeMapping) {\n // Resolve modes into separate files\n const modeFiles = resolveFigmaModes(variables, modeMapping);\n\n for (const [filePath, tree] of Object.entries(modeFiles)) {\n const absolutePath = path.resolve(cwd, filePath);\n await fs.mkdir(path.dirname(absolutePath), { recursive: true });\n\n if (shouldMerge) {\n const existing = await readJsonSafe(absolutePath);\n if (existing) {\n // For mode files, filter tokens belonging to this mode\n const modeTokens = variables.filter(t => {\n const modeName = Object.keys(modeMapping).find(m => modeMapping[m] === filePath);\n return modeName && t.modes[modeName] !== undefined;\n });\n\n const result = mergeTokens(existing, modeTokens, { strategy: strategy as any });\n await fs.writeFile(absolutePath, JSON.stringify(result.merged, null, 2), 'utf-8');\n console.log(pc.green(` ✓ Merged ${filePath}`) + pc.gray(` (+${result.stats.added} new, ${result.stats.updated} updated, ${result.stats.kept} kept)`));\n continue;\n }\n }\n\n await fs.writeFile(absolutePath, JSON.stringify(tree, null, 2), 'utf-8');\n console.log(pc.green(` ✓ Written ${filePath}`));\n }\n } else {\n // Write all to single file\n const outPath = path.resolve(cwd, args.output as string);\n await fs.mkdir(path.dirname(outPath), { recursive: true });\n\n if (shouldMerge) {\n const existing = await readJsonSafe(outPath);\n if (existing) {\n const result = mergeTokens(existing, variables, { strategy: strategy as any });\n await fs.writeFile(outPath, JSON.stringify(result.merged, null, 2), 'utf-8');\n console.log(pc.green(` ✓ Merged tokens/figma.tokens.json`) + pc.gray(` (+${result.stats.added} new, ${result.stats.updated} updated, ${result.stats.kept} kept)`));\n } else {\n // No existing file, write fresh\n const tree = mapFigmaToTokens(variables);\n await fs.writeFile(outPath, JSON.stringify(tree, null, 2), 'utf-8');\n console.log(pc.green(` ✓ Written tokens/figma.tokens.json`));\n }\n } else {\n const tree = mapFigmaToTokens(variables);\n await fs.writeFile(outPath, JSON.stringify(tree, null, 2), 'utf-8');\n console.log(pc.green(` ✓ Written tokens/figma.tokens.json`));\n }\n }\n\n console.log(pc.green('\\n✓ Figma pull complete!'));\n } catch (err) {\n console.error(pc.red(`Error: ${(err as Error).message}`));\n process.exit(1);\n }\n },\n});\n\nasync function readJsonSafe(absolutePath: string): Promise<Record<string, unknown> | null> {\n try {\n const content = await fs.readFile(absolutePath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport { buildTokenSet } from '@ryndesign/core';\nimport { loadConfig } from '../config.js';\n\nexport default defineCommand({\n meta: {\n name: 'push',\n description: 'Push design tokens to Figma',\n },\n args: {\n 'file-key': {\n type: 'string',\n description: 'Figma file key',\n },\n token: {\n type: 'string',\n description: 'Figma personal access token',\n },\n config: {\n type: 'string',\n description: 'Path to config file',\n default: 'ryndesign.config.ts',\n },\n },\n async run({ args }) {\n console.log(pc.cyan('📤 Figma Push\\n'));\n\n const config = await loadConfig(args.config as string);\n const fileKey = (args['file-key'] as string) || config?.figma?.fileKey;\n const pat = (args.token as string) || config?.figma?.personalAccessToken || process.env.FIGMA_TOKEN;\n\n if (!fileKey) {\n console.error(pc.red('Missing Figma file key. Use --file-key or set in config.'));\n process.exit(1);\n }\n if (!pat) {\n console.error(pc.red('Missing Figma token. Use --token, set FIGMA_TOKEN env var, or configure in ryndesign.config.ts'));\n process.exit(1);\n }\n\n try {\n const { pushVariablesToFigma } = await import('@ryndesign/figma');\n\n const cwd = process.cwd();\n console.log(pc.gray('Building token set...'));\n\n const tokenSet = await buildTokenSet({\n tokens: config?.tokens ?? ['tokens/**/*.tokens.json'],\n basePath: cwd,\n themes: config?.themes as any,\n });\n\n console.log(pc.green(`✓ Resolved ${tokenSet.tokens.length} tokens`));\n console.log(pc.gray('Pushing to Figma...'));\n\n const darkTokens = tokenSet.themes.themes['dark']?.tokens;\n\n await pushVariablesToFigma({\n fileKey,\n personalAccessToken: pat,\n tokens: tokenSet.tokens,\n darkTokens,\n });\n\n console.log(pc.green('\\n✓ Figma push complete!'));\n } catch (err) {\n console.error(pc.red(`Error: ${(err as Error).message}`));\n process.exit(1);\n }\n },\n});\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport { buildTokenSet } from '@ryndesign/core';\nimport { loadConfig } from '../config.js';\n\nexport default defineCommand({\n meta: {\n name: 'diff',\n description: 'Compare local tokens with Figma',\n },\n args: {\n 'file-key': {\n type: 'string',\n description: 'Figma file key',\n },\n token: {\n type: 'string',\n description: 'Figma personal access token',\n },\n config: {\n type: 'string',\n description: 'Path to config file',\n default: 'ryndesign.config.ts',\n },\n },\n async run({ args }) {\n console.log(pc.cyan('🔍 Figma Diff\\n'));\n\n const config = await loadConfig(args.config as string);\n const fileKey = (args['file-key'] as string) || config?.figma?.fileKey;\n const pat = (args.token as string) || config?.figma?.personalAccessToken || process.env.FIGMA_TOKEN;\n\n if (!fileKey) {\n console.error(pc.red('Missing Figma file key. Use --file-key or set in config.'));\n process.exit(1);\n }\n if (!pat) {\n console.error(pc.red('Missing Figma token. Use --token, set FIGMA_TOKEN env var, or configure in ryndesign.config.ts'));\n process.exit(1);\n }\n\n try {\n const { fetchFigmaVariables, diffFigmaTokens } = await import('@ryndesign/figma');\n\n const cwd = process.cwd();\n\n // Build local tokens\n console.log(pc.gray('Building local token set...'));\n const tokenSet = await buildTokenSet({\n tokens: config?.tokens ?? ['tokens/**/*.tokens.json'],\n basePath: cwd,\n themes: config?.themes as any,\n });\n\n // Fetch remote tokens\n console.log(pc.gray('Fetching Figma variables...'));\n const remoteTokens = await fetchFigmaVariables({\n fileKey,\n personalAccessToken: pat,\n });\n\n // Diff\n const result = diffFigmaTokens(tokenSet.tokens, remoteTokens);\n\n // Display results\n if (result.added.length > 0) {\n console.log(pc.green(`\\n+ Added (local only): ${result.added.length}`));\n for (const entry of result.added) {\n console.log(pc.green(` + ${entry.path}: ${JSON.stringify(entry.local)}`));\n }\n }\n\n if (result.removed.length > 0) {\n console.log(pc.red(`\\n- Removed (Figma only): ${result.removed.length}`));\n for (const entry of result.removed) {\n console.log(pc.red(` - ${entry.path}: ${JSON.stringify(entry.remote)}`));\n }\n }\n\n if (result.modified.length > 0) {\n console.log(pc.yellow(`\\n~ Modified: ${result.modified.length}`));\n for (const entry of result.modified) {\n console.log(pc.yellow(` ~ ${entry.path}: ${JSON.stringify(entry.local)} ← ${JSON.stringify(entry.remote)}`));\n }\n }\n\n console.log(pc.gray(`\\n Unchanged: ${result.unchanged}`));\n\n const total = result.added.length + result.removed.length + result.modified.length;\n if (total === 0) {\n console.log(pc.green('\\n✓ Local and Figma tokens are in sync!'));\n } else {\n console.log(pc.yellow(`\\n${total} difference(s) found.`));\n }\n } catch (err) {\n console.error(pc.red(`Error: ${(err as Error).message}`));\n process.exit(1);\n }\n },\n});\n","import { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { loadConfig } from '../config.js';\n\nexport default defineCommand({\n meta: {\n name: 'figma',\n description: 'Figma integration commands',\n },\n subCommands: {\n pull: () => import('./figma-pull.js').then(m => m.default),\n push: () => import('./figma-push.js').then(m => m.default),\n diff: () => import('./figma-diff.js').then(m => m.default),\n },\n});\n","import { defineCommand } from 'citty';\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nconst GENERATORS = ['react', 'vue', 'svelte', 'rails', 'swiftui', 'uikit', 'compose', 'android-view'];\n\nexport default defineCommand({\n meta: {\n name: 'eject',\n description: 'Eject a generator for customization',\n },\n args: {\n name: {\n type: 'positional',\n description: 'Generator name to eject',\n required: false,\n },\n },\n async run({ args }) {\n p.intro(pc.bgYellow(pc.black(' RynDesign Eject ')));\n\n const name = args.name as string || await p.select({\n message: 'Select a generator to eject:',\n options: GENERATORS.map(g => ({ value: g, label: `@ryndesign/generator-${g}` })),\n }) as string;\n\n if (p.isCancel(name)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n if (!GENERATORS.includes(name)) {\n console.error(pc.red(`Unknown generator: ${name}`));\n console.log(pc.gray(`Available: ${GENERATORS.join(', ')}`));\n process.exit(1);\n }\n\n const cwd = process.cwd();\n const destDir = path.join(cwd, 'generators', name);\n\n // Check if already ejected\n try {\n await fs.access(destDir);\n console.error(pc.yellow(`Generator \"${name}\" already ejected at generators/${name}/`));\n process.exit(0);\n } catch {\n // Doesn't exist, proceed\n }\n\n const confirm = await p.confirm({\n message: `Eject @ryndesign/generator-${name} to generators/${name}/?`,\n initialValue: true,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const s = p.spinner();\n s.start(`Ejecting generator-${name}...`);\n\n try {\n // Find the installed package source\n const pkgPath = require.resolve(`@ryndesign/generator-${name}/package.json`, {\n paths: [cwd],\n });\n const pkgDir = path.dirname(pkgPath);\n const srcDir = path.join(pkgDir, 'src');\n\n // Check if source exists; if not, copy dist\n let sourceDir: string;\n try {\n await fs.access(srcDir);\n sourceDir = srcDir;\n } catch {\n // Fallback to dist\n sourceDir = path.join(pkgDir, 'dist');\n }\n\n // Create destination\n await fs.mkdir(destDir, { recursive: true });\n\n // Copy files\n await copyDir(sourceDir, destDir);\n\n s.stop(`Generator ejected!`);\n\n p.note(\n [\n `Files copied to: ${pc.green(`generators/${name}/`)}`,\n '',\n 'Update your ryndesign.config.ts:',\n pc.gray(` import customGenerator from './generators/${name}/index.js';`),\n '',\n 'Replace the original generator with your custom one.',\n ].join('\\n'),\n 'Next steps'\n );\n } catch (err) {\n s.stop('Eject failed');\n console.error(pc.red(`Error: ${(err as Error).message}`));\n\n // Fallback: create a skeleton generator\n s.start('Creating skeleton generator...');\n await createSkeletonGenerator(destDir, name);\n s.stop('Skeleton generator created!');\n\n p.note(\n [\n `Skeleton created at: ${pc.green(`generators/${name}/`)}`,\n '',\n 'Customize the generator files and update your config.',\n ].join('\\n'),\n 'Next steps'\n );\n }\n\n p.outro(pc.green('Done!'));\n },\n});\n\nasync function copyDir(src: string, dest: string): Promise<void> {\n await fs.mkdir(dest, { recursive: true });\n const entries = await fs.readdir(src, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n\n if (entry.isDirectory()) {\n await copyDir(srcPath, destPath);\n } else {\n await fs.copyFile(srcPath, destPath);\n }\n }\n}\n\nasync function createSkeletonGenerator(dir: string, name: string): Promise<void> {\n const pascalName = name.charAt(0).toUpperCase() + name.slice(1).replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n\n const indexContent = `import type { GeneratorPlugin, GeneratorContext, GeneratedFile, ResolvedComponent } from '@ryndesign/plugin-api';\n\nexport default function ${name.replace(/-/g, '')}Generator(options = {}): GeneratorPlugin {\n return {\n name: '${name}',\n displayName: '${pascalName}',\n platform: 'web',\n outputExtensions: ['.ts', '.css'],\n\n async generateTokens(ctx: GeneratorContext): Promise<GeneratedFile[]> {\n // TODO: Implement token generation\n return [];\n },\n\n async generateComponent(comp: ResolvedComponent, ctx: GeneratorContext): Promise<GeneratedFile[]> {\n // TODO: Implement component generation\n return [];\n },\n };\n}\n`;\n\n await fs.writeFile(path.join(dir, 'index.ts'), indexContent, 'utf-8');\n}\n","#!/usr/bin/env node\nimport { runMain } from 'citty';\nimport { main } from './commands/main.js';\n\nrunMain(main);\n","import { defineCommand } from 'citty';\n\nexport const main = defineCommand({\n meta: {\n name: 'ryndesign',\n version: '0.1.0',\n description: 'Multi-platform design system generator',\n },\n subCommands: {\n init: () => import('./init.js').then(m => m.default),\n generate: () => import('./generate.js').then(m => m.default),\n validate: () => import('./validate.js').then(m => m.default),\n preview: () => import('./preview.js').then(m => m.default),\n add: () => import('./add.js').then(m => m.default),\n figma: () => import('./figma.js').then(m => m.default),\n eject: () => import('./eject.js').then(m => m.default),\n },\n});\n"],"mappings":"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","names":["path","pc","s","fs","path","fs","import_meta","import_node_path","import_promises","import_citty","import_picocolors","import_node_path","import_promises","pc","path","fs","import_citty","import_picocolors","import_core","pc","import_citty","import_picocolors","pc","import_citty","p","import_picocolors","import_promises","import_node_path","import_meta","path","fs","pc","fs","import_citty","import_picocolors","import_promises","import_node_path","pc","path","import_citty","import_picocolors","import_core","pc","import_citty","import_picocolors","import_core","pc","import_citty","import_picocolors","import_node_path","import_promises","fs","path","import_citty","p","import_picocolors","import_promises","import_node_path","pc","confirm","import_citty","import_citty"]}
package/dist/bin.js CHANGED
@@ -13,7 +13,7 @@ var main = defineCommand({
13
13
  description: "Multi-platform design system generator"
14
14
  },
15
15
  subCommands: {
16
- init: () => import("./init-3GPO2FZN.js").then((m) => m.default),
16
+ init: () => import("./init-IF35F2N7.js").then((m) => m.default),
17
17
  generate: () => import("./generate-TKLUCGRF.js").then((m) => m.default),
18
18
  validate: () => import("./validate-EGVTSB3N.js").then((m) => m.default),
19
19
  preview: () => import("./preview-EOO6TMLY.js").then((m) => m.default),
@@ -233,6 +233,9 @@ function getDefaultTokens() {
233
233
  black: { $value: "#000000" },
234
234
  gray: {
235
235
  50: { $value: "#F9FAFB" },
236
+ 100: { $value: "#F3F4F6" },
237
+ 400: { $value: "#9CA3AF" },
238
+ 800: { $value: "#1F2937" },
236
239
  900: { $value: "#111827" }
237
240
  }
238
241
  },
@@ -290,4 +293,4 @@ function detectPackageManager(cwd) {
290
293
  export {
291
294
  init_default as default
292
295
  };
293
- //# sourceMappingURL=init-3GPO2FZN.js.map
296
+ //# sourceMappingURL=init-IF35F2N7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/init.ts"],"sourcesContent":["import { defineCommand } from 'citty';\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport fs from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { execSync } from 'node:child_process';\n\nexport default defineCommand({\n meta: {\n name: 'init',\n description: 'Initialize a new RynDesign project',\n },\n args: {\n template: {\n type: 'string',\n description: 'Template to use (minimal or full)',\n default: 'minimal',\n },\n platforms: {\n type: 'string',\n description: 'Comma-separated list of target platforms',\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(' RynDesign Init ')));\n\n const template = args.template || await p.select({\n message: 'Choose a template:',\n options: [\n { value: 'minimal', label: 'Minimal', hint: 'Basic color, spacing, typography tokens' },\n { value: 'full', label: 'Full', hint: 'Complete token set with shadows, borders, gradients' },\n ],\n }) as string;\n\n if (p.isCancel(template)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platformsInput = args.platforms || await p.multiselect({\n message: 'Select target platforms:',\n initialValues: ['react', 'swiftui'],\n options: [\n { value: 'react', label: 'React', hint: 'recommended' },\n { value: 'swiftui', label: 'SwiftUI', hint: 'recommended' },\n { value: 'vue', label: 'Vue' },\n { value: 'svelte', label: 'Svelte' },\n { value: 'rails', label: 'Rails' },\n { value: 'uikit', label: 'UIKit' },\n { value: 'compose', label: 'Jetpack Compose' },\n { value: 'android-view', label: 'Android View' },\n ],\n required: true,\n }) as string[];\n\n if (p.isCancel(platformsInput)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platforms = Array.isArray(platformsInput)\n ? platformsInput\n : (platformsInput as string).split(',').map(s => s.trim());\n\n const darkMode = await p.confirm({\n message: 'Enable dark mode support?',\n initialValue: true,\n });\n\n if (p.isCancel(darkMode)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const s = p.spinner();\n s.start('Creating project files...');\n\n const cwd = process.cwd();\n\n // Create directories\n await fs.mkdir(path.join(cwd, 'tokens'), { recursive: true });\n await fs.mkdir(path.join(cwd, 'components'), { recursive: true });\n await fs.mkdir(path.join(cwd, 'generated'), { recursive: true });\n\n // Copy template tokens\n // ESM-compatible path resolution\n const templateDir = path.resolve(\n typeof __dirname !== 'undefined'\n ? path.resolve(__dirname, '../../templates')\n : path.resolve(new URL('.', import.meta.url).pathname, '../../templates')\n );\n const templateFile = template === 'full' ? 'full.tokens.json' : 'minimal.tokens.json';\n\n try {\n const templateContent = await fs.readFile(\n path.join(templateDir, templateFile),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'tokens', 'base.tokens.json'),\n templateContent\n );\n } catch {\n // If templates not found, create a basic one inline\n await fs.writeFile(\n path.join(cwd, 'tokens', 'base.tokens.json'),\n JSON.stringify(getDefaultTokens(), null, 2)\n );\n }\n\n // Create semantic tokens\n await fs.writeFile(\n path.join(cwd, 'tokens', 'semantic.tokens.json'),\n JSON.stringify(getSemanticTokens(), null, 2)\n );\n\n // Create dark theme if enabled\n if (darkMode) {\n try {\n const darkContent = await fs.readFile(\n path.join(templateDir, 'dark.tokens.json'),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'tokens', 'dark.tokens.json'),\n darkContent\n );\n } catch {\n await fs.writeFile(\n path.join(cwd, 'tokens', 'dark.tokens.json'),\n JSON.stringify(getDarkTokens(), null, 2)\n );\n }\n }\n\n // Create config file\n const configContent = generateConfig(platforms, darkMode as boolean);\n await fs.writeFile(path.join(cwd, 'ryndesign.config.ts'), configContent);\n\n // Copy button component\n try {\n const buttonComp = await fs.readFile(\n path.join(templateDir, '../components/button.component.json'),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'components', 'button.component.json'),\n buttonComp\n );\n } catch {\n // Skip if not found\n }\n\n // Add generated/ to .gitignore\n const gitignorePath = path.join(cwd, '.gitignore');\n try {\n let gitignore = '';\n try {\n gitignore = await fs.readFile(gitignorePath, 'utf-8');\n } catch {\n // File doesn't exist yet\n }\n if (!gitignore.includes('generated/')) {\n gitignore += (gitignore.endsWith('\\n') || gitignore === '' ? '' : '\\n') + 'generated/\\n';\n await fs.writeFile(gitignorePath, gitignore);\n }\n } catch {\n // Skip if can't write .gitignore\n }\n\n // Ensure package.json exists, then add scripts and dependencies\n const pkgJsonPath = path.join(cwd, 'package.json');\n let pkg: Record<string, unknown>;\n try {\n const pkgContent = await fs.readFile(pkgJsonPath, 'utf-8');\n pkg = JSON.parse(pkgContent);\n } catch {\n // No package.json yet — create one\n const dirName = path.basename(cwd);\n pkg = {\n name: dirName,\n version: '1.0.0',\n private: true,\n type: 'module',\n };\n }\n\n if (!pkg.scripts || typeof pkg.scripts !== 'object') pkg.scripts = {};\n const scripts = pkg.scripts as Record<string, string>;\n if (!scripts['generate']) scripts['generate'] = 'ryndesign generate';\n if (!scripts['preview']) scripts['preview'] = 'ryndesign preview';\n\n // Add generator packages as devDependencies\n if (!pkg.devDependencies || typeof pkg.devDependencies !== 'object') pkg.devDependencies = {};\n const devDeps = pkg.devDependencies as Record<string, string>;\n devDeps['@ryndesign/cli'] = 'latest';\n for (const platform of platforms) {\n devDeps[`@ryndesign/generator-${platform}`] = 'latest';\n }\n\n await fs.writeFile(pkgJsonPath, JSON.stringify(pkg, null, 2) + '\\n');\n\n s.stop('Project files created!');\n\n // Install dependencies\n const installSpinner = p.spinner();\n installSpinner.start('Installing dependencies...');\n try {\n const pm = detectPackageManager(cwd);\n execSync(`${pm} install`, { cwd, stdio: 'pipe' });\n installSpinner.stop('Dependencies installed!');\n } catch {\n installSpinner.stop(pc.yellow('Could not auto-install. Run `npm install` manually.'));\n }\n\n p.note(\n [\n `${pc.green('tokens/')} - Your design tokens`,\n `${pc.green('components/')} - Component definitions`,\n `${pc.green('generated/')} - Generated output (gitignored)`,\n `${pc.green('ryndesign.config.ts')} - Configuration`,\n ].join('\\n'),\n 'Project structure'\n );\n\n p.outro(pc.green('Run `ryndesign generate` to generate your design system!'));\n },\n});\n\nfunction generateConfig(platforms: string[], darkMode: boolean): string {\n const imports: string[] = [];\n const generators: string[] = [];\n\n for (const platform of platforms) {\n const pkgName = `@ryndesign/generator-${platform}`;\n const varName = platform.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n imports.push(`import ${varName} from '${pkgName}';`);\n\n if (['react', 'vue', 'svelte'].includes(platform)) {\n generators.push(` ${varName}({\n outDir: 'generated/${platform}',\n cssStrategy: 'css-variables',\n typescript: true,${darkMode ? \"\\n darkMode: 'media+class',\" : ''}\n })`);\n } else {\n generators.push(` ${varName}({\n outDir: 'generated/${platform}',\n })`);\n }\n }\n\n return `import { defineConfig } from '@ryndesign/cli';\n${imports.join('\\n')}\n\nexport default defineConfig({\n tokens: ['tokens/**/*.tokens.json'],\n components: ['components/**/*.component.json'],\n outDir: 'generated',\n${darkMode ? `\n themes: {\n default: 'light',\n dark: { file: 'tokens/dark.tokens.json' },\n },\n` : ''}\n generators: [\n${generators.join(',\\n')}\n ],\n\n preview: { port: 4400, open: true },\n});\n`;\n}\n\nfunction getDefaultTokens() {\n return {\n color: {\n $type: 'color',\n primary: { $value: '#3B82F6' },\n white: { $value: '#FFFFFF' },\n black: { $value: '#000000' },\n gray: {\n 50: { $value: '#F9FAFB' },\n 900: { $value: '#111827' },\n },\n },\n spacing: {\n $type: 'dimension',\n sm: { $value: '8px' },\n md: { $value: '16px' },\n lg: { $value: '24px' },\n },\n };\n}\n\nfunction getSemanticTokens() {\n return {\n color: {\n $type: 'color',\n background: {\n primary: { $value: '{color.white}' },\n secondary: { $value: '{color.gray.50}' },\n },\n text: {\n primary: { $value: '{color.gray.900}' },\n },\n },\n };\n}\n\nfunction getDarkTokens() {\n return {\n $description: 'Dark theme overrides',\n $extensions: { 'com.ryndesign.theme': { name: 'dark', extends: 'default' } },\n color: {\n $type: 'color',\n background: {\n primary: { $value: '{color.gray.900}' },\n secondary: { $value: '{color.gray.800}' },\n },\n text: {\n primary: { $value: '{color.gray.50}' },\n },\n },\n };\n}\n\nfunction detectPackageManager(cwd: string): string {\n try {\n const userAgent = process.env.npm_config_user_agent || '';\n if (userAgent.startsWith('pnpm')) return 'pnpm';\n if (userAgent.startsWith('yarn')) return 'yarn';\n if (userAgent.startsWith('bun')) return 'bun';\n } catch {}\n\n // Check for lock files\n if (existsSync(path.join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(path.join(cwd, 'yarn.lock'))) return 'yarn';\n if (existsSync(path.join(cwd, 'bun.lockb'))) return 'bun';\n return 'npm';\n}\n"],"mappings":"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","names":["s"]}
1
+ {"version":3,"sources":["../src/commands/init.ts"],"sourcesContent":["import { defineCommand } from 'citty';\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport fs from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { execSync } from 'node:child_process';\n\nexport default defineCommand({\n meta: {\n name: 'init',\n description: 'Initialize a new RynDesign project',\n },\n args: {\n template: {\n type: 'string',\n description: 'Template to use (minimal or full)',\n default: 'minimal',\n },\n platforms: {\n type: 'string',\n description: 'Comma-separated list of target platforms',\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(' RynDesign Init ')));\n\n const template = args.template || await p.select({\n message: 'Choose a template:',\n options: [\n { value: 'minimal', label: 'Minimal', hint: 'Basic color, spacing, typography tokens' },\n { value: 'full', label: 'Full', hint: 'Complete token set with shadows, borders, gradients' },\n ],\n }) as string;\n\n if (p.isCancel(template)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platformsInput = args.platforms || await p.multiselect({\n message: 'Select target platforms:',\n initialValues: ['react', 'swiftui'],\n options: [\n { value: 'react', label: 'React', hint: 'recommended' },\n { value: 'swiftui', label: 'SwiftUI', hint: 'recommended' },\n { value: 'vue', label: 'Vue' },\n { value: 'svelte', label: 'Svelte' },\n { value: 'rails', label: 'Rails' },\n { value: 'uikit', label: 'UIKit' },\n { value: 'compose', label: 'Jetpack Compose' },\n { value: 'android-view', label: 'Android View' },\n ],\n required: true,\n }) as string[];\n\n if (p.isCancel(platformsInput)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platforms = Array.isArray(platformsInput)\n ? platformsInput\n : (platformsInput as string).split(',').map(s => s.trim());\n\n const darkMode = await p.confirm({\n message: 'Enable dark mode support?',\n initialValue: true,\n });\n\n if (p.isCancel(darkMode)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const s = p.spinner();\n s.start('Creating project files...');\n\n const cwd = process.cwd();\n\n // Create directories\n await fs.mkdir(path.join(cwd, 'tokens'), { recursive: true });\n await fs.mkdir(path.join(cwd, 'components'), { recursive: true });\n await fs.mkdir(path.join(cwd, 'generated'), { recursive: true });\n\n // Copy template tokens\n // ESM-compatible path resolution\n const templateDir = path.resolve(\n typeof __dirname !== 'undefined'\n ? path.resolve(__dirname, '../../templates')\n : path.resolve(new URL('.', import.meta.url).pathname, '../../templates')\n );\n const templateFile = template === 'full' ? 'full.tokens.json' : 'minimal.tokens.json';\n\n try {\n const templateContent = await fs.readFile(\n path.join(templateDir, templateFile),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'tokens', 'base.tokens.json'),\n templateContent\n );\n } catch {\n // If templates not found, create a basic one inline\n await fs.writeFile(\n path.join(cwd, 'tokens', 'base.tokens.json'),\n JSON.stringify(getDefaultTokens(), null, 2)\n );\n }\n\n // Create semantic tokens\n await fs.writeFile(\n path.join(cwd, 'tokens', 'semantic.tokens.json'),\n JSON.stringify(getSemanticTokens(), null, 2)\n );\n\n // Create dark theme if enabled\n if (darkMode) {\n try {\n const darkContent = await fs.readFile(\n path.join(templateDir, 'dark.tokens.json'),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'tokens', 'dark.tokens.json'),\n darkContent\n );\n } catch {\n await fs.writeFile(\n path.join(cwd, 'tokens', 'dark.tokens.json'),\n JSON.stringify(getDarkTokens(), null, 2)\n );\n }\n }\n\n // Create config file\n const configContent = generateConfig(platforms, darkMode as boolean);\n await fs.writeFile(path.join(cwd, 'ryndesign.config.ts'), configContent);\n\n // Copy button component\n try {\n const buttonComp = await fs.readFile(\n path.join(templateDir, '../components/button.component.json'),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'components', 'button.component.json'),\n buttonComp\n );\n } catch {\n // Skip if not found\n }\n\n // Add generated/ to .gitignore\n const gitignorePath = path.join(cwd, '.gitignore');\n try {\n let gitignore = '';\n try {\n gitignore = await fs.readFile(gitignorePath, 'utf-8');\n } catch {\n // File doesn't exist yet\n }\n if (!gitignore.includes('generated/')) {\n gitignore += (gitignore.endsWith('\\n') || gitignore === '' ? '' : '\\n') + 'generated/\\n';\n await fs.writeFile(gitignorePath, gitignore);\n }\n } catch {\n // Skip if can't write .gitignore\n }\n\n // Ensure package.json exists, then add scripts and dependencies\n const pkgJsonPath = path.join(cwd, 'package.json');\n let pkg: Record<string, unknown>;\n try {\n const pkgContent = await fs.readFile(pkgJsonPath, 'utf-8');\n pkg = JSON.parse(pkgContent);\n } catch {\n // No package.json yet — create one\n const dirName = path.basename(cwd);\n pkg = {\n name: dirName,\n version: '1.0.0',\n private: true,\n type: 'module',\n };\n }\n\n if (!pkg.scripts || typeof pkg.scripts !== 'object') pkg.scripts = {};\n const scripts = pkg.scripts as Record<string, string>;\n if (!scripts['generate']) scripts['generate'] = 'ryndesign generate';\n if (!scripts['preview']) scripts['preview'] = 'ryndesign preview';\n\n // Add generator packages as devDependencies\n if (!pkg.devDependencies || typeof pkg.devDependencies !== 'object') pkg.devDependencies = {};\n const devDeps = pkg.devDependencies as Record<string, string>;\n devDeps['@ryndesign/cli'] = 'latest';\n for (const platform of platforms) {\n devDeps[`@ryndesign/generator-${platform}`] = 'latest';\n }\n\n await fs.writeFile(pkgJsonPath, JSON.stringify(pkg, null, 2) + '\\n');\n\n s.stop('Project files created!');\n\n // Install dependencies\n const installSpinner = p.spinner();\n installSpinner.start('Installing dependencies...');\n try {\n const pm = detectPackageManager(cwd);\n execSync(`${pm} install`, { cwd, stdio: 'pipe' });\n installSpinner.stop('Dependencies installed!');\n } catch {\n installSpinner.stop(pc.yellow('Could not auto-install. Run `npm install` manually.'));\n }\n\n p.note(\n [\n `${pc.green('tokens/')} - Your design tokens`,\n `${pc.green('components/')} - Component definitions`,\n `${pc.green('generated/')} - Generated output (gitignored)`,\n `${pc.green('ryndesign.config.ts')} - Configuration`,\n ].join('\\n'),\n 'Project structure'\n );\n\n p.outro(pc.green('Run `ryndesign generate` to generate your design system!'));\n },\n});\n\nfunction generateConfig(platforms: string[], darkMode: boolean): string {\n const imports: string[] = [];\n const generators: string[] = [];\n\n for (const platform of platforms) {\n const pkgName = `@ryndesign/generator-${platform}`;\n const varName = platform.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n imports.push(`import ${varName} from '${pkgName}';`);\n\n if (['react', 'vue', 'svelte'].includes(platform)) {\n generators.push(` ${varName}({\n outDir: 'generated/${platform}',\n cssStrategy: 'css-variables',\n typescript: true,${darkMode ? \"\\n darkMode: 'media+class',\" : ''}\n })`);\n } else {\n generators.push(` ${varName}({\n outDir: 'generated/${platform}',\n })`);\n }\n }\n\n return `import { defineConfig } from '@ryndesign/cli';\n${imports.join('\\n')}\n\nexport default defineConfig({\n tokens: ['tokens/**/*.tokens.json'],\n components: ['components/**/*.component.json'],\n outDir: 'generated',\n${darkMode ? `\n themes: {\n default: 'light',\n dark: { file: 'tokens/dark.tokens.json' },\n },\n` : ''}\n generators: [\n${generators.join(',\\n')}\n ],\n\n preview: { port: 4400, open: true },\n});\n`;\n}\n\nfunction getDefaultTokens() {\n return {\n color: {\n $type: 'color',\n primary: { $value: '#3B82F6' },\n white: { $value: '#FFFFFF' },\n black: { $value: '#000000' },\n gray: {\n 50: { $value: '#F9FAFB' },\n 100: { $value: '#F3F4F6' },\n 400: { $value: '#9CA3AF' },\n 800: { $value: '#1F2937' },\n 900: { $value: '#111827' },\n },\n },\n spacing: {\n $type: 'dimension',\n sm: { $value: '8px' },\n md: { $value: '16px' },\n lg: { $value: '24px' },\n },\n };\n}\n\nfunction getSemanticTokens() {\n return {\n color: {\n $type: 'color',\n background: {\n primary: { $value: '{color.white}' },\n secondary: { $value: '{color.gray.50}' },\n },\n text: {\n primary: { $value: '{color.gray.900}' },\n },\n },\n };\n}\n\nfunction getDarkTokens() {\n return {\n $description: 'Dark theme overrides',\n $extensions: { 'com.ryndesign.theme': { name: 'dark', extends: 'default' } },\n color: {\n $type: 'color',\n background: {\n primary: { $value: '{color.gray.900}' },\n secondary: { $value: '{color.gray.800}' },\n },\n text: {\n primary: { $value: '{color.gray.50}' },\n },\n },\n };\n}\n\nfunction detectPackageManager(cwd: string): string {\n try {\n const userAgent = process.env.npm_config_user_agent || '';\n if (userAgent.startsWith('pnpm')) return 'pnpm';\n if (userAgent.startsWith('yarn')) return 'yarn';\n if (userAgent.startsWith('bun')) return 'bun';\n } catch {}\n\n // Check for lock files\n if (existsSync(path.join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(path.join(cwd, 'yarn.lock'))) return 'yarn';\n if (existsSync(path.join(cwd, 'bun.lockb'))) return 'bun';\n return 'npm';\n}\n"],"mappings":"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","names":["s"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryndesign/cli",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "CLI for RynDesign design system generator",
5
5
  "license": "MIT",
6
6
  "repository": {