@substrate-kit/cli 0.1.1 → 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.
Files changed (146) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/LICENSE +21 -0
  3. package/README.md +25 -8
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +10 -60
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/add.d.ts +1 -0
  8. package/dist/commands/add.d.ts.map +1 -1
  9. package/dist/commands/add.js +51 -106
  10. package/dist/commands/add.js.map +1 -1
  11. package/dist/commands/docs.d.ts +4 -2
  12. package/dist/commands/docs.d.ts.map +1 -1
  13. package/dist/commands/docs.js +33 -54
  14. package/dist/commands/docs.js.map +1 -1
  15. package/dist/commands/init.d.ts.map +1 -1
  16. package/dist/commands/init.js +158 -122
  17. package/dist/commands/init.js.map +1 -1
  18. package/dist/index.js +0 -0
  19. package/dist/mcp/server.d.ts.map +1 -1
  20. package/dist/mcp/server.js +8 -7
  21. package/dist/mcp/server.js.map +1 -1
  22. package/dist/mcp/tools/get-component.d.ts +1 -1
  23. package/dist/mcp/tools/get-component.d.ts.map +1 -1
  24. package/dist/mcp/tools/get-component.js +10 -6
  25. package/dist/mcp/tools/get-component.js.map +1 -1
  26. package/dist/mcp/tools/get-docs.d.ts +17 -0
  27. package/dist/mcp/tools/get-docs.d.ts.map +1 -0
  28. package/dist/mcp/tools/get-docs.js +23 -0
  29. package/dist/mcp/tools/get-docs.js.map +1 -0
  30. package/dist/mcp/tools/install.d.ts +2 -1
  31. package/dist/mcp/tools/install.d.ts.map +1 -1
  32. package/dist/mcp/tools/install.js +19 -30
  33. package/dist/mcp/tools/install.js.map +1 -1
  34. package/dist/mcp/tools/search.d.ts +1 -1
  35. package/dist/mcp/tools/search.d.ts.map +1 -1
  36. package/dist/mcp/tools/search.js +2 -4
  37. package/dist/mcp/tools/search.js.map +1 -1
  38. package/dist/{mcp/types.d.ts → registry.d.ts} +6 -1
  39. package/dist/registry.d.ts.map +1 -0
  40. package/dist/registry.js +48 -0
  41. package/dist/registry.js.map +1 -0
  42. package/dist/utils/agents-file.d.ts +4 -0
  43. package/dist/utils/agents-file.d.ts.map +1 -0
  44. package/dist/utils/agents-file.js +36 -0
  45. package/dist/utils/agents-file.js.map +1 -0
  46. package/dist/utils/docs.d.ts +7 -0
  47. package/dist/utils/docs.d.ts.map +1 -0
  48. package/dist/utils/docs.js +28 -0
  49. package/dist/utils/docs.js.map +1 -0
  50. package/dist/utils/shadcn.d.ts +12 -0
  51. package/dist/utils/shadcn.d.ts.map +1 -0
  52. package/dist/utils/shadcn.js +29 -0
  53. package/dist/utils/shadcn.js.map +1 -0
  54. package/dist/utils/version.d.ts +3 -0
  55. package/dist/utils/version.d.ts.map +1 -0
  56. package/dist/utils/version.js +8 -0
  57. package/dist/utils/version.js.map +1 -0
  58. package/docs/components/action.mdx +30 -0
  59. package/docs/components/alignment-controls.mdx +30 -0
  60. package/docs/components/badge.mdx +22 -0
  61. package/docs/components/breadcrumbs.mdx +25 -0
  62. package/docs/components/collapsible-pane.mdx +35 -0
  63. package/docs/components/colour-picker.mdx +66 -0
  64. package/docs/components/command-palette.mdx +36 -0
  65. package/docs/components/context-menu.mdx +31 -0
  66. package/docs/components/controls-timeline.mdx +107 -0
  67. package/docs/components/controls.mdx +168 -0
  68. package/docs/components/design-canvas.mdx +51 -0
  69. package/docs/components/document-tabs.mdx +25 -0
  70. package/docs/components/easing-curve-editor.mdx +85 -0
  71. package/docs/components/empty-state.mdx +26 -0
  72. package/docs/components/gallery.mdx +60 -0
  73. package/docs/components/history-controls.mdx +47 -0
  74. package/docs/components/image-picker.mdx +50 -0
  75. package/docs/components/layer-list.mdx +36 -0
  76. package/docs/components/node.mdx +85 -0
  77. package/docs/components/number-input.mdx +44 -0
  78. package/docs/components/number-slider.mdx +32 -0
  79. package/docs/components/pane.mdx +39 -0
  80. package/docs/components/panel.mdx +28 -0
  81. package/docs/components/popover.mdx +32 -0
  82. package/docs/components/progress-bar.mdx +24 -0
  83. package/docs/components/resizer.mdx +24 -0
  84. package/docs/components/select.mdx +31 -0
  85. package/docs/components/shortcut-overlay.mdx +43 -0
  86. package/docs/components/slider.mdx +20 -0
  87. package/docs/components/spring-editor.mdx +85 -0
  88. package/docs/components/status-bar.mdx +42 -0
  89. package/docs/components/surface.mdx +47 -0
  90. package/docs/components/swatch-palette.mdx +36 -0
  91. package/docs/components/text-area.mdx +26 -0
  92. package/docs/components/timeline.mdx +96 -0
  93. package/docs/components/toast.mdx +42 -0
  94. package/docs/components/toggle-group.mdx +40 -0
  95. package/docs/components/toggle.mdx +27 -0
  96. package/docs/components/toolbar.mdx +24 -0
  97. package/docs/components/tree-list.mdx +46 -0
  98. package/docs/components/xy-pad.mdx +49 -0
  99. package/docs/hooks/use-clipboard.mdx +70 -0
  100. package/docs/hooks/use-drag-reorder.mdx +60 -0
  101. package/docs/hooks/use-selection.mdx +68 -0
  102. package/docs/hooks/use-undoable.mdx +83 -0
  103. package/docs/hooks/use-viewport.mdx +75 -0
  104. package/docs/utilities/bounding-box.mdx +76 -0
  105. package/docs/utilities/keyboard-shortcuts.mdx +64 -0
  106. package/docs/utilities/snap.mdx +73 -0
  107. package/package.json +6 -3
  108. package/registry.json +331 -16
  109. package/skills/3d-scene/SKILL.md +2 -1
  110. package/skills/animation/SKILL.md +2 -1
  111. package/skills/canvas-2d/SKILL.md +68 -6
  112. package/skills/composing-panels/SKILL.md +9 -12
  113. package/skills/data-visualisation/SKILL.md +2 -1
  114. package/skills/image-generation/SKILL.md +2 -1
  115. package/skills/install-components/SKILL.md +22 -16
  116. package/skills/scaffold-playground/SKILL.md +42 -22
  117. package/skills/substrate-canvas/SKILL.md +5 -0
  118. package/skills/substrate-controls/SKILL.md +57 -2
  119. package/skills/substrate-interaction/SKILL.md +19 -10
  120. package/skills/substrate-scaffold/SKILL.md +4 -4
  121. package/skills/theming/SKILL.md +8 -2
  122. package/skills/wire-interactions/SKILL.md +6 -3
  123. package/templates/agents-section.md +41 -0
  124. package/dist/commands/browse.d.ts +0 -2
  125. package/dist/commands/browse.d.ts.map +0 -1
  126. package/dist/commands/browse.js +0 -25
  127. package/dist/commands/browse.js.map +0 -1
  128. package/dist/commands/create.d.ts +0 -9
  129. package/dist/commands/create.d.ts.map +0 -1
  130. package/dist/commands/create.js +0 -415
  131. package/dist/commands/create.js.map +0 -1
  132. package/dist/commands/variables.d.ts +0 -4
  133. package/dist/commands/variables.d.ts.map +0 -1
  134. package/dist/commands/variables.js +0 -111
  135. package/dist/commands/variables.js.map +0 -1
  136. package/dist/mcp/registry.d.ts +0 -3
  137. package/dist/mcp/registry.d.ts.map +0 -1
  138. package/dist/mcp/registry.js +0 -43
  139. package/dist/mcp/registry.js.map +0 -1
  140. package/dist/mcp/tools/theme.d.ts +0 -10
  141. package/dist/mcp/tools/theme.d.ts.map +0 -1
  142. package/dist/mcp/tools/theme.js +0 -37
  143. package/dist/mcp/tools/theme.js.map +0 -1
  144. package/dist/mcp/types.d.ts.map +0 -1
  145. package/dist/mcp/types.js +0 -2
  146. package/dist/mcp/types.js.map +0 -1
