figma-to-code-agent 0.3.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.
- package/CHANGELOG.md +55 -0
- package/LICENSE +21 -0
- package/QUICKSTART.md +198 -0
- package/README.md +149 -0
- package/dist/FigmaToCodeAgent.d.ts +55 -0
- package/dist/FigmaToCodeAgent.d.ts.map +1 -0
- package/dist/FigmaToCodeAgent.js +251 -0
- package/dist/FigmaToCodeAgent.js.map +1 -0
- package/dist/assets/index.d.ts +6 -0
- package/dist/assets/index.d.ts.map +1 -0
- package/dist/assets/index.js +7 -0
- package/dist/assets/index.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +261 -0
- package/dist/cli.js.map +1 -0
- package/dist/extraction/FigmaAPIClient.d.ts +53 -0
- package/dist/extraction/FigmaAPIClient.d.ts.map +1 -0
- package/dist/extraction/FigmaAPIClient.js +275 -0
- package/dist/extraction/FigmaAPIClient.js.map +1 -0
- package/dist/extraction/FigmaCache.d.ts +28 -0
- package/dist/extraction/FigmaCache.d.ts.map +1 -0
- package/dist/extraction/FigmaCache.js +120 -0
- package/dist/extraction/FigmaCache.js.map +1 -0
- package/dist/extraction/MCPClient.d.ts +75 -0
- package/dist/extraction/MCPClient.d.ts.map +1 -0
- package/dist/extraction/MCPClient.js +254 -0
- package/dist/extraction/MCPClient.js.map +1 -0
- package/dist/extraction/index.d.ts +9 -0
- package/dist/extraction/index.d.ts.map +1 -0
- package/dist/extraction/index.js +27 -0
- package/dist/extraction/index.js.map +1 -0
- package/dist/extraction/types.d.ts +122 -0
- package/dist/extraction/types.d.ts.map +1 -0
- package/dist/extraction/types.js +6 -0
- package/dist/extraction/types.js.map +1 -0
- package/dist/generation/AICodeOptimizer.d.ts +10 -0
- package/dist/generation/AICodeOptimizer.d.ts.map +1 -0
- package/dist/generation/AICodeOptimizer.js +33 -0
- package/dist/generation/AICodeOptimizer.js.map +1 -0
- package/dist/generation/ReactGenerator.d.ts +27 -0
- package/dist/generation/ReactGenerator.d.ts.map +1 -0
- package/dist/generation/ReactGenerator.js +423 -0
- package/dist/generation/ReactGenerator.js.map +1 -0
- package/dist/generation/VueGenerator.d.ts +23 -0
- package/dist/generation/VueGenerator.d.ts.map +1 -0
- package/dist/generation/VueGenerator.js +337 -0
- package/dist/generation/VueGenerator.js.map +1 -0
- package/dist/generation/index.d.ts +6 -0
- package/dist/generation/index.d.ts.map +1 -0
- package/dist/generation/index.js +7 -0
- package/dist/generation/index.js.map +1 -0
- package/dist/generation/types.d.ts +24 -0
- package/dist/generation/types.d.ts.map +1 -0
- package/dist/generation/types.js +3 -0
- package/dist/generation/types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/BedrockProvider.d.ts +8 -0
- package/dist/llm/BedrockProvider.d.ts.map +1 -0
- package/dist/llm/BedrockProvider.js +34 -0
- package/dist/llm/BedrockProvider.js.map +1 -0
- package/dist/llm/LLMFactory.d.ts +5 -0
- package/dist/llm/LLMFactory.d.ts.map +1 -0
- package/dist/llm/LLMFactory.js +21 -0
- package/dist/llm/LLMFactory.js.map +1 -0
- package/dist/llm/OpenAIProvider.d.ts +7 -0
- package/dist/llm/OpenAIProvider.d.ts.map +1 -0
- package/dist/llm/OpenAIProvider.js +34 -0
- package/dist/llm/OpenAIProvider.js.map +1 -0
- package/dist/llm/index.d.ts +5 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +21 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/types.d.ts +23 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +3 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/transformation/ASTFactory.d.ts +92 -0
- package/dist/transformation/ASTFactory.d.ts.map +1 -0
- package/dist/transformation/ASTFactory.js +240 -0
- package/dist/transformation/ASTFactory.js.map +1 -0
- package/dist/transformation/ASTParser.d.ts +13 -0
- package/dist/transformation/ASTParser.d.ts.map +1 -0
- package/dist/transformation/ASTParser.js +177 -0
- package/dist/transformation/ASTParser.js.map +1 -0
- package/dist/transformation/TransformationPipeline.d.ts +31 -0
- package/dist/transformation/TransformationPipeline.d.ts.map +1 -0
- package/dist/transformation/TransformationPipeline.js +42 -0
- package/dist/transformation/TransformationPipeline.js.map +1 -0
- package/dist/transformation/index.d.ts +7 -0
- package/dist/transformation/index.d.ts.map +1 -0
- package/dist/transformation/index.js +25 -0
- package/dist/transformation/index.js.map +1 -0
- package/dist/transformation/transformers/AIComponentSplitter.d.ts +14 -0
- package/dist/transformation/transformers/AIComponentSplitter.d.ts.map +1 -0
- package/dist/transformation/transformers/AIComponentSplitter.js +71 -0
- package/dist/transformation/transformers/AIComponentSplitter.js.map +1 -0
- package/dist/transformation/transformers/AILayoutAnalyzer.d.ts +18 -0
- package/dist/transformation/transformers/AILayoutAnalyzer.d.ts.map +1 -0
- package/dist/transformation/transformers/AILayoutAnalyzer.js +125 -0
- package/dist/transformation/transformers/AILayoutAnalyzer.js.map +1 -0
- package/dist/transformation/transformers/AISemanticNamer.d.ts +12 -0
- package/dist/transformation/transformers/AISemanticNamer.d.ts.map +1 -0
- package/dist/transformation/transformers/AISemanticNamer.js +50 -0
- package/dist/transformation/transformers/AISemanticNamer.js.map +1 -0
- package/dist/transformation/transformers/ComponentExtractor.d.ts +16 -0
- package/dist/transformation/transformers/ComponentExtractor.d.ts.map +1 -0
- package/dist/transformation/transformers/ComponentExtractor.js +91 -0
- package/dist/transformation/transformers/ComponentExtractor.js.map +1 -0
- package/dist/transformation/transformers/FigmaLayerPreserver.d.ts +14 -0
- package/dist/transformation/transformers/FigmaLayerPreserver.d.ts.map +1 -0
- package/dist/transformation/transformers/FigmaLayerPreserver.js +48 -0
- package/dist/transformation/transformers/FigmaLayerPreserver.js.map +1 -0
- package/dist/transformation/transformers/FigmaStructureOptimizer.d.ts +16 -0
- package/dist/transformation/transformers/FigmaStructureOptimizer.d.ts.map +1 -0
- package/dist/transformation/transformers/FigmaStructureOptimizer.js +65 -0
- package/dist/transformation/transformers/FigmaStructureOptimizer.js.map +1 -0
- package/dist/transformation/transformers/FlattenTransformer.d.ts +15 -0
- package/dist/transformation/transformers/FlattenTransformer.d.ts.map +1 -0
- package/dist/transformation/transformers/FlattenTransformer.js +69 -0
- package/dist/transformation/transformers/FlattenTransformer.js.map +1 -0
- package/dist/transformation/transformers/LayoutOptimizer.d.ts +15 -0
- package/dist/transformation/transformers/LayoutOptimizer.d.ts.map +1 -0
- package/dist/transformation/transformers/LayoutOptimizer.js +63 -0
- package/dist/transformation/transformers/LayoutOptimizer.js.map +1 -0
- package/dist/transformation/transformers/SemanticNamer.d.ts +14 -0
- package/dist/transformation/transformers/SemanticNamer.d.ts.map +1 -0
- package/dist/transformation/transformers/SemanticNamer.js +65 -0
- package/dist/transformation/transformers/SemanticNamer.js.map +1 -0
- package/dist/transformation/transformers/SimplifyTransformer.d.ts +23 -0
- package/dist/transformation/transformers/SimplifyTransformer.d.ts.map +1 -0
- package/dist/transformation/transformers/SimplifyTransformer.js +138 -0
- package/dist/transformation/transformers/SimplifyTransformer.js.map +1 -0
- package/dist/transformation/types.d.ts +129 -0
- package/dist/transformation/types.d.ts.map +1 -0
- package/dist/transformation/types.js +7 -0
- package/dist/transformation/types.js.map +1 -0
- package/dist/validation/index.d.ts +6 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +7 -0
- package/dist/validation/index.js.map +1 -0
- package/package.json +81 -0
- package/test-app/test-react/index.html +19 -0
- package/test-app/test-react/package.json +16 -0
- package/test-app/test-react/src/Component.jsx +146 -0
- package/test-app/test-react/src/Component.module.css +572 -0
- package/test-app/test-react/src/Homepage.jsx +53 -0
- package/test-app/test-react/src/Homepage.module.css +218 -0
- package/test-app/test-react/src/ProductPage.jsx +74 -0
- package/test-app/test-react/src/ProductPage.module.css +357 -0
- package/test-app/test-react/src/ShoppingCart.jsx +151 -0
- package/test-app/test-react/src/ShoppingCart.module.css +739 -0
- package/test-app/test-react/src/main.jsx +9 -0
- package/test-app/test-react/vite.config.js +6 -0
- package/test-app/test-vue/index.html +19 -0
- package/test-app/test-vue/package.json +15 -0
- package/test-app/test-vue/src/App.vue +16 -0
- package/test-app/test-vue/src/Component.vue +723 -0
- package/test-app/test-vue/src/Homepage.vue +271 -0
- package/test-app/test-vue/src/ProductPage.vue +431 -0
- package/test-app/test-vue/src/ShoppingCart.vue +890 -0
- package/test-app/test-vue/src/main.js +4 -0
- package/test-app/test-vue/vite.config.js +6 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface LLMConfig {
|
|
2
|
+
provider: 'bedrock' | 'openai' | 'anthropic';
|
|
3
|
+
model: string;
|
|
4
|
+
region?: string;
|
|
5
|
+
apiKey?: string;
|
|
6
|
+
maxTokens?: number;
|
|
7
|
+
temperature?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface LLMMessage {
|
|
10
|
+
role: 'system' | 'user' | 'assistant';
|
|
11
|
+
content: string;
|
|
12
|
+
}
|
|
13
|
+
export interface LLMResponse {
|
|
14
|
+
content: string;
|
|
15
|
+
usage?: {
|
|
16
|
+
inputTokens: number;
|
|
17
|
+
outputTokens: number;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export interface LLMProvider {
|
|
21
|
+
chat(messages: LLMMessage[]): Promise<LLMResponse>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory functions for creating AST nodes
|
|
3
|
+
* Provides convenient methods to construct AST nodes with default values
|
|
4
|
+
*/
|
|
5
|
+
import { ASTNode, ASTNodeType, LayoutInfo, StyleInfo, NodeMetadata, Position, Size, Spacing, Color } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Create a default position at origin
|
|
8
|
+
*/
|
|
9
|
+
export declare function createPosition(x?: number, y?: number): Position;
|
|
10
|
+
/**
|
|
11
|
+
* Create a default size
|
|
12
|
+
*/
|
|
13
|
+
export declare function createSize(width?: number, height?: number): Size;
|
|
14
|
+
/**
|
|
15
|
+
* Create uniform spacing
|
|
16
|
+
*/
|
|
17
|
+
export declare function createSpacing(value: number): Spacing;
|
|
18
|
+
export declare function createSpacing(top: number, right: number, bottom: number, left: number): Spacing;
|
|
19
|
+
/**
|
|
20
|
+
* Create an RGBA color
|
|
21
|
+
*/
|
|
22
|
+
export declare function createColor(r: number, g: number, b: number, a?: number): Color;
|
|
23
|
+
/**
|
|
24
|
+
* Create a default layout info
|
|
25
|
+
*/
|
|
26
|
+
export declare function createLayoutInfo(overrides?: Partial<LayoutInfo>): LayoutInfo;
|
|
27
|
+
/**
|
|
28
|
+
* Create a default style info
|
|
29
|
+
*/
|
|
30
|
+
export declare function createStyleInfo(overrides?: Partial<StyleInfo>): StyleInfo;
|
|
31
|
+
/**
|
|
32
|
+
* Create node metadata
|
|
33
|
+
*/
|
|
34
|
+
export declare function createNodeMetadata(figmaId: string, figmaType: string, overrides?: Partial<NodeMetadata>): NodeMetadata;
|
|
35
|
+
/**
|
|
36
|
+
* Options for creating an AST node
|
|
37
|
+
*/
|
|
38
|
+
export interface CreateASTNodeOptions {
|
|
39
|
+
id: string;
|
|
40
|
+
type: ASTNodeType;
|
|
41
|
+
name: string;
|
|
42
|
+
layout?: Partial<LayoutInfo>;
|
|
43
|
+
styles?: Partial<StyleInfo>;
|
|
44
|
+
metadata: NodeMetadata;
|
|
45
|
+
children?: ASTNode[];
|
|
46
|
+
parent?: ASTNode;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Create a complete AST node
|
|
50
|
+
*/
|
|
51
|
+
export declare function createASTNode(options: CreateASTNodeOptions): ASTNode;
|
|
52
|
+
/**
|
|
53
|
+
* Create a root AST node
|
|
54
|
+
*/
|
|
55
|
+
export declare function createRootNode(id: string, name: string, figmaId: string): ASTNode;
|
|
56
|
+
/**
|
|
57
|
+
* Create a page AST node
|
|
58
|
+
*/
|
|
59
|
+
export declare function createPageNode(id: string, name: string, figmaId: string, parent?: ASTNode): ASTNode;
|
|
60
|
+
/**
|
|
61
|
+
* Create a container AST node
|
|
62
|
+
*/
|
|
63
|
+
export declare function createContainerNode(id: string, name: string, figmaId: string, figmaType: string, layout?: Partial<LayoutInfo>, parent?: ASTNode): ASTNode;
|
|
64
|
+
/**
|
|
65
|
+
* Create a component AST node
|
|
66
|
+
*/
|
|
67
|
+
export declare function createComponentNode(id: string, name: string, figmaId: string, componentName: string, parent?: ASTNode): ASTNode;
|
|
68
|
+
/**
|
|
69
|
+
* Create a text AST node
|
|
70
|
+
*/
|
|
71
|
+
export declare function createTextNode(id: string, name: string, figmaId: string, layout?: Partial<LayoutInfo>, styles?: Partial<StyleInfo>, parent?: ASTNode): ASTNode;
|
|
72
|
+
/**
|
|
73
|
+
* Create an image AST node
|
|
74
|
+
*/
|
|
75
|
+
export declare function createImageNode(id: string, name: string, figmaId: string, layout?: Partial<LayoutInfo>, parent?: ASTNode): ASTNode;
|
|
76
|
+
/**
|
|
77
|
+
* Create a shape AST node
|
|
78
|
+
*/
|
|
79
|
+
export declare function createShapeNode(id: string, name: string, figmaId: string, figmaType: string, layout?: Partial<LayoutInfo>, styles?: Partial<StyleInfo>, parent?: ASTNode): ASTNode;
|
|
80
|
+
/**
|
|
81
|
+
* Add a child node to a parent node
|
|
82
|
+
*/
|
|
83
|
+
export declare function addChild(parent: ASTNode, child: ASTNode): void;
|
|
84
|
+
/**
|
|
85
|
+
* Remove a child node from a parent node
|
|
86
|
+
*/
|
|
87
|
+
export declare function removeChild(parent: ASTNode, child: ASTNode): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Clone an AST node (shallow copy, children are referenced)
|
|
90
|
+
*/
|
|
91
|
+
export declare function cloneNode(node: ASTNode, deep?: boolean): ASTNode;
|
|
92
|
+
//# sourceMappingURL=ASTFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ASTFactory.d.ts","sourceRoot":"","sources":["../../src/transformation/ASTFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Factory functions for creating AST nodes
|
|
4
|
+
* Provides convenient methods to construct AST nodes with default values
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createPosition = createPosition;
|
|
8
|
+
exports.createSize = createSize;
|
|
9
|
+
exports.createSpacing = createSpacing;
|
|
10
|
+
exports.createColor = createColor;
|
|
11
|
+
exports.createLayoutInfo = createLayoutInfo;
|
|
12
|
+
exports.createStyleInfo = createStyleInfo;
|
|
13
|
+
exports.createNodeMetadata = createNodeMetadata;
|
|
14
|
+
exports.createASTNode = createASTNode;
|
|
15
|
+
exports.createRootNode = createRootNode;
|
|
16
|
+
exports.createPageNode = createPageNode;
|
|
17
|
+
exports.createContainerNode = createContainerNode;
|
|
18
|
+
exports.createComponentNode = createComponentNode;
|
|
19
|
+
exports.createTextNode = createTextNode;
|
|
20
|
+
exports.createImageNode = createImageNode;
|
|
21
|
+
exports.createShapeNode = createShapeNode;
|
|
22
|
+
exports.addChild = addChild;
|
|
23
|
+
exports.removeChild = removeChild;
|
|
24
|
+
exports.cloneNode = cloneNode;
|
|
25
|
+
/**
|
|
26
|
+
* Create a default position at origin
|
|
27
|
+
*/
|
|
28
|
+
function createPosition(x = 0, y = 0) {
|
|
29
|
+
return { x, y };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a default size
|
|
33
|
+
*/
|
|
34
|
+
function createSize(width = 0, height = 0) {
|
|
35
|
+
return { width, height };
|
|
36
|
+
}
|
|
37
|
+
function createSpacing(topOrValue, right, bottom, left) {
|
|
38
|
+
if (right === undefined) {
|
|
39
|
+
// Uniform spacing
|
|
40
|
+
return {
|
|
41
|
+
top: topOrValue,
|
|
42
|
+
right: topOrValue,
|
|
43
|
+
bottom: topOrValue,
|
|
44
|
+
left: topOrValue,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
top: topOrValue,
|
|
49
|
+
right: right,
|
|
50
|
+
bottom: bottom,
|
|
51
|
+
left: left,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create an RGBA color
|
|
56
|
+
*/
|
|
57
|
+
function createColor(r, g, b, a = 1) {
|
|
58
|
+
return { r, g, b, a };
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create a default layout info
|
|
62
|
+
*/
|
|
63
|
+
function createLayoutInfo(overrides = {}) {
|
|
64
|
+
return {
|
|
65
|
+
display: 'block',
|
|
66
|
+
position: createPosition(),
|
|
67
|
+
size: createSize(),
|
|
68
|
+
...overrides,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create a default style info
|
|
73
|
+
*/
|
|
74
|
+
function createStyleInfo(overrides = {}) {
|
|
75
|
+
return {
|
|
76
|
+
...overrides,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create node metadata
|
|
81
|
+
*/
|
|
82
|
+
function createNodeMetadata(figmaId, figmaType, overrides = {}) {
|
|
83
|
+
return {
|
|
84
|
+
figmaId,
|
|
85
|
+
figmaType,
|
|
86
|
+
isComponent: false,
|
|
87
|
+
exportable: true,
|
|
88
|
+
...overrides,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Create a complete AST node
|
|
93
|
+
*/
|
|
94
|
+
function createASTNode(options) {
|
|
95
|
+
const { id, type, name, layout = {}, styles = {}, metadata, children = [], parent } = options;
|
|
96
|
+
return {
|
|
97
|
+
id,
|
|
98
|
+
type,
|
|
99
|
+
name,
|
|
100
|
+
children,
|
|
101
|
+
parent,
|
|
102
|
+
layout: createLayoutInfo(layout),
|
|
103
|
+
styles: createStyleInfo(styles),
|
|
104
|
+
metadata,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Create a root AST node
|
|
109
|
+
*/
|
|
110
|
+
function createRootNode(id, name, figmaId) {
|
|
111
|
+
return createASTNode({
|
|
112
|
+
id,
|
|
113
|
+
type: 'Root',
|
|
114
|
+
name,
|
|
115
|
+
metadata: createNodeMetadata(figmaId, 'DOCUMENT', {
|
|
116
|
+
isComponent: false,
|
|
117
|
+
exportable: false,
|
|
118
|
+
}),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Create a page AST node
|
|
123
|
+
*/
|
|
124
|
+
function createPageNode(id, name, figmaId, parent) {
|
|
125
|
+
return createASTNode({
|
|
126
|
+
id,
|
|
127
|
+
type: 'Page',
|
|
128
|
+
name,
|
|
129
|
+
metadata: createNodeMetadata(figmaId, 'CANVAS'),
|
|
130
|
+
parent,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Create a container AST node
|
|
135
|
+
*/
|
|
136
|
+
function createContainerNode(id, name, figmaId, figmaType, layout, parent) {
|
|
137
|
+
return createASTNode({
|
|
138
|
+
id,
|
|
139
|
+
type: 'Container',
|
|
140
|
+
name,
|
|
141
|
+
layout,
|
|
142
|
+
metadata: createNodeMetadata(figmaId, figmaType),
|
|
143
|
+
parent,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Create a component AST node
|
|
148
|
+
*/
|
|
149
|
+
function createComponentNode(id, name, figmaId, componentName, parent) {
|
|
150
|
+
return createASTNode({
|
|
151
|
+
id,
|
|
152
|
+
type: 'Component',
|
|
153
|
+
name,
|
|
154
|
+
metadata: createNodeMetadata(figmaId, 'COMPONENT', {
|
|
155
|
+
isComponent: true,
|
|
156
|
+
componentName,
|
|
157
|
+
}),
|
|
158
|
+
parent,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Create a text AST node
|
|
163
|
+
*/
|
|
164
|
+
function createTextNode(id, name, figmaId, layout, styles, parent) {
|
|
165
|
+
return createASTNode({
|
|
166
|
+
id,
|
|
167
|
+
type: 'Text',
|
|
168
|
+
name,
|
|
169
|
+
layout,
|
|
170
|
+
styles,
|
|
171
|
+
metadata: createNodeMetadata(figmaId, 'TEXT'),
|
|
172
|
+
parent,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Create an image AST node
|
|
177
|
+
*/
|
|
178
|
+
function createImageNode(id, name, figmaId, layout, parent) {
|
|
179
|
+
return createASTNode({
|
|
180
|
+
id,
|
|
181
|
+
type: 'Image',
|
|
182
|
+
name,
|
|
183
|
+
layout,
|
|
184
|
+
metadata: createNodeMetadata(figmaId, 'IMAGE'),
|
|
185
|
+
parent,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Create a shape AST node
|
|
190
|
+
*/
|
|
191
|
+
function createShapeNode(id, name, figmaId, figmaType, layout, styles, parent) {
|
|
192
|
+
return createASTNode({
|
|
193
|
+
id,
|
|
194
|
+
type: 'Shape',
|
|
195
|
+
name,
|
|
196
|
+
layout,
|
|
197
|
+
styles,
|
|
198
|
+
metadata: createNodeMetadata(figmaId, figmaType),
|
|
199
|
+
parent,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Add a child node to a parent node
|
|
204
|
+
*/
|
|
205
|
+
function addChild(parent, child) {
|
|
206
|
+
child.parent = parent;
|
|
207
|
+
parent.children.push(child);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Remove a child node from a parent node
|
|
211
|
+
*/
|
|
212
|
+
function removeChild(parent, child) {
|
|
213
|
+
const index = parent.children.indexOf(child);
|
|
214
|
+
if (index !== -1) {
|
|
215
|
+
parent.children.splice(index, 1);
|
|
216
|
+
child.parent = undefined;
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Clone an AST node (shallow copy, children are referenced)
|
|
223
|
+
*/
|
|
224
|
+
function cloneNode(node, deep = false) {
|
|
225
|
+
const cloned = createASTNode({
|
|
226
|
+
id: node.id,
|
|
227
|
+
type: node.type,
|
|
228
|
+
name: node.name,
|
|
229
|
+
layout: { ...node.layout },
|
|
230
|
+
styles: { ...node.styles },
|
|
231
|
+
metadata: { ...node.metadata },
|
|
232
|
+
children: deep ? node.children.map((child) => cloneNode(child, true)) : [],
|
|
233
|
+
parent: node.parent,
|
|
234
|
+
});
|
|
235
|
+
if (!deep) {
|
|
236
|
+
cloned.children = [...node.children];
|
|
237
|
+
}
|
|
238
|
+
return cloned;
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=ASTFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ASTFactory.js","sourceRoot":"","sources":["../../src/transformation/ASTFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Node as FigmaNode } from '../extraction/types';
|
|
2
|
+
import type { ASTNode } from './types';
|
|
3
|
+
export declare class ASTParser {
|
|
4
|
+
parse(figmaNode: FigmaNode): ASTNode;
|
|
5
|
+
private parseNode;
|
|
6
|
+
private getImageRef;
|
|
7
|
+
private mapNodeType;
|
|
8
|
+
private parseLayout;
|
|
9
|
+
private detectLayoutMode;
|
|
10
|
+
private mapAlignment;
|
|
11
|
+
private parseStyles;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=ASTParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ASTParser.d.ts","sourceRoot":"","sources":["../../src/transformation/ASTParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,SAAS,CAAC;AAUhE,qBAAa,SAAS;IACpB,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAIpC,OAAO,CAAC,SAAS;IAgCjB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;IA+BnB,OAAO,CAAC,WAAW;IA0CnB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,WAAW;CA0CpB"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ASTParser = void 0;
|
|
4
|
+
const ASTFactory_1 = require("./ASTFactory");
|
|
5
|
+
class ASTParser {
|
|
6
|
+
parse(figmaNode) {
|
|
7
|
+
return this.parseNode(figmaNode);
|
|
8
|
+
}
|
|
9
|
+
parseNode(figmaNode, parent) {
|
|
10
|
+
const nodeType = this.mapNodeType(figmaNode);
|
|
11
|
+
const layout = this.parseLayout(figmaNode);
|
|
12
|
+
const styles = this.parseStyles(figmaNode);
|
|
13
|
+
const metadata = (0, ASTFactory_1.createNodeMetadata)(figmaNode.id, figmaNode.type, {
|
|
14
|
+
isComponent: figmaNode.type === 'COMPONENT' || figmaNode.type === 'COMPONENT_SET',
|
|
15
|
+
componentName: figmaNode.type === 'COMPONENT' ? figmaNode.name : undefined,
|
|
16
|
+
exportable: false,
|
|
17
|
+
textContent: figmaNode.characters,
|
|
18
|
+
imageRef: this.getImageRef(figmaNode),
|
|
19
|
+
});
|
|
20
|
+
const astNode = (0, ASTFactory_1.createASTNode)({
|
|
21
|
+
id: figmaNode.id,
|
|
22
|
+
type: nodeType,
|
|
23
|
+
name: figmaNode.name,
|
|
24
|
+
layout,
|
|
25
|
+
styles,
|
|
26
|
+
metadata,
|
|
27
|
+
parent,
|
|
28
|
+
});
|
|
29
|
+
if ('children' in figmaNode && figmaNode.children) {
|
|
30
|
+
astNode.children = figmaNode.children
|
|
31
|
+
.filter((child) => child.visible !== false)
|
|
32
|
+
.filter((child) => child.isMask !== true)
|
|
33
|
+
.map((child) => this.parseNode(child, astNode));
|
|
34
|
+
}
|
|
35
|
+
return astNode;
|
|
36
|
+
}
|
|
37
|
+
getImageRef(figmaNode) {
|
|
38
|
+
if ('fills' in figmaNode && Array.isArray(figmaNode.fills)) {
|
|
39
|
+
const imageFill = figmaNode.fills.find((f) => f.type === 'IMAGE');
|
|
40
|
+
if (imageFill && imageFill.imageRef) {
|
|
41
|
+
return imageFill.imageRef;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
mapNodeType(figmaNode) {
|
|
47
|
+
// Check if it has an image fill -> treat as Image
|
|
48
|
+
if (this.getImageRef(figmaNode)) {
|
|
49
|
+
return 'Image';
|
|
50
|
+
}
|
|
51
|
+
switch (figmaNode.type) {
|
|
52
|
+
case 'DOCUMENT':
|
|
53
|
+
return 'Root';
|
|
54
|
+
case 'CANVAS':
|
|
55
|
+
return 'Page';
|
|
56
|
+
case 'COMPONENT':
|
|
57
|
+
case 'COMPONENT_SET':
|
|
58
|
+
case 'INSTANCE':
|
|
59
|
+
return 'Component';
|
|
60
|
+
case 'TEXT':
|
|
61
|
+
return 'Text';
|
|
62
|
+
case 'RECTANGLE':
|
|
63
|
+
case 'ELLIPSE':
|
|
64
|
+
case 'POLYGON':
|
|
65
|
+
case 'STAR':
|
|
66
|
+
case 'VECTOR':
|
|
67
|
+
case 'LINE':
|
|
68
|
+
return 'Shape';
|
|
69
|
+
case 'FRAME':
|
|
70
|
+
case 'GROUP':
|
|
71
|
+
default:
|
|
72
|
+
return 'Container';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
parseLayout(figmaNode) {
|
|
76
|
+
const position = {
|
|
77
|
+
x: figmaNode.absoluteBoundingBox?.x ?? 0,
|
|
78
|
+
y: figmaNode.absoluteBoundingBox?.y ?? 0,
|
|
79
|
+
};
|
|
80
|
+
const size = {
|
|
81
|
+
width: figmaNode.absoluteBoundingBox?.width ?? 0,
|
|
82
|
+
height: figmaNode.absoluteBoundingBox?.height ?? 0,
|
|
83
|
+
};
|
|
84
|
+
const display = this.detectLayoutMode(figmaNode);
|
|
85
|
+
const layout = (0, ASTFactory_1.createLayoutInfo)({ display, position, size });
|
|
86
|
+
if ('layoutMode' in figmaNode && figmaNode.layoutMode) {
|
|
87
|
+
if (figmaNode.layoutMode === 'HORIZONTAL') {
|
|
88
|
+
layout.flexDirection = 'row';
|
|
89
|
+
}
|
|
90
|
+
else if (figmaNode.layoutMode === 'VERTICAL') {
|
|
91
|
+
layout.flexDirection = 'column';
|
|
92
|
+
}
|
|
93
|
+
if ('primaryAxisAlignItems' in figmaNode) {
|
|
94
|
+
layout.justifyContent = this.mapAlignment(figmaNode.primaryAxisAlignItems);
|
|
95
|
+
}
|
|
96
|
+
if ('counterAxisAlignItems' in figmaNode) {
|
|
97
|
+
layout.alignItems = this.mapAlignment(figmaNode.counterAxisAlignItems);
|
|
98
|
+
}
|
|
99
|
+
if ('itemSpacing' in figmaNode && typeof figmaNode.itemSpacing === 'number') {
|
|
100
|
+
layout.gap = figmaNode.itemSpacing;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if ('paddingLeft' in figmaNode) {
|
|
104
|
+
const top = figmaNode.paddingTop ?? 0;
|
|
105
|
+
const right = figmaNode.paddingRight ?? 0;
|
|
106
|
+
const bottom = figmaNode.paddingBottom ?? 0;
|
|
107
|
+
const left = figmaNode.paddingLeft ?? 0;
|
|
108
|
+
layout.padding = (0, ASTFactory_1.createSpacing)(top, right, bottom, left);
|
|
109
|
+
}
|
|
110
|
+
return layout;
|
|
111
|
+
}
|
|
112
|
+
detectLayoutMode(figmaNode) {
|
|
113
|
+
if ('layoutMode' in figmaNode && figmaNode.layoutMode && figmaNode.layoutMode !== 'NONE') {
|
|
114
|
+
return 'flex';
|
|
115
|
+
}
|
|
116
|
+
if ('layoutGrids' in figmaNode && figmaNode.layoutGrids && figmaNode.layoutGrids.length > 0) {
|
|
117
|
+
const hasGrid = figmaNode.layoutGrids.some((grid) => grid.pattern === 'GRID');
|
|
118
|
+
if (hasGrid)
|
|
119
|
+
return 'grid';
|
|
120
|
+
}
|
|
121
|
+
if ('constraints' in figmaNode && figmaNode.constraints) {
|
|
122
|
+
const constraints = figmaNode.constraints;
|
|
123
|
+
if (constraints.horizontal === 'SCALE' || constraints.vertical === 'SCALE') {
|
|
124
|
+
return 'absolute';
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return 'block';
|
|
128
|
+
}
|
|
129
|
+
mapAlignment(alignment) {
|
|
130
|
+
switch (alignment) {
|
|
131
|
+
case 'MIN':
|
|
132
|
+
return 'flex-start';
|
|
133
|
+
case 'CENTER':
|
|
134
|
+
return 'center';
|
|
135
|
+
case 'MAX':
|
|
136
|
+
return 'flex-end';
|
|
137
|
+
case 'SPACE_BETWEEN':
|
|
138
|
+
return 'space-between';
|
|
139
|
+
default:
|
|
140
|
+
return 'flex-start';
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
parseStyles(figmaNode) {
|
|
144
|
+
const styles = (0, ASTFactory_1.createStyleInfo)();
|
|
145
|
+
if ('fills' in figmaNode && Array.isArray(figmaNode.fills) && figmaNode.fills.length > 0) {
|
|
146
|
+
const fill = figmaNode.fills[0];
|
|
147
|
+
if (fill.type === 'SOLID' && fill.color) {
|
|
148
|
+
const fillOpacity = fill.opacity ?? 1;
|
|
149
|
+
// Skip completely invisible fills (opacity: 0)
|
|
150
|
+
if (fillOpacity > 0) {
|
|
151
|
+
styles.backgroundColor = (0, ASTFactory_1.createColor)(Math.round(fill.color.r * 255), Math.round(fill.color.g * 255), Math.round(fill.color.b * 255), fillOpacity);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if ('cornerRadius' in figmaNode && typeof figmaNode.cornerRadius === 'number') {
|
|
156
|
+
styles.borderRadius = figmaNode.cornerRadius;
|
|
157
|
+
}
|
|
158
|
+
if ('opacity' in figmaNode && typeof figmaNode.opacity === 'number') {
|
|
159
|
+
styles.opacity = figmaNode.opacity;
|
|
160
|
+
}
|
|
161
|
+
if (figmaNode.type === 'TEXT' && 'style' in figmaNode && figmaNode.style) {
|
|
162
|
+
const textStyle = figmaNode.style;
|
|
163
|
+
styles.typography = {
|
|
164
|
+
fontFamily: textStyle.fontFamily ?? 'sans-serif',
|
|
165
|
+
fontSize: textStyle.fontSize ?? 16,
|
|
166
|
+
fontWeight: textStyle.fontWeight ?? 400,
|
|
167
|
+
lineHeight: textStyle.lineHeightPx ?? textStyle.fontSize ?? 16,
|
|
168
|
+
letterSpacing: textStyle.letterSpacing,
|
|
169
|
+
textAlign: textStyle.textAlignHorizontal?.toLowerCase(),
|
|
170
|
+
textDecoration: textStyle.textDecoration?.toLowerCase(),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
return styles;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.ASTParser = ASTParser;
|
|
177
|
+
//# sourceMappingURL=ASTParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ASTParser.js","sourceRoot":"","sources":["../../src/transformation/ASTParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ASTNode } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Transformer interface for AST transformations
|
|
4
|
+
*/
|
|
5
|
+
export interface Transformer {
|
|
6
|
+
name: string;
|
|
7
|
+
transform(node: ASTNode): ASTNode | Promise<ASTNode>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Transformation pipeline for applying multiple transformers
|
|
11
|
+
*/
|
|
12
|
+
export declare class TransformationPipeline {
|
|
13
|
+
private transformers;
|
|
14
|
+
/**
|
|
15
|
+
* Register a transformer
|
|
16
|
+
*/
|
|
17
|
+
register(transformer: Transformer): this;
|
|
18
|
+
/**
|
|
19
|
+
* Execute all transformers in sequence
|
|
20
|
+
*/
|
|
21
|
+
execute(node: ASTNode): Promise<ASTNode>;
|
|
22
|
+
/**
|
|
23
|
+
* Get all registered transformers
|
|
24
|
+
*/
|
|
25
|
+
getTransformers(): Transformer[];
|
|
26
|
+
/**
|
|
27
|
+
* Clear all transformers
|
|
28
|
+
*/
|
|
29
|
+
clear(): void;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=TransformationPipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransformationPipeline.d.ts","sourceRoot":"","sources":["../../src/transformation/TransformationPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,YAAY,CAAqB;IAEzC;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAKxC;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ9C;;OAEG;IACH,eAAe,IAAI,WAAW,EAAE;IAIhC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransformationPipeline = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Transformation pipeline for applying multiple transformers
|
|
6
|
+
*/
|
|
7
|
+
class TransformationPipeline {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.transformers = [];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Register a transformer
|
|
13
|
+
*/
|
|
14
|
+
register(transformer) {
|
|
15
|
+
this.transformers.push(transformer);
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Execute all transformers in sequence
|
|
20
|
+
*/
|
|
21
|
+
async execute(node) {
|
|
22
|
+
let currentNode = node;
|
|
23
|
+
for (const transformer of this.transformers) {
|
|
24
|
+
currentNode = await transformer.transform(currentNode);
|
|
25
|
+
}
|
|
26
|
+
return currentNode;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get all registered transformers
|
|
30
|
+
*/
|
|
31
|
+
getTransformers() {
|
|
32
|
+
return [...this.transformers];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Clear all transformers
|
|
36
|
+
*/
|
|
37
|
+
clear() {
|
|
38
|
+
this.transformers = [];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.TransformationPipeline = TransformationPipeline;
|
|
42
|
+
//# sourceMappingURL=TransformationPipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransformationPipeline.js","sourceRoot":"","sources":["../../src/transformation/TransformationPipeline.ts"],"names":[],"mappings":";;;AAUA;;GAEG;AACH,MAAa,sBAAsB;IAAnC;QACU,iBAAY,GAAkB,EAAE,CAAC;IAkC3C,CAAC;IAhCC;;OAEG;IACH,QAAQ,CAAC,WAAwB;QAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,IAAa;QACzB,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,WAAW,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IACzB,CAAC;CACF;AAnCD,wDAmCC"}
|