@layoutdesign/context 0.1.15 → 0.2.1
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 +10 -10
- package/dist/src/cli/import-zip.d.ts.map +1 -1
- package/dist/src/cli/import-zip.js +11 -3
- package/dist/src/cli/import-zip.js.map +1 -1
- package/dist/src/cli/init.js +4 -4
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/kit/loader.d.ts.map +1 -1
- package/dist/src/kit/loader.js +17 -9
- package/dist/src/kit/loader.js.map +1 -1
- package/dist/src/kit/parser.d.ts +4 -4
- package/dist/src/kit/parser.js +4 -4
- package/dist/src/kit/types.d.ts +2 -2
- package/dist/src/kit/types.js +1 -1
- package/dist/src/mcp/tools/design-in-figma.js +1 -1
- package/dist/src/mcp/tools/get-design-system.js +3 -3
- package/dist/src/mcp/tools/list-components.js +1 -1
- package/dist/src/mcp/tools/update-tokens.js +14 -14
- package/package.json +1 -1
- /package/kits/linear-lite/{DESIGN.md → layout.md} +0 -0
- /package/kits/notion-lite/{DESIGN.md → layout.md} +0 -0
- /package/kits/stripe-lite/{DESIGN.md → layout.md} +0 -0
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ Eleven tools are registered with the MCP server automatically.
|
|
|
42
42
|
|
|
43
43
|
| Tool | Description |
|
|
44
44
|
|------|-------------|
|
|
45
|
-
| `get_design_system` | Returns the full
|
|
45
|
+
| `get_design_system` | Returns the full layout.md, or a filtered section (colours, typography, spacing, components). Use this before writing any UI. |
|
|
46
46
|
| `get_tokens` | Returns design tokens in CSS custom properties, W3C DTCG JSON, or Tailwind config format. |
|
|
47
47
|
| `get_component` | Returns the spec and code example for a named component. |
|
|
48
48
|
| `list_components` | Lists all components defined in the active kit. |
|
|
@@ -51,7 +51,7 @@ Eleven tools are registered with the MCP server automatically.
|
|
|
51
51
|
| `push_to_figma` | Bridges to the Figma MCP server to create an editable Figma frame from component code. Requires Figma MCP to be configured separately. |
|
|
52
52
|
| `design_in_figma` | Takes a natural language prompt (e.g. "A pricing card with 3 tiers") and returns design tokens, component specs, and step-by-step instructions for calling Figma MCP's `generate_figma_design`. Enables AI agents to design in Figma before writing code. Inputs: `prompt` (required), `fileKey` (optional), `viewports` (optional: desktop/tablet/mobile). |
|
|
53
53
|
| `url_to_figma` | Captures a live website URL as editable Figma frames with auto-layout. Inputs: `url`, `viewports`, `outputMode` (newFile/existingFile/clipboard), `fileKey`. Requires both Figma MCP and Playwright MCP servers. |
|
|
54
|
-
| `update_tokens` | Updates token values in `tokens.css`, `tokens.json`, and `
|
|
54
|
+
| `update_tokens` | Updates token values in `tokens.css`, `tokens.json`, and `layout.md` simultaneously. Use when tweaking colours, spacing, or other tokens without re-extracting. Keeps the entire design system consistent. |
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
@@ -78,7 +78,7 @@ Eleven tools are registered with the MCP server automatically.
|
|
|
78
78
|
# Start with the Linear-inspired dark kit
|
|
79
79
|
npx @layoutdesign/context init --kit linear-lite
|
|
80
80
|
|
|
81
|
-
# Start with a blank template and write your own
|
|
81
|
+
# Start with a blank template and write your own layout.md
|
|
82
82
|
npx @layoutdesign/context init
|
|
83
83
|
|
|
84
84
|
# Auto-configure MCP settings for all supported editors
|
|
@@ -281,7 +281,7 @@ When `push_to_figma` is called, it returns a structured prompt ready to pass to
|
|
|
281
281
|
|
|
282
282
|
## Custom Design Systems
|
|
283
283
|
|
|
284
|
-
You don't need a pre-built kit. You can write your own `
|
|
284
|
+
You don't need a pre-built kit. You can write your own `layout.md` and the MCP server will use it.
|
|
285
285
|
|
|
286
286
|
**1. Create the `.layout/` directory:**
|
|
287
287
|
|
|
@@ -289,9 +289,9 @@ You don't need a pre-built kit. You can write your own `DESIGN.md` and the MCP s
|
|
|
289
289
|
npx @layoutdesign/context init
|
|
290
290
|
```
|
|
291
291
|
|
|
292
|
-
This creates a blank template at `.layout/
|
|
292
|
+
This creates a blank template at `.layout/layout.md` for you to fill in.
|
|
293
293
|
|
|
294
|
-
**2. Edit `
|
|
294
|
+
**2. Edit `layout.md` with your design system:**
|
|
295
295
|
|
|
296
296
|
```markdown
|
|
297
297
|
# My Design System
|
|
@@ -320,7 +320,7 @@ Primary action button. Uses --color-primary as background.
|
|
|
320
320
|
```
|
|
321
321
|
.layout/
|
|
322
322
|
├── kit.json # Metadata (name, version, description)
|
|
323
|
-
├──
|
|
323
|
+
├── layout.md # Human-readable design system spec
|
|
324
324
|
├── tokens.css # CSS custom properties
|
|
325
325
|
├── tokens.json # W3C DTCG tokens (optional)
|
|
326
326
|
└── tailwind.config.js # Tailwind theme extension (optional)
|
|
@@ -341,7 +341,7 @@ The server reads whatever is in `.layout/` — no configuration needed.
|
|
|
341
341
|
```
|
|
342
342
|
.layout/
|
|
343
343
|
├── kit.json # Kit metadata (name, version, tier, component count)
|
|
344
|
-
├──
|
|
344
|
+
├── layout.md # Full design system spec — this is what agents read
|
|
345
345
|
├── tokens.css # CSS custom properties for all tokens
|
|
346
346
|
├── tokens.json # W3C DTCG tokens.json (for tooling integration)
|
|
347
347
|
└── tailwind.config.js # Tailwind theme config matching the token set
|
|
@@ -359,8 +359,8 @@ Use Layout to:
|
|
|
359
359
|
|
|
360
360
|
- Extract tokens and components from an existing Figma file
|
|
361
361
|
- Scrape a live website's design system (colours, typography, spacing, components)
|
|
362
|
-
- Generate a structured `
|
|
363
|
-
- Export a bundle containing `
|
|
362
|
+
- Generate a structured `layout.md` using Claude
|
|
363
|
+
- Export a bundle containing `layout.md`, `tokens.css`, `tokens.json`, and `tailwind.config.js`
|
|
364
364
|
|
|
365
365
|
### Importing a Layout Export
|
|
366
366
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-zip.d.ts","sourceRoot":"","sources":["../../../src/cli/import-zip.ts"],"names":[],"mappings":"AA6BA,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"import-zip.d.ts","sourceRoot":"","sources":["../../../src/cli/import-zip.ts"],"names":[],"mappings":"AA6BA,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuIlE"}
|
|
@@ -3,11 +3,11 @@ import path from "node:path";
|
|
|
3
3
|
import os from "node:os";
|
|
4
4
|
import { execFileSync } from "node:child_process";
|
|
5
5
|
import chalk from "chalk";
|
|
6
|
-
import { LAYOUT_DIR, KIT_MANIFEST_FILE,
|
|
6
|
+
import { LAYOUT_DIR, KIT_MANIFEST_FILE, LAYOUT_MD_FILE, TOKENS_CSS_FILE, TOKENS_JSON_FILE, TAILWIND_CONFIG_FILE, } from "../kit/types.js";
|
|
7
7
|
/** Files we look for in the extracted ZIP and copy to .layout/ */
|
|
8
8
|
const KNOWN_FILES = [
|
|
9
9
|
KIT_MANIFEST_FILE,
|
|
10
|
-
|
|
10
|
+
LAYOUT_MD_FILE,
|
|
11
11
|
TOKENS_CSS_FILE,
|
|
12
12
|
TOKENS_JSON_FILE,
|
|
13
13
|
TAILWIND_CONFIG_FILE,
|
|
@@ -71,6 +71,14 @@ export async function importCommand(zipPath) {
|
|
|
71
71
|
imported.push(fileName);
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
+
// Backward compatibility: accept DESIGN.md from old bundles, write as layout.md
|
|
75
|
+
if (!imported.includes(LAYOUT_MD_FILE)) {
|
|
76
|
+
const legacySrc = path.join(extractedRoot, "DESIGN.md");
|
|
77
|
+
if (fs.existsSync(legacySrc)) {
|
|
78
|
+
fs.copyFileSync(legacySrc, path.join(targetDir, LAYOUT_MD_FILE));
|
|
79
|
+
imported.push(LAYOUT_MD_FILE);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
74
82
|
// Copy components directory if it exists
|
|
75
83
|
const componentsSrc = path.join(extractedRoot, "components");
|
|
76
84
|
if (fs.existsSync(componentsSrc) && fs.statSync(componentsSrc).isDirectory()) {
|
|
@@ -106,7 +114,7 @@ export async function importCommand(zipPath) {
|
|
|
106
114
|
console.log(`Run ${chalk.cyan("npx @layoutdesign/context install")} to connect the MCP server.`);
|
|
107
115
|
}
|
|
108
116
|
/**
|
|
109
|
-
* Merge the .layout/CLAUDE.md content into the project
|
|
117
|
+
* Merge the .layout/CLAUDE.md content into the project root CLAUDE.md.
|
|
110
118
|
* Uses HTML comment markers so re-imports replace the previous section.
|
|
111
119
|
* Returns a description string for the import log, or null if nothing was merged.
|
|
112
120
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-zip.js","sourceRoot":"","sources":["../../../src/cli/import-zip.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"import-zip.js","sourceRoot":"","sources":["../../../src/cli/import-zip.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli/init.js
CHANGED
|
@@ -3,8 +3,8 @@ import path from "node:path";
|
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import { getBundledKitPath } from "../kit/loader.js";
|
|
5
5
|
import { findKitInRegistry } from "../kit/registry.js";
|
|
6
|
-
import { LAYOUT_DIR,
|
|
7
|
-
const
|
|
6
|
+
import { LAYOUT_DIR, LAYOUT_MD_FILE, KIT_MANIFEST_FILE, } from "../kit/types.js";
|
|
7
|
+
const TEMPLATE_LAYOUT_MD = `# Design System
|
|
8
8
|
|
|
9
9
|
> Generated by Layout Context CLI.
|
|
10
10
|
> Edit this file to describe your design system, then run your AI coding agent.
|
|
@@ -50,7 +50,7 @@ export async function initCommand(options) {
|
|
|
50
50
|
console.log();
|
|
51
51
|
console.log(chalk.bold("Next steps:"));
|
|
52
52
|
console.log();
|
|
53
|
-
console.log(` ${chalk.dim("1.")} Edit ${chalk.cyan(`.layout/${
|
|
53
|
+
console.log(` ${chalk.dim("1.")} Edit ${chalk.cyan(`.layout/${LAYOUT_MD_FILE}`)} with your design system`);
|
|
54
54
|
console.log(` ${chalk.dim("2.")} Add the MCP server to your AI coding agent:`);
|
|
55
55
|
console.log();
|
|
56
56
|
console.log(chalk.dim(" Claude Code (claude_desktop_config.json):"));
|
|
@@ -98,7 +98,7 @@ async function initBlank(targetDir) {
|
|
|
98
98
|
aesthetic: "",
|
|
99
99
|
};
|
|
100
100
|
fs.writeFileSync(path.join(targetDir, KIT_MANIFEST_FILE), JSON.stringify(manifest, null, 2) + "\n");
|
|
101
|
-
fs.writeFileSync(path.join(targetDir,
|
|
101
|
+
fs.writeFileSync(path.join(targetDir, LAYOUT_MD_FILE), TEMPLATE_LAYOUT_MD);
|
|
102
102
|
console.log(chalk.green("✓"), "Initialised .layout/ with a blank design system template.");
|
|
103
103
|
}
|
|
104
104
|
//# sourceMappingURL=init.js.map
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { loadKit, getBundledKitPath, listBundledKits } from "./kit/loader.js";
|
|
2
|
-
export {
|
|
2
|
+
export { parseLayoutMd, extractQuickReference, parseComponents } from "./kit/parser.js";
|
|
3
3
|
export { getRegistry, findKitInRegistry } from "./kit/registry.js";
|
|
4
4
|
export type { Kit, KitManifest, KitSection, KitComponent, RegistryEntry } from "./kit/types.js";
|
|
5
5
|
export { checkCompliance } from "./compliance/checker.js";
|
package/dist/src/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { loadKit, getBundledKitPath, listBundledKits } from "./kit/loader.js";
|
|
2
|
-
export {
|
|
2
|
+
export { parseLayoutMd, extractQuickReference, parseComponents } from "./kit/parser.js";
|
|
3
3
|
export { getRegistry, findKitInRegistry } from "./kit/registry.js";
|
|
4
4
|
export { checkCompliance } from "./compliance/checker.js";
|
|
5
5
|
export { defaultRules } from "./compliance/rules.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/kit/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAA6B,MAAM,YAAY,CAAC;AAajE;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/kit/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAA6B,MAAM,YAAY,CAAC;AAajE;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CA0ErD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAahE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAe1C"}
|
package/dist/src/kit/loader.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { readFileSync, existsSync, readdirSync } from "node:fs";
|
|
1
|
+
import { readFileSync, existsSync, readdirSync, renameSync } from "node:fs";
|
|
2
2
|
import { join, resolve, dirname } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
|
-
import { LAYOUT_DIR, LEGACY_DIR, KIT_MANIFEST_FILE,
|
|
5
|
-
import {
|
|
4
|
+
import { LAYOUT_DIR, LEGACY_DIR, KIT_MANIFEST_FILE, LAYOUT_MD_FILE, TOKENS_CSS_FILE, TOKENS_JSON_FILE, TAILWIND_CONFIG_FILE, COMPONENTS_DIR, } from "./types.js";
|
|
5
|
+
import { parseLayoutMd, parseComponents } from "./parser.js";
|
|
6
6
|
/**
|
|
7
7
|
* Load a kit from a .layout/ directory.
|
|
8
8
|
* Falls back to .superduper/ with a deprecation warning if .layout/ is not found.
|
|
@@ -23,8 +23,16 @@ export function loadKit(basePath) {
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
const manifestPath = join(dir, KIT_MANIFEST_FILE);
|
|
26
|
-
|
|
27
|
-
if
|
|
26
|
+
let layoutMdPath = join(dir, LAYOUT_MD_FILE);
|
|
27
|
+
// Auto-migration: rename DESIGN.md → layout.md if the old file exists
|
|
28
|
+
if (!existsSync(layoutMdPath)) {
|
|
29
|
+
const legacyMdPath = join(dir, "DESIGN.md");
|
|
30
|
+
if (existsSync(legacyMdPath)) {
|
|
31
|
+
renameSync(legacyMdPath, layoutMdPath);
|
|
32
|
+
console.log(" ℹ Renamed DESIGN.md → layout.md (Layout rebrand)");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (!existsSync(layoutMdPath))
|
|
28
36
|
return null;
|
|
29
37
|
const manifest = existsSync(manifestPath)
|
|
30
38
|
? JSON.parse(readFileSync(manifestPath, "utf-8"))
|
|
@@ -39,9 +47,9 @@ export function loadKit(basePath) {
|
|
|
39
47
|
componentCount: 0,
|
|
40
48
|
aesthetic: "",
|
|
41
49
|
};
|
|
42
|
-
const
|
|
43
|
-
const sections =
|
|
44
|
-
let components = parseComponents(
|
|
50
|
+
const layoutMd = readFileSync(layoutMdPath, "utf-8");
|
|
51
|
+
const sections = parseLayoutMd(layoutMd);
|
|
52
|
+
let components = parseComponents(layoutMd);
|
|
45
53
|
// Also load individual component files if present
|
|
46
54
|
const componentsDir = join(dir, COMPONENTS_DIR);
|
|
47
55
|
if (existsSync(componentsDir)) {
|
|
@@ -57,7 +65,7 @@ export function loadKit(basePath) {
|
|
|
57
65
|
const tailwindConfig = readSafe(join(dir, TAILWIND_CONFIG_FILE));
|
|
58
66
|
return {
|
|
59
67
|
manifest,
|
|
60
|
-
|
|
68
|
+
layoutMd,
|
|
61
69
|
sections,
|
|
62
70
|
components,
|
|
63
71
|
tokensCss: tokensCss ?? undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/kit/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/kit/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/src/kit/parser.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { KitSection, KitComponent } from "./types.js";
|
|
2
2
|
/**
|
|
3
|
-
* Parse a
|
|
3
|
+
* Parse a layout.md file into structured sections.
|
|
4
4
|
* Splits on ## headings and extracts section IDs.
|
|
5
5
|
*/
|
|
6
|
-
export declare function
|
|
6
|
+
export declare function parseLayoutMd(content: string): KitSection[];
|
|
7
7
|
/**
|
|
8
|
-
* Extract Quick Reference section (Section 0) from
|
|
8
|
+
* Extract Quick Reference section (Section 0) from layout.md.
|
|
9
9
|
* This is the 50-75 line summary optimised for LLM context windows.
|
|
10
10
|
*/
|
|
11
11
|
export declare function extractQuickReference(content: string): string;
|
|
@@ -14,7 +14,7 @@ export declare function extractQuickReference(content: string): string;
|
|
|
14
14
|
*/
|
|
15
15
|
export declare function extractSection(sections: KitSection[], keyword: string): KitSection | undefined;
|
|
16
16
|
/**
|
|
17
|
-
* Parse component specs from
|
|
17
|
+
* Parse component specs from layout.md or individual component files.
|
|
18
18
|
* Components are expected in a "## Components" section with ### per component.
|
|
19
19
|
*/
|
|
20
20
|
export declare function parseComponents(content: string): KitComponent[];
|
package/dist/src/kit/parser.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Parse a
|
|
2
|
+
* Parse a layout.md file into structured sections.
|
|
3
3
|
* Splits on ## headings and extracts section IDs.
|
|
4
4
|
*/
|
|
5
|
-
export function
|
|
5
|
+
export function parseLayoutMd(content) {
|
|
6
6
|
const sections = [];
|
|
7
7
|
const lines = content.split("\n");
|
|
8
8
|
let currentTitle = "";
|
|
@@ -34,7 +34,7 @@ export function parseDesignMd(content) {
|
|
|
34
34
|
return sections;
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
|
-
* Extract Quick Reference section (Section 0) from
|
|
37
|
+
* Extract Quick Reference section (Section 0) from layout.md.
|
|
38
38
|
* This is the 50-75 line summary optimised for LLM context windows.
|
|
39
39
|
*/
|
|
40
40
|
export function extractQuickReference(content) {
|
|
@@ -50,7 +50,7 @@ export function extractSection(sections, keyword) {
|
|
|
50
50
|
s.title.toLowerCase().includes(lower));
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
53
|
-
* Parse component specs from
|
|
53
|
+
* Parse component specs from layout.md or individual component files.
|
|
54
54
|
* Components are expected in a "## Components" section with ### per component.
|
|
55
55
|
*/
|
|
56
56
|
export function parseComponents(content) {
|
package/dist/src/kit/types.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export interface KitComponent {
|
|
|
23
23
|
}
|
|
24
24
|
export interface Kit {
|
|
25
25
|
manifest: KitManifest;
|
|
26
|
-
|
|
26
|
+
layoutMd: string;
|
|
27
27
|
sections: KitSection[];
|
|
28
28
|
components: KitComponent[];
|
|
29
29
|
tokensCss?: string;
|
|
@@ -41,7 +41,7 @@ export interface RegistryEntry {
|
|
|
41
41
|
export declare const LAYOUT_DIR = ".layout";
|
|
42
42
|
export declare const LEGACY_DIR = ".superduper";
|
|
43
43
|
export declare const KIT_MANIFEST_FILE = "kit.json";
|
|
44
|
-
export declare const
|
|
44
|
+
export declare const LAYOUT_MD_FILE = "layout.md";
|
|
45
45
|
export declare const TOKENS_CSS_FILE = "tokens.css";
|
|
46
46
|
export declare const TOKENS_JSON_FILE = "tokens.json";
|
|
47
47
|
export declare const TAILWIND_CONFIG_FILE = "tailwind.config.js";
|
package/dist/src/kit/types.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const LAYOUT_DIR = ".layout";
|
|
2
2
|
export const LEGACY_DIR = ".superduper"; // Deprecated — remove in v1.0
|
|
3
3
|
export const KIT_MANIFEST_FILE = "kit.json";
|
|
4
|
-
export const
|
|
4
|
+
export const LAYOUT_MD_FILE = "layout.md";
|
|
5
5
|
export const TOKENS_CSS_FILE = "tokens.css";
|
|
6
6
|
export const TOKENS_JSON_FILE = "tokens.json";
|
|
7
7
|
export const TAILWIND_CONFIG_FILE = "tailwind.config.js";
|
|
@@ -72,7 +72,7 @@ export function handler(kit) {
|
|
|
72
72
|
})
|
|
73
73
|
.join("\n")
|
|
74
74
|
: "No components defined in kit.";
|
|
75
|
-
// Build design rules from
|
|
75
|
+
// Build design rules from layout.md
|
|
76
76
|
const designRules = extractDesignRules(kit);
|
|
77
77
|
// Viewport dimensions
|
|
78
78
|
const viewportDimensions = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { extractSection } from "../../kit/parser.js";
|
|
3
3
|
export const name = "get-design-system";
|
|
4
|
-
export const description = "Returns the full
|
|
4
|
+
export const description = "Returns the full layout.md content for the active design system, or a specific section. " +
|
|
5
5
|
"Use this to understand colours, typography, spacing, layout rules, and component specs before writing UI code.";
|
|
6
6
|
export const inputSchema = {
|
|
7
7
|
section: z
|
|
@@ -16,7 +16,7 @@ export function handler(kit) {
|
|
|
16
16
|
content: [
|
|
17
17
|
{
|
|
18
18
|
type: "text",
|
|
19
|
-
text: "No design system kit found. Run `npx @layoutdesign/context init` in your project root to set one up, or place a
|
|
19
|
+
text: "No design system kit found. Run `npx @layoutdesign/context init` in your project root to set one up, or place a layout.md in .layout/.",
|
|
20
20
|
},
|
|
21
21
|
],
|
|
22
22
|
};
|
|
@@ -44,7 +44,7 @@ export function handler(kit) {
|
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
46
|
return {
|
|
47
|
-
content: [{ type: "text", text: kit.
|
|
47
|
+
content: [{ type: "text", text: kit.layoutMd }],
|
|
48
48
|
};
|
|
49
49
|
};
|
|
50
50
|
}
|
|
@@ -19,7 +19,7 @@ export function handler(kit) {
|
|
|
19
19
|
content: [
|
|
20
20
|
{
|
|
21
21
|
type: "text",
|
|
22
|
-
text: "No components defined in this kit. Components are parsed from the ## Components section in
|
|
22
|
+
text: "No components defined in this kit. Components are parsed from the ## Components section in layout.md.",
|
|
23
23
|
},
|
|
24
24
|
],
|
|
25
25
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
3
3
|
import { join, resolve } from "node:path";
|
|
4
|
-
import { LAYOUT_DIR, TOKENS_CSS_FILE, TOKENS_JSON_FILE,
|
|
4
|
+
import { LAYOUT_DIR, TOKENS_CSS_FILE, TOKENS_JSON_FILE, LAYOUT_MD_FILE } from "../../kit/types.js";
|
|
5
5
|
export const name = "update-tokens";
|
|
6
6
|
export const description = "Update design token values in the active kit. Changes are applied to tokens.css, tokens.json, " +
|
|
7
|
-
"and
|
|
7
|
+
"and layout.md simultaneously so the design system stays consistent. Use this when the user wants " +
|
|
8
8
|
"to tweak colours, spacing, typography, or other token values without re-extracting from Figma.";
|
|
9
9
|
export const inputSchema = {
|
|
10
10
|
updates: z
|
|
@@ -40,7 +40,7 @@ export function handler() {
|
|
|
40
40
|
}
|
|
41
41
|
let css = readFileSync(cssPath, "utf-8");
|
|
42
42
|
const jsonPath = join(dir, TOKENS_JSON_FILE);
|
|
43
|
-
const mdPath = join(dir,
|
|
43
|
+
const mdPath = join(dir, LAYOUT_MD_FILE);
|
|
44
44
|
let tokensJson = null;
|
|
45
45
|
if (existsSync(jsonPath)) {
|
|
46
46
|
try {
|
|
@@ -50,9 +50,9 @@ export function handler() {
|
|
|
50
50
|
// Malformed JSON — skip
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
let
|
|
53
|
+
let layoutMd = null;
|
|
54
54
|
if (existsSync(mdPath)) {
|
|
55
|
-
|
|
55
|
+
layoutMd = readFileSync(mdPath, "utf-8");
|
|
56
56
|
}
|
|
57
57
|
const results = [];
|
|
58
58
|
const errors = [];
|
|
@@ -78,18 +78,18 @@ export function handler() {
|
|
|
78
78
|
if (tokensJson) {
|
|
79
79
|
jsonMatchPath = updateJsonToken(tokensJson, oldValue, newValue);
|
|
80
80
|
}
|
|
81
|
-
// Update
|
|
81
|
+
// Update layout.md
|
|
82
82
|
let mdCount = 0;
|
|
83
|
-
if (
|
|
83
|
+
if (layoutMd && oldValue !== newValue) {
|
|
84
84
|
const escapedOld = escapeForRegex(oldValue);
|
|
85
85
|
// For hex colours, ensure we don't match partial (e.g. #5E6AD2 inside #5E6AD2FF)
|
|
86
86
|
const mdPattern = isHexColour(oldValue)
|
|
87
87
|
? new RegExp(escapedOld + "(?![0-9a-fA-F])", "g")
|
|
88
88
|
: new RegExp(escapedOld, "g");
|
|
89
|
-
const matches =
|
|
89
|
+
const matches = layoutMd.match(mdPattern);
|
|
90
90
|
mdCount = matches?.length ?? 0;
|
|
91
91
|
if (mdCount > 0) {
|
|
92
|
-
|
|
92
|
+
layoutMd = layoutMd.replace(mdPattern, newValue);
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
results.push({
|
|
@@ -107,8 +107,8 @@ export function handler() {
|
|
|
107
107
|
if (tokensJson) {
|
|
108
108
|
writeFileSync(jsonPath, JSON.stringify(tokensJson, null, 2) + "\n");
|
|
109
109
|
}
|
|
110
|
-
if (
|
|
111
|
-
writeFileSync(mdPath,
|
|
110
|
+
if (layoutMd) {
|
|
111
|
+
writeFileSync(mdPath, layoutMd);
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
// Build response
|
|
@@ -125,10 +125,10 @@ export function handler() {
|
|
|
125
125
|
lines.push(` ⚠ tokens.json (no matching $value found)`);
|
|
126
126
|
}
|
|
127
127
|
if (r.mdCount > 0) {
|
|
128
|
-
lines.push(` ✓
|
|
128
|
+
lines.push(` ✓ layout.md (${r.mdCount} occurrence${r.mdCount === 1 ? "" : "s"})`);
|
|
129
129
|
}
|
|
130
|
-
else if (
|
|
131
|
-
lines.push(` –
|
|
130
|
+
else if (layoutMd) {
|
|
131
|
+
lines.push(` – layout.md (old value not found in text)`);
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
}
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|