@ryndesign/cli 0.2.6 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Accordion",
4
+ "category": "display",
5
+ "props": {
6
+ "title": { "type": "string", "required": true },
7
+ "children": { "type": "node" }
8
+ },
9
+ "variants": {
10
+ "variant": { "values": ["arrow", "plus"], "default": "arrow" }
11
+ },
12
+ "tokenMapping": {
13
+ "background": "component.accordion.{variant}.background",
14
+ "borderColor": "component.accordion.{variant}.borderColor",
15
+ "borderRadius": "component.accordion.borderRadius",
16
+ "textColor": "component.accordion.{variant}.textColor",
17
+ "fontSize": "component.accordion.{variant}.fontSize"
18
+ },
19
+ "states": {
20
+ "open": { "tokenOverrides": { "background": "component.accordion.{variant}.open.background" } }
21
+ }
22
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Alert",
4
+ "category": "feedback",
5
+ "props": {
6
+ "message": { "type": "string", "required": true }
7
+ },
8
+ "variants": {
9
+ "variant": { "values": ["info", "success", "warning", "error"], "default": "info" }
10
+ },
11
+ "states": {},
12
+ "slots": {
13
+ "icon": { "optional": true }
14
+ },
15
+ "tokenMapping": {
16
+ "background": "component.alert.{variant}.background",
17
+ "textColor": "component.alert.{variant}.textColor",
18
+ "borderColor": "component.alert.{variant}.borderColor",
19
+ "borderRadius": "component.alert.borderRadius",
20
+ "paddingX": "component.alert.paddingX",
21
+ "paddingY": "component.alert.paddingY",
22
+ "fontSize": "component.alert.fontSize"
23
+ }
24
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Breadcrumbs",
4
+ "category": "navigation",
5
+ "props": {
6
+ "items": { "type": "array", "required": true }
7
+ },
8
+ "variants": {},
9
+ "tokenMapping": {
10
+ "textColor": "component.breadcrumbs.textColor",
11
+ "separatorColor": "component.breadcrumbs.separatorColor",
12
+ "fontSize": "component.breadcrumbs.fontSize"
13
+ },
14
+ "states": {
15
+ "hover": { "tokenOverrides": { "textColor": "component.breadcrumbs.hover.textColor" } }
16
+ }
17
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Carousel",
4
+ "category": "display",
5
+ "props": {
6
+ "items": { "type": "array", "required": true }
7
+ },
8
+ "variants": {
9
+ "variant": { "values": ["default", "snap"], "default": "default" }
10
+ },
11
+ "states": {},
12
+ "tokenMapping": {
13
+ "background": "component.carousel.{variant}.background",
14
+ "borderRadius": "component.carousel.borderRadius"
15
+ }
16
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "ChatBubble",
4
+ "category": "display",
5
+ "props": {
6
+ "message": { "type": "string", "required": true },
7
+ "sender": { "type": "string" }
8
+ },
9
+ "variants": {
10
+ "variant": { "values": ["start", "end"], "default": "start" },
11
+ "color": { "values": ["default", "primary", "secondary", "accent"], "default": "default" }
12
+ },
13
+ "states": {},
14
+ "tokenMapping": {
15
+ "background": "component.chat-bubble.{color}.background",
16
+ "textColor": "component.chat-bubble.{color}.textColor",
17
+ "borderRadius": "component.chat-bubble.{variant}.borderRadius",
18
+ "fontSize": "component.chat-bubble.fontSize"
19
+ }
20
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Countdown",
4
+ "category": "display",
5
+ "props": {
6
+ "value": { "type": "number", "required": true }
7
+ },
8
+ "variants": {
9
+ "size": { "values": ["sm", "md", "lg"], "default": "md" }
10
+ },
11
+ "states": {},
12
+ "tokenMapping": {
13
+ "textColor": "component.countdown.textColor",
14
+ "fontSize": "component.countdown.{size}.fontSize"
15
+ }
16
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Dropdown",
4
+ "category": "actions",
5
+ "props": {
6
+ "items": { "type": "array", "required": true }
7
+ },
8
+ "variants": {
9
+ "variant": { "values": ["default", "hover", "click"], "default": "default" }
10
+ },
11
+ "tokenMapping": {
12
+ "background": "component.dropdown.{variant}.background",
13
+ "borderColor": "component.dropdown.{variant}.borderColor",
14
+ "borderRadius": "component.dropdown.borderRadius",
15
+ "shadow": "component.dropdown.{variant}.shadow"
16
+ },
17
+ "states": {
18
+ "hover": { "tokenOverrides": { "background": "component.dropdown.hover.background" } },
19
+ "open": { "tokenOverrides": { "shadow": "component.dropdown.open.shadow" } }
20
+ }
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Kbd",
4
+ "category": "display",
5
+ "props": {
6
+ "label": { "type": "string", "required": true }
7
+ },
8
+ "variants": {
9
+ "size": { "values": ["xs", "sm", "md", "lg"], "default": "md" }
10
+ },
11
+ "states": {},
12
+ "tokenMapping": {
13
+ "background": "component.kbd.background",
14
+ "textColor": "component.kbd.textColor",
15
+ "borderColor": "component.kbd.borderColor",
16
+ "borderRadius": "component.kbd.borderRadius",
17
+ "paddingX": "component.kbd.{size}.paddingX",
18
+ "paddingY": "component.kbd.{size}.paddingY",
19
+ "fontSize": "component.kbd.{size}.fontSize"
20
+ }
21
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Loading",
4
+ "category": "feedback",
5
+ "variants": {
6
+ "variant": { "values": ["spinner", "dots", "ring", "ball"], "default": "spinner" },
7
+ "size": { "values": ["xs", "sm", "md", "lg"], "default": "md" }
8
+ },
9
+ "states": {},
10
+ "tokenMapping": {
11
+ "primaryColor": "component.loading.{variant}.primaryColor",
12
+ "size": "component.loading.{size}.size"
13
+ }
14
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Menu",
4
+ "category": "navigation",
5
+ "props": {
6
+ "items": { "type": "array", "required": true }
7
+ },
8
+ "variants": {
9
+ "size": { "values": ["sm", "md", "lg"], "default": "md" }
10
+ },
11
+ "tokenMapping": {
12
+ "background": "component.menu.background",
13
+ "textColor": "component.menu.textColor",
14
+ "activeBackground": "component.menu.activeBackground",
15
+ "activeTextColor": "component.menu.activeTextColor",
16
+ "borderRadius": "component.menu.borderRadius",
17
+ "paddingX": "component.menu.{size}.paddingX",
18
+ "paddingY": "component.menu.{size}.paddingY",
19
+ "fontSize": "component.menu.{size}.fontSize"
20
+ },
21
+ "states": {
22
+ "hover": { "tokenOverrides": { "background": "component.menu.hover.background" } }
23
+ }
24
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Modal",
4
+ "category": "actions",
5
+ "props": {
6
+ "title": { "type": "string", "required": true },
7
+ "children": { "type": "node" }
8
+ },
9
+ "variants": {
10
+ "size": { "values": ["sm", "md", "lg"], "default": "md" }
11
+ },
12
+ "states": {},
13
+ "slots": {
14
+ "header": { "optional": true },
15
+ "footer": { "optional": true }
16
+ },
17
+ "tokenMapping": {
18
+ "background": "component.modal.background",
19
+ "borderRadius": "component.modal.borderRadius",
20
+ "shadow": "component.modal.shadow",
21
+ "overlayBackground": "component.modal.overlayBackground"
22
+ }
23
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Navbar",
4
+ "category": "navigation",
5
+ "props": {
6
+ "title": { "type": "string" }
7
+ },
8
+ "variants": {},
9
+ "states": {},
10
+ "slots": {
11
+ "start": { "optional": true },
12
+ "center": { "optional": true },
13
+ "end": { "optional": true }
14
+ },
15
+ "tokenMapping": {
16
+ "background": "component.navbar.background",
17
+ "textColor": "component.navbar.textColor",
18
+ "borderColor": "component.navbar.borderColor",
19
+ "shadow": "component.navbar.shadow",
20
+ "paddingX": "component.navbar.paddingX",
21
+ "paddingY": "component.navbar.paddingY"
22
+ }
23
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Pagination",
4
+ "category": "navigation",
5
+ "props": {
6
+ "total": { "type": "number", "required": true },
7
+ "current": { "type": "number", "default": 1 }
8
+ },
9
+ "variants": {
10
+ "size": { "values": ["sm", "md", "lg"], "default": "md" }
11
+ },
12
+ "tokenMapping": {
13
+ "background": "component.pagination.background",
14
+ "activeBackground": "component.pagination.activeBackground",
15
+ "textColor": "component.pagination.textColor",
16
+ "activeTextColor": "component.pagination.activeTextColor",
17
+ "borderColor": "component.pagination.borderColor",
18
+ "borderRadius": "component.pagination.borderRadius"
19
+ },
20
+ "states": {
21
+ "hover": { "tokenOverrides": { "background": "component.pagination.hover.background" } },
22
+ "disabled": { "tokenOverrides": { "background": "component.pagination.disabled.background" } }
23
+ }
24
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Progress",
4
+ "category": "feedback",
5
+ "props": {
6
+ "value": { "type": "number", "required": true },
7
+ "max": { "type": "number", "default": 100 }
8
+ },
9
+ "variants": {
10
+ "variant": { "values": ["primary", "secondary", "accent", "success", "warning", "error"], "default": "primary" }
11
+ },
12
+ "states": {},
13
+ "tokenMapping": {
14
+ "background": "component.progress.background",
15
+ "fillColor": "component.progress.{variant}.fillColor",
16
+ "borderRadius": "component.progress.borderRadius",
17
+ "height": "component.progress.height"
18
+ }
19
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Stat",
4
+ "category": "display",
5
+ "props": {
6
+ "title": { "type": "string", "required": true },
7
+ "value": { "type": "string", "required": true },
8
+ "description": { "type": "string" }
9
+ },
10
+ "variants": {
11
+ "variant": { "values": ["default", "bordered"], "default": "default" }
12
+ },
13
+ "states": {},
14
+ "tokenMapping": {
15
+ "background": "component.stat.{variant}.background",
16
+ "textColor": "component.stat.{variant}.textColor",
17
+ "titleColor": "component.stat.{variant}.titleColor",
18
+ "descriptionColor": "component.stat.{variant}.descriptionColor",
19
+ "borderColor": "component.stat.{variant}.borderColor"
20
+ }
21
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Steps",
4
+ "category": "navigation",
5
+ "props": {
6
+ "items": { "type": "array", "required": true },
7
+ "current": { "type": "number", "default": 0 }
8
+ },
9
+ "variants": {
10
+ "variant": { "values": ["horizontal", "vertical"], "default": "horizontal" }
11
+ },
12
+ "states": {},
13
+ "tokenMapping": {
14
+ "primaryColor": "component.steps.{variant}.primaryColor",
15
+ "completedColor": "component.steps.{variant}.completedColor",
16
+ "textColor": "component.steps.{variant}.textColor",
17
+ "fontSize": "component.steps.{variant}.fontSize"
18
+ }
19
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Swap",
4
+ "category": "actions",
5
+ "props": {
6
+ "checked": { "type": "boolean", "default": false }
7
+ },
8
+ "variants": {
9
+ "variant": { "values": ["rotate", "flip"], "default": "rotate" }
10
+ },
11
+ "states": {},
12
+ "tokenMapping": {
13
+ "textColor": "component.swap.{variant}.textColor",
14
+ "fontSize": "component.swap.{variant}.fontSize"
15
+ }
16
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Tab",
4
+ "category": "navigation",
5
+ "props": {
6
+ "items": { "type": "array", "required": true },
7
+ "active": { "type": "number", "default": 0 }
8
+ },
9
+ "variants": {
10
+ "variant": { "values": ["bordered", "lifted", "boxed"], "default": "bordered" },
11
+ "size": { "values": ["sm", "md", "lg"], "default": "md" }
12
+ },
13
+ "tokenMapping": {
14
+ "background": "component.tab.{variant}.background",
15
+ "activeBackground": "component.tab.{variant}.activeBackground",
16
+ "textColor": "component.tab.{variant}.textColor",
17
+ "activeTextColor": "component.tab.{variant}.activeTextColor",
18
+ "borderColor": "component.tab.{variant}.borderColor",
19
+ "fontSize": "component.tab.{size}.fontSize",
20
+ "paddingX": "component.tab.{size}.paddingX",
21
+ "paddingY": "component.tab.{size}.paddingY"
22
+ },
23
+ "states": {
24
+ "hover": { "tokenOverrides": { "background": "component.tab.{variant}.hover.background" } }
25
+ }
26
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Table",
4
+ "category": "display",
5
+ "props": {
6
+ "data": { "type": "array", "required": true }
7
+ },
8
+ "variants": {
9
+ "size": { "values": ["sm", "md", "lg"], "default": "md" },
10
+ "variant": { "values": ["default", "zebra", "compact"], "default": "default" }
11
+ },
12
+ "states": {},
13
+ "tokenMapping": {
14
+ "background": "component.table.{variant}.background",
15
+ "headerBackground": "component.table.{variant}.headerBackground",
16
+ "borderColor": "component.table.{variant}.borderColor",
17
+ "textColor": "component.table.{variant}.textColor",
18
+ "fontSize": "component.table.{size}.fontSize",
19
+ "paddingX": "component.table.{size}.paddingX",
20
+ "paddingY": "component.table.{size}.paddingY"
21
+ }
22
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "ThemeController",
4
+ "category": "actions",
5
+ "props": {
6
+ "checked": { "type": "boolean", "default": false }
7
+ },
8
+ "variants": {
9
+ "variant": { "values": ["toggle", "swap"], "default": "toggle" }
10
+ },
11
+ "states": {},
12
+ "tokenMapping": {
13
+ "trackBackground": "component.theme-controller.{variant}.trackBackground",
14
+ "trackCheckedBackground": "component.theme-controller.{variant}.trackCheckedBackground",
15
+ "thumbBackground": "component.theme-controller.{variant}.thumbBackground"
16
+ }
17
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://ryndesign.dev/schemas/component.json",
3
+ "name": "Tooltip",
4
+ "category": "feedback",
5
+ "props": {
6
+ "text": { "type": "string", "required": true },
7
+ "children": { "type": "node" }
8
+ },
9
+ "variants": {
10
+ "position": { "values": ["top", "bottom", "left", "right"], "default": "top" }
11
+ },
12
+ "states": {},
13
+ "tokenMapping": {
14
+ "background": "component.tooltip.background",
15
+ "textColor": "component.tooltip.textColor",
16
+ "borderRadius": "component.tooltip.borderRadius",
17
+ "fontSize": "component.tooltip.fontSize",
18
+ "paddingX": "component.tooltip.paddingX",
19
+ "paddingY": "component.tooltip.paddingY"
20
+ }
21
+ }
package/dist/bin.cjs CHANGED
@@ -281,17 +281,26 @@ var init_init = __esm({
281
281
  }
282
282
  const configContent = generateConfig(platforms, darkMode);
283
283
  await import_promises.default.writeFile(import_node_path.default.join(cwd, "ryndesign.config.ts"), configContent);
284
- const componentsToCopy = template === "full" ? ["button", "input", "card", "checkbox", "toggle", "badge", "avatar"] : ["button"];
285
- for (const comp of componentsToCopy) {
284
+ if (template === "full") {
286
285
  try {
287
- const content = await import_promises.default.readFile(
288
- import_node_path.default.join(componentsDir, `${comp}.component.json`),
289
- "utf-8"
290
- );
291
- await import_promises.default.writeFile(
292
- import_node_path.default.join(cwd, "components", `${comp}.component.json`),
293
- content
294
- );
286
+ const files = await import_promises.default.readdir(componentsDir);
287
+ for (const file of files) {
288
+ if (file.endsWith(".component.json")) {
289
+ const content = await import_promises.default.readFile(import_node_path.default.join(componentsDir, file), "utf-8");
290
+ await import_promises.default.writeFile(import_node_path.default.join(cwd, "components", file), content);
291
+ }
292
+ }
293
+ } catch {
294
+ try {
295
+ const content = await import_promises.default.readFile(import_node_path.default.join(componentsDir, "button.component.json"), "utf-8");
296
+ await import_promises.default.writeFile(import_node_path.default.join(cwd, "components", "button.component.json"), content);
297
+ } catch {
298
+ }
299
+ }
300
+ } else {
301
+ try {
302
+ const content = await import_promises.default.readFile(import_node_path.default.join(componentsDir, "button.component.json"), "utf-8");
303
+ await import_promises.default.writeFile(import_node_path.default.join(cwd, "components", "button.component.json"), content);
295
304
  } catch {
296
305
  }
297
306
  }
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';\nimport { fileURLToPath } from 'node:url';\n\nfunction getPackageRoot(): string {\n if (typeof __dirname !== 'undefined') {\n return path.resolve(__dirname, '..');\n }\n return path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');\n}\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: 'full',\n },\n platforms: {\n type: 'string',\n description: 'Comma-separated list of target platforms',\n },\n 'dark-mode': {\n type: 'boolean',\n description: 'Enable dark mode support',\n },\n },\n async run({ args }) {\n const isInteractive = !args.platforms || args['dark-mode'] === undefined;\n\n if (isInteractive) {\n p.intro(pc.bgCyan(pc.black(' RynDesign Init ')));\n }\n\n const template = args.template || (isInteractive\n ? 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 : 'full');\n\n if (p.isCancel(template)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platformsInput = args.platforms || (isInteractive\n ? 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 : ['react']);\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 = args['dark-mode'] !== undefined\n ? args['dark-mode']\n : (isInteractive\n ? await p.confirm({\n message: 'Enable dark mode support?',\n initialValue: true,\n })\n : true);\n\n if (p.isCancel(darkMode)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const log = (msg: string) => {\n if (isInteractive) return;\n console.log(msg);\n };\n\n let spinner: ReturnType<typeof p.spinner> | undefined;\n if (isInteractive) {\n spinner = p.spinner();\n spinner.start('Creating project files...');\n } else {\n log('Creating project files...');\n }\n\n const cwd = process.cwd();\n const pkgRoot = getPackageRoot();\n const templateDir = path.join(pkgRoot, 'templates');\n const componentsDir = path.join(pkgRoot, 'components');\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 const templateFile = template === 'full' ? 'full.tokens.json' : 'minimal.tokens.json';\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 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 component templates\n const componentsToCopy = template === 'full'\n ? ['button', 'input', 'card', 'checkbox', 'toggle', 'badge', 'avatar']\n : ['button'];\n\n for (const comp of componentsToCopy) {\n try {\n const content = await fs.readFile(\n path.join(componentsDir, `${comp}.component.json`),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'components', `${comp}.component.json`),\n content\n );\n } catch {\n // Skip if not found\n }\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 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 if (!pkg.devDependencies || typeof pkg.devDependencies !== 'object') pkg.devDependencies = {};\n const devDeps = pkg.devDependencies as Record<string, string>;\n devDeps['@ryndesign/cli'] = 'latest';\n devDeps['@ryndesign/preview'] = '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 if (spinner) {\n spinner.stop('Project files created!');\n } else {\n log('Project files created!');\n }\n\n // Install dependencies\n if (isInteractive) {\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 } else {\n log('Installing dependencies...');\n try {\n const pm = detectPackageManager(cwd);\n execSync(`${pm} install`, { cwd, stdio: 'pipe' });\n log('Dependencies installed!');\n } catch {\n log('Could not auto-install. Run `npm install` manually.');\n }\n }\n\n if (isInteractive) {\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 } else {\n log('\\nProject initialized successfully!');\n log('Run `ryndesign generate` to generate your design system!');\n }\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 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 { createRequire } from 'node:module';\nimport { pathToFileURL } from 'node:url';\nimport path from 'node:path';\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 const localRequire = createRequire(path.resolve(process.cwd(), 'package.json'));\n const previewPath = localRequire.resolve('@ryndesign/preview');\n previewModule = await import(pathToFileURL(previewPath).href);\n } catch {\n // Fallback: try direct import (works when CLI is installed locally)\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\n await previewModule.startPreviewServer({\n port,\n open: args.open as boolean,\n generators: config?.generators ?? [],\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","spinner","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","import_node_module","import_node_url","import_node_path","pc","path","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';\nimport { fileURLToPath } from 'node:url';\n\nfunction getPackageRoot(): string {\n if (typeof __dirname !== 'undefined') {\n return path.resolve(__dirname, '..');\n }\n return path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');\n}\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: 'full',\n },\n platforms: {\n type: 'string',\n description: 'Comma-separated list of target platforms',\n },\n 'dark-mode': {\n type: 'boolean',\n description: 'Enable dark mode support',\n },\n },\n async run({ args }) {\n const isInteractive = !args.platforms || args['dark-mode'] === undefined;\n\n if (isInteractive) {\n p.intro(pc.bgCyan(pc.black(' RynDesign Init ')));\n }\n\n const template = args.template || (isInteractive\n ? 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 : 'full');\n\n if (p.isCancel(template)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platformsInput = args.platforms || (isInteractive\n ? 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 : ['react']);\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 = args['dark-mode'] !== undefined\n ? args['dark-mode']\n : (isInteractive\n ? await p.confirm({\n message: 'Enable dark mode support?',\n initialValue: true,\n })\n : true);\n\n if (p.isCancel(darkMode)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const log = (msg: string) => {\n if (isInteractive) return;\n console.log(msg);\n };\n\n let spinner: ReturnType<typeof p.spinner> | undefined;\n if (isInteractive) {\n spinner = p.spinner();\n spinner.start('Creating project files...');\n } else {\n log('Creating project files...');\n }\n\n const cwd = process.cwd();\n const pkgRoot = getPackageRoot();\n const templateDir = path.join(pkgRoot, 'templates');\n const componentsDir = path.join(pkgRoot, 'components');\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 const templateFile = template === 'full' ? 'full.tokens.json' : 'minimal.tokens.json';\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 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 component templates\n if (template === 'full') {\n // Copy all available component files\n try {\n const files = await fs.readdir(componentsDir);\n for (const file of files) {\n if (file.endsWith('.component.json')) {\n const content = await fs.readFile(path.join(componentsDir, file), 'utf-8');\n await fs.writeFile(path.join(cwd, 'components', file), content);\n }\n }\n } catch {\n // Fallback: copy button only\n try {\n const content = await fs.readFile(path.join(componentsDir, 'button.component.json'), 'utf-8');\n await fs.writeFile(path.join(cwd, 'components', 'button.component.json'), content);\n } catch { /* skip */ }\n }\n } else {\n try {\n const content = await fs.readFile(path.join(componentsDir, 'button.component.json'), 'utf-8');\n await fs.writeFile(path.join(cwd, 'components', 'button.component.json'), content);\n } catch { /* skip */ }\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 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 if (!pkg.devDependencies || typeof pkg.devDependencies !== 'object') pkg.devDependencies = {};\n const devDeps = pkg.devDependencies as Record<string, string>;\n devDeps['@ryndesign/cli'] = 'latest';\n devDeps['@ryndesign/preview'] = '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 if (spinner) {\n spinner.stop('Project files created!');\n } else {\n log('Project files created!');\n }\n\n // Install dependencies\n if (isInteractive) {\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 } else {\n log('Installing dependencies...');\n try {\n const pm = detectPackageManager(cwd);\n execSync(`${pm} install`, { cwd, stdio: 'pipe' });\n log('Dependencies installed!');\n } catch {\n log('Could not auto-install. Run `npm install` manually.');\n }\n }\n\n if (isInteractive) {\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 } else {\n log('\\nProject initialized successfully!');\n log('Run `ryndesign generate` to generate your design system!');\n }\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 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 { createRequire } from 'node:module';\nimport { pathToFileURL } from 'node:url';\nimport path from 'node:path';\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 const localRequire = createRequire(path.resolve(process.cwd(), 'package.json'));\n const previewPath = localRequire.resolve('@ryndesign/preview');\n previewModule = await import(pathToFileURL(previewPath).href);\n } catch {\n // Fallback: try direct import (works when CLI is installed locally)\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\n await previewModule.startPreviewServer({\n port,\n open: args.open as boolean,\n generators: config?.generators ?? [],\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","spinner","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","import_node_module","import_node_url","import_node_path","pc","path","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-7MH56KZN.js").then((m) => m.default),
16
+ init: () => import("./init-D6U67U7F.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-XB3BYWSA.js").then((m) => m.default),
@@ -136,17 +136,26 @@ var init_default = defineCommand({
136
136
  }
137
137
  const configContent = generateConfig(platforms, darkMode);
138
138
  await fs.writeFile(path.join(cwd, "ryndesign.config.ts"), configContent);
139
- const componentsToCopy = template === "full" ? ["button", "input", "card", "checkbox", "toggle", "badge", "avatar"] : ["button"];
140
- for (const comp of componentsToCopy) {
139
+ if (template === "full") {
141
140
  try {
142
- const content = await fs.readFile(
143
- path.join(componentsDir, `${comp}.component.json`),
144
- "utf-8"
145
- );
146
- await fs.writeFile(
147
- path.join(cwd, "components", `${comp}.component.json`),
148
- content
149
- );
141
+ const files = await fs.readdir(componentsDir);
142
+ for (const file of files) {
143
+ if (file.endsWith(".component.json")) {
144
+ const content = await fs.readFile(path.join(componentsDir, file), "utf-8");
145
+ await fs.writeFile(path.join(cwd, "components", file), content);
146
+ }
147
+ }
148
+ } catch {
149
+ try {
150
+ const content = await fs.readFile(path.join(componentsDir, "button.component.json"), "utf-8");
151
+ await fs.writeFile(path.join(cwd, "components", "button.component.json"), content);
152
+ } catch {
153
+ }
154
+ }
155
+ } else {
156
+ try {
157
+ const content = await fs.readFile(path.join(componentsDir, "button.component.json"), "utf-8");
158
+ await fs.writeFile(path.join(cwd, "components", "button.component.json"), content);
150
159
  } catch {
151
160
  }
152
161
  }
@@ -340,4 +349,4 @@ function detectPackageManager(cwd) {
340
349
  export {
341
350
  init_default as default
342
351
  };
343
- //# sourceMappingURL=init-7MH56KZN.js.map
352
+ //# sourceMappingURL=init-D6U67U7F.js.map
@@ -0,0 +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';\nimport { fileURLToPath } from 'node:url';\n\nfunction getPackageRoot(): string {\n if (typeof __dirname !== 'undefined') {\n return path.resolve(__dirname, '..');\n }\n return path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');\n}\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: 'full',\n },\n platforms: {\n type: 'string',\n description: 'Comma-separated list of target platforms',\n },\n 'dark-mode': {\n type: 'boolean',\n description: 'Enable dark mode support',\n },\n },\n async run({ args }) {\n const isInteractive = !args.platforms || args['dark-mode'] === undefined;\n\n if (isInteractive) {\n p.intro(pc.bgCyan(pc.black(' RynDesign Init ')));\n }\n\n const template = args.template || (isInteractive\n ? 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 : 'full');\n\n if (p.isCancel(template)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platformsInput = args.platforms || (isInteractive\n ? 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 : ['react']);\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 = args['dark-mode'] !== undefined\n ? args['dark-mode']\n : (isInteractive\n ? await p.confirm({\n message: 'Enable dark mode support?',\n initialValue: true,\n })\n : true);\n\n if (p.isCancel(darkMode)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const log = (msg: string) => {\n if (isInteractive) return;\n console.log(msg);\n };\n\n let spinner: ReturnType<typeof p.spinner> | undefined;\n if (isInteractive) {\n spinner = p.spinner();\n spinner.start('Creating project files...');\n } else {\n log('Creating project files...');\n }\n\n const cwd = process.cwd();\n const pkgRoot = getPackageRoot();\n const templateDir = path.join(pkgRoot, 'templates');\n const componentsDir = path.join(pkgRoot, 'components');\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 const templateFile = template === 'full' ? 'full.tokens.json' : 'minimal.tokens.json';\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 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 component templates\n if (template === 'full') {\n // Copy all available component files\n try {\n const files = await fs.readdir(componentsDir);\n for (const file of files) {\n if (file.endsWith('.component.json')) {\n const content = await fs.readFile(path.join(componentsDir, file), 'utf-8');\n await fs.writeFile(path.join(cwd, 'components', file), content);\n }\n }\n } catch {\n // Fallback: copy button only\n try {\n const content = await fs.readFile(path.join(componentsDir, 'button.component.json'), 'utf-8');\n await fs.writeFile(path.join(cwd, 'components', 'button.component.json'), content);\n } catch { /* skip */ }\n }\n } else {\n try {\n const content = await fs.readFile(path.join(componentsDir, 'button.component.json'), 'utf-8');\n await fs.writeFile(path.join(cwd, 'components', 'button.component.json'), content);\n } catch { /* skip */ }\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 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 if (!pkg.devDependencies || typeof pkg.devDependencies !== 'object') pkg.devDependencies = {};\n const devDeps = pkg.devDependencies as Record<string, string>;\n devDeps['@ryndesign/cli'] = 'latest';\n devDeps['@ryndesign/preview'] = '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 if (spinner) {\n spinner.stop('Project files created!');\n } else {\n log('Project files created!');\n }\n\n // Install dependencies\n if (isInteractive) {\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 } else {\n log('Installing dependencies...');\n try {\n const pm = detectPackageManager(cwd);\n execSync(`${pm} install`, { cwd, stdio: 'pipe' });\n log('Dependencies installed!');\n } catch {\n log('Could not auto-install. Run `npm install` manually.');\n }\n }\n\n if (isInteractive) {\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 } else {\n log('\\nProject initialized successfully!');\n log('Run `ryndesign generate` to generate your design system!');\n }\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 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":["spinner"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryndesign/cli",
3
- "version": "0.2.6",
3
+ "version": "0.3.0",
4
4
  "description": "CLI for RynDesign design system generator",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -39,8 +39,8 @@
39
39
  "jiti": "^2.4.0",
40
40
  "chokidar": "^4.0.0",
41
41
  "fast-glob": "^3.3.0",
42
- "@ryndesign/plugin-api": "0.1.1",
43
- "@ryndesign/core": "0.1.1"
42
+ "@ryndesign/core": "0.1.1",
43
+ "@ryndesign/plugin-api": "0.1.1"
44
44
  },
45
45
  "devDependencies": {
46
46
  "tsup": "^8.3.0",
@@ -1 +0,0 @@
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';\nimport { fileURLToPath } from 'node:url';\n\nfunction getPackageRoot(): string {\n if (typeof __dirname !== 'undefined') {\n return path.resolve(__dirname, '..');\n }\n return path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');\n}\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: 'full',\n },\n platforms: {\n type: 'string',\n description: 'Comma-separated list of target platforms',\n },\n 'dark-mode': {\n type: 'boolean',\n description: 'Enable dark mode support',\n },\n },\n async run({ args }) {\n const isInteractive = !args.platforms || args['dark-mode'] === undefined;\n\n if (isInteractive) {\n p.intro(pc.bgCyan(pc.black(' RynDesign Init ')));\n }\n\n const template = args.template || (isInteractive\n ? 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 : 'full');\n\n if (p.isCancel(template)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const platformsInput = args.platforms || (isInteractive\n ? 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 : ['react']);\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 = args['dark-mode'] !== undefined\n ? args['dark-mode']\n : (isInteractive\n ? await p.confirm({\n message: 'Enable dark mode support?',\n initialValue: true,\n })\n : true);\n\n if (p.isCancel(darkMode)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const log = (msg: string) => {\n if (isInteractive) return;\n console.log(msg);\n };\n\n let spinner: ReturnType<typeof p.spinner> | undefined;\n if (isInteractive) {\n spinner = p.spinner();\n spinner.start('Creating project files...');\n } else {\n log('Creating project files...');\n }\n\n const cwd = process.cwd();\n const pkgRoot = getPackageRoot();\n const templateDir = path.join(pkgRoot, 'templates');\n const componentsDir = path.join(pkgRoot, 'components');\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 const templateFile = template === 'full' ? 'full.tokens.json' : 'minimal.tokens.json';\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 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 component templates\n const componentsToCopy = template === 'full'\n ? ['button', 'input', 'card', 'checkbox', 'toggle', 'badge', 'avatar']\n : ['button'];\n\n for (const comp of componentsToCopy) {\n try {\n const content = await fs.readFile(\n path.join(componentsDir, `${comp}.component.json`),\n 'utf-8'\n );\n await fs.writeFile(\n path.join(cwd, 'components', `${comp}.component.json`),\n content\n );\n } catch {\n // Skip if not found\n }\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 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 if (!pkg.devDependencies || typeof pkg.devDependencies !== 'object') pkg.devDependencies = {};\n const devDeps = pkg.devDependencies as Record<string, string>;\n devDeps['@ryndesign/cli'] = 'latest';\n devDeps['@ryndesign/preview'] = '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 if (spinner) {\n spinner.stop('Project files created!');\n } else {\n log('Project files created!');\n }\n\n // Install dependencies\n if (isInteractive) {\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 } else {\n log('Installing dependencies...');\n try {\n const pm = detectPackageManager(cwd);\n execSync(`${pm} install`, { cwd, stdio: 'pipe' });\n log('Dependencies installed!');\n } catch {\n log('Could not auto-install. Run `npm install` manually.');\n }\n }\n\n if (isInteractive) {\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 } else {\n log('\\nProject initialized successfully!');\n log('Run `ryndesign generate` to generate your design system!');\n }\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 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":["spinner"]}