dekit-cli 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -1
- package/bin/dekit.ts +98 -34
- package/dist/editor/assets/{index-DK9iczjI.js → index-yt1AtkL3.js} +6 -6
- package/dist/editor/index.html +1 -1
- package/docs/usage.md +127 -0
- package/editor/src/App.tsx +9 -11
- package/editor/src/types.ts +1 -0
- package/package.json +34 -9
- package/src/chrome.test.ts +24 -0
- package/src/chrome.ts +37 -0
- package/src/cli/add.test.ts +62 -0
- package/src/cli/add.ts +104 -0
- package/src/cli/init.test.ts +61 -0
- package/src/cli/init.ts +46 -0
- package/src/cli/ls.test.ts +29 -0
- package/src/cli/ls.ts +24 -0
- package/src/cli/resolve.test.ts +43 -0
- package/src/cli/resolve.ts +92 -0
- package/src/cli/screenshot.test.ts +54 -0
- package/src/cli/screenshot.ts +154 -0
- package/src/cli/usage.ts +8 -0
- package/src/devices.ts +23 -0
- package/src/injected/inspector.ts +31 -0
- package/src/parser.test.ts +6 -6
- package/src/parser.ts +2 -2
- package/src/ref.test.ts +68 -0
- package/src/ref.ts +42 -0
- package/src/server.ts +8 -5
- package/src/types.ts +13 -0
- package/src/vite-plugin-dekit.ts +13 -6
- package/templates/components/blank/component.css +3 -0
- package/templates/components/blank/component.html +5 -0
- package/templates/pages/blank/page.css +3 -0
- package/templates/pages/blank/page.html +3 -0
- package/templates/pages/form/page.css +88 -0
- package/templates/pages/form/page.html +21 -0
- package/templates/pages/grid/page.css +84 -0
- package/templates/pages/grid/page.html +40 -0
- package/templates/pages/hero/page.css +62 -0
- package/templates/pages/hero/page.html +10 -0
- package/templates/projects/blank/dekit.yaml +9 -0
- package/templates/projects/blank/global.css +18 -0
- package/templates/projects/blank/pages/home/home.css +3 -0
- package/templates/projects/blank/pages/home/home.html +3 -0
- package/templates/projects/dashboard/dekit.yaml +9 -0
- package/templates/projects/dashboard/global.css +18 -0
- package/templates/projects/dashboard/pages/home/home.css +248 -0
- package/templates/projects/dashboard/pages/home/home.html +100 -0
- package/templates/projects/landing/dekit.yaml +9 -0
- package/templates/projects/landing/global.css +18 -0
- package/templates/projects/landing/pages/home/home.css +255 -0
- package/templates/projects/landing/pages/home/home.html +79 -0
- package/templates/projects/mobile/dekit.yaml +9 -0
- package/templates/projects/mobile/global.css +20 -0
- package/templates/projects/mobile/pages/home/home.css +267 -0
- package/templates/projects/mobile/pages/home/home.html +110 -0
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ A code-first design toolkit — preview, inspect, and debug your HTML/CSS design
|
|
|
16
16
|
Install globally:
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
npm install -g dekit
|
|
19
|
+
npm install -g dekit-cli
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
Create a `design.yaml` in your project:
|
|
@@ -76,3 +76,26 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
|
|
|
76
76
|
## License
|
|
77
77
|
|
|
78
78
|
[Apache 2.0](LICENSE)
|
|
79
|
+
|
|
80
|
+
## For Agents
|
|
81
|
+
|
|
82
|
+
Install dekit globally:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npm install -g dekit-cli
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Run `dekit usage` to get the full usage guide.
|
|
89
|
+
|
|
90
|
+
### Skill Setup (Optional)
|
|
91
|
+
|
|
92
|
+
Create a skill file for your agent (e.g. `.claude/skills/dekit.md`):
|
|
93
|
+
|
|
94
|
+
```markdown
|
|
95
|
+
---
|
|
96
|
+
name: dekit
|
|
97
|
+
description: Use dekit to create, preview, and iterate on HTML/CSS designs
|
|
98
|
+
---
|
|
99
|
+
Run `dekit usage` to get the full usage guide.
|
|
100
|
+
Follow the guide to complete your design task.
|
|
101
|
+
```
|
package/bin/dekit.ts
CHANGED
|
@@ -6,73 +6,137 @@ import { startServers } from "../src/server.js";
|
|
|
6
6
|
|
|
7
7
|
function printUsage() {
|
|
8
8
|
console.log(`
|
|
9
|
-
Usage: dekit
|
|
9
|
+
Usage: dekit <command> [options]
|
|
10
|
+
|
|
11
|
+
Commands:
|
|
12
|
+
init [path] Initialize a new design project
|
|
13
|
+
add <type> <name> Add a page or component
|
|
14
|
+
ls List pages and components
|
|
15
|
+
serve Start the preview server (default)
|
|
16
|
+
screenshot <ref> Take a screenshot of a page or element
|
|
17
|
+
resolve <ref> Resolve a ref to file path and line range
|
|
18
|
+
usage Print the agent usage guide
|
|
10
19
|
|
|
11
20
|
Options:
|
|
12
|
-
-c, --config
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
21
|
+
-c, --config Path to dekit.yaml
|
|
22
|
+
-h, --help Show this help message
|
|
23
|
+
|
|
24
|
+
Run 'dekit <command> --help' for command-specific help.
|
|
16
25
|
`);
|
|
17
26
|
}
|
|
18
27
|
|
|
19
28
|
function findDefaultConfig(): string | undefined {
|
|
20
|
-
for (const name of ["design.yaml", "design.yml"]) {
|
|
29
|
+
for (const name of ["dekit.yaml", "dekit.yml", "design.yaml", "design.yml"]) {
|
|
21
30
|
const p = resolve(name);
|
|
22
31
|
if (existsSync(p)) return p;
|
|
23
32
|
}
|
|
24
33
|
}
|
|
25
34
|
|
|
26
|
-
function
|
|
27
|
-
|
|
35
|
+
function extractGlobalArgs(args: string[]): {
|
|
36
|
+
config?: string;
|
|
37
|
+
help: boolean;
|
|
38
|
+
rest: string[];
|
|
39
|
+
} {
|
|
40
|
+
const rest: string[] = [];
|
|
41
|
+
let config: string | undefined;
|
|
42
|
+
let help = false;
|
|
28
43
|
for (let i = 0; i < args.length; i++) {
|
|
29
44
|
const arg = args[i];
|
|
30
45
|
if (arg === "-c" || arg === "--config") {
|
|
31
|
-
|
|
32
|
-
} else if (arg === "-p" || arg === "--port") {
|
|
33
|
-
result.port = args[++i];
|
|
34
|
-
} else if (arg === "--design-port") {
|
|
35
|
-
result.designPort = args[++i];
|
|
46
|
+
config = args[++i];
|
|
36
47
|
} else if (arg === "-h" || arg === "--help") {
|
|
37
|
-
|
|
48
|
+
help = true;
|
|
49
|
+
} else {
|
|
50
|
+
rest.push(arg);
|
|
38
51
|
}
|
|
39
52
|
}
|
|
40
|
-
return
|
|
53
|
+
return { config, help, rest };
|
|
41
54
|
}
|
|
42
55
|
|
|
43
|
-
async function
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
if (args.help) {
|
|
47
|
-
printUsage();
|
|
48
|
-
process.exit(0);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const configPath = args.config
|
|
52
|
-
? resolve(args.config)
|
|
53
|
-
: findDefaultConfig();
|
|
54
|
-
|
|
56
|
+
async function loadConfig(configArg?: string) {
|
|
57
|
+
const configPath = configArg ? resolve(configArg) : findDefaultConfig();
|
|
55
58
|
if (!configPath) {
|
|
56
59
|
console.error(
|
|
57
|
-
"Error: no
|
|
60
|
+
"Error: no dekit.yaml found in current directory. Use -c to specify a config file.\n"
|
|
58
61
|
);
|
|
59
|
-
printUsage();
|
|
60
62
|
process.exit(1);
|
|
61
63
|
}
|
|
62
|
-
let config;
|
|
63
64
|
try {
|
|
64
|
-
|
|
65
|
+
return await parseDesignConfig(configPath);
|
|
65
66
|
} catch (err) {
|
|
66
67
|
console.error(
|
|
67
68
|
`Error parsing config: ${err instanceof Error ? err.message : err}`
|
|
68
69
|
);
|
|
69
70
|
process.exit(1);
|
|
70
71
|
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async function main() {
|
|
75
|
+
const { config: configArg, help, rest } = extractGlobalArgs(
|
|
76
|
+
process.argv.slice(2)
|
|
77
|
+
);
|
|
78
|
+
const command = rest[0] ?? "serve";
|
|
79
|
+
const commandArgs = rest.slice(1);
|
|
71
80
|
|
|
72
|
-
|
|
73
|
-
|
|
81
|
+
if (help && !rest.length) {
|
|
82
|
+
printUsage();
|
|
83
|
+
process.exit(0);
|
|
84
|
+
}
|
|
74
85
|
|
|
75
|
-
|
|
86
|
+
switch (command) {
|
|
87
|
+
case "init": {
|
|
88
|
+
const { runInit } = await import("../src/cli/init.js");
|
|
89
|
+
await runInit(commandArgs);
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case "add": {
|
|
93
|
+
const config = await loadConfig(configArg);
|
|
94
|
+
const { runAdd } = await import("../src/cli/add.js");
|
|
95
|
+
await runAdd(config, commandArgs);
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
case "ls": {
|
|
99
|
+
const config = await loadConfig(configArg);
|
|
100
|
+
const { runLs } = await import("../src/cli/ls.js");
|
|
101
|
+
await runLs(config);
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
case "serve": {
|
|
105
|
+
const config = await loadConfig(configArg);
|
|
106
|
+
const port = parseInt(
|
|
107
|
+
commandArgs.find((_, i, a) => a[i - 1] === "-p") ?? "3000",
|
|
108
|
+
10
|
|
109
|
+
);
|
|
110
|
+
const designPort = parseInt(
|
|
111
|
+
commandArgs.find((_, i, a) => a[i - 1] === "--design-port") ?? "3001",
|
|
112
|
+
10
|
|
113
|
+
);
|
|
114
|
+
const noOpen = commandArgs.includes("--no-open");
|
|
115
|
+
await startServers({ config, port, designPort, noOpen });
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
case "screenshot": {
|
|
119
|
+
const config = await loadConfig(configArg);
|
|
120
|
+
const { runScreenshot } = await import("../src/cli/screenshot.js");
|
|
121
|
+
await runScreenshot(config, commandArgs);
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
case "resolve": {
|
|
125
|
+
const config = await loadConfig(configArg);
|
|
126
|
+
const { runResolve } = await import("../src/cli/resolve.js");
|
|
127
|
+
await runResolve(config, commandArgs);
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
case "usage": {
|
|
131
|
+
const { runUsage } = await import("../src/cli/usage.js");
|
|
132
|
+
await runUsage();
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
default:
|
|
136
|
+
console.error(`Unknown command: ${command}\n`);
|
|
137
|
+
printUsage();
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
76
140
|
}
|
|
77
141
|
|
|
78
142
|
main();
|