@substrate-kit/cli 0.1.0 → 0.1.2
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/.claude-plugin/plugin.json +9 -0
- package/README.md +33 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -22
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +9 -6
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/create.d.ts +2 -2
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +22 -409
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/docs.js +1 -1
- package/dist/commands/docs.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +30 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/tools/install.d.ts.map +1 -1
- package/dist/mcp/tools/install.js +4 -6
- package/dist/mcp/tools/install.js.map +1 -1
- package/dist/mcp/tools/search.js +1 -1
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/utils/shadcn.d.ts +7 -0
- package/dist/utils/shadcn.d.ts.map +1 -0
- package/dist/utils/shadcn.js +16 -0
- package/dist/utils/shadcn.js.map +1 -0
- package/package.json +38 -35
- package/registry.json +1986 -0
- package/skills/3d-scene/SKILL.md +6 -0
- package/skills/animation/SKILL.md +6 -0
- package/skills/canvas-2d/SKILL.md +7 -1
- package/skills/composing-panels/SKILL.md +14 -8
- package/skills/create-custom-tool/SKILL.md +6 -0
- package/skills/data-visualisation/SKILL.md +6 -0
- package/skills/image-generation/SKILL.md +6 -0
- package/skills/install-components/SKILL.md +199 -0
- package/skills/scaffold-playground/SKILL.md +12 -6
- package/skills/substrate-controls/SKILL.md +1 -3
- package/skills/theming/SKILL.md +6 -0
- package/skills/wire-interactions/SKILL.md +6 -0
package/dist/commands/create.js
CHANGED
|
@@ -1,414 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import chalk from "chalk";
|
|
3
|
-
import { exists, ensureDir, writeFile } from "../utils/fs.js";
|
|
4
|
-
import { exec, execSilent } from "../utils/shell.js";
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
5
2
|
import { log } from "../utils/logger.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
function
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"pane",
|
|
27
|
-
"action",
|
|
28
|
-
"slider",
|
|
29
|
-
];
|
|
30
|
-
export async function create(projectName, options = {}) {
|
|
31
|
-
const { skipInstall = false, skipGit = false, packageManager } = options;
|
|
32
|
-
const projectDir = join(process.cwd(), projectName);
|
|
33
|
-
if (exists(projectDir)) {
|
|
34
|
-
log.error(`Directory "${projectName}" already exists`);
|
|
3
|
+
// create-substrate owns the project templates; this command only forwards to
|
|
4
|
+
// it. SUBSTRATE_CREATE_BIN points at a local build of it for testing.
|
|
5
|
+
export function create(projectName, options = {}) {
|
|
6
|
+
const args = [];
|
|
7
|
+
if (projectName)
|
|
8
|
+
args.push(projectName);
|
|
9
|
+
if (options.surface)
|
|
10
|
+
args.push("--surface", options.surface);
|
|
11
|
+
if (options.packageManager)
|
|
12
|
+
args.push("--pm", options.packageManager);
|
|
13
|
+
if (options.skipInstall)
|
|
14
|
+
args.push("--skip-install");
|
|
15
|
+
if (options.skipGit)
|
|
16
|
+
args.push("--skip-git");
|
|
17
|
+
const localBin = process.env.SUBSTRATE_CREATE_BIN;
|
|
18
|
+
const result = localBin
|
|
19
|
+
? spawnSync("node", [localBin, ...args], { stdio: "inherit" })
|
|
20
|
+
: spawnSync("npx", ["--yes", "create-substrate@latest", ...args], { stdio: "inherit" });
|
|
21
|
+
if (result.error) {
|
|
22
|
+
log.error(`Could not run create-substrate: ${result.error.message}`);
|
|
35
23
|
process.exit(1);
|
|
36
24
|
}
|
|
37
|
-
|
|
38
|
-
log.title(`Creating Substrate playground: ${projectName}`);
|
|
39
|
-
// 1. Create project directory
|
|
40
|
-
ensureDir(projectDir);
|
|
41
|
-
// 2. Write template files
|
|
42
|
-
log.step("Scaffolding project files...");
|
|
43
|
-
// package.json
|
|
44
|
-
writeFile(join(projectDir, "package.json"), packageJson(projectName));
|
|
45
|
-
// tsconfig.json
|
|
46
|
-
writeFile(join(projectDir, "tsconfig.json"), tsconfig());
|
|
47
|
-
// next.config.ts
|
|
48
|
-
writeFile(join(projectDir, "next.config.ts"), nextConfig());
|
|
49
|
-
// postcss.config.mjs
|
|
50
|
-
writeFile(join(projectDir, "postcss.config.mjs"), postcssConfig());
|
|
51
|
-
// .gitignore
|
|
52
|
-
writeFile(join(projectDir, ".gitignore"), gitignore());
|
|
53
|
-
// app/globals.css
|
|
54
|
-
writeFile(join(projectDir, "app/globals.css"), globalsCss());
|
|
55
|
-
// app/layout.tsx
|
|
56
|
-
writeFile(join(projectDir, "app/layout.tsx"), rootLayout(projectName));
|
|
57
|
-
// app/page.tsx (playground page)
|
|
58
|
-
writeFile(join(projectDir, "app/page.tsx"), playgroundPage());
|
|
59
|
-
// lib/utils.ts
|
|
60
|
-
writeFile(join(projectDir, "lib/utils.ts"), utilsTs());
|
|
61
|
-
log.success("Project files created");
|
|
62
|
-
// 3. Install dependencies
|
|
63
|
-
if (!skipInstall) {
|
|
64
|
-
const pm = packageManager ?? detectPackageManager(projectDir);
|
|
65
|
-
log.step(`Installing dependencies with ${pm}...`);
|
|
66
|
-
exec(getInstallCommand(pm), { cwd: projectDir });
|
|
67
|
-
log.success("Dependencies installed");
|
|
68
|
-
// 4. Install core Substrate components
|
|
69
|
-
log.step("Installing Substrate components...");
|
|
70
|
-
for (const component of CORE_COMPONENTS) {
|
|
71
|
-
const url = `${REGISTRY_BASE}/${component}`;
|
|
72
|
-
try {
|
|
73
|
-
exec(`npx shadcn@latest add ${url}`, { cwd: projectDir });
|
|
74
|
-
log.step(` ${component}`);
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
log.warn(` Failed to install ${component} — you can add it later with: substrate add ${component}`);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
log.success("Substrate components installed");
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
log.warn("Skipping dependency installation (--skip-install)");
|
|
84
|
-
}
|
|
85
|
-
// 5. Run init to install skills and CLAUDE.md
|
|
86
|
-
const originalCwd = process.cwd();
|
|
87
|
-
process.chdir(projectDir);
|
|
88
|
-
await init({ force: true, skipComponentsJson: true });
|
|
89
|
-
process.chdir(originalCwd);
|
|
90
|
-
// 6. Initialise git
|
|
91
|
-
if (!skipGit) {
|
|
92
|
-
log.step("Initialising git repository...");
|
|
93
|
-
execSilent("git init", projectDir);
|
|
94
|
-
execSilent("git add -A", projectDir);
|
|
95
|
-
execSilent('git commit -m "Initial commit from substrate create"', projectDir);
|
|
96
|
-
log.success("Git repository initialised");
|
|
97
|
-
}
|
|
98
|
-
// Done
|
|
99
|
-
log.title("Your Substrate playground is ready");
|
|
100
|
-
log.info(` cd ${projectName}`);
|
|
101
|
-
log.info(" npm run dev");
|
|
102
|
-
log.blank();
|
|
103
|
-
log.info("Open the project in Claude Code or Cowork to start building with Substrate skills.");
|
|
104
|
-
log.blank();
|
|
105
|
-
}
|
|
106
|
-
function packageJson(name) {
|
|
107
|
-
return JSON.stringify({
|
|
108
|
-
name,
|
|
109
|
-
version: "0.1.0",
|
|
110
|
-
private: true,
|
|
111
|
-
scripts: {
|
|
112
|
-
dev: "next dev",
|
|
113
|
-
build: "next build",
|
|
114
|
-
start: "next start",
|
|
115
|
-
lint: "eslint",
|
|
116
|
-
},
|
|
117
|
-
dependencies: {
|
|
118
|
-
next: "^15.5.0",
|
|
119
|
-
react: "^19.1.0",
|
|
120
|
-
"react-dom": "^19.1.0",
|
|
121
|
-
"class-variance-authority": "^0.7.1",
|
|
122
|
-
clsx: "^2.1.1",
|
|
123
|
-
"tailwind-merge": "^3.3.1",
|
|
124
|
-
"@remixicon/react": "^4.9.0",
|
|
125
|
-
"radix-ui": "^1.4.3",
|
|
126
|
-
"react-colorful": "^5.6.1",
|
|
127
|
-
zustand: "^5.0.12",
|
|
128
|
-
},
|
|
129
|
-
devDependencies: {
|
|
130
|
-
typescript: "^5",
|
|
131
|
-
"@types/node": "^20",
|
|
132
|
-
"@types/react": "^19",
|
|
133
|
-
"@types/react-dom": "^19",
|
|
134
|
-
tailwindcss: "^4",
|
|
135
|
-
"@tailwindcss/postcss": "^4",
|
|
136
|
-
"tw-animate-css": "^1.4.0",
|
|
137
|
-
eslint: "^9",
|
|
138
|
-
"eslint-config-next": "^15.5.0",
|
|
139
|
-
},
|
|
140
|
-
}, null, 2);
|
|
141
|
-
}
|
|
142
|
-
function tsconfig() {
|
|
143
|
-
return JSON.stringify({
|
|
144
|
-
compilerOptions: {
|
|
145
|
-
target: "ES2017",
|
|
146
|
-
lib: ["dom", "dom.iterable", "esnext"],
|
|
147
|
-
allowJs: true,
|
|
148
|
-
skipLibCheck: true,
|
|
149
|
-
strict: true,
|
|
150
|
-
noEmit: true,
|
|
151
|
-
esModuleInterop: true,
|
|
152
|
-
module: "esnext",
|
|
153
|
-
moduleResolution: "bundler",
|
|
154
|
-
resolveJsonModule: true,
|
|
155
|
-
isolatedModules: true,
|
|
156
|
-
jsx: "preserve",
|
|
157
|
-
incremental: true,
|
|
158
|
-
plugins: [{ name: "next" }],
|
|
159
|
-
paths: {
|
|
160
|
-
"@/*": ["./*"],
|
|
161
|
-
},
|
|
162
|
-
},
|
|
163
|
-
include: ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
|
164
|
-
exclude: ["node_modules"],
|
|
165
|
-
}, null, 2);
|
|
166
|
-
}
|
|
167
|
-
function nextConfig() {
|
|
168
|
-
return `import type { NextConfig } from "next"
|
|
169
|
-
|
|
170
|
-
const nextConfig: NextConfig = {}
|
|
171
|
-
|
|
172
|
-
export default nextConfig
|
|
173
|
-
`;
|
|
174
|
-
}
|
|
175
|
-
function postcssConfig() {
|
|
176
|
-
return `/** @type {import('postcss-load-config').Config} */
|
|
177
|
-
const config = {
|
|
178
|
-
plugins: {
|
|
179
|
-
"@tailwindcss/postcss": {},
|
|
180
|
-
},
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
export default config
|
|
184
|
-
`;
|
|
185
|
-
}
|
|
186
|
-
function gitignore() {
|
|
187
|
-
return `node_modules/
|
|
188
|
-
.next/
|
|
189
|
-
out/
|
|
190
|
-
build/
|
|
191
|
-
.DS_Store
|
|
192
|
-
*.pem
|
|
193
|
-
.env
|
|
194
|
-
.env*.local
|
|
195
|
-
*.tsbuildinfo
|
|
196
|
-
next-env.d.ts
|
|
197
|
-
`;
|
|
198
|
-
}
|
|
199
|
-
function globalsCss() {
|
|
200
|
-
return `@import "tailwindcss";
|
|
201
|
-
@import "tw-animate-css";
|
|
202
|
-
|
|
203
|
-
@theme inline {
|
|
204
|
-
--color-background: var(--background);
|
|
205
|
-
--color-foreground: var(--foreground);
|
|
206
|
-
--color-card: var(--card);
|
|
207
|
-
--color-card-foreground: var(--card-foreground);
|
|
208
|
-
--color-popover: var(--popover);
|
|
209
|
-
--color-popover-foreground: var(--popover-foreground);
|
|
210
|
-
--color-primary: var(--primary);
|
|
211
|
-
--color-primary-foreground: var(--primary-foreground);
|
|
212
|
-
--color-secondary: var(--secondary);
|
|
213
|
-
--color-secondary-foreground: var(--secondary-foreground);
|
|
214
|
-
--color-muted: var(--muted);
|
|
215
|
-
--color-muted-foreground: var(--muted-foreground);
|
|
216
|
-
--color-accent: var(--accent);
|
|
217
|
-
--color-accent-foreground: var(--accent-foreground);
|
|
218
|
-
--color-destructive: var(--destructive);
|
|
219
|
-
--color-border: var(--border);
|
|
220
|
-
--color-input: var(--input);
|
|
221
|
-
--color-ring: var(--ring);
|
|
222
|
-
--radius-sm: calc(var(--radius) - 4px);
|
|
223
|
-
--radius-md: calc(var(--radius) - 2px);
|
|
224
|
-
--radius-lg: var(--radius);
|
|
225
|
-
--radius-xl: calc(var(--radius) + 4px);
|
|
226
|
-
/* Substrate */
|
|
227
|
-
--color-canvas: var(--canvas, var(--color-background));
|
|
228
|
-
--color-canvas-foreground: var(--canvas-foreground, var(--color-foreground-muted));
|
|
229
|
-
--color-panel: var(--panel, var(--color-card));
|
|
230
|
-
--color-panel-foreground: var(--panel-foreground, var(--color-card-foreground));
|
|
231
|
-
/* Substrate — Timeline */
|
|
232
|
-
--color-timeline-playhead: var(--timeline-playhead, var(--color-destructive));
|
|
233
|
-
--color-timeline-keyframe: var(--timeline-keyframe, var(--color-muted-foreground));
|
|
234
|
-
--color-timeline-track: var(--timeline-track, var(--color-panel));
|
|
235
|
-
/* Substrate — Gallery */
|
|
236
|
-
--color-gallery-selection: var(--gallery-selection, var(--color-primary));
|
|
237
|
-
/* Substrate — Easing */
|
|
238
|
-
--color-easing-curve: var(--easing-curve, var(--color-primary));
|
|
239
|
-
--color-easing-handle: var(--easing-handle, var(--color-primary));
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
:root {
|
|
243
|
-
--background: oklch(1 0 0);
|
|
244
|
-
--foreground: oklch(0.145 0 0);
|
|
245
|
-
--card: oklch(1 0 0);
|
|
246
|
-
--card-foreground: oklch(0.145 0 0);
|
|
247
|
-
--popover: oklch(1 0 0);
|
|
248
|
-
--popover-foreground: oklch(0.145 0 0);
|
|
249
|
-
--primary: oklch(0.205 0 0);
|
|
250
|
-
--primary-foreground: oklch(0.985 0 0);
|
|
251
|
-
--secondary: oklch(0.97 0 0);
|
|
252
|
-
--secondary-foreground: oklch(0.205 0 0);
|
|
253
|
-
--muted: oklch(0.97 0 0);
|
|
254
|
-
--muted-foreground: oklch(0.556 0 0);
|
|
255
|
-
--accent: oklch(0.97 0 0);
|
|
256
|
-
--accent-foreground: oklch(0.205 0 0);
|
|
257
|
-
--destructive: oklch(0.577 0.245 27.325);
|
|
258
|
-
--border: oklch(0.922 0 0);
|
|
259
|
-
--input: oklch(0.922 0 0);
|
|
260
|
-
--ring: oklch(0.708 0 0);
|
|
261
|
-
--radius: 0.625rem;
|
|
262
|
-
/* Substrate */
|
|
263
|
-
--canvas: oklch(.97 0.0 0);
|
|
264
|
-
--canvas-foreground: oklch(0.556 0 0);
|
|
265
|
-
--panel: oklch(1 0 0);
|
|
266
|
-
--panel-foreground: oklch(0.145 0 0);
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
.dark {
|
|
270
|
-
--background: oklch(0.145 0 0);
|
|
271
|
-
--foreground: oklch(0.985 0 0);
|
|
272
|
-
--card: oklch(0.205 0 0);
|
|
273
|
-
--card-foreground: oklch(0.985 0 0);
|
|
274
|
-
--popover: oklch(0.205 0 0);
|
|
275
|
-
--popover-foreground: oklch(0.985 0 0);
|
|
276
|
-
--primary: oklch(0.985 0 0);
|
|
277
|
-
--primary-foreground: oklch(0.205 0 0);
|
|
278
|
-
--secondary: oklch(0.269 0 0);
|
|
279
|
-
--secondary-foreground: oklch(0.985 0 0);
|
|
280
|
-
--muted: oklch(0.269 0 0);
|
|
281
|
-
--muted-foreground: oklch(0.708 0 0);
|
|
282
|
-
--accent: oklch(0.269 0 0);
|
|
283
|
-
--accent-foreground: oklch(0.985 0 0);
|
|
284
|
-
--destructive: oklch(0.577 0.245 27.325);
|
|
285
|
-
--border: oklch(1 0 0 / 10%);
|
|
286
|
-
--input: oklch(1 0 0 / 15%);
|
|
287
|
-
--ring: oklch(0.556 0 0);
|
|
288
|
-
/* Substrate */
|
|
289
|
-
--canvas: oklch(17.764% 0.00002 271.152);
|
|
290
|
-
--canvas-foreground: oklch(0.708 0 0);
|
|
291
|
-
--panel: oklch(0.205 0 0);
|
|
292
|
-
--panel-foreground: oklch(0.985 0 0);
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
@layer base {
|
|
296
|
-
* {
|
|
297
|
-
@apply border-border;
|
|
298
|
-
}
|
|
299
|
-
body {
|
|
300
|
-
@apply bg-background text-foreground;
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
`;
|
|
304
|
-
}
|
|
305
|
-
function rootLayout(projectName) {
|
|
306
|
-
return `import type { Metadata } from "next"
|
|
307
|
-
import "./globals.css"
|
|
308
|
-
|
|
309
|
-
export const metadata: Metadata = {
|
|
310
|
-
title: "${projectName}",
|
|
311
|
-
description: "Built with Substrate",
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
export default function RootLayout({
|
|
315
|
-
children,
|
|
316
|
-
}: {
|
|
317
|
-
children: React.ReactNode
|
|
318
|
-
}) {
|
|
319
|
-
return (
|
|
320
|
-
<html lang="en">
|
|
321
|
-
<body className="antialiased">{children}</body>
|
|
322
|
-
</html>
|
|
323
|
-
)
|
|
324
|
-
}
|
|
325
|
-
`;
|
|
326
|
-
}
|
|
327
|
-
function playgroundPage() {
|
|
328
|
-
return `"use client"
|
|
329
|
-
|
|
330
|
-
import { DesignCanvas } from "@/components/substrate/design-canvas"
|
|
331
|
-
import {
|
|
332
|
-
Toolbar,
|
|
333
|
-
ToolbarToggleGroup,
|
|
334
|
-
ToolbarToggle,
|
|
335
|
-
ToolbarSeparator,
|
|
336
|
-
} from "@/components/substrate/toolbar"
|
|
337
|
-
import { Panel } from "@/components/substrate/panel"
|
|
338
|
-
import { useToolStore } from "@/stores/tool-store"
|
|
339
|
-
import { usePanelStore } from "@/stores/panel-store"
|
|
340
|
-
import {
|
|
341
|
-
RiCursorLine,
|
|
342
|
-
RiHand,
|
|
343
|
-
RiSquareLine,
|
|
344
|
-
RiCircleLine,
|
|
345
|
-
RiSubtractLine,
|
|
346
|
-
RiText,
|
|
347
|
-
RiArtboard2Line,
|
|
348
|
-
} from "@remixicon/react"
|
|
349
|
-
|
|
350
|
-
export default function PlaygroundPage() {
|
|
351
|
-
const activeTool = useToolStore((s) => s.activeTool)
|
|
352
|
-
const setTool = useToolStore((s) => s.setTool)
|
|
353
|
-
const leftPanel = usePanelStore((s) => s.leftPanel)
|
|
354
|
-
const rightPanel = usePanelStore((s) => s.rightPanel)
|
|
355
|
-
|
|
356
|
-
return (
|
|
357
|
-
<div className="h-screen w-screen">
|
|
358
|
-
{leftPanel && (
|
|
359
|
-
<Panel position="left">
|
|
360
|
-
{/* Add layer panel here */}
|
|
361
|
-
</Panel>
|
|
362
|
-
)}
|
|
363
|
-
|
|
364
|
-
<DesignCanvas />
|
|
365
|
-
|
|
366
|
-
{rightPanel && (
|
|
367
|
-
<Panel position="right">
|
|
368
|
-
{/* Add properties panel here */}
|
|
369
|
-
</Panel>
|
|
370
|
-
)}
|
|
371
|
-
|
|
372
|
-
<Toolbar>
|
|
373
|
-
<ToolbarToggleGroup value={activeTool} onValueChange={setTool}>
|
|
374
|
-
<ToolbarToggle value="select" tooltip="Select" shortcut="V">
|
|
375
|
-
<RiCursorLine className="size-4" />
|
|
376
|
-
</ToolbarToggle>
|
|
377
|
-
<ToolbarToggle value="hand" tooltip="Hand" shortcut="H">
|
|
378
|
-
<RiHand className="size-4" />
|
|
379
|
-
</ToolbarToggle>
|
|
380
|
-
|
|
381
|
-
<ToolbarSeparator />
|
|
382
|
-
|
|
383
|
-
<ToolbarToggle value="rectangle" tooltip="Rectangle" shortcut="R">
|
|
384
|
-
<RiSquareLine className="size-4" />
|
|
385
|
-
</ToolbarToggle>
|
|
386
|
-
<ToolbarToggle value="ellipse" tooltip="Ellipse" shortcut="O">
|
|
387
|
-
<RiCircleLine className="size-4" />
|
|
388
|
-
</ToolbarToggle>
|
|
389
|
-
<ToolbarToggle value="line" tooltip="Line" shortcut="L">
|
|
390
|
-
<RiSubtractLine className="size-4" />
|
|
391
|
-
</ToolbarToggle>
|
|
392
|
-
<ToolbarToggle value="text" tooltip="Text" shortcut="T">
|
|
393
|
-
<RiText className="size-4" />
|
|
394
|
-
</ToolbarToggle>
|
|
395
|
-
<ToolbarToggle value="frame" tooltip="Frame" shortcut="F">
|
|
396
|
-
<RiArtboard2Line className="size-4" />
|
|
397
|
-
</ToolbarToggle>
|
|
398
|
-
</ToolbarToggleGroup>
|
|
399
|
-
</Toolbar>
|
|
400
|
-
</div>
|
|
401
|
-
)
|
|
402
|
-
}
|
|
403
|
-
`;
|
|
404
|
-
}
|
|
405
|
-
function utilsTs() {
|
|
406
|
-
return `import { clsx, type ClassValue } from "clsx"
|
|
407
|
-
import { twMerge } from "tailwind-merge"
|
|
408
|
-
|
|
409
|
-
export function cn(...inputs: ClassValue[]) {
|
|
410
|
-
return twMerge(clsx(inputs))
|
|
411
|
-
}
|
|
412
|
-
`;
|
|
25
|
+
process.exit(result.status ?? 1);
|
|
413
26
|
}
|
|
414
27
|
//# sourceMappingURL=create.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAUxC,6EAA6E;AAC7E,sEAAsE;AACtE,MAAM,UAAU,MAAM,CAAC,WAA+B,EAAE,UAAyB,EAAE;IAClF,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,IAAI,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACvC,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5D,IAAI,OAAO,CAAC,cAAc;QAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IACrE,IAAI,OAAO,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IACpD,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAE5C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAA;IACjD,MAAM,MAAM,GAAG,QAAQ;QACtB,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC9D,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,yBAAyB,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IAExF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,mCAAmC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;AACjC,CAAC"}
|
package/dist/commands/docs.js
CHANGED
|
@@ -79,7 +79,7 @@ function formatComponent(item) {
|
|
|
79
79
|
}
|
|
80
80
|
console.log();
|
|
81
81
|
console.log(" Install:");
|
|
82
|
-
console.log(` substrate add ${item.name}`);
|
|
82
|
+
console.log(` npx substrate-kit add ${item.name}`);
|
|
83
83
|
console.log();
|
|
84
84
|
console.log(" Docs:");
|
|
85
85
|
console.log(` ${DOCS_BASE}/${item.name}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAExC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACzD,MAAM,YAAY,GAAG,mDAAmD,CAAA;AACxE,MAAM,SAAS,GAAG,qDAAqD,CAAA;AAsBvE,KAAK,UAAU,YAAY;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAA;IACtD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;QACpD,CAAC;QAAC,MAAM,CAAC;YACR,kBAAkB;QACnB,CAAC;IACF,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,CAAA;QACrC,IAAI,GAAG,CAAC,EAAE;YAAE,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAa,CAAA;IAClD,CAAC;IAAC,MAAM,CAAC;QACR,kBAAkB;IACnB,CAAC;IAED,MAAM,YAAY,GAAG;QACpB,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC;QAC5C,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC;KAClD,CAAA;IACD,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC9B,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC;gBACJ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACR,kBAAkB;YACnB,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;AACrD,CAAC;AAED,SAAS,eAAe,CAAC,IAAkB;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAA;IACrC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAErD,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAClB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,IAAI,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,aAAa,UAAU,EAAE,CAAC,CAAA;IACpD,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3D,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,EAAE,CAAA;IACd,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAA;IAClC,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpD,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,EAAE,CAAC,CAAA;IACnC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACvB,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAA;IACnC,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;QAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;YACzB,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,EAAE,CAAC,CAAA;QAC9B,CAAC;IACF,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IACzB,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,WAAW;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAiFD,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FnE"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
1
2
|
import { join } from "node:path";
|
|
2
3
|
import { copyDir, exists, writeFile, resolveSkillsDir, listDirs, } from "../utils/fs.js";
|
|
3
4
|
import { log } from "../utils/logger.js";
|
|
5
|
+
const CLI_PACKAGE = "@substrate-kit/cli";
|
|
6
|
+
const CLI_RANGE = "^0.1.2";
|
|
4
7
|
function claudeMd() {
|
|
5
8
|
return `# Substrate
|
|
6
9
|
|
|
@@ -15,6 +18,7 @@ Substrate skills are installed in \`.claude/skills/\`. They are organised into t
|
|
|
15
18
|
- **scaffold-playground** — bootstrapping a new playground
|
|
16
19
|
- **canvas-2d** / **3d-scene** / **animation** / **image-generation** / **data-visualisation** — surface-specific architecture
|
|
17
20
|
- **composing-panels** / **wire-interactions** / **create-custom-tool** / **theming** — workflow guides
|
|
21
|
+
- **install-components** — full catalogue of available components + how to install via \`substrate-kit add\`
|
|
18
22
|
|
|
19
23
|
### Component reference (what to use)
|
|
20
24
|
|
|
@@ -27,23 +31,30 @@ Substrate skills are installed in \`.claude/skills/\`. They are organised into t
|
|
|
27
31
|
|
|
28
32
|
## Install components
|
|
29
33
|
|
|
34
|
+
**Always prefer existing Substrate components over writing custom ones.** Substrate ships sliders, number inputs, toggles, colour pickers, context menus, command palettes, toolbars, panels, timelines, and more — see the \`install-components\` skill for the full catalogue.
|
|
35
|
+
|
|
30
36
|
\`\`\`bash
|
|
31
37
|
# Core scaffold
|
|
32
38
|
npx substrate-kit add design-canvas toolbar panel pane action slider
|
|
33
39
|
|
|
34
40
|
# Surface components
|
|
35
41
|
npx substrate-kit add surface timeline gallery colour-picker easing-curve-editor
|
|
42
|
+
|
|
43
|
+
# Interactive picker (no args)
|
|
44
|
+
npx substrate-kit add
|
|
36
45
|
\`\`\`
|
|
37
46
|
|
|
47
|
+
Do **not** run \`npx shadcn@latest add\` directly for Substrate components — always go through \`substrate-kit add\`.
|
|
48
|
+
|
|
38
49
|
## Registry
|
|
39
50
|
|
|
40
|
-
Components are installed from \`substrate.georgedrury.co.uk/r/\` via the shadcn
|
|
51
|
+
Components are installed from \`substrate.georgedrury.co.uk/r/\` via the Substrate CLI, which wraps shadcn under the hood.
|
|
41
52
|
`;
|
|
42
53
|
}
|
|
43
54
|
function componentsJson() {
|
|
44
55
|
return JSON.stringify({
|
|
45
56
|
$schema: "https://ui.shadcn.com/schema.json",
|
|
46
|
-
style: "
|
|
57
|
+
style: "radix-mira",
|
|
47
58
|
rsc: true,
|
|
48
59
|
tsx: true,
|
|
49
60
|
tailwind: {
|
|
@@ -51,7 +62,9 @@ function componentsJson() {
|
|
|
51
62
|
css: "app/globals.css",
|
|
52
63
|
baseColor: "neutral",
|
|
53
64
|
cssVariables: true,
|
|
65
|
+
prefix: "",
|
|
54
66
|
},
|
|
67
|
+
iconLibrary: "remixicon",
|
|
55
68
|
aliases: {
|
|
56
69
|
components: "@/components",
|
|
57
70
|
utils: "@/lib/utils",
|
|
@@ -59,6 +72,9 @@ function componentsJson() {
|
|
|
59
72
|
lib: "@/lib",
|
|
60
73
|
hooks: "@/hooks",
|
|
61
74
|
},
|
|
75
|
+
registries: {
|
|
76
|
+
"@substrate": "https://substrate.georgedrury.co.uk/r/{name}",
|
|
77
|
+
},
|
|
62
78
|
}, null, 2);
|
|
63
79
|
}
|
|
64
80
|
export async function init(options = {}) {
|
|
@@ -128,6 +144,18 @@ export async function init(options = {}) {
|
|
|
128
144
|
writeFile(mcpJsonPath, JSON.stringify(mcpConfig, null, 2) + "\n");
|
|
129
145
|
log.success("Created .mcp.json (Substrate MCP server registered)");
|
|
130
146
|
}
|
|
147
|
+
// 5. Add the CLI as a dev dependency so `npx substrate-kit` resolves locally
|
|
148
|
+
const packageJsonPath = join(cwd, "package.json");
|
|
149
|
+
if (exists(packageJsonPath)) {
|
|
150
|
+
const raw = readFileSync(packageJsonPath, "utf-8");
|
|
151
|
+
const pkg = JSON.parse(raw);
|
|
152
|
+
if (!pkg.dependencies?.[CLI_PACKAGE] && !pkg.devDependencies?.[CLI_PACKAGE]) {
|
|
153
|
+
pkg.devDependencies = { ...pkg.devDependencies, [CLI_PACKAGE]: CLI_RANGE };
|
|
154
|
+
const indent = raw.includes("\n\t") ? "\t" : 2;
|
|
155
|
+
writeFile(packageJsonPath, JSON.stringify(pkg, null, indent) + "\n");
|
|
156
|
+
log.success(`Added ${CLI_PACKAGE} to devDependencies (install to use npx substrate-kit)`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
131
159
|
log.blank();
|
|
132
160
|
log.info("Substrate is ready. Claude can now use the skills for creative app development.");
|
|
133
161
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EACN,OAAO,EACP,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,QAAQ,GACR,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -11,7 +11,7 @@ export async function startServer() {
|
|
|
11
11
|
const registry = await loadRegistry();
|
|
12
12
|
const server = new McpServer({
|
|
13
13
|
name: "substrate",
|
|
14
|
-
version: "0.1.
|
|
14
|
+
version: "0.1.2",
|
|
15
15
|
});
|
|
16
16
|
server.tool("search_components", "Search the Substrate component registry by keyword, category, or description. Returns matching components with name, description, and category.", {
|
|
17
17
|
query: z.string().optional().describe("Free-text search against component name, title, and description"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/install.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAO3C,wBAAsB,aAAa,CAClC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE;;;;;GAoC9B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { shadcnAdd } from "../../utils/shadcn.js";
|
|
2
|
+
// SUBSTRATE_REGISTRY_URL points installs at a local registry for testing
|
|
3
|
+
const REGISTRY_BASE = process.env.SUBSTRATE_REGISTRY_URL ?? "https://substrate.georgedrury.co.uk/r";
|
|
3
4
|
export async function handleInstall(registry, args) {
|
|
4
5
|
const results = [];
|
|
5
6
|
for (const name of args.components) {
|
|
@@ -14,10 +15,7 @@ export async function handleInstall(registry, args) {
|
|
|
14
15
|
}
|
|
15
16
|
const url = `${REGISTRY_BASE}/${name}`;
|
|
16
17
|
try {
|
|
17
|
-
|
|
18
|
-
encoding: "utf-8",
|
|
19
|
-
stdio: "pipe",
|
|
20
|
-
});
|
|
18
|
+
shadcnAdd(url, { silent: true });
|
|
21
19
|
results.push({ name, status: "installed" });
|
|
22
20
|
}
|
|
23
21
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/mcp/tools/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/mcp/tools/install.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD,yEAAyE;AACzE,MAAM,aAAa,GAClB,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,uCAAuC,CAAA;AAE9E,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,QAAkB,EAClB,IAA8B;IAE9B,MAAM,OAAO,GAA4D,EAAE,CAAA;IAE3E,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;QACxD,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI;gBACJ,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,cAAc,IAAI,mBAAmB;aAC5C,CAAC,CAAA;YACF,SAAQ;QACT,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,aAAa,IAAI,IAAI,EAAE,CAAA;QACtC,IAAI,CAAC;YACJ,SAAS,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YAChC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI;gBACJ,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACvD,CAAC,CAAA;QACH,CAAC;IACF,CAAC;IAED,OAAO;QACN,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACD;KACD,CAAA;AACF,CAAC"}
|