@layoutdesign/context 0.2.0 → 0.2.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.
Files changed (59) hide show
  1. package/README.md +25 -11
  2. package/dist/bin/cli.js +17 -32
  3. package/dist/bin/cli.js.map +1 -1
  4. package/dist/src/cli/doctor.d.ts +4 -1
  5. package/dist/src/cli/doctor.d.ts.map +1 -1
  6. package/dist/src/cli/doctor.js +37 -6
  7. package/dist/src/cli/doctor.js.map +1 -1
  8. package/dist/src/cli/import-zip.d.ts.map +1 -1
  9. package/dist/src/cli/import-zip.js +11 -3
  10. package/dist/src/cli/import-zip.js.map +1 -1
  11. package/dist/src/cli/init.js +4 -4
  12. package/dist/src/cli/install.d.ts +1 -0
  13. package/dist/src/cli/install.d.ts.map +1 -1
  14. package/dist/src/cli/install.js +84 -19
  15. package/dist/src/cli/install.js.map +1 -1
  16. package/dist/src/cli/serve-local.d.ts +5 -0
  17. package/dist/src/cli/serve-local.d.ts.map +1 -0
  18. package/dist/src/cli/serve-local.js +109 -0
  19. package/dist/src/cli/serve-local.js.map +1 -0
  20. package/dist/src/index.d.ts +1 -1
  21. package/dist/src/index.js +1 -1
  22. package/dist/src/kit/loader.d.ts.map +1 -1
  23. package/dist/src/kit/loader.js +17 -9
  24. package/dist/src/kit/loader.js.map +1 -1
  25. package/dist/src/kit/parser.d.ts +4 -4
  26. package/dist/src/kit/parser.js +4 -4
  27. package/dist/src/kit/types.d.ts +2 -2
  28. package/dist/src/kit/types.js +1 -1
  29. package/dist/src/mcp/tools/design-in-figma.js +1 -1
  30. package/dist/src/mcp/tools/get-design-system.js +3 -3
  31. package/dist/src/mcp/tools/list-components.js +1 -1
  32. package/dist/src/mcp/tools/push-to-figma.d.ts +9 -1
  33. package/dist/src/mcp/tools/push-to-figma.d.ts.map +1 -1
  34. package/dist/src/mcp/tools/push-to-figma.js +144 -105
  35. package/dist/src/mcp/tools/push-to-figma.js.map +1 -1
  36. package/dist/src/mcp/tools/update-tokens.js +14 -14
  37. package/dist/src/preview/server.d.ts.map +1 -1
  38. package/dist/src/preview/server.js +11 -5
  39. package/dist/src/preview/server.js.map +1 -1
  40. package/dist/src/preview/ws.d.ts +4 -0
  41. package/dist/src/preview/ws.d.ts.map +1 -1
  42. package/dist/src/preview/ws.js +9 -1
  43. package/dist/src/preview/ws.js.map +1 -1
  44. package/package.json +1 -1
  45. package/dist/src/cli/config.d.ts +0 -19
  46. package/dist/src/cli/config.d.ts.map +0 -1
  47. package/dist/src/cli/config.js +0 -100
  48. package/dist/src/cli/config.js.map +0 -1
  49. package/dist/src/cli/login.d.ts +0 -4
  50. package/dist/src/cli/login.d.ts.map +0 -1
  51. package/dist/src/cli/login.js +0 -58
  52. package/dist/src/cli/login.js.map +0 -1
  53. package/dist/src/cli/pull.d.ts +0 -8
  54. package/dist/src/cli/pull.d.ts.map +0 -1
  55. package/dist/src/cli/pull.js +0 -108
  56. package/dist/src/cli/pull.js.map +0 -1
  57. /package/kits/linear-lite/{DESIGN.md → layout.md} +0 -0
  58. /package/kits/notion-lite/{DESIGN.md → layout.md} +0 -0
  59. /package/kits/stripe-lite/{DESIGN.md → layout.md} +0 -0
@@ -20,6 +20,16 @@ export const inputSchema = {
20
20
  .optional()
21
21
  .describe("Figma file URL to push into (e.g. https://www.figma.com/design/ABC123/...). " +
22
22
  "If provided, pushes into this existing file. If omitted, creates a new file."),
23
+ variants: z
24
+ .array(z.object({
25
+ name: z.string().describe("Variant state name, e.g. 'Default', 'Hover', 'Active', 'Disabled'"),
26
+ code: z.string().describe("Full TSX/JSX code for this variant state"),
27
+ }))
28
+ .optional()
29
+ .describe("Component state variants to capture as separate Figma frames. Each variant gets its own frame " +
30
+ "named '{name}/State={variantName}'. After all frames are captured, use the Layout Figma plugin's " +
31
+ "'Assemble Component Set' to combine them into a proper Figma component with variant properties. " +
32
+ "Tip: render hover states by applying hover styles directly as classes, not via CSS :hover pseudo-class."),
23
33
  };
24
34
  const VIEWPORT_DIMS = {
25
35
  desktop: { width: 1280, height: 900 },
@@ -27,11 +37,96 @@ const VIEWPORT_DIMS = {
27
37
  mobile: { width: 375, height: 812 },
28
38
  };
29
39
  const DEFAULT_DIMS = VIEWPORT_DIMS.desktop;
40
+ /**
41
+ * Push code to the preview server via WebSocket.
42
+ * Optionally tags the preview with a variantName for multi-variant capture.
43
+ */
44
+ async function pushToPreview(code, variantName) {
45
+ const { WebSocket } = await import("ws");
46
+ const ws = new WebSocket(`ws://localhost:${PREVIEW_PORT}/ws`);
47
+ return new Promise((resolve, reject) => {
48
+ const timeout = setTimeout(() => {
49
+ ws.close();
50
+ reject(new Error("Preview server connection timed out"));
51
+ }, 5000);
52
+ ws.on("open", () => {
53
+ ws.send(JSON.stringify({
54
+ type: "preview",
55
+ code,
56
+ language: "tsx",
57
+ ...(variantName ? { variantName } : {}),
58
+ }));
59
+ });
60
+ ws.on("message", (data) => {
61
+ try {
62
+ const msg = JSON.parse(String(data));
63
+ if (msg.type === "ack") {
64
+ clearTimeout(timeout);
65
+ ws.close();
66
+ resolve(variantName
67
+ ? `Variant "${variantName}" pushed to preview server`
68
+ : "Component pushed to preview server");
69
+ }
70
+ else if (msg.type === "error") {
71
+ clearTimeout(timeout);
72
+ ws.close();
73
+ reject(new Error(msg.message ?? "Preview server error"));
74
+ }
75
+ }
76
+ catch {
77
+ // ignore malformed messages
78
+ }
79
+ });
80
+ ws.on("error", (err) => {
81
+ clearTimeout(timeout);
82
+ reject(err);
83
+ });
84
+ });
85
+ }
86
+ /**
87
+ * Build a compact viewport list for capture instructions.
88
+ */
89
+ function buildViewportList(captureUrl, resolvedViewports, frameName) {
90
+ return resolvedViewports
91
+ .map((vp) => {
92
+ const dims = VIEWPORT_DIMS[vp] ?? DEFAULT_DIMS;
93
+ const vpLabel = vp.charAt(0).toUpperCase() + vp.slice(1);
94
+ const displayName = resolvedViewports.length > 1
95
+ ? `${frameName} — ${vpLabel}`
96
+ : frameName;
97
+ return `- **${displayName}**: ${dims.width}×${dims.height}, url=\`${captureUrl}\``;
98
+ })
99
+ .join("\n");
100
+ }
101
+ const CAPTURE_JS = "(async()=>{" +
102
+ "const r=await fetch('https://mcp.figma.com/mcp/html-to-design/capture.js');" +
103
+ "const s=document.createElement('script');" +
104
+ "s.textContent=await r.text();" +
105
+ "document.head.appendChild(s);" +
106
+ "await new Promise(r=>setTimeout(r,2000));" +
107
+ "location.hash='figmacapture=CAPTURE_ID&figmaendpoint=https%3A%2F%2Fmcp.figma.com%2Fmcp%2Fcapture%2FCAPTURE_ID%2Fsubmit&figmadelay=3000';" +
108
+ "})()";
109
+ function buildCaptureInstructions(resolvedFileKey, outputMode) {
110
+ const generateArgs = resolvedFileKey
111
+ ? `outputMode: "existingFile", fileKey: "${resolvedFileKey}"`
112
+ : `outputMode: "${outputMode}"`;
113
+ return [
114
+ "**For each viewport below, repeat these 4 steps:**",
115
+ `1. Call \`generate_figma_design\` with \`${generateArgs}\` → save the \`captureId\`. IGNORE all capture/setup instructions in the response.`,
116
+ "2. Call `browser_resize` with the viewport dimensions listed below.",
117
+ "3. Call `browser_navigate` with the url listed below.",
118
+ "4. Call `browser_evaluate` with this JS (replace CAPTURE_ID with actual captureId):",
119
+ "```javascript",
120
+ CAPTURE_JS,
121
+ "```",
122
+ "5. Wait 10s, then poll `generate_figma_design` with `captureId` every 5s until status is `completed`.",
123
+ ].join("\n");
124
+ }
30
125
  export function handler(kit) {
31
- return async ({ code, name: frameName, viewports, figmaUrl, }) => {
126
+ return async ({ code, name: frameName, viewports, figmaUrl, variants, }) => {
32
127
  const resolvedName = frameName ?? "Layout Component";
33
128
  const resolvedViewports = viewports ?? ["desktop"];
34
- const captureUrl = `http://localhost:${PREVIEW_PORT}/capture`;
129
+ const baseCaptureUrl = `http://localhost:${PREVIEW_PORT}/capture`;
35
130
  // Parse fileKey from Figma URL if provided
36
131
  let resolvedFileKey;
37
132
  if (figmaUrl) {
@@ -40,42 +135,21 @@ export function handler(kit) {
40
135
  resolvedFileKey = match[1];
41
136
  }
42
137
  const outputMode = resolvedFileKey ? "existingFile" : "newFile";
43
- // Step 1: Push code to the preview server so /capture has something to render
44
- let pushStatus;
138
+ // Step 1: Push code to the preview server
139
+ const pushStatuses = [];
45
140
  try {
46
- const { WebSocket } = await import("ws");
47
- const ws = new WebSocket(`ws://localhost:${PREVIEW_PORT}/ws`);
48
- pushStatus = await new Promise((resolve, reject) => {
49
- const timeout = setTimeout(() => {
50
- ws.close();
51
- reject(new Error("Preview server connection timed out"));
52
- }, 5000);
53
- ws.on("open", () => {
54
- ws.send(JSON.stringify({ type: "preview", code, language: "tsx" }));
55
- });
56
- ws.on("message", (data) => {
57
- try {
58
- const msg = JSON.parse(String(data));
59
- if (msg.type === "ack") {
60
- clearTimeout(timeout);
61
- ws.close();
62
- resolve("Component pushed to preview server");
63
- }
64
- else if (msg.type === "error") {
65
- clearTimeout(timeout);
66
- ws.close();
67
- reject(new Error(msg.message ?? "Preview server error"));
68
- }
69
- }
70
- catch {
71
- // ignore malformed messages
72
- }
73
- });
74
- ws.on("error", (err) => {
75
- clearTimeout(timeout);
76
- reject(err);
77
- });
78
- });
141
+ if (variants && variants.length > 0) {
142
+ // Multi-variant: push each variant with its name
143
+ for (const variant of variants) {
144
+ const status = await pushToPreview(variant.code, variant.name);
145
+ pushStatuses.push(status);
146
+ }
147
+ }
148
+ else {
149
+ // Single code: backward-compatible push
150
+ const status = await pushToPreview(code);
151
+ pushStatuses.push(status);
152
+ }
79
153
  }
80
154
  catch (err) {
81
155
  const msg = err instanceof Error ? err.message : "Unknown error";
@@ -93,80 +167,45 @@ export function handler(kit) {
93
167
  ],
94
168
  };
95
169
  }
96
- // Step 2: Build directive capture instructions for Figma MCP + Playwright MCP
97
- // Key insight: Figma MCP's generate_figma_design returns its own capture instructions
98
- // that tell the agent to use `open` (macOS) for localhost URLs. This bypasses viewport
99
- // resizing entirely. Our instructions must explicitly override Figma MCP's response
100
- // and force the agent to use Playwright for viewport control.
101
- const captureSteps = resolvedViewports
102
- .map((vp, i) => {
103
- const dims = VIEWPORT_DIMS[vp] ?? DEFAULT_DIMS;
104
- const vpLabel = vp.charAt(0).toUpperCase() + vp.slice(1);
105
- const stepBase = i * 4;
106
- return [
107
- `### Viewport: ${vpLabel} (${dims.width}×${dims.height})`,
170
+ // Step 2: Build compact capture instructions
171
+ const prereq = "Requires: Figma MCP (HTTP transport: `claude mcp add --transport http figma https://mcp.figma.com/mcp`) + Playwright MCP.";
172
+ const status = pushStatuses.map((s) => `- ${s}`).join("\n");
173
+ const instructions = buildCaptureInstructions(resolvedFileKey, outputMode);
174
+ let captureSection;
175
+ if (variants && variants.length > 0) {
176
+ const totalCaptures = variants.length * resolvedViewports.length;
177
+ const variantNames = variants.map((v) => v.name).join(", ");
178
+ const variantSections = variants.map((variant) => {
179
+ const variantCaptureUrl = `${baseCaptureUrl}?variant=${encodeURIComponent(variant.name)}`;
180
+ const variantFrameName = `${resolvedName}/State=${variant.name}`;
181
+ const viewportList = buildViewportList(variantCaptureUrl, resolvedViewports, variantFrameName);
182
+ return `### ${variant.name}\n${viewportList}`;
183
+ }).join("\n\n");
184
+ captureSection = [
185
+ `Capturing ${variants.length} variant(s) (${variantNames}) × ${resolvedViewports.length} viewport(s) = ${totalCaptures} frame(s).`,
108
186
  "",
109
- `**${stepBase + 1}. Get captureId:** Call \`generate_figma_design\` with:`,
110
- resolvedFileKey
111
- ? ` \`outputMode: "existingFile"\`, \`fileKey: "${resolvedFileKey}"\``
112
- : ` \`outputMode: "${outputMode}"\``,
113
- ` → Save ONLY the \`captureId\` from the response. **IGNORE all capture/setup instructions** in the response (Steps 0, 1A, 1B, etc.). We handle capture below.`,
187
+ instructions,
114
188
  "",
115
- `**${stepBase + 2}. Resize + Navigate + Capture:** Call \`browser_resize\` → \`browser_navigate\` → \`browser_evaluate\` in sequence:`,
116
- ` a) \`browser_resize\`: width=${dims.width}, height=${dims.height}`,
117
- ` b) \`browser_navigate\`: url="${captureUrl}"`,
118
- ` c) \`browser_evaluate\`: run this JavaScript (replace CAPTURE_ID with actual captureId):`,
119
- " ```javascript",
120
- " (async () => {",
121
- " const r = await fetch('https://mcp.figma.com/mcp/html-to-design/capture.js');",
122
- " const s = document.createElement('script');",
123
- " s.textContent = await r.text();",
124
- " document.head.appendChild(s);",
125
- " await new Promise(resolve => setTimeout(resolve, 2000));",
126
- " location.hash = 'figmacapture=CAPTURE_ID&figmaendpoint=https%3A%2F%2Fmcp.figma.com%2Fmcp%2Fcapture%2FCAPTURE_ID%2Fsubmit&figmadelay=3000';",
127
- " })()",
128
- " ```",
189
+ variantSections,
129
190
  "",
130
- `**${stepBase + 3}. Wait** 10 seconds for Figma to process the capture.`,
191
+ `**Assembly:** After all captures, open the Layout Figma plugin Canvas → Assemble Component Set. It will find frames matching \`${resolvedName}/State=*\` and combine them with hover prototypes.`,
192
+ ].join("\n");
193
+ }
194
+ else {
195
+ const viewportList = buildViewportList(baseCaptureUrl, resolvedViewports, resolvedName);
196
+ captureSection = [
197
+ `Capturing ${resolvedViewports.length} viewport(s).`,
131
198
  "",
132
- `**${stepBase + 4}. Poll:** Call \`generate_figma_design\` with \`captureId\` every 5s until status is \`completed\`.`,
199
+ instructions,
133
200
  "",
201
+ viewportList,
134
202
  ].join("\n");
135
- })
136
- .join("\n");
137
- const response = [
138
- "# Push to FigmaExecute These Steps Now",
139
- "",
140
- `${pushStatus}. The component is rendering at \`${captureUrl}\`.`,
141
- "",
142
- "## CRITICAL: How to capture (read before starting)",
143
- "",
144
- "You MUST use **Playwright MCP** (browser_resize, browser_navigate, browser_evaluate) to capture each viewport.",
145
- "Do NOT use the `open` command. Do NOT follow generate_figma_design's \"Step 1A/1B\" instructions.",
146
- "Do NOT create temp HTML files or start HTTP servers.",
147
- "",
148
- "**Why Playwright is required:** Tailwind CSS responsive breakpoints respond to browser viewport width,",
149
- "not CSS max-width. The `browser_resize` call sets the actual viewport so `md:` and `lg:` breakpoints",
150
- "fire correctly at each size. Without it, mobile captures render as squished desktop layouts.",
151
- "",
152
- "## Prerequisites",
153
- "",
154
- "- **Figma MCP**: `claude mcp add --transport http figma https://mcp.figma.com/mcp`",
155
- "- **Playwright MCP**: For `browser_resize`, `browser_navigate`, `browser_evaluate`",
156
- "",
157
- "## Capture Steps",
158
- "",
159
- `Capturing ${resolvedViewports.length} viewport(s): ${resolvedViewports.join(", ")}`,
160
- `Frame name: **${resolvedName}**`,
161
- "",
162
- captureSteps,
163
- "## Reminders",
164
- "",
165
- "- Each viewport needs its own captureId — never reuse",
166
- "- The component is already at the capture URL — do NOT create HTML files",
167
- "- Always call `browser_resize` BEFORE `browser_navigate` for correct responsive rendering",
168
- "- When `generate_figma_design` returns capture instructions, IGNORE them — use the steps above",
169
- ].join("\n");
203
+ }
204
+ const reminders = [
205
+ "Each viewport needs its own captureId. Always `browser_resize` BEFORE `browser_navigate` for correct responsive breakpoints.",
206
+ "The component is already at the capture URL do NOT create HTML files or use the `open` command.",
207
+ ].join(" ");
208
+ const response = [prereq, "", status, "", captureSection, "", reminders].join("\n");
170
209
  return {
171
210
  content: [{ type: "text", text: response }],
172
211
  };
@@ -1 +1 @@
1
- {"version":3,"file":"push-to-figma.js","sourceRoot":"","sources":["../../../../src/mcp/tools/push-to-figma.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"push-to-figma.js","sourceRoot":"","sources":["../../../../src/mcp/tools/push-to-figma.ts"],"names":[],"mappings":"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"}
@@ -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, DESIGN_MD_FILE } from "../../kit/types.js";
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 DESIGN.md simultaneously so the design system stays consistent. Use this when the user wants " +
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, DESIGN_MD_FILE);
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 designMd = null;
53
+ let layoutMd = null;
54
54
  if (existsSync(mdPath)) {
55
- designMd = readFileSync(mdPath, "utf-8");
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 DESIGN.md
81
+ // Update layout.md
82
82
  let mdCount = 0;
83
- if (designMd && oldValue !== newValue) {
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 = designMd.match(mdPattern);
89
+ const matches = layoutMd.match(mdPattern);
90
90
  mdCount = matches?.length ?? 0;
91
91
  if (mdCount > 0) {
92
- designMd = designMd.replace(mdPattern, newValue);
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 (designMd) {
111
- writeFileSync(mdPath, designMd);
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(` ✓ DESIGN.md (${r.mdCount} occurrence${r.mdCount === 1 ? "" : "s"})`);
128
+ lines.push(` ✓ layout.md (${r.mdCount} occurrence${r.mdCount === 1 ? "" : "s"})`);
129
129
  }
130
- else if (designMd) {
131
- lines.push(` – DESIGN.md (old value not found in text)`);
130
+ else if (layoutMd) {
131
+ lines.push(` – layout.md (old value not found in text)`);
132
132
  }
133
133
  }
134
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/preview/server.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAgDD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,GAAE,MAAqB,EAC3B,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,OAAO,CAAC,aAAa,CAAC,CAyExB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/preview/server.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAgDD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,GAAE,MAAqB,EAC3B,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,OAAO,CAAC,aAAa,CAAC,CAkFxB"}
@@ -89,24 +89,30 @@ export function startPreviewServer(port = PREVIEW_PORT, options = {}) {
89
89
  }
90
90
  // Standalone capture page — renders component without preview chrome.
91
91
  // Used by Figma MCP's generate_figma_design to capture the component.
92
+ // Supports ?variant=Name to capture a specific named variant.
92
93
  if (req.method === "GET" && url === "/capture") {
93
- const last = getLastPreview();
94
- if (!last) {
94
+ const variantParam = parsedUrl.searchParams.get("variant");
95
+ const preview = variantParam
96
+ ? getVariantPreview(variantParam)
97
+ : getLastPreview();
98
+ if (!preview) {
95
99
  res.writeHead(404, { "Content-Type": "text/plain" });
96
- res.end("No component previewed yet. Send code via the preview tool first.");
100
+ res.end(variantParam
101
+ ? `No preview found for variant "${variantParam}". Send code via the preview tool first.`
102
+ : "No component previewed yet. Send code via the preview tool first.");
97
103
  return;
98
104
  }
99
105
  res.writeHead(200, {
100
106
  "Content-Type": "text/html; charset=utf-8",
101
107
  "Cache-Control": "no-cache",
102
108
  });
103
- res.end(buildCaptureHtml(last.compiledJs));
109
+ res.end(buildCaptureHtml(preview.compiledJs));
104
110
  return;
105
111
  }
106
112
  res.writeHead(404, { "Content-Type": "text/plain" });
107
113
  res.end("Not Found");
108
114
  });
109
- const { broadcast, getLastPreview } = createWsServer(server);
115
+ const { broadcast, getLastPreview, getVariantPreview } = createWsServer(server);
110
116
  server.on("error", (err) => {
111
117
  if (err.code === "EADDRINUSE") {
112
118
  reject(new Error(`Port ${port} is already in use. Stop the other process or use a different port.`));
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/preview/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/preview/server.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,10 @@ export interface WsBroadcaster {
5
5
  code: string;
6
6
  compiledJs: string;
7
7
  } | null;
8
+ getVariantPreview: (name: string) => {
9
+ code: string;
10
+ compiledJs: string;
11
+ } | null;
8
12
  }
9
13
  /**
10
14
  * Create a WebSocket server attached to the given HTTP server.
@@ -1 +1 @@
1
- {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/preview/ws.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,cAAc,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACnE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,aAAa,CA0EjE"}
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/preview/ws.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,cAAc,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAClE,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAClF;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,aAAa,CAqFjE"}
@@ -14,6 +14,7 @@ export function createWsServer(server) {
14
14
  });
15
15
  const clients = new Set();
16
16
  let lastPreview = null;
17
+ const variantPreviews = new Map();
17
18
  wss.on("connection", (ws) => {
18
19
  clients.add(ws);
19
20
  ws.on("message", (data) => {
@@ -34,6 +35,10 @@ export function createWsServer(server) {
34
35
  }
35
36
  compiledJs = result.js;
36
37
  }
38
+ // Store in variant map if a variantName was provided
39
+ if (msg.variantName) {
40
+ variantPreviews.set(msg.variantName, { code: msg.code, compiledJs });
41
+ }
37
42
  // Broadcast to all OTHER clients (the preview page)
38
43
  broadcast(msg.code, compiledJs);
39
44
  // Acknowledge so the sender knows the preview is ready
@@ -63,6 +68,9 @@ export function createWsServer(server) {
63
68
  function getLastPreview() {
64
69
  return lastPreview;
65
70
  }
66
- return { broadcast, getLastPreview };
71
+ function getVariantPreview(variantName) {
72
+ return variantPreviews.get(variantName) ?? null;
73
+ }
74
+ return { broadcast, getLastPreview, getVariantPreview };
67
75
  }
68
76
  //# sourceMappingURL=ws.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ws.js","sourceRoot":"","sources":["../../../src/preview/ws.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws.js","sourceRoot":"","sources":["../../../src/preview/ws.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@layoutdesign/context",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Design system context for AI coding agents — MCP server + CLI + live preview",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,19 +0,0 @@
1
- export interface LayoutConfig {
2
- apiKey?: string;
3
- baseUrl?: string;
4
- defaultProjectId?: string;
5
- }
6
- /**
7
- * Read config from (in priority order): env vars > local .layoutrc > global ~/.layoutrc
8
- */
9
- export declare function readConfig(): LayoutConfig;
10
- /**
11
- * Save config to ~/.layoutrc (global). File is created with 0o600 permissions.
12
- */
13
- export declare function saveConfig(updates: Partial<LayoutConfig>): void;
14
- /**
15
- * Delete the global config file.
16
- */
17
- export declare function clearConfig(): void;
18
- export declare function getGlobalConfigLocation(): string;
19
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAeD;;GAEG;AACH,wBAAgB,UAAU,IAAI,YAAY,CA4BzC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAkB/D;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAKlC;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}