@ryndesign/cli 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/components/avatar.component.json +25 -0
- package/components/badge.component.json +26 -0
- package/components/button.component.json +31 -0
- package/components/card.component.json +27 -0
- package/components/checkbox.component.json +30 -0
- package/components/input.component.json +36 -0
- package/components/toggle.component.json +29 -0
- package/dist/bin.cjs +130 -74
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +2 -2
- package/dist/{init-IF35F2N7.js → init-7MH56KZN.js} +91 -44
- package/dist/init-7MH56KZN.js.map +1 -0
- package/dist/{preview-EOO6TMLY.js → preview-5IWH7EKA.js} +14 -5
- package/dist/preview-5IWH7EKA.js.map +1 -0
- package/package.json +15 -13
- package/templates/dark.tokens.json +20 -0
- package/templates/full.tokens.json +186 -0
- package/templates/minimal.tokens.json +72 -0
- package/dist/init-IF35F2N7.js.map +0 -1
- package/dist/preview-EOO6TMLY.js.map +0 -1
|
@@ -8,6 +8,13 @@ import fs from "fs/promises";
|
|
|
8
8
|
import { existsSync } from "fs";
|
|
9
9
|
import path from "path";
|
|
10
10
|
import { execSync } from "child_process";
|
|
11
|
+
import { fileURLToPath } from "url";
|
|
12
|
+
function getPackageRoot() {
|
|
13
|
+
if (typeof __dirname !== "undefined") {
|
|
14
|
+
return path.resolve(__dirname, "..");
|
|
15
|
+
}
|
|
16
|
+
return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
17
|
+
}
|
|
11
18
|
var init_default = defineCommand({
|
|
12
19
|
meta: {
|
|
13
20
|
name: "init",
|
|
@@ -17,27 +24,34 @@ var init_default = defineCommand({
|
|
|
17
24
|
template: {
|
|
18
25
|
type: "string",
|
|
19
26
|
description: "Template to use (minimal or full)",
|
|
20
|
-
default: "
|
|
27
|
+
default: "full"
|
|
21
28
|
},
|
|
22
29
|
platforms: {
|
|
23
30
|
type: "string",
|
|
24
31
|
description: "Comma-separated list of target platforms"
|
|
32
|
+
},
|
|
33
|
+
"dark-mode": {
|
|
34
|
+
type: "boolean",
|
|
35
|
+
description: "Enable dark mode support"
|
|
25
36
|
}
|
|
26
37
|
},
|
|
27
38
|
async run({ args }) {
|
|
28
|
-
|
|
29
|
-
|
|
39
|
+
const isInteractive = !args.platforms || args["dark-mode"] === void 0;
|
|
40
|
+
if (isInteractive) {
|
|
41
|
+
p.intro(pc.bgCyan(pc.black(" RynDesign Init ")));
|
|
42
|
+
}
|
|
43
|
+
const template = args.template || (isInteractive ? await p.select({
|
|
30
44
|
message: "Choose a template:",
|
|
31
45
|
options: [
|
|
32
46
|
{ value: "minimal", label: "Minimal", hint: "Basic color, spacing, typography tokens" },
|
|
33
47
|
{ value: "full", label: "Full", hint: "Complete token set with shadows, borders, gradients" }
|
|
34
48
|
]
|
|
35
|
-
});
|
|
49
|
+
}) : "full");
|
|
36
50
|
if (p.isCancel(template)) {
|
|
37
51
|
p.cancel("Operation cancelled.");
|
|
38
52
|
process.exit(0);
|
|
39
53
|
}
|
|
40
|
-
const platformsInput = args.platforms || await p.multiselect({
|
|
54
|
+
const platformsInput = args.platforms || (isInteractive ? await p.multiselect({
|
|
41
55
|
message: "Select target platforms:",
|
|
42
56
|
initialValues: ["react", "swiftui"],
|
|
43
57
|
options: [
|
|
@@ -51,29 +65,38 @@ var init_default = defineCommand({
|
|
|
51
65
|
{ value: "android-view", label: "Android View" }
|
|
52
66
|
],
|
|
53
67
|
required: true
|
|
54
|
-
});
|
|
68
|
+
}) : ["react"]);
|
|
55
69
|
if (p.isCancel(platformsInput)) {
|
|
56
70
|
p.cancel("Operation cancelled.");
|
|
57
71
|
process.exit(0);
|
|
58
72
|
}
|
|
59
|
-
const platforms = Array.isArray(platformsInput) ? platformsInput : platformsInput.split(",").map((
|
|
60
|
-
const darkMode = await p.confirm({
|
|
73
|
+
const platforms = Array.isArray(platformsInput) ? platformsInput : platformsInput.split(",").map((s) => s.trim());
|
|
74
|
+
const darkMode = args["dark-mode"] !== void 0 ? args["dark-mode"] : isInteractive ? await p.confirm({
|
|
61
75
|
message: "Enable dark mode support?",
|
|
62
76
|
initialValue: true
|
|
63
|
-
});
|
|
77
|
+
}) : true;
|
|
64
78
|
if (p.isCancel(darkMode)) {
|
|
65
79
|
p.cancel("Operation cancelled.");
|
|
66
80
|
process.exit(0);
|
|
67
81
|
}
|
|
68
|
-
const
|
|
69
|
-
|
|
82
|
+
const log = (msg) => {
|
|
83
|
+
if (isInteractive) return;
|
|
84
|
+
console.log(msg);
|
|
85
|
+
};
|
|
86
|
+
let spinner2;
|
|
87
|
+
if (isInteractive) {
|
|
88
|
+
spinner2 = p.spinner();
|
|
89
|
+
spinner2.start("Creating project files...");
|
|
90
|
+
} else {
|
|
91
|
+
log("Creating project files...");
|
|
92
|
+
}
|
|
70
93
|
const cwd = process.cwd();
|
|
94
|
+
const pkgRoot = getPackageRoot();
|
|
95
|
+
const templateDir = path.join(pkgRoot, "templates");
|
|
96
|
+
const componentsDir = path.join(pkgRoot, "components");
|
|
71
97
|
await fs.mkdir(path.join(cwd, "tokens"), { recursive: true });
|
|
72
98
|
await fs.mkdir(path.join(cwd, "components"), { recursive: true });
|
|
73
99
|
await fs.mkdir(path.join(cwd, "generated"), { recursive: true });
|
|
74
|
-
const templateDir = path.resolve(
|
|
75
|
-
typeof __dirname !== "undefined" ? path.resolve(__dirname, "../../templates") : path.resolve(new URL(".", import.meta.url).pathname, "../../templates")
|
|
76
|
-
);
|
|
77
100
|
const templateFile = template === "full" ? "full.tokens.json" : "minimal.tokens.json";
|
|
78
101
|
try {
|
|
79
102
|
const templateContent = await fs.readFile(
|
|
@@ -113,16 +136,19 @@ var init_default = defineCommand({
|
|
|
113
136
|
}
|
|
114
137
|
const configContent = generateConfig(platforms, darkMode);
|
|
115
138
|
await fs.writeFile(path.join(cwd, "ryndesign.config.ts"), configContent);
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
139
|
+
const componentsToCopy = template === "full" ? ["button", "input", "card", "checkbox", "toggle", "badge", "avatar"] : ["button"];
|
|
140
|
+
for (const comp of componentsToCopy) {
|
|
141
|
+
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
|
+
);
|
|
150
|
+
} catch {
|
|
151
|
+
}
|
|
126
152
|
}
|
|
127
153
|
const gitignorePath = path.join(cwd, ".gitignore");
|
|
128
154
|
try {
|
|
@@ -158,30 +184,51 @@ var init_default = defineCommand({
|
|
|
158
184
|
if (!pkg.devDependencies || typeof pkg.devDependencies !== "object") pkg.devDependencies = {};
|
|
159
185
|
const devDeps = pkg.devDependencies;
|
|
160
186
|
devDeps["@ryndesign/cli"] = "latest";
|
|
187
|
+
devDeps["@ryndesign/preview"] = "latest";
|
|
161
188
|
for (const platform of platforms) {
|
|
162
189
|
devDeps[`@ryndesign/generator-${platform}`] = "latest";
|
|
163
190
|
}
|
|
164
191
|
await fs.writeFile(pkgJsonPath, JSON.stringify(pkg, null, 2) + "\n");
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
installSpinner.
|
|
172
|
-
|
|
173
|
-
|
|
192
|
+
if (spinner2) {
|
|
193
|
+
spinner2.stop("Project files created!");
|
|
194
|
+
} else {
|
|
195
|
+
log("Project files created!");
|
|
196
|
+
}
|
|
197
|
+
if (isInteractive) {
|
|
198
|
+
const installSpinner = p.spinner();
|
|
199
|
+
installSpinner.start("Installing dependencies...");
|
|
200
|
+
try {
|
|
201
|
+
const pm = detectPackageManager(cwd);
|
|
202
|
+
execSync(`${pm} install`, { cwd, stdio: "pipe" });
|
|
203
|
+
installSpinner.stop("Dependencies installed!");
|
|
204
|
+
} catch {
|
|
205
|
+
installSpinner.stop(pc.yellow("Could not auto-install. Run `npm install` manually."));
|
|
206
|
+
}
|
|
207
|
+
} else {
|
|
208
|
+
log("Installing dependencies...");
|
|
209
|
+
try {
|
|
210
|
+
const pm = detectPackageManager(cwd);
|
|
211
|
+
execSync(`${pm} install`, { cwd, stdio: "pipe" });
|
|
212
|
+
log("Dependencies installed!");
|
|
213
|
+
} catch {
|
|
214
|
+
log("Could not auto-install. Run `npm install` manually.");
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (isInteractive) {
|
|
218
|
+
p.note(
|
|
219
|
+
[
|
|
220
|
+
`${pc.green("tokens/")} - Your design tokens`,
|
|
221
|
+
`${pc.green("components/")} - Component definitions`,
|
|
222
|
+
`${pc.green("generated/")} - Generated output (gitignored)`,
|
|
223
|
+
`${pc.green("ryndesign.config.ts")} - Configuration`
|
|
224
|
+
].join("\n"),
|
|
225
|
+
"Project structure"
|
|
226
|
+
);
|
|
227
|
+
p.outro(pc.green("Run `ryndesign generate` to generate your design system!"));
|
|
228
|
+
} else {
|
|
229
|
+
log("\nProject initialized successfully!");
|
|
230
|
+
log("Run `ryndesign generate` to generate your design system!");
|
|
174
231
|
}
|
|
175
|
-
p.note(
|
|
176
|
-
[
|
|
177
|
-
`${pc.green("tokens/")} - Your design tokens`,
|
|
178
|
-
`${pc.green("components/")} - Component definitions`,
|
|
179
|
-
`${pc.green("generated/")} - Generated output (gitignored)`,
|
|
180
|
-
`${pc.green("ryndesign.config.ts")} - Configuration`
|
|
181
|
-
].join("\n"),
|
|
182
|
-
"Project structure"
|
|
183
|
-
);
|
|
184
|
-
p.outro(pc.green("Run `ryndesign generate` to generate your design system!"));
|
|
185
232
|
}
|
|
186
233
|
});
|
|
187
234
|
function generateConfig(platforms, darkMode) {
|
|
@@ -293,4 +340,4 @@ function detectPackageManager(cwd) {
|
|
|
293
340
|
export {
|
|
294
341
|
init_default as default
|
|
295
342
|
};
|
|
296
|
-
//# sourceMappingURL=init-
|
|
343
|
+
//# sourceMappingURL=init-7MH56KZN.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 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"]}
|
|
@@ -6,6 +6,9 @@ import "./chunk-DGUM43GV.js";
|
|
|
6
6
|
// src/commands/preview.ts
|
|
7
7
|
import { defineCommand } from "citty";
|
|
8
8
|
import pc from "picocolors";
|
|
9
|
+
import { createRequire } from "module";
|
|
10
|
+
import { pathToFileURL } from "url";
|
|
11
|
+
import path from "path";
|
|
9
12
|
var preview_default = defineCommand({
|
|
10
13
|
meta: {
|
|
11
14
|
name: "preview",
|
|
@@ -34,11 +37,17 @@ var preview_default = defineCommand({
|
|
|
34
37
|
const port = args.port ? parseInt(args.port, 10) : config?.preview?.port ?? 4400;
|
|
35
38
|
let previewModule;
|
|
36
39
|
try {
|
|
37
|
-
|
|
40
|
+
const localRequire = createRequire(path.resolve(process.cwd(), "package.json"));
|
|
41
|
+
const previewPath = localRequire.resolve("@ryndesign/preview");
|
|
42
|
+
previewModule = await import(pathToFileURL(previewPath).href);
|
|
38
43
|
} catch {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
44
|
+
try {
|
|
45
|
+
previewModule = await import("@ryndesign/preview");
|
|
46
|
+
} catch {
|
|
47
|
+
console.log(pc.yellow("Preview package not found. Install @ryndesign/preview"));
|
|
48
|
+
console.log(pc.gray(" npm install @ryndesign/preview"));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
42
51
|
}
|
|
43
52
|
await previewModule.startPreviewServer({
|
|
44
53
|
port,
|
|
@@ -49,4 +58,4 @@ var preview_default = defineCommand({
|
|
|
49
58
|
export {
|
|
50
59
|
preview_default as default
|
|
51
60
|
};
|
|
52
|
-
//# sourceMappingURL=preview-
|
|
61
|
+
//# sourceMappingURL=preview-5IWH7EKA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/preview.ts"],"sourcesContent":["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 });\n },\n});\n"],"mappings":";;;;;;AAAA,SAAS,qBAAqB;AAC9B,OAAO,QAAQ;AACf,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,OAAO,UAAU;AAGjB,IAAO,kBAAQ,cAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,YAAQ,IAAI,GAAG,KAAK,gCAAyB,CAAC;AAE9C,UAAM,SAAS,MAAM,WAAW,KAAK,MAAgB;AACrD,UAAM,OAAO,KAAK,OACd,SAAS,KAAK,MAAgB,EAAE,IAChC,QAAQ,SAAS,QAAQ;AAE7B,QAAI;AACJ,QAAI;AACF,YAAM,eAAe,cAAc,KAAK,QAAQ,QAAQ,IAAI,GAAG,cAAc,CAAC;AAC9E,YAAM,cAAc,aAAa,QAAQ,oBAAoB;AAC7D,sBAAgB,MAAM,OAAO,cAAc,WAAW,EAAE;AAAA,IAC1D,QAAQ;AAEN,UAAI;AACF,wBAAgB,MAAM,OAAO,oBAAoB;AAAA,MACnD,QAAQ;AACN,gBAAQ,IAAI,GAAG,OAAO,uDAAuD,CAAC;AAC9E,gBAAQ,IAAI,GAAG,KAAK,kCAAkC,CAAC;AACvD;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAc,mBAAmB;AAAA,MACrC;AAAA,MACA,MAAM,KAAK;AAAA,IACb,CAAC;AAAA,EACH;AACF,CAAC;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ryndesign/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"description": "CLI for RynDesign design system generator",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -28,28 +28,30 @@
|
|
|
28
28
|
}
|
|
29
29
|
},
|
|
30
30
|
"files": [
|
|
31
|
-
"dist"
|
|
31
|
+
"dist",
|
|
32
|
+
"templates",
|
|
33
|
+
"components"
|
|
32
34
|
],
|
|
33
|
-
"scripts": {
|
|
34
|
-
"build": "tsup",
|
|
35
|
-
"dev": "tsup --watch",
|
|
36
|
-
"test": "vitest run",
|
|
37
|
-
"lint": "eslint src/",
|
|
38
|
-
"clean": "rm -rf dist"
|
|
39
|
-
},
|
|
40
35
|
"dependencies": {
|
|
41
|
-
"@ryndesign/core": "workspace:*",
|
|
42
|
-
"@ryndesign/plugin-api": "workspace:*",
|
|
43
36
|
"citty": "^0.1.6",
|
|
44
37
|
"@clack/prompts": "^0.8.0",
|
|
45
38
|
"picocolors": "^1.1.0",
|
|
46
39
|
"jiti": "^2.4.0",
|
|
47
40
|
"chokidar": "^4.0.0",
|
|
48
|
-
"fast-glob": "^3.3.0"
|
|
41
|
+
"fast-glob": "^3.3.0",
|
|
42
|
+
"@ryndesign/plugin-api": "0.1.1",
|
|
43
|
+
"@ryndesign/core": "0.1.1"
|
|
49
44
|
},
|
|
50
45
|
"devDependencies": {
|
|
51
46
|
"tsup": "^8.3.0",
|
|
52
47
|
"typescript": "~5.5.0",
|
|
53
48
|
"vitest": "^2.1.0"
|
|
49
|
+
},
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "tsup",
|
|
52
|
+
"dev": "tsup --watch",
|
|
53
|
+
"test": "vitest run",
|
|
54
|
+
"lint": "eslint src/",
|
|
55
|
+
"clean": "rm -rf dist"
|
|
54
56
|
}
|
|
55
|
-
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$description": "Dark theme overrides",
|
|
3
|
+
"$extensions": {
|
|
4
|
+
"com.ryndesign.theme": { "name": "dark", "extends": "default" }
|
|
5
|
+
},
|
|
6
|
+
"color": {
|
|
7
|
+
"$type": "color",
|
|
8
|
+
"background": {
|
|
9
|
+
"primary": { "$value": "{color.gray.900}" },
|
|
10
|
+
"secondary": { "$value": "{color.gray.800}" }
|
|
11
|
+
},
|
|
12
|
+
"text": {
|
|
13
|
+
"primary": { "$value": "{color.gray.50}" },
|
|
14
|
+
"secondary": { "$value": "{color.gray.400}" }
|
|
15
|
+
},
|
|
16
|
+
"border": {
|
|
17
|
+
"default": { "$value": "{color.gray.700}" }
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
{
|
|
2
|
+
"color": {
|
|
3
|
+
"$type": "color",
|
|
4
|
+
"primary": { "$value": "#3B82F6", "$description": "Primary brand color" },
|
|
5
|
+
"secondary": { "$value": "#6366F1", "$description": "Secondary brand color" },
|
|
6
|
+
"success": { "$value": "#10B981" },
|
|
7
|
+
"warning": { "$value": "#F59E0B" },
|
|
8
|
+
"error": { "$value": "#EF4444" },
|
|
9
|
+
"info": { "$value": "#3B82F6" },
|
|
10
|
+
"white": { "$value": "#FFFFFF" },
|
|
11
|
+
"black": { "$value": "#000000" },
|
|
12
|
+
"gray": {
|
|
13
|
+
"50": { "$value": "#F9FAFB" },
|
|
14
|
+
"100": { "$value": "#F3F4F6" },
|
|
15
|
+
"200": { "$value": "#E5E7EB" },
|
|
16
|
+
"300": { "$value": "#D1D5DB" },
|
|
17
|
+
"400": { "$value": "#9CA3AF" },
|
|
18
|
+
"500": { "$value": "#6B7280" },
|
|
19
|
+
"600": { "$value": "#4B5563" },
|
|
20
|
+
"700": { "$value": "#374151" },
|
|
21
|
+
"800": { "$value": "#1F2937" },
|
|
22
|
+
"900": { "$value": "#111827" }
|
|
23
|
+
},
|
|
24
|
+
"background": {
|
|
25
|
+
"primary": { "$value": "{color.white}" },
|
|
26
|
+
"secondary": { "$value": "{color.gray.50}" },
|
|
27
|
+
"tertiary": { "$value": "{color.gray.100}" }
|
|
28
|
+
},
|
|
29
|
+
"text": {
|
|
30
|
+
"primary": { "$value": "{color.gray.900}" },
|
|
31
|
+
"secondary": { "$value": "{color.gray.600}" },
|
|
32
|
+
"tertiary": { "$value": "{color.gray.400}" },
|
|
33
|
+
"inverse": { "$value": "{color.white}" }
|
|
34
|
+
},
|
|
35
|
+
"border": {
|
|
36
|
+
"default": { "$value": "{color.gray.200}" },
|
|
37
|
+
"strong": { "$value": "{color.gray.400}" }
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"spacing": {
|
|
41
|
+
"$type": "dimension",
|
|
42
|
+
"xs": { "$value": "4px" },
|
|
43
|
+
"sm": { "$value": "8px" },
|
|
44
|
+
"md": { "$value": "16px" },
|
|
45
|
+
"lg": { "$value": "24px" },
|
|
46
|
+
"xl": { "$value": "32px" },
|
|
47
|
+
"2xl": { "$value": "48px" },
|
|
48
|
+
"3xl": { "$value": "64px" },
|
|
49
|
+
"4xl": { "$value": "96px" }
|
|
50
|
+
},
|
|
51
|
+
"borderRadius": {
|
|
52
|
+
"$type": "dimension",
|
|
53
|
+
"none": { "$value": "0px" },
|
|
54
|
+
"sm": { "$value": "4px" },
|
|
55
|
+
"md": { "$value": "8px" },
|
|
56
|
+
"lg": { "$value": "12px" },
|
|
57
|
+
"xl": { "$value": "16px" },
|
|
58
|
+
"2xl": { "$value": "24px" },
|
|
59
|
+
"full": { "$value": "9999px" }
|
|
60
|
+
},
|
|
61
|
+
"fontSize": {
|
|
62
|
+
"$type": "dimension",
|
|
63
|
+
"xs": { "$value": "12px" },
|
|
64
|
+
"sm": { "$value": "14px" },
|
|
65
|
+
"md": { "$value": "16px" },
|
|
66
|
+
"lg": { "$value": "18px" },
|
|
67
|
+
"xl": { "$value": "20px" },
|
|
68
|
+
"2xl": { "$value": "24px" },
|
|
69
|
+
"3xl": { "$value": "30px" },
|
|
70
|
+
"4xl": { "$value": "36px" }
|
|
71
|
+
},
|
|
72
|
+
"fontWeight": {
|
|
73
|
+
"$type": "fontWeight",
|
|
74
|
+
"normal": { "$value": 400 },
|
|
75
|
+
"medium": { "$value": 500 },
|
|
76
|
+
"semibold": { "$value": 600 },
|
|
77
|
+
"bold": { "$value": 700 }
|
|
78
|
+
},
|
|
79
|
+
"lineHeight": {
|
|
80
|
+
"$type": "number",
|
|
81
|
+
"tight": { "$value": 1.25 },
|
|
82
|
+
"normal": { "$value": 1.5 },
|
|
83
|
+
"relaxed": { "$value": 1.75 }
|
|
84
|
+
},
|
|
85
|
+
"duration": {
|
|
86
|
+
"$type": "duration",
|
|
87
|
+
"fast": { "$value": "150ms" },
|
|
88
|
+
"normal": { "$value": "250ms" },
|
|
89
|
+
"slow": { "$value": "400ms" }
|
|
90
|
+
},
|
|
91
|
+
"shadow": {
|
|
92
|
+
"$type": "shadow",
|
|
93
|
+
"sm": {
|
|
94
|
+
"$value": {
|
|
95
|
+
"color": "#0000000D",
|
|
96
|
+
"offsetX": "0px",
|
|
97
|
+
"offsetY": "1px",
|
|
98
|
+
"blur": "2px",
|
|
99
|
+
"spread": "0px"
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"md": {
|
|
103
|
+
"$value": {
|
|
104
|
+
"color": "#0000001A",
|
|
105
|
+
"offsetX": "0px",
|
|
106
|
+
"offsetY": "4px",
|
|
107
|
+
"blur": "6px",
|
|
108
|
+
"spread": "-1px"
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"lg": {
|
|
112
|
+
"$value": {
|
|
113
|
+
"color": "#0000001A",
|
|
114
|
+
"offsetX": "0px",
|
|
115
|
+
"offsetY": "10px",
|
|
116
|
+
"blur": "15px",
|
|
117
|
+
"spread": "-3px"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"border": {
|
|
122
|
+
"$type": "border",
|
|
123
|
+
"default": {
|
|
124
|
+
"$value": {
|
|
125
|
+
"color": "{color.border.default}",
|
|
126
|
+
"width": "1px",
|
|
127
|
+
"style": "solid"
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"typography": {
|
|
132
|
+
"$type": "typography",
|
|
133
|
+
"heading": {
|
|
134
|
+
"lg": {
|
|
135
|
+
"$value": {
|
|
136
|
+
"fontFamily": "Inter, sans-serif",
|
|
137
|
+
"fontSize": "{fontSize.3xl}",
|
|
138
|
+
"fontWeight": "{fontWeight.bold}",
|
|
139
|
+
"lineHeight": "{lineHeight.tight}"
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"md": {
|
|
143
|
+
"$value": {
|
|
144
|
+
"fontFamily": "Inter, sans-serif",
|
|
145
|
+
"fontSize": "{fontSize.2xl}",
|
|
146
|
+
"fontWeight": "{fontWeight.semibold}",
|
|
147
|
+
"lineHeight": "{lineHeight.tight}"
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"sm": {
|
|
151
|
+
"$value": {
|
|
152
|
+
"fontFamily": "Inter, sans-serif",
|
|
153
|
+
"fontSize": "{fontSize.xl}",
|
|
154
|
+
"fontWeight": "{fontWeight.semibold}",
|
|
155
|
+
"lineHeight": "{lineHeight.tight}"
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"body": {
|
|
160
|
+
"lg": {
|
|
161
|
+
"$value": {
|
|
162
|
+
"fontFamily": "Inter, sans-serif",
|
|
163
|
+
"fontSize": "{fontSize.lg}",
|
|
164
|
+
"fontWeight": "{fontWeight.normal}",
|
|
165
|
+
"lineHeight": "{lineHeight.normal}"
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
"md": {
|
|
169
|
+
"$value": {
|
|
170
|
+
"fontFamily": "Inter, sans-serif",
|
|
171
|
+
"fontSize": "{fontSize.md}",
|
|
172
|
+
"fontWeight": "{fontWeight.normal}",
|
|
173
|
+
"lineHeight": "{lineHeight.normal}"
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
"sm": {
|
|
177
|
+
"$value": {
|
|
178
|
+
"fontFamily": "Inter, sans-serif",
|
|
179
|
+
"fontSize": "{fontSize.sm}",
|
|
180
|
+
"fontWeight": "{fontWeight.normal}",
|
|
181
|
+
"lineHeight": "{lineHeight.normal}"
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"color": {
|
|
3
|
+
"$type": "color",
|
|
4
|
+
"primary": { "$value": "#3B82F6", "$description": "Primary brand color" },
|
|
5
|
+
"secondary": { "$value": "#6366F1", "$description": "Secondary brand color" },
|
|
6
|
+
"white": { "$value": "#FFFFFF" },
|
|
7
|
+
"black": { "$value": "#000000" },
|
|
8
|
+
"gray": {
|
|
9
|
+
"50": { "$value": "#F9FAFB" },
|
|
10
|
+
"100": { "$value": "#F3F4F6" },
|
|
11
|
+
"200": { "$value": "#E5E7EB" },
|
|
12
|
+
"300": { "$value": "#D1D5DB" },
|
|
13
|
+
"400": { "$value": "#9CA3AF" },
|
|
14
|
+
"500": { "$value": "#6B7280" },
|
|
15
|
+
"600": { "$value": "#4B5563" },
|
|
16
|
+
"700": { "$value": "#374151" },
|
|
17
|
+
"800": { "$value": "#1F2937" },
|
|
18
|
+
"900": { "$value": "#111827" }
|
|
19
|
+
},
|
|
20
|
+
"background": {
|
|
21
|
+
"primary": { "$value": "{color.white}" },
|
|
22
|
+
"secondary": { "$value": "{color.gray.50}" }
|
|
23
|
+
},
|
|
24
|
+
"text": {
|
|
25
|
+
"primary": { "$value": "{color.gray.900}" },
|
|
26
|
+
"secondary": { "$value": "{color.gray.600}" }
|
|
27
|
+
},
|
|
28
|
+
"border": {
|
|
29
|
+
"default": { "$value": "{color.gray.200}" }
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"spacing": {
|
|
33
|
+
"$type": "dimension",
|
|
34
|
+
"xs": { "$value": "4px" },
|
|
35
|
+
"sm": { "$value": "8px" },
|
|
36
|
+
"md": { "$value": "16px" },
|
|
37
|
+
"lg": { "$value": "24px" },
|
|
38
|
+
"xl": { "$value": "32px" },
|
|
39
|
+
"2xl": { "$value": "48px" }
|
|
40
|
+
},
|
|
41
|
+
"borderRadius": {
|
|
42
|
+
"$type": "dimension",
|
|
43
|
+
"none": { "$value": "0px" },
|
|
44
|
+
"sm": { "$value": "4px" },
|
|
45
|
+
"md": { "$value": "8px" },
|
|
46
|
+
"lg": { "$value": "12px" },
|
|
47
|
+
"full": { "$value": "9999px" }
|
|
48
|
+
},
|
|
49
|
+
"fontSize": {
|
|
50
|
+
"$type": "dimension",
|
|
51
|
+
"xs": { "$value": "12px" },
|
|
52
|
+
"sm": { "$value": "14px" },
|
|
53
|
+
"md": { "$value": "16px" },
|
|
54
|
+
"lg": { "$value": "18px" },
|
|
55
|
+
"xl": { "$value": "20px" },
|
|
56
|
+
"2xl": { "$value": "24px" },
|
|
57
|
+
"3xl": { "$value": "30px" }
|
|
58
|
+
},
|
|
59
|
+
"fontWeight": {
|
|
60
|
+
"$type": "fontWeight",
|
|
61
|
+
"normal": { "$value": 400 },
|
|
62
|
+
"medium": { "$value": 500 },
|
|
63
|
+
"semibold": { "$value": 600 },
|
|
64
|
+
"bold": { "$value": 700 }
|
|
65
|
+
},
|
|
66
|
+
"duration": {
|
|
67
|
+
"$type": "duration",
|
|
68
|
+
"fast": { "$value": "150ms" },
|
|
69
|
+
"normal": { "$value": "250ms" },
|
|
70
|
+
"slow": { "$value": "400ms" }
|
|
71
|
+
}
|
|
72
|
+
}
|