@@ -1,415 +0,0 @@
1
- import { join } from "node:path";
2
- import chalk from "chalk";
3
- import { exists, ensureDir, writeFile } from "../utils/fs.js";
4
- import { exec, execSilent } from "../utils/shell.js";
5
- import { log } from "../utils/logger.js";
6
- import { detectPackageManager, getInstallCommand, } from "../utils/detect-pm.js";
7
- import { init } from "./init.js";
8
- function printBanner() {
9
- const banner = [
10
- "┌──────────────────────────────────┐",
11
- "│ ▓▓▓ substrate ▓▓▓ │",
12
- "│ creative app framework │",
13
- "└──────────────────────────────────┘",
14
- ];
15
- console.log();
16
- for (const line of banner) {
17
- console.log(chalk.bold(` ${line}`));
18
- }
19
- console.log();
20
- }
21
- const REGISTRY_BASE = "https://substrate.georgedrury.co.uk/r";
22
- const CORE_COMPONENTS = [
23
- "design-canvas",
24
- "toolbar",
25
- "panel",
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`);
35
- process.exit(1);
36
- }
37
- printBanner();
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: npx substrate-kit 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
- "@substrate-kit/cli": "^0.1.1",
140
- },
141
- }, null, 2);
142
- }
143
- function tsconfig() {
144
- return JSON.stringify({
145
- compilerOptions: {
146
- target: "ES2017",
147
- lib: ["dom", "dom.iterable", "esnext"],
148
- allowJs: true,
149
- skipLibCheck: true,
150
- strict: true,
151
- noEmit: true,
152
- esModuleInterop: true,
153
- module: "esnext",
154
- moduleResolution: "bundler",
155
- resolveJsonModule: true,
156
- isolatedModules: true,
157
- jsx: "preserve",
158
- incremental: true,
159
- plugins: [{ name: "next" }],
160
- paths: {
161
- "@/*": ["./*"],
162
- },
163
- },
164
- include: ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
165
- exclude: ["node_modules"],
166
- }, null, 2);
167
- }
168
- function nextConfig() {
169
- return `import type { NextConfig } from "next"
170
-
171
- const nextConfig: NextConfig = {}
172
-
173
- export default nextConfig
174
- `;
175
- }
176
- function postcssConfig() {
177
- return `/** @type {import('postcss-load-config').Config} */
178
- const config = {
179
- plugins: {
180
- "@tailwindcss/postcss": {},
181
- },
182
- }
183
-
184
- export default config
185
- `;
186
- }
187
- function gitignore() {
188
- return `node_modules/
189
- .next/
190
- out/
191
- build/
192
- .DS_Store
193
- *.pem
194
- .env
195
- .env*.local
196
- *.tsbuildinfo
197
- next-env.d.ts
198
- `;
199
- }
200
- function globalsCss() {
201
- return `@import "tailwindcss";
202
- @import "tw-animate-css";
203
-
204
- @theme inline {
205
- --color-background: var(--background);
206
- --color-foreground: var(--foreground);
207
- --color-card: var(--card);
208
- --color-card-foreground: var(--card-foreground);
209
- --color-popover: var(--popover);
210
- --color-popover-foreground: var(--popover-foreground);
211
- --color-primary: var(--primary);
212
- --color-primary-foreground: var(--primary-foreground);
213
- --color-secondary: var(--secondary);
214
- --color-secondary-foreground: var(--secondary-foreground);
215
- --color-muted: var(--muted);
216
- --color-muted-foreground: var(--muted-foreground);
217
- --color-accent: var(--accent);
218
- --color-accent-foreground: var(--accent-foreground);
219
- --color-destructive: var(--destructive);
220
- --color-border: var(--border);
221
- --color-input: var(--input);
222
- --color-ring: var(--ring);
223
- --radius-sm: calc(var(--radius) - 4px);
224
- --radius-md: calc(var(--radius) - 2px);
225
- --radius-lg: var(--radius);
226
- --radius-xl: calc(var(--radius) + 4px);
227
- /* Substrate */
228
- --color-canvas: var(--canvas, var(--color-background));
229
- --color-canvas-foreground: var(--canvas-foreground, var(--color-foreground-muted));
230
- --color-panel: var(--panel, var(--color-card));
231
- --color-panel-foreground: var(--panel-foreground, var(--color-card-foreground));
232
- /* Substrate — Timeline */
233
- --color-timeline-playhead: var(--timeline-playhead, var(--color-destructive));
234
- --color-timeline-keyframe: var(--timeline-keyframe, var(--color-muted-foreground));
235
- --color-timeline-track: var(--timeline-track, var(--color-panel));
236
- /* Substrate — Gallery */
237
- --color-gallery-selection: var(--gallery-selection, var(--color-primary));
238
- /* Substrate — Easing */
239
- --color-easing-curve: var(--easing-curve, var(--color-primary));
240
- --color-easing-handle: var(--easing-handle, var(--color-primary));
241
- }
242
-
243
- :root {
244
- --background: oklch(1 0 0);
245
- --foreground: oklch(0.145 0 0);
246
- --card: oklch(1 0 0);
247
- --card-foreground: oklch(0.145 0 0);
248
- --popover: oklch(1 0 0);
249
- --popover-foreground: oklch(0.145 0 0);
250
- --primary: oklch(0.205 0 0);
251
- --primary-foreground: oklch(0.985 0 0);
252
- --secondary: oklch(0.97 0 0);
253
- --secondary-foreground: oklch(0.205 0 0);
254
- --muted: oklch(0.97 0 0);
255
- --muted-foreground: oklch(0.556 0 0);
256
- --accent: oklch(0.97 0 0);
257
- --accent-foreground: oklch(0.205 0 0);
258
- --destructive: oklch(0.577 0.245 27.325);
259
- --border: oklch(0.922 0 0);
260
- --input: oklch(0.922 0 0);
261
- --ring: oklch(0.708 0 0);
262
- --radius: 0.625rem;
263
- /* Substrate */
264
- --canvas: oklch(.97 0.0 0);
265
- --canvas-foreground: oklch(0.556 0 0);
266
- --panel: oklch(1 0 0);
267
- --panel-foreground: oklch(0.145 0 0);
268
- }
269
-
270
- .dark {
271
- --background: oklch(0.145 0 0);
272
- --foreground: oklch(0.985 0 0);
273
- --card: oklch(0.205 0 0);
274
- --card-foreground: oklch(0.985 0 0);
275
- --popover: oklch(0.205 0 0);
276
- --popover-foreground: oklch(0.985 0 0);
277
- --primary: oklch(0.985 0 0);
278
- --primary-foreground: oklch(0.205 0 0);
279
- --secondary: oklch(0.269 0 0);
280
- --secondary-foreground: oklch(0.985 0 0);
281
- --muted: oklch(0.269 0 0);
282
- --muted-foreground: oklch(0.708 0 0);
283
- --accent: oklch(0.269 0 0);
284
- --accent-foreground: oklch(0.985 0 0);
285
- --destructive: oklch(0.577 0.245 27.325);
286
- --border: oklch(1 0 0 / 10%);
287
- --input: oklch(1 0 0 / 15%);
288
- --ring: oklch(0.556 0 0);
289
- /* Substrate */
290
- --canvas: oklch(17.764% 0.00002 271.152);
291
- --canvas-foreground: oklch(0.708 0 0);
292
- --panel: oklch(0.205 0 0);
293
- --panel-foreground: oklch(0.985 0 0);
294
- }
295
-
296
- @layer base {
297
- * {
298
- @apply border-border;
299
- }
300
- body {
301
- @apply bg-background text-foreground;
302
- }
303
- }
304
- `;
305
- }
306
- function rootLayout(projectName) {
307
- return `import type { Metadata } from "next"
308
- import "./globals.css"
309
-
310
- export const metadata: Metadata = {
311
- title: "${projectName}",
312
- description: "Built with Substrate",
313
- }
314
-
315
- export default function RootLayout({
316
- children,
317
- }: {
318
- children: React.ReactNode
319
- }) {
320
- return (
321
- <html lang="en">
322
- <body className="antialiased">{children}</body>
323
- </html>
324
- )
325
- }
326
- `;
327
- }
328
- function playgroundPage() {
329
- return `"use client"
330
-
331
- import { DesignCanvas } from "@/components/substrate/design-canvas"
332
- import {
333
- Toolbar,
334
- ToolbarToggleGroup,
335
- ToolbarToggle,
336
- ToolbarSeparator,
337
- } from "@/components/substrate/toolbar"
338
- import { Panel } from "@/components/substrate/panel"
339
- import { useToolStore } from "@/stores/tool-store"
340
- import { usePanelStore } from "@/stores/panel-store"
341
- import {
342
- RiCursorLine,
343
- RiHand,
344
- RiSquareLine,
345
- RiCircleLine,
346
- RiSubtractLine,
347
- RiText,
348
- RiArtboard2Line,
349
- } from "@remixicon/react"
350
-
351
- export default function PlaygroundPage() {
352
- const activeTool = useToolStore((s) => s.activeTool)
353
- const setTool = useToolStore((s) => s.setTool)
354
- const leftPanel = usePanelStore((s) => s.leftPanel)
355
- const rightPanel = usePanelStore((s) => s.rightPanel)
356
-
357
- return (
358
- <div className="h-screen w-screen">
359
- {leftPanel && (
360
- <Panel position="left">
361
- {/* Add layer panel here */}
362
- </Panel>
363
- )}
364
-
365
- <DesignCanvas />
366
-
367
- {rightPanel && (
368
- <Panel position="right">
369
- {/* Add properties panel here */}
370
- </Panel>
371
- )}
372
-
373
- <Toolbar>
374
- <ToolbarToggleGroup value={activeTool} onValueChange={setTool}>
375
- <ToolbarToggle value="select" tooltip="Select" shortcut="V">
376
- <RiCursorLine className="size-4" />
377
- </ToolbarToggle>
378
- <ToolbarToggle value="hand" tooltip="Hand" shortcut="H">
379
- <RiHand className="size-4" />
380
- </ToolbarToggle>
381
-
382
- <ToolbarSeparator />
383
-
384
- <ToolbarToggle value="rectangle" tooltip="Rectangle" shortcut="R">
385
- <RiSquareLine className="size-4" />
386
- </ToolbarToggle>
387
- <ToolbarToggle value="ellipse" tooltip="Ellipse" shortcut="O">
388
- <RiCircleLine className="size-4" />
389
- </ToolbarToggle>
390
- <ToolbarToggle value="line" tooltip="Line" shortcut="L">
391
- <RiSubtractLine className="size-4" />
392
- </ToolbarToggle>
393
- <ToolbarToggle value="text" tooltip="Text" shortcut="T">
394
- <RiText className="size-4" />
395
- </ToolbarToggle>
396
- <ToolbarToggle value="frame" tooltip="Frame" shortcut="F">
397
- <RiArtboard2Line className="size-4" />
398
- </ToolbarToggle>
399
- </ToolbarToggleGroup>
400
- </Toolbar>
401
- </div>
402
- )
403
- }
404
- `;
405
- }
406
- function utilsTs() {
407
- return `import { clsx, type ClassValue } from "clsx"
408
- import { twMerge } from "tailwind-merge"
409
-
410
- export function cn(...inputs: ClassValue[]) {
411
- return twMerge(clsx(inputs))
412
- }
413
- `;
414
- }
415
- //# sourceMappingURL=create.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- export declare function variables(component: string | undefined, options: {
2
- all?: boolean;
3
- }): Promise<void>;
4
- //# sourceMappingURL=variables.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../src/commands/variables.ts"],"names":[],"mappings":"AAmEA,wBAAsB,SAAS,CAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GACxB,OAAO,CAAC,IAAI,CAAC,CAuEf"}
@@ -1,111 +0,0 @@
1
- import { readFileSync, existsSync } from "node:fs";
2
- import { join, dirname } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- import { log } from "../utils/logger.js";
5
- const __dirname = dirname(fileURLToPath(import.meta.url));
6
- const REGISTRY_URL = "https://substrate.georgedrury.co.uk/registry.json";
7
- async function loadRegistry() {
8
- const localPath = join(process.cwd(), "registry.json");
9
- if (existsSync(localPath)) {
10
- try {
11
- return JSON.parse(readFileSync(localPath, "utf-8"));
12
- }
13
- catch {
14
- /* fall through */
15
- }
16
- }
17
- try {
18
- const res = await fetch(REGISTRY_URL);
19
- if (res.ok)
20
- return (await res.json());
21
- }
22
- catch {
23
- /* fall through */
24
- }
25
- const bundledPaths = [
26
- join(__dirname, "..", "..", "registry.json"),
27
- join(__dirname, "..", "..", "..", "registry.json"),
28
- ];
29
- for (const p of bundledPaths) {
30
- if (existsSync(p)) {
31
- try {
32
- return JSON.parse(readFileSync(p, "utf-8"));
33
- }
34
- catch {
35
- /* fall through */
36
- }
37
- }
38
- }
39
- return null;
40
- }
41
- function extractOverrideKeys(item) {
42
- const theme = item.cssVars?.theme;
43
- if (!theme)
44
- return [];
45
- const keys = [];
46
- for (const value of Object.values(theme)) {
47
- const match = value.match(/^var\(--([^,)]+)/);
48
- if (match)
49
- keys.push(`--${match[1]}`);
50
- }
51
- return keys;
52
- }
53
- export async function variables(component, options) {
54
- const registry = await loadRegistry();
55
- if (!registry) {
56
- log.error("Could not load the component registry");
57
- process.exit(1);
58
- }
59
- if (options.all) {
60
- const withVars = registry.items
61
- .map((item) => ({ item, keys: extractOverrideKeys(item) }))
62
- .filter(({ keys }) => keys.length > 0)
63
- .sort((a, b) => a.item.name.localeCompare(b.item.name));
64
- if (withVars.length === 0) {
65
- log.info("No components have theme variables");
66
- return;
67
- }
68
- log.blank();
69
- log.info(`${withVars.length} components with theme variables:`);
70
- log.blank();
71
- for (const { item, keys } of withVars) {
72
- console.log(` ${item.name}`);
73
- for (const key of keys) {
74
- console.log(` ${key}`);
75
- }
76
- console.log();
77
- }
78
- return;
79
- }
80
- if (!component) {
81
- log.error("Provide a component name, e.g. substrate variables panel");
82
- log.info("Use --all to list every component's variables");
83
- process.exit(1);
84
- }
85
- const item = registry.items.find((i) => i.name.toLowerCase() === component.toLowerCase());
86
- if (!item) {
87
- log.error(`Component "${component}" not found`);
88
- const query = component.toLowerCase();
89
- const suggestions = registry.items
90
- .filter((i) => i.name.toLowerCase().includes(query))
91
- .slice(0, 5);
92
- if (suggestions.length > 0) {
93
- log.info("Did you mean:");
94
- for (const s of suggestions) {
95
- console.log(` ${s.name}`);
96
- }
97
- }
98
- process.exit(1);
99
- }
100
- const keys = extractOverrideKeys(item);
101
- if (keys.length === 0) {
102
- log.info("No theme variables — this component uses base theme values only");
103
- return;
104
- }
105
- log.blank();
106
- for (const key of keys) {
107
- console.log(` ${key}`);
108
- }
109
- log.blank();
110
- }
111
- //# sourceMappingURL=variables.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"variables.js","sourceRoot":"","sources":["../../src/commands/variables.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;AAgBxE,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,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAkB;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAA;IACjC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IACrB,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAC7C,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC9B,SAA6B,EAC7B,OAA0B;IAE1B,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAA;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK;aAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC1D,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACrC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAExD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;YAC9C,OAAM;QACP,CAAC;QAED,GAAG,CAAC,KAAK,EAAE,CAAA;QACX,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,mCAAmC,CAAC,CAAA;QAC/D,GAAG,CAAC,KAAK,EAAE,CAAA;QAEX,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;YAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;YAC1B,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAA;QACd,CAAC;QACD,OAAM;IACP,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAA;QACrE,GAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CACvD,CAAA;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,GAAG,CAAC,KAAK,CAAC,cAAc,SAAS,aAAa,CAAC,CAAA;QAE/C,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAA;QACrC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK;aAChC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACnD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAEb,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;YACzB,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YAC3B,CAAC;QACF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IAED,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;IAEtC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAA;QAC3E,OAAM;IACP,CAAC;IAED,GAAG,CAAC,KAAK,EAAE,CAAA;IACX,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IAC1B,CAAC;IACD,GAAG,CAAC,KAAK,EAAE,CAAA;AACZ,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { Registry } from "./types.js";
2
- export declare function loadRegistry(): Promise<Registry>;
3
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAK1C,wBAAsB,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAmCtD"}
@@ -1,43 +0,0 @@
1
- import { readFileSync, existsSync } from "node:fs";
2
- import { join, dirname } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- const __dirname = dirname(fileURLToPath(import.meta.url));
5
- const REGISTRY_URL = "https://substrate.georgedrury.co.uk/registry.json";
6
- export async function loadRegistry() {
7
- // Try local
8
- const localPath = join(process.cwd(), "registry.json");
9
- if (existsSync(localPath)) {
10
- try {
11
- return JSON.parse(readFileSync(localPath, "utf-8"));
12
- }
13
- catch {
14
- /* fall through */
15
- }
16
- }
17
- // Try remote
18
- try {
19
- const res = await fetch(REGISTRY_URL);
20
- if (res.ok)
21
- return (await res.json());
22
- }
23
- catch {
24
- /* fall through */
25
- }
26
- // Try bundled
27
- const bundledPaths = [
28
- join(__dirname, "..", "..", "registry.json"),
29
- join(__dirname, "..", "..", "..", "registry.json"),
30
- ];
31
- for (const p of bundledPaths) {
32
- if (existsSync(p)) {
33
- try {
34
- return JSON.parse(readFileSync(p, "utf-8"));
35
- }
36
- catch {
37
- /* fall through */
38
- }
39
- }
40
- }
41
- throw new Error("Could not load Substrate registry");
42
- }
43
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/mcp/registry.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;AAGxC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACzD,MAAM,YAAY,GAAG,mDAAmD,CAAA;AAExE,MAAM,CAAC,KAAK,UAAU,YAAY;IACjC,YAAY;IACZ,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,aAAa;IACb,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,cAAc;IACd,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"}
@@ -1,10 +0,0 @@
1
- import type { Registry } from "../types.js";
2
- export declare function handleGetThemeVariables(registry: Registry, args: {
3
- components?: string[];
4
- }): Promise<{
5
- content: {
6
- type: "text";
7
- text: string;
8
- }[];
9
- }>;
10
- //# sourceMappingURL=theme.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,aAAa,CAAA;AAazD,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;;;;;GA2BhC"}
@@ -1,37 +0,0 @@
1
- function extractOverrideKeys(item) {
2
- const theme = item.cssVars?.theme;
3
- if (!theme)
4
- return [];
5
- const keys = [];
6
- for (const value of Object.values(theme)) {
7
- const match = value.match(/^var\(--([^,)]+)/);
8
- if (match)
9
- keys.push(`--${match[1]}`);
10
- }
11
- return keys;
12
- }
13
- export async function handleGetThemeVariables(registry, args) {
14
- let items = registry.items;
15
- if (args.components && args.components.length > 0) {
16
- const names = new Set(args.components.map((n) => n.toLowerCase()));
17
- items = items.filter((i) => names.has(i.name.toLowerCase()));
18
- }
19
- const result = {};
20
- for (const item of items) {
21
- if (!item.cssVars)
22
- continue;
23
- result[item.name] = {
24
- cssVars: item.cssVars,
25
- overrideKeys: extractOverrideKeys(item),
26
- };
27
- }
28
- return {
29
- content: [
30
- {
31
- type: "text",
32
- text: JSON.stringify(result, null, 2),
33
- },
34
- ],
35
- };
36
- }
37
- //# sourceMappingURL=theme.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/mcp/tools/theme.ts"],"names":[],"mappings":"AAEA,SAAS,mBAAmB,CAAC,IAAkB;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAA;IACjC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IACrB,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAC7C,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACvC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,QAAkB,EAClB,IAA+B;IAE/B,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;IAE1B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAClE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,MAAM,MAAM,GAAoF,EAAE,CAAA;IAElG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,SAAQ;QAC3B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YAClB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,mBAAmB,CAAC,IAAI,CAAC;SACxC,CAAA;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACF;KACF,CAAA;AACH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC/B,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KACjD,CAAA;IACD,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC9B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAC9B,CAAA;IACD,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;KACf,CAAC,CAAA;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,YAAY,EAAE,CAAA;CACtB"}