@layoutdesign/context 0.1.7
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/LICENSE +21 -0
- package/README.md +424 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +57 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/src/cli/import-zip.d.ts +2 -0
- package/dist/src/cli/import-zip.d.ts.map +1 -0
- package/dist/src/cli/import-zip.js +156 -0
- package/dist/src/cli/import-zip.js.map +1 -0
- package/dist/src/cli/init.d.ts +4 -0
- package/dist/src/cli/init.d.ts.map +1 -0
- package/dist/src/cli/init.js +104 -0
- package/dist/src/cli/init.js.map +1 -0
- package/dist/src/cli/install.d.ts +5 -0
- package/dist/src/cli/install.d.ts.map +1 -0
- package/dist/src/cli/install.js +192 -0
- package/dist/src/cli/install.js.map +1 -0
- package/dist/src/cli/list.d.ts +2 -0
- package/dist/src/cli/list.d.ts.map +1 -0
- package/dist/src/cli/list.js +36 -0
- package/dist/src/cli/list.js.map +1 -0
- package/dist/src/cli/serve.d.ts +2 -0
- package/dist/src/cli/serve.d.ts.map +1 -0
- package/dist/src/cli/serve.js +9 -0
- package/dist/src/cli/serve.js.map +1 -0
- package/dist/src/cli/use.d.ts +2 -0
- package/dist/src/cli/use.d.ts.map +1 -0
- package/dist/src/cli/use.js +54 -0
- package/dist/src/cli/use.js.map +1 -0
- package/dist/src/compliance/checker.d.ts +23 -0
- package/dist/src/compliance/checker.d.ts.map +1 -0
- package/dist/src/compliance/checker.js +31 -0
- package/dist/src/compliance/checker.js.map +1 -0
- package/dist/src/compliance/rules.d.ts +11 -0
- package/dist/src/compliance/rules.d.ts.map +1 -0
- package/dist/src/compliance/rules.js +147 -0
- package/dist/src/compliance/rules.js.map +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kit/loader.d.ts +16 -0
- package/dist/src/kit/loader.d.ts.map +1 -0
- package/dist/src/kit/loader.js +98 -0
- package/dist/src/kit/loader.js.map +1 -0
- package/dist/src/kit/parser.d.ts +21 -0
- package/dist/src/kit/parser.d.ts.map +1 -0
- package/dist/src/kit/parser.js +98 -0
- package/dist/src/kit/parser.js.map +1 -0
- package/dist/src/kit/registry.d.ts +4 -0
- package/dist/src/kit/registry.d.ts.map +1 -0
- package/dist/src/kit/registry.js +91 -0
- package/dist/src/kit/registry.js.map +1 -0
- package/dist/src/kit/types.d.ts +51 -0
- package/dist/src/kit/types.d.ts.map +1 -0
- package/dist/src/kit/types.js +11 -0
- package/dist/src/kit/types.js.map +1 -0
- package/dist/src/mcp/server.d.ts +6 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +56 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/mcp/tools/check-compliance.d.ts +16 -0
- package/dist/src/mcp/tools/check-compliance.d.ts.map +1 -0
- package/dist/src/mcp/tools/check-compliance.js +44 -0
- package/dist/src/mcp/tools/check-compliance.js.map +1 -0
- package/dist/src/mcp/tools/design-in-figma.d.ts +24 -0
- package/dist/src/mcp/tools/design-in-figma.d.ts.map +1 -0
- package/dist/src/mcp/tools/design-in-figma.js +202 -0
- package/dist/src/mcp/tools/design-in-figma.js.map +1 -0
- package/dist/src/mcp/tools/get-component.d.ts +16 -0
- package/dist/src/mcp/tools/get-component.d.ts.map +1 -0
- package/dist/src/mcp/tools/get-component.js +52 -0
- package/dist/src/mcp/tools/get-component.js.map +1 -0
- package/dist/src/mcp/tools/get-design-system.d.ts +16 -0
- package/dist/src/mcp/tools/get-design-system.d.ts.map +1 -0
- package/dist/src/mcp/tools/get-design-system.js +51 -0
- package/dist/src/mcp/tools/get-design-system.js.map +1 -0
- package/dist/src/mcp/tools/get-screenshots.d.ts +23 -0
- package/dist/src/mcp/tools/get-screenshots.d.ts.map +1 -0
- package/dist/src/mcp/tools/get-screenshots.js +78 -0
- package/dist/src/mcp/tools/get-screenshots.js.map +1 -0
- package/dist/src/mcp/tools/get-tokens.d.ts +20 -0
- package/dist/src/mcp/tools/get-tokens.d.ts.map +1 -0
- package/dist/src/mcp/tools/get-tokens.js +50 -0
- package/dist/src/mcp/tools/get-tokens.js.map +1 -0
- package/dist/src/mcp/tools/list-components.d.ts +11 -0
- package/dist/src/mcp/tools/list-components.d.ts.map +1 -0
- package/dist/src/mcp/tools/list-components.js +38 -0
- package/dist/src/mcp/tools/list-components.js.map +1 -0
- package/dist/src/mcp/tools/preview.d.ts +21 -0
- package/dist/src/mcp/tools/preview.d.ts.map +1 -0
- package/dist/src/mcp/tools/preview.js +63 -0
- package/dist/src/mcp/tools/preview.js.map +1 -0
- package/dist/src/mcp/tools/push-to-figma.d.ts +24 -0
- package/dist/src/mcp/tools/push-to-figma.d.ts.map +1 -0
- package/dist/src/mcp/tools/push-to-figma.js +101 -0
- package/dist/src/mcp/tools/push-to-figma.js.map +1 -0
- package/dist/src/mcp/tools/update-tokens.d.ts +21 -0
- package/dist/src/mcp/tools/update-tokens.d.ts.map +1 -0
- package/dist/src/mcp/tools/update-tokens.js +187 -0
- package/dist/src/mcp/tools/update-tokens.js.map +1 -0
- package/dist/src/mcp/tools/url-to-figma.d.ts +29 -0
- package/dist/src/mcp/tools/url-to-figma.d.ts.map +1 -0
- package/dist/src/mcp/tools/url-to-figma.js +103 -0
- package/dist/src/mcp/tools/url-to-figma.js.map +1 -0
- package/dist/src/preview/server.d.ts +15 -0
- package/dist/src/preview/server.d.ts.map +1 -0
- package/dist/src/preview/server.js +146 -0
- package/dist/src/preview/server.js.map +1 -0
- package/dist/src/preview/static/index.html +493 -0
- package/dist/src/preview/transpile.d.ts +10 -0
- package/dist/src/preview/transpile.d.ts.map +1 -0
- package/dist/src/preview/transpile.js +40 -0
- package/dist/src/preview/transpile.js.map +1 -0
- package/dist/src/preview/ws.d.ts +17 -0
- package/dist/src/preview/ws.d.ts.map +1 -0
- package/dist/src/preview/ws.js +66 -0
- package/dist/src/preview/ws.js.map +1 -0
- package/kits/linear-lite/DESIGN.md +421 -0
- package/kits/linear-lite/kit.json +12 -0
- package/kits/linear-lite/tokens.css +46 -0
- package/kits/linear-lite/tokens.json +47 -0
- package/kits/notion-lite/DESIGN.md +528 -0
- package/kits/notion-lite/kit.json +12 -0
- package/kits/notion-lite/tokens.css +50 -0
- package/kits/notion-lite/tokens.json +51 -0
- package/kits/stripe-lite/DESIGN.md +539 -0
- package/kits/stripe-lite/kit.json +12 -0
- package/kits/stripe-lite/tokens.css +57 -0
- package/kits/stripe-lite/tokens.json +58 -0
- package/package.json +63 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
function getLineNumber(code, index) {
|
|
2
|
+
return code.slice(0, index).split("\n").length;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Detects hardcoded hex colours (#xxx, #xxxxxx, #xxxxxxxx) and rgb/rgba values
|
|
6
|
+
* that should use design tokens instead.
|
|
7
|
+
*/
|
|
8
|
+
const hardcodedColours = {
|
|
9
|
+
id: "hardcoded-colours",
|
|
10
|
+
name: "Hardcoded Colours",
|
|
11
|
+
description: "Detects hardcoded hex colours or rgb/rgba values that should use design tokens.",
|
|
12
|
+
severity: "warning",
|
|
13
|
+
check(code) {
|
|
14
|
+
const issues = [];
|
|
15
|
+
// Match hex colours: #abc, #aabbcc, #aabbccdd
|
|
16
|
+
// Negative lookbehind for word chars to avoid matching e.g. anchors in URLs
|
|
17
|
+
const hexPattern = /(?<!\w)#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})\b/g;
|
|
18
|
+
let match;
|
|
19
|
+
while ((match = hexPattern.exec(code)) !== null) {
|
|
20
|
+
issues.push({
|
|
21
|
+
ruleId: this.id,
|
|
22
|
+
ruleName: this.name,
|
|
23
|
+
severity: this.severity,
|
|
24
|
+
message: `Hardcoded colour "${match[0]}" — consider using a design token instead.`,
|
|
25
|
+
line: getLineNumber(code, match.index),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
// Match rgb()/rgba() values
|
|
29
|
+
const rgbPattern = /rgba?\(\s*\d+/g;
|
|
30
|
+
while ((match = rgbPattern.exec(code)) !== null) {
|
|
31
|
+
issues.push({
|
|
32
|
+
ruleId: this.id,
|
|
33
|
+
ruleName: this.name,
|
|
34
|
+
severity: this.severity,
|
|
35
|
+
message: `Hardcoded colour value "${match[0]}..." — consider using a design token instead.`,
|
|
36
|
+
line: getLineNumber(code, match.index),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return issues;
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Detects hardcoded pixel values for margin/padding that could use spacing tokens.
|
|
44
|
+
*/
|
|
45
|
+
const hardcodedSpacing = {
|
|
46
|
+
id: "hardcoded-spacing",
|
|
47
|
+
name: "Hardcoded Spacing",
|
|
48
|
+
description: "Detects hardcoded pixel values for margin/padding that could use spacing tokens.",
|
|
49
|
+
severity: "info",
|
|
50
|
+
check(code) {
|
|
51
|
+
const issues = [];
|
|
52
|
+
// Match margin/padding with px values in CSS-like contexts
|
|
53
|
+
const spacingPattern = /(?:margin|padding)(?:-(?:top|right|bottom|left))?\s*:\s*\d+px/gi;
|
|
54
|
+
let match;
|
|
55
|
+
while ((match = spacingPattern.exec(code)) !== null) {
|
|
56
|
+
issues.push({
|
|
57
|
+
ruleId: this.id,
|
|
58
|
+
ruleName: this.name,
|
|
59
|
+
severity: this.severity,
|
|
60
|
+
message: `Hardcoded spacing "${match[0]}" — consider using a spacing token instead.`,
|
|
61
|
+
line: getLineNumber(code, match.index),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return issues;
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* If the kit has tokensCss, extract all --token-name custom properties and warn
|
|
69
|
+
* when the code uses CSS custom properties not present in the kit's token set.
|
|
70
|
+
*/
|
|
71
|
+
const missingTokenReference = {
|
|
72
|
+
id: "missing-token-reference",
|
|
73
|
+
name: "Missing Token Reference",
|
|
74
|
+
description: "Warns when code uses CSS custom properties not defined in the kit's tokens.",
|
|
75
|
+
severity: "warning",
|
|
76
|
+
check(code, kit) {
|
|
77
|
+
if (!kit.tokensCss)
|
|
78
|
+
return [];
|
|
79
|
+
const issues = [];
|
|
80
|
+
// Extract all custom property names from the kit's tokensCss
|
|
81
|
+
const kitTokens = new Set();
|
|
82
|
+
const tokenDefPattern = /(--[\w-]+)\s*:/g;
|
|
83
|
+
let defMatch;
|
|
84
|
+
while ((defMatch = tokenDefPattern.exec(kit.tokensCss)) !== null) {
|
|
85
|
+
if (defMatch[1]) {
|
|
86
|
+
kitTokens.add(defMatch[1]);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (kitTokens.size === 0)
|
|
90
|
+
return [];
|
|
91
|
+
// Find custom property usages in the code via var(--name)
|
|
92
|
+
const varUsagePattern = /var\(\s*(--[\w-]+)/g;
|
|
93
|
+
let usageMatch;
|
|
94
|
+
while ((usageMatch = varUsagePattern.exec(code)) !== null) {
|
|
95
|
+
const tokenName = usageMatch[1];
|
|
96
|
+
if (tokenName && !kitTokens.has(tokenName)) {
|
|
97
|
+
issues.push({
|
|
98
|
+
ruleId: this.id,
|
|
99
|
+
ruleName: this.name,
|
|
100
|
+
severity: this.severity,
|
|
101
|
+
message: `Token "${tokenName}" is not defined in the kit's tokens. Check for typos or use a defined token.`,
|
|
102
|
+
line: getLineNumber(code, usageMatch.index),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return issues;
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* If code imports or references component names not in the kit's component list,
|
|
111
|
+
* flag as info.
|
|
112
|
+
*/
|
|
113
|
+
const unknownComponent = {
|
|
114
|
+
id: "unknown-component",
|
|
115
|
+
name: "Unknown Component",
|
|
116
|
+
description: "Flags component references not found in the kit's component list.",
|
|
117
|
+
severity: "info",
|
|
118
|
+
check(code, kit) {
|
|
119
|
+
if (kit.components.length === 0)
|
|
120
|
+
return [];
|
|
121
|
+
const issues = [];
|
|
122
|
+
const knownNames = new Set(kit.components.map((c) => c.name.toLowerCase()));
|
|
123
|
+
// Detect JSX-style component usage: <ComponentName
|
|
124
|
+
const jsxPattern = /<([A-Z][A-Za-z0-9]+)/g;
|
|
125
|
+
let match;
|
|
126
|
+
while ((match = jsxPattern.exec(code)) !== null) {
|
|
127
|
+
const componentName = match[1];
|
|
128
|
+
if (componentName && !knownNames.has(componentName.toLowerCase())) {
|
|
129
|
+
issues.push({
|
|
130
|
+
ruleId: this.id,
|
|
131
|
+
ruleName: this.name,
|
|
132
|
+
severity: this.severity,
|
|
133
|
+
message: `Component "<${componentName}>" is not in the kit's component list. It may be missing or misspelled.`,
|
|
134
|
+
line: getLineNumber(code, match.index),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return issues;
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
export const defaultRules = [
|
|
142
|
+
hardcodedColours,
|
|
143
|
+
hardcodedSpacing,
|
|
144
|
+
missingTokenReference,
|
|
145
|
+
unknownComponent,
|
|
146
|
+
];
|
|
147
|
+
//# sourceMappingURL=rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/compliance/rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { loadKit, getBundledKitPath, listBundledKits } from "./kit/loader.js";
|
|
2
|
+
export { parseDesignMd, extractQuickReference, parseComponents } from "./kit/parser.js";
|
|
3
|
+
export { getRegistry, findKitInRegistry } from "./kit/registry.js";
|
|
4
|
+
export type { Kit, KitManifest, KitSection, KitComponent, RegistryEntry } from "./kit/types.js";
|
|
5
|
+
export { checkCompliance } from "./compliance/checker.js";
|
|
6
|
+
export type { ComplianceIssue, ComplianceResult } from "./compliance/checker.js";
|
|
7
|
+
export { defaultRules } from "./compliance/rules.js";
|
|
8
|
+
export type { ComplianceRule } from "./compliance/rules.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACnE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { loadKit, getBundledKitPath, listBundledKits } from "./kit/loader.js";
|
|
2
|
+
export { parseDesignMd, extractQuickReference, parseComponents } from "./kit/parser.js";
|
|
3
|
+
export { getRegistry, findKitInRegistry } from "./kit/registry.js";
|
|
4
|
+
export { checkCompliance } from "./compliance/checker.js";
|
|
5
|
+
export { defaultRules } from "./compliance/rules.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Kit } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Load a kit from a .layout/ directory.
|
|
4
|
+
* Falls back to .superduper/ with a deprecation warning if .layout/ is not found.
|
|
5
|
+
* Looks in the current working directory by default.
|
|
6
|
+
*/
|
|
7
|
+
export declare function loadKit(basePath?: string): Kit | null;
|
|
8
|
+
/**
|
|
9
|
+
* Find the path to a bundled kit by name.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getBundledKitPath(kitName: string): string | null;
|
|
12
|
+
/**
|
|
13
|
+
* List all bundled kits.
|
|
14
|
+
*/
|
|
15
|
+
export declare function listBundledKits(): string[];
|
|
16
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +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,CAiErD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAahE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAe1C"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { readFileSync, existsSync, readdirSync } from "node:fs";
|
|
2
|
+
import { join, resolve, dirname } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { LAYOUT_DIR, LEGACY_DIR, KIT_MANIFEST_FILE, DESIGN_MD_FILE, TOKENS_CSS_FILE, TOKENS_JSON_FILE, TAILWIND_CONFIG_FILE, COMPONENTS_DIR, } from "./types.js";
|
|
5
|
+
import { parseDesignMd, parseComponents } from "./parser.js";
|
|
6
|
+
/**
|
|
7
|
+
* Load a kit from a .layout/ directory.
|
|
8
|
+
* Falls back to .superduper/ with a deprecation warning if .layout/ is not found.
|
|
9
|
+
* Looks in the current working directory by default.
|
|
10
|
+
*/
|
|
11
|
+
export function loadKit(basePath) {
|
|
12
|
+
const base = resolve(basePath ?? process.cwd());
|
|
13
|
+
let dir = resolve(base, LAYOUT_DIR);
|
|
14
|
+
if (!existsSync(dir)) {
|
|
15
|
+
// Fallback: check legacy .superduper/ directory
|
|
16
|
+
const legacyDir = resolve(base, LEGACY_DIR);
|
|
17
|
+
if (existsSync(legacyDir)) {
|
|
18
|
+
process.stderr.write(`[layout-context] Warning: Using legacy .superduper/ directory. Rename it to .layout/ — .superduper/ support will be removed in v1.0.\n`);
|
|
19
|
+
dir = legacyDir;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const manifestPath = join(dir, KIT_MANIFEST_FILE);
|
|
26
|
+
const designMdPath = join(dir, DESIGN_MD_FILE);
|
|
27
|
+
if (!existsSync(designMdPath))
|
|
28
|
+
return null;
|
|
29
|
+
const manifest = existsSync(manifestPath)
|
|
30
|
+
? JSON.parse(readFileSync(manifestPath, "utf-8"))
|
|
31
|
+
: {
|
|
32
|
+
name: "custom",
|
|
33
|
+
version: "1.0.0",
|
|
34
|
+
displayName: "Custom",
|
|
35
|
+
description: "User-provided design system",
|
|
36
|
+
source: "custom",
|
|
37
|
+
tier: "free",
|
|
38
|
+
tokenCount: 0,
|
|
39
|
+
componentCount: 0,
|
|
40
|
+
aesthetic: "",
|
|
41
|
+
};
|
|
42
|
+
const designMd = readFileSync(designMdPath, "utf-8");
|
|
43
|
+
const sections = parseDesignMd(designMd);
|
|
44
|
+
let components = parseComponents(designMd);
|
|
45
|
+
// Also load individual component files if present
|
|
46
|
+
const componentsDir = join(dir, COMPONENTS_DIR);
|
|
47
|
+
if (existsSync(componentsDir)) {
|
|
48
|
+
const files = readdirSync(componentsDir).filter((f) => f.endsWith(".md"));
|
|
49
|
+
for (const file of files) {
|
|
50
|
+
const content = readFileSync(join(componentsDir, file), "utf-8");
|
|
51
|
+
const parsed = parseComponents(`## Components\n### ${content}`);
|
|
52
|
+
components = [...components, ...parsed];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const tokensCss = readSafe(join(dir, TOKENS_CSS_FILE));
|
|
56
|
+
const tokensJson = readSafe(join(dir, TOKENS_JSON_FILE));
|
|
57
|
+
const tailwindConfig = readSafe(join(dir, TAILWIND_CONFIG_FILE));
|
|
58
|
+
return {
|
|
59
|
+
manifest,
|
|
60
|
+
designMd,
|
|
61
|
+
sections,
|
|
62
|
+
components,
|
|
63
|
+
tokensCss: tokensCss ?? undefined,
|
|
64
|
+
tokensJson: tokensJson ?? undefined,
|
|
65
|
+
tailwindConfig: tailwindConfig ?? undefined,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Find the path to a bundled kit by name.
|
|
70
|
+
*/
|
|
71
|
+
export function getBundledKitPath(kitName) {
|
|
72
|
+
// Resolve relative to this file's location in the package
|
|
73
|
+
// At runtime this file is at dist/src/kit/loader.js, kits/ is at package root
|
|
74
|
+
const kitsDir = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", "..", "kits");
|
|
75
|
+
const kitDir = join(kitsDir, kitName);
|
|
76
|
+
return existsSync(kitDir) ? kitDir : null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* List all bundled kits.
|
|
80
|
+
*/
|
|
81
|
+
export function listBundledKits() {
|
|
82
|
+
const kitsDir = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", "..", "kits");
|
|
83
|
+
if (!existsSync(kitsDir))
|
|
84
|
+
return [];
|
|
85
|
+
return readdirSync(kitsDir).filter((entry) => {
|
|
86
|
+
const kitJson = join(kitsDir, entry, KIT_MANIFEST_FILE);
|
|
87
|
+
return existsSync(kitJson);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function readSafe(filePath) {
|
|
91
|
+
try {
|
|
92
|
+
return existsSync(filePath) ? readFileSync(filePath, "utf-8") : null;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/kit/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { KitSection, KitComponent } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parse a DESIGN.md file into structured sections.
|
|
4
|
+
* Splits on ## headings and extracts section IDs.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseDesignMd(content: string): KitSection[];
|
|
7
|
+
/**
|
|
8
|
+
* Extract Quick Reference section (Section 0) from DESIGN.md.
|
|
9
|
+
* This is the 50-75 line summary optimised for LLM context windows.
|
|
10
|
+
*/
|
|
11
|
+
export declare function extractQuickReference(content: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Extract a specific section by keyword match.
|
|
14
|
+
*/
|
|
15
|
+
export declare function extractSection(sections: KitSection[], keyword: string): KitSection | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Parse component specs from DESIGN.md or individual component files.
|
|
18
|
+
* Components are expected in a "## Components" section with ### per component.
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseComponents(content: string): KitComponent[];
|
|
21
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/kit/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAiC3D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK7D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,EAAE,MAAM,GACd,UAAU,GAAG,SAAS,CAOxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CA+B/D"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a DESIGN.md file into structured sections.
|
|
3
|
+
* Splits on ## headings and extracts section IDs.
|
|
4
|
+
*/
|
|
5
|
+
export function parseDesignMd(content) {
|
|
6
|
+
const sections = [];
|
|
7
|
+
const lines = content.split("\n");
|
|
8
|
+
let currentTitle = "";
|
|
9
|
+
let currentLines = [];
|
|
10
|
+
for (const line of lines) {
|
|
11
|
+
const headingMatch = line.match(/^##\s+(?:Section\s+\d+:\s*)?(.+)/);
|
|
12
|
+
if (headingMatch) {
|
|
13
|
+
if (currentTitle) {
|
|
14
|
+
sections.push({
|
|
15
|
+
id: slugify(currentTitle),
|
|
16
|
+
title: currentTitle,
|
|
17
|
+
content: currentLines.join("\n").trim(),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
currentTitle = headingMatch[1].trim();
|
|
21
|
+
currentLines = [];
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
currentLines.push(line);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (currentTitle) {
|
|
28
|
+
sections.push({
|
|
29
|
+
id: slugify(currentTitle),
|
|
30
|
+
title: currentTitle,
|
|
31
|
+
content: currentLines.join("\n").trim(),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return sections;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Extract Quick Reference section (Section 0) from DESIGN.md.
|
|
38
|
+
* This is the 50-75 line summary optimised for LLM context windows.
|
|
39
|
+
*/
|
|
40
|
+
export function extractQuickReference(content) {
|
|
41
|
+
const match = content.match(/## (?:Section 0:|Quick Reference)[^\n]*\n([\s\S]*?)(?=\n## |\n# |$)/);
|
|
42
|
+
return match?.[1]?.trim() ?? "";
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Extract a specific section by keyword match.
|
|
46
|
+
*/
|
|
47
|
+
export function extractSection(sections, keyword) {
|
|
48
|
+
const lower = keyword.toLowerCase();
|
|
49
|
+
return sections.find((s) => s.id.includes(lower) ||
|
|
50
|
+
s.title.toLowerCase().includes(lower));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Parse component specs from DESIGN.md or individual component files.
|
|
54
|
+
* Components are expected in a "## Components" section with ### per component.
|
|
55
|
+
*/
|
|
56
|
+
export function parseComponents(content) {
|
|
57
|
+
const components = [];
|
|
58
|
+
const componentSection = content.match(/## (?:Section \d+:\s*)?Components?\s*\n([\s\S]*?)(?=\n## |\n# |$)/);
|
|
59
|
+
if (!componentSection?.[1])
|
|
60
|
+
return components;
|
|
61
|
+
const entries = componentSection[1].split(/\n### /);
|
|
62
|
+
for (const entry of entries) {
|
|
63
|
+
if (!entry.trim())
|
|
64
|
+
continue;
|
|
65
|
+
const lines = entry.split("\n");
|
|
66
|
+
const name = lines[0]?.trim() ?? "";
|
|
67
|
+
if (!name)
|
|
68
|
+
continue;
|
|
69
|
+
const body = lines.slice(1).join("\n");
|
|
70
|
+
const codeMatch = body.match(/```(?:tsx?|jsx?)\n([\s\S]*?)```/);
|
|
71
|
+
const tokenMatches = body.match(/--[\w-]+/g) ?? [];
|
|
72
|
+
components.push({
|
|
73
|
+
name,
|
|
74
|
+
description: extractDescription(body),
|
|
75
|
+
tokens: [...new Set(tokenMatches)],
|
|
76
|
+
codeExample: codeMatch?.[1]?.trim(),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return components;
|
|
80
|
+
}
|
|
81
|
+
function extractDescription(body) {
|
|
82
|
+
const lines = body.split("\n");
|
|
83
|
+
const descLines = [];
|
|
84
|
+
for (const line of lines) {
|
|
85
|
+
if (line.startsWith("```") || line.startsWith("###") || line.startsWith("- `--"))
|
|
86
|
+
break;
|
|
87
|
+
if (line.trim())
|
|
88
|
+
descLines.push(line.trim());
|
|
89
|
+
}
|
|
90
|
+
return descLines.join(" ").slice(0, 200);
|
|
91
|
+
}
|
|
92
|
+
function slugify(text) {
|
|
93
|
+
return text
|
|
94
|
+
.toLowerCase()
|
|
95
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
96
|
+
.replace(/^-|-$/g, "");
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/kit/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/kit/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAuFhD,wBAAgB,WAAW,IAAI,aAAa,EAAE,CAE7C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEzE"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local registry of available kits.
|
|
3
|
+
* In Phase 2, this will fetch from layout.design/api/kits.
|
|
4
|
+
*/
|
|
5
|
+
const REGISTRY = [
|
|
6
|
+
{
|
|
7
|
+
name: "linear-lite",
|
|
8
|
+
displayName: "Linear",
|
|
9
|
+
description: "Developer tool, dark-first design system",
|
|
10
|
+
tier: "free",
|
|
11
|
+
aesthetic: "Dark, minimal, developer-focused",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: "stripe-lite",
|
|
15
|
+
displayName: "Stripe",
|
|
16
|
+
description: "Clean, trust-focused payment UI",
|
|
17
|
+
tier: "free",
|
|
18
|
+
aesthetic: "Light, clean, high-trust",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: "notion-lite",
|
|
22
|
+
displayName: "Notion",
|
|
23
|
+
description: "Typography-heavy productivity design",
|
|
24
|
+
tier: "free",
|
|
25
|
+
aesthetic: "Light, content-first, block-based",
|
|
26
|
+
},
|
|
27
|
+
// Premium kits (Phase 2)
|
|
28
|
+
{
|
|
29
|
+
name: "linear",
|
|
30
|
+
displayName: "Linear (Full)",
|
|
31
|
+
description: "Complete Linear design system — 24 components, all tokens",
|
|
32
|
+
tier: "pro",
|
|
33
|
+
price: "£99",
|
|
34
|
+
aesthetic: "Dark, minimal, developer-focused",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: "revolut",
|
|
38
|
+
displayName: "Revolut (Full)",
|
|
39
|
+
description: "Complete Revolut design system — 30 components, all tokens",
|
|
40
|
+
tier: "pro",
|
|
41
|
+
price: "£99",
|
|
42
|
+
aesthetic: "Dark fintech, data-rich",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: "stripe",
|
|
46
|
+
displayName: "Stripe (Full)",
|
|
47
|
+
description: "Complete Stripe design system — 20 components, all tokens",
|
|
48
|
+
tier: "pro",
|
|
49
|
+
price: "£79",
|
|
50
|
+
aesthetic: "Light, clean, high-trust",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "airbnb",
|
|
54
|
+
displayName: "Airbnb (Full)",
|
|
55
|
+
description: "Complete Airbnb design system — 25 components, all tokens",
|
|
56
|
+
tier: "pro",
|
|
57
|
+
price: "£99",
|
|
58
|
+
aesthetic: "Warm, rounded, photo-forward",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: "notion",
|
|
62
|
+
displayName: "Notion (Full)",
|
|
63
|
+
description: "Complete Notion design system — 22 components, all tokens",
|
|
64
|
+
tier: "pro",
|
|
65
|
+
price: "£79",
|
|
66
|
+
aesthetic: "Light, content-first, block-based",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "tiktok",
|
|
70
|
+
displayName: "TikTok (Full)",
|
|
71
|
+
description: "Complete TikTok design system — 28 components, all tokens",
|
|
72
|
+
tier: "pro",
|
|
73
|
+
price: "£99",
|
|
74
|
+
aesthetic: "Dark, vibrant, video-first",
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: "netflix",
|
|
78
|
+
displayName: "Netflix (Full)",
|
|
79
|
+
description: "Complete Netflix design system — 18 components, all tokens",
|
|
80
|
+
tier: "pro",
|
|
81
|
+
price: "£79",
|
|
82
|
+
aesthetic: "Dark, cinematic, content-forward",
|
|
83
|
+
},
|
|
84
|
+
];
|
|
85
|
+
export function getRegistry() {
|
|
86
|
+
return REGISTRY;
|
|
87
|
+
}
|
|
88
|
+
export function findKitInRegistry(name) {
|
|
89
|
+
return REGISTRY.find((entry) => entry.name === name);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/kit/registry.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,QAAQ,GAAoB;IAChC;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,kCAAkC;KAC9C;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,iCAAiC;QAC9C,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,0BAA0B;KACtC;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,mCAAmC;KAC/C;IACD,yBAAyB;IACzB;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,2DAA2D;QACxE,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,kCAAkC;KAC9C;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE,4DAA4D;QACzE,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,yBAAyB;KACrC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,2DAA2D;QACxE,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,0BAA0B;KACtC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,2DAA2D;QACxE,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,8BAA8B;KAC1C;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,2DAA2D;QACxE,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,mCAAmC;KAC/C;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,2DAA2D;QACxE,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,4BAA4B;KACxC;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE,4DAA4D;QACzE,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,kCAAkC;KAC9C;CACF,CAAC;AAEF,MAAM,UAAU,WAAW;IACzB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface KitManifest {
|
|
2
|
+
name: string;
|
|
3
|
+
version: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
description: string;
|
|
6
|
+
source: string;
|
|
7
|
+
tier: "free" | "pro";
|
|
8
|
+
tokenCount: number;
|
|
9
|
+
componentCount: number;
|
|
10
|
+
aesthetic: string;
|
|
11
|
+
layoutUrl?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface KitSection {
|
|
14
|
+
id: string;
|
|
15
|
+
title: string;
|
|
16
|
+
content: string;
|
|
17
|
+
}
|
|
18
|
+
export interface KitComponent {
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
tokens: string[];
|
|
22
|
+
codeExample?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface Kit {
|
|
25
|
+
manifest: KitManifest;
|
|
26
|
+
designMd: string;
|
|
27
|
+
sections: KitSection[];
|
|
28
|
+
components: KitComponent[];
|
|
29
|
+
tokensCss?: string;
|
|
30
|
+
tokensJson?: string;
|
|
31
|
+
tailwindConfig?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface RegistryEntry {
|
|
34
|
+
name: string;
|
|
35
|
+
displayName: string;
|
|
36
|
+
description: string;
|
|
37
|
+
tier: "free" | "pro";
|
|
38
|
+
price?: string;
|
|
39
|
+
aesthetic: string;
|
|
40
|
+
}
|
|
41
|
+
export declare const LAYOUT_DIR = ".layout";
|
|
42
|
+
export declare const LEGACY_DIR = ".superduper";
|
|
43
|
+
export declare const KIT_MANIFEST_FILE = "kit.json";
|
|
44
|
+
export declare const DESIGN_MD_FILE = "DESIGN.md";
|
|
45
|
+
export declare const TOKENS_CSS_FILE = "tokens.css";
|
|
46
|
+
export declare const TOKENS_JSON_FILE = "tokens.json";
|
|
47
|
+
export declare const TAILWIND_CONFIG_FILE = "tailwind.config.js";
|
|
48
|
+
export declare const COMPONENTS_DIR = "components";
|
|
49
|
+
export declare const PREVIEW_PORT = 4321;
|
|
50
|
+
export declare const REGISTRY_URL = "https://layout.design/api/kits";
|
|
51
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/kit/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,UAAU,YAAY,CAAC;AACpC,eAAO,MAAM,UAAU,gBAAgB,CAAC;AACxC,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAC5C,eAAO,MAAM,cAAc,cAAc,CAAC;AAC1C,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AACzD,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,YAAY,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const LAYOUT_DIR = ".layout";
|
|
2
|
+
export const LEGACY_DIR = ".superduper"; // Deprecated — remove in v1.0
|
|
3
|
+
export const KIT_MANIFEST_FILE = "kit.json";
|
|
4
|
+
export const DESIGN_MD_FILE = "DESIGN.md";
|
|
5
|
+
export const TOKENS_CSS_FILE = "tokens.css";
|
|
6
|
+
export const TOKENS_JSON_FILE = "tokens.json";
|
|
7
|
+
export const TAILWIND_CONFIG_FILE = "tailwind.config.js";
|
|
8
|
+
export const COMPONENTS_DIR = "components";
|
|
9
|
+
export const PREVIEW_PORT = 4321;
|
|
10
|
+
export const REGISTRY_URL = "https://layout.design/api/kits";
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/kit/types.ts"],"names":[],"mappings":"AA6CA,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AACpC,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,8BAA8B;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAE3C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,YAAY,GAAG,gCAAgC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA0GjD"}
|