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.
Files changed (166) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/LICENSE +21 -0
  3. package/QUICKSTART.md +198 -0
  4. package/README.md +149 -0
  5. package/dist/FigmaToCodeAgent.d.ts +55 -0
  6. package/dist/FigmaToCodeAgent.d.ts.map +1 -0
  7. package/dist/FigmaToCodeAgent.js +251 -0
  8. package/dist/FigmaToCodeAgent.js.map +1 -0
  9. package/dist/assets/index.d.ts +6 -0
  10. package/dist/assets/index.d.ts.map +1 -0
  11. package/dist/assets/index.js +7 -0
  12. package/dist/assets/index.js.map +1 -0
  13. package/dist/cli.d.ts +3 -0
  14. package/dist/cli.d.ts.map +1 -0
  15. package/dist/cli.js +261 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/extraction/FigmaAPIClient.d.ts +53 -0
  18. package/dist/extraction/FigmaAPIClient.d.ts.map +1 -0
  19. package/dist/extraction/FigmaAPIClient.js +275 -0
  20. package/dist/extraction/FigmaAPIClient.js.map +1 -0
  21. package/dist/extraction/FigmaCache.d.ts +28 -0
  22. package/dist/extraction/FigmaCache.d.ts.map +1 -0
  23. package/dist/extraction/FigmaCache.js +120 -0
  24. package/dist/extraction/FigmaCache.js.map +1 -0
  25. package/dist/extraction/MCPClient.d.ts +75 -0
  26. package/dist/extraction/MCPClient.d.ts.map +1 -0
  27. package/dist/extraction/MCPClient.js +254 -0
  28. package/dist/extraction/MCPClient.js.map +1 -0
  29. package/dist/extraction/index.d.ts +9 -0
  30. package/dist/extraction/index.d.ts.map +1 -0
  31. package/dist/extraction/index.js +27 -0
  32. package/dist/extraction/index.js.map +1 -0
  33. package/dist/extraction/types.d.ts +122 -0
  34. package/dist/extraction/types.d.ts.map +1 -0
  35. package/dist/extraction/types.js +6 -0
  36. package/dist/extraction/types.js.map +1 -0
  37. package/dist/generation/AICodeOptimizer.d.ts +10 -0
  38. package/dist/generation/AICodeOptimizer.d.ts.map +1 -0
  39. package/dist/generation/AICodeOptimizer.js +33 -0
  40. package/dist/generation/AICodeOptimizer.js.map +1 -0
  41. package/dist/generation/ReactGenerator.d.ts +27 -0
  42. package/dist/generation/ReactGenerator.d.ts.map +1 -0
  43. package/dist/generation/ReactGenerator.js +423 -0
  44. package/dist/generation/ReactGenerator.js.map +1 -0
  45. package/dist/generation/VueGenerator.d.ts +23 -0
  46. package/dist/generation/VueGenerator.d.ts.map +1 -0
  47. package/dist/generation/VueGenerator.js +337 -0
  48. package/dist/generation/VueGenerator.js.map +1 -0
  49. package/dist/generation/index.d.ts +6 -0
  50. package/dist/generation/index.d.ts.map +1 -0
  51. package/dist/generation/index.js +7 -0
  52. package/dist/generation/index.js.map +1 -0
  53. package/dist/generation/types.d.ts +24 -0
  54. package/dist/generation/types.d.ts.map +1 -0
  55. package/dist/generation/types.js +3 -0
  56. package/dist/generation/types.js.map +1 -0
  57. package/dist/index.d.ts +10 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +17 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/llm/BedrockProvider.d.ts +8 -0
  62. package/dist/llm/BedrockProvider.d.ts.map +1 -0
  63. package/dist/llm/BedrockProvider.js +34 -0
  64. package/dist/llm/BedrockProvider.js.map +1 -0
  65. package/dist/llm/LLMFactory.d.ts +5 -0
  66. package/dist/llm/LLMFactory.d.ts.map +1 -0
  67. package/dist/llm/LLMFactory.js +21 -0
  68. package/dist/llm/LLMFactory.js.map +1 -0
  69. package/dist/llm/OpenAIProvider.d.ts +7 -0
  70. package/dist/llm/OpenAIProvider.d.ts.map +1 -0
  71. package/dist/llm/OpenAIProvider.js +34 -0
  72. package/dist/llm/OpenAIProvider.js.map +1 -0
  73. package/dist/llm/index.d.ts +5 -0
  74. package/dist/llm/index.d.ts.map +1 -0
  75. package/dist/llm/index.js +21 -0
  76. package/dist/llm/index.js.map +1 -0
  77. package/dist/llm/types.d.ts +23 -0
  78. package/dist/llm/types.d.ts.map +1 -0
  79. package/dist/llm/types.js +3 -0
  80. package/dist/llm/types.js.map +1 -0
  81. package/dist/transformation/ASTFactory.d.ts +92 -0
  82. package/dist/transformation/ASTFactory.d.ts.map +1 -0
  83. package/dist/transformation/ASTFactory.js +240 -0
  84. package/dist/transformation/ASTFactory.js.map +1 -0
  85. package/dist/transformation/ASTParser.d.ts +13 -0
  86. package/dist/transformation/ASTParser.d.ts.map +1 -0
  87. package/dist/transformation/ASTParser.js +177 -0
  88. package/dist/transformation/ASTParser.js.map +1 -0
  89. package/dist/transformation/TransformationPipeline.d.ts +31 -0
  90. package/dist/transformation/TransformationPipeline.d.ts.map +1 -0
  91. package/dist/transformation/TransformationPipeline.js +42 -0
  92. package/dist/transformation/TransformationPipeline.js.map +1 -0
  93. package/dist/transformation/index.d.ts +7 -0
  94. package/dist/transformation/index.d.ts.map +1 -0
  95. package/dist/transformation/index.js +25 -0
  96. package/dist/transformation/index.js.map +1 -0
  97. package/dist/transformation/transformers/AIComponentSplitter.d.ts +14 -0
  98. package/dist/transformation/transformers/AIComponentSplitter.d.ts.map +1 -0
  99. package/dist/transformation/transformers/AIComponentSplitter.js +71 -0
  100. package/dist/transformation/transformers/AIComponentSplitter.js.map +1 -0
  101. package/dist/transformation/transformers/AILayoutAnalyzer.d.ts +18 -0
  102. package/dist/transformation/transformers/AILayoutAnalyzer.d.ts.map +1 -0
  103. package/dist/transformation/transformers/AILayoutAnalyzer.js +125 -0
  104. package/dist/transformation/transformers/AILayoutAnalyzer.js.map +1 -0
  105. package/dist/transformation/transformers/AISemanticNamer.d.ts +12 -0
  106. package/dist/transformation/transformers/AISemanticNamer.d.ts.map +1 -0
  107. package/dist/transformation/transformers/AISemanticNamer.js +50 -0
  108. package/dist/transformation/transformers/AISemanticNamer.js.map +1 -0
  109. package/dist/transformation/transformers/ComponentExtractor.d.ts +16 -0
  110. package/dist/transformation/transformers/ComponentExtractor.d.ts.map +1 -0
  111. package/dist/transformation/transformers/ComponentExtractor.js +91 -0
  112. package/dist/transformation/transformers/ComponentExtractor.js.map +1 -0
  113. package/dist/transformation/transformers/FigmaLayerPreserver.d.ts +14 -0
  114. package/dist/transformation/transformers/FigmaLayerPreserver.d.ts.map +1 -0
  115. package/dist/transformation/transformers/FigmaLayerPreserver.js +48 -0
  116. package/dist/transformation/transformers/FigmaLayerPreserver.js.map +1 -0
  117. package/dist/transformation/transformers/FigmaStructureOptimizer.d.ts +16 -0
  118. package/dist/transformation/transformers/FigmaStructureOptimizer.d.ts.map +1 -0
  119. package/dist/transformation/transformers/FigmaStructureOptimizer.js +65 -0
  120. package/dist/transformation/transformers/FigmaStructureOptimizer.js.map +1 -0
  121. package/dist/transformation/transformers/FlattenTransformer.d.ts +15 -0
  122. package/dist/transformation/transformers/FlattenTransformer.d.ts.map +1 -0
  123. package/dist/transformation/transformers/FlattenTransformer.js +69 -0
  124. package/dist/transformation/transformers/FlattenTransformer.js.map +1 -0
  125. package/dist/transformation/transformers/LayoutOptimizer.d.ts +15 -0
  126. package/dist/transformation/transformers/LayoutOptimizer.d.ts.map +1 -0
  127. package/dist/transformation/transformers/LayoutOptimizer.js +63 -0
  128. package/dist/transformation/transformers/LayoutOptimizer.js.map +1 -0
  129. package/dist/transformation/transformers/SemanticNamer.d.ts +14 -0
  130. package/dist/transformation/transformers/SemanticNamer.d.ts.map +1 -0
  131. package/dist/transformation/transformers/SemanticNamer.js +65 -0
  132. package/dist/transformation/transformers/SemanticNamer.js.map +1 -0
  133. package/dist/transformation/transformers/SimplifyTransformer.d.ts +23 -0
  134. package/dist/transformation/transformers/SimplifyTransformer.d.ts.map +1 -0
  135. package/dist/transformation/transformers/SimplifyTransformer.js +138 -0
  136. package/dist/transformation/transformers/SimplifyTransformer.js.map +1 -0
  137. package/dist/transformation/types.d.ts +129 -0
  138. package/dist/transformation/types.d.ts.map +1 -0
  139. package/dist/transformation/types.js +7 -0
  140. package/dist/transformation/types.js.map +1 -0
  141. package/dist/validation/index.d.ts +6 -0
  142. package/dist/validation/index.d.ts.map +1 -0
  143. package/dist/validation/index.js +7 -0
  144. package/dist/validation/index.js.map +1 -0
  145. package/package.json +81 -0
  146. package/test-app/test-react/index.html +19 -0
  147. package/test-app/test-react/package.json +16 -0
  148. package/test-app/test-react/src/Component.jsx +146 -0
  149. package/test-app/test-react/src/Component.module.css +572 -0
  150. package/test-app/test-react/src/Homepage.jsx +53 -0
  151. package/test-app/test-react/src/Homepage.module.css +218 -0
  152. package/test-app/test-react/src/ProductPage.jsx +74 -0
  153. package/test-app/test-react/src/ProductPage.module.css +357 -0
  154. package/test-app/test-react/src/ShoppingCart.jsx +151 -0
  155. package/test-app/test-react/src/ShoppingCart.module.css +739 -0
  156. package/test-app/test-react/src/main.jsx +9 -0
  157. package/test-app/test-react/vite.config.js +6 -0
  158. package/test-app/test-vue/index.html +19 -0
  159. package/test-app/test-vue/package.json +15 -0
  160. package/test-app/test-vue/src/App.vue +16 -0
  161. package/test-app/test-vue/src/Component.vue +723 -0
  162. package/test-app/test-vue/src/Homepage.vue +271 -0
  163. package/test-app/test-vue/src/ProductPage.vue +431 -0
  164. package/test-app/test-vue/src/ShoppingCart.vue +890 -0
  165. package/test-app/test-vue/src/main.js +4 -0
  166. package/test-app/test-vue/vite.config.js +6 -0
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ /**
3
+ * MCP (Model Context Protocol) Client
4
+ * Handles direct communication with Figma Desktop via WebSocket
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.MCPClient = void 0;
11
+ const ws_1 = __importDefault(require("ws"));
12
+ class MCPClient {
13
+ constructor(wsUrl = 'ws://localhost:9001') {
14
+ this.wsUrl = wsUrl;
15
+ this.ws = null;
16
+ this.connected = false;
17
+ this.messageId = 0;
18
+ this.pendingRequests = new Map();
19
+ this.changeCallbacks = [];
20
+ this.reconnectAttempts = 0;
21
+ this.maxReconnectAttempts = 5;
22
+ this.reconnectDelay = 2000; // milliseconds
23
+ if (!wsUrl) {
24
+ throw new Error('WebSocket URL is required');
25
+ }
26
+ }
27
+ /**
28
+ * Connect to Figma Desktop
29
+ * @returns Connection status
30
+ */
31
+ async connect() {
32
+ if (this.connected && this.ws?.readyState === ws_1.default.OPEN) {
33
+ return {
34
+ connected: true,
35
+ message: 'Already connected',
36
+ };
37
+ }
38
+ return new Promise((resolve, reject) => {
39
+ try {
40
+ this.ws = new ws_1.default(this.wsUrl);
41
+ const timeout = setTimeout(() => {
42
+ if (!this.connected) {
43
+ this.ws?.close();
44
+ reject(new Error('Connection timeout'));
45
+ }
46
+ }, 10000); // 10 second timeout
47
+ this.ws.on('open', () => {
48
+ clearTimeout(timeout);
49
+ this.connected = true;
50
+ this.reconnectAttempts = 0;
51
+ resolve({
52
+ connected: true,
53
+ message: 'Successfully connected to Figma Desktop',
54
+ });
55
+ });
56
+ this.ws.on('message', (data) => {
57
+ this.handleMessage(data);
58
+ });
59
+ this.ws.on('error', (error) => {
60
+ clearTimeout(timeout);
61
+ this.connected = false;
62
+ reject(new Error(`WebSocket error: ${error.message}`));
63
+ });
64
+ this.ws.on('close', () => {
65
+ this.connected = false;
66
+ this.handleDisconnect();
67
+ });
68
+ }
69
+ catch (error) {
70
+ reject(new Error(`Failed to connect: ${error.message}`));
71
+ }
72
+ });
73
+ }
74
+ /**
75
+ * Get current open file data
76
+ * @returns Design file data
77
+ */
78
+ async getCurrentFile() {
79
+ if (!this.connected || !this.ws) {
80
+ throw new Error('Not connected to Figma Desktop. Please call connect() first.');
81
+ }
82
+ try {
83
+ const response = await this.sendRequest('figma.getCurrentFile', {});
84
+ if (!response || !response.document) {
85
+ throw new Error('Invalid response: missing document data');
86
+ }
87
+ return response;
88
+ }
89
+ catch (error) {
90
+ throw new Error(`Failed to get current file: ${error.message}`);
91
+ }
92
+ }
93
+ /**
94
+ * Watch for design file changes
95
+ * @param callback - Change callback function
96
+ */
97
+ watchChanges(callback) {
98
+ if (!callback || typeof callback !== 'function') {
99
+ throw new Error('Callback function is required');
100
+ }
101
+ if (!this.connected || !this.ws) {
102
+ throw new Error('Not connected to Figma Desktop. Please call connect() first.');
103
+ }
104
+ this.changeCallbacks.push(callback);
105
+ // Subscribe to changes if this is the first callback
106
+ if (this.changeCallbacks.length === 1) {
107
+ this.sendNotification('figma.watchChanges', { enabled: true }).catch((error) => {
108
+ console.error('Failed to subscribe to changes:', error);
109
+ });
110
+ }
111
+ }
112
+ /**
113
+ * Disconnect from Figma Desktop
114
+ */
115
+ disconnect() {
116
+ if (this.ws) {
117
+ // Unsubscribe from changes
118
+ if (this.changeCallbacks.length > 0) {
119
+ this.sendNotification('figma.watchChanges', { enabled: false }).catch((error) => {
120
+ console.error('Failed to unsubscribe from changes:', error);
121
+ });
122
+ }
123
+ this.ws.close();
124
+ this.ws = null;
125
+ }
126
+ this.connected = false;
127
+ this.changeCallbacks = [];
128
+ this.pendingRequests.clear();
129
+ }
130
+ /**
131
+ * Send a request and wait for response
132
+ */
133
+ async sendRequest(method, params) {
134
+ if (!this.ws || this.ws.readyState !== ws_1.default.OPEN) {
135
+ throw new Error('WebSocket is not open');
136
+ }
137
+ const id = this.generateMessageId();
138
+ const message = {
139
+ id,
140
+ type: 'request',
141
+ method,
142
+ params,
143
+ };
144
+ return new Promise((resolve, reject) => {
145
+ this.pendingRequests.set(id, { resolve, reject });
146
+ try {
147
+ this.ws.send(JSON.stringify(message));
148
+ // Set timeout for request
149
+ setTimeout(() => {
150
+ if (this.pendingRequests.has(id)) {
151
+ this.pendingRequests.delete(id);
152
+ reject(new Error('Request timeout'));
153
+ }
154
+ }, 30000); // 30 second timeout
155
+ }
156
+ catch (error) {
157
+ this.pendingRequests.delete(id);
158
+ reject(error);
159
+ }
160
+ });
161
+ }
162
+ /**
163
+ * Send a notification (no response expected)
164
+ */
165
+ async sendNotification(method, params) {
166
+ if (!this.ws || this.ws.readyState !== ws_1.default.OPEN) {
167
+ throw new Error('WebSocket is not open');
168
+ }
169
+ const message = {
170
+ id: this.generateMessageId(),
171
+ type: 'notification',
172
+ method,
173
+ params,
174
+ };
175
+ this.ws.send(JSON.stringify(message));
176
+ }
177
+ /**
178
+ * Handle incoming WebSocket messages
179
+ */
180
+ handleMessage(data) {
181
+ try {
182
+ const message = JSON.parse(data.toString());
183
+ if (message.type === 'response') {
184
+ // Handle response to a request
185
+ const pending = this.pendingRequests.get(message.id);
186
+ if (pending) {
187
+ this.pendingRequests.delete(message.id);
188
+ if (message.error) {
189
+ pending.reject(new Error(message.error.message));
190
+ }
191
+ else {
192
+ pending.resolve(message.result);
193
+ }
194
+ }
195
+ }
196
+ else if (message.type === 'notification') {
197
+ // Handle notifications (e.g., design changes)
198
+ if (message.method === 'figma.designChanged' && message.params) {
199
+ this.notifyChangeCallbacks(message.params);
200
+ }
201
+ }
202
+ }
203
+ catch (error) {
204
+ console.error('Failed to parse message:', error);
205
+ }
206
+ }
207
+ /**
208
+ * Handle disconnection and attempt reconnection
209
+ */
210
+ handleDisconnect() {
211
+ // Reject all pending requests
212
+ this.pendingRequests.forEach((pending) => {
213
+ pending.reject(new Error('Connection closed'));
214
+ });
215
+ this.pendingRequests.clear();
216
+ // Attempt reconnection if not manually disconnected
217
+ if (this.reconnectAttempts < this.maxReconnectAttempts) {
218
+ this.reconnectAttempts++;
219
+ setTimeout(() => {
220
+ console.log(`Attempting to reconnect (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`);
221
+ this.connect().catch((error) => {
222
+ console.error('Reconnection failed:', error);
223
+ });
224
+ }, this.reconnectDelay * this.reconnectAttempts);
225
+ }
226
+ }
227
+ /**
228
+ * Notify all change callbacks
229
+ */
230
+ notifyChangeCallbacks(changes) {
231
+ this.changeCallbacks.forEach((callback) => {
232
+ try {
233
+ callback(changes);
234
+ }
235
+ catch (error) {
236
+ console.error('Error in change callback:', error);
237
+ }
238
+ });
239
+ }
240
+ /**
241
+ * Generate unique message ID
242
+ */
243
+ generateMessageId() {
244
+ return `msg_${++this.messageId}_${Date.now()}`;
245
+ }
246
+ /**
247
+ * Check if currently connected
248
+ */
249
+ isConnected() {
250
+ return this.connected && this.ws?.readyState === ws_1.default.OPEN;
251
+ }
252
+ }
253
+ exports.MCPClient = MCPClient;
254
+ //# sourceMappingURL=MCPClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPClient.js","sourceRoot":"","sources":["../../src/extraction/MCPClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Data Extraction Layer
3
+ * Handles Figma API and MCP protocol communication
4
+ */
5
+ export { FigmaAPIClient } from './FigmaAPIClient';
6
+ export { MCPClient } from './MCPClient';
7
+ export type { ConnectionStatus, DesignChanges } from './MCPClient';
8
+ export * from './types';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extraction/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACnE,cAAc,SAAS,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ /**
3
+ * Data Extraction Layer
4
+ * Handles Figma API and MCP protocol communication
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.MCPClient = exports.FigmaAPIClient = void 0;
22
+ var FigmaAPIClient_1 = require("./FigmaAPIClient");
23
+ Object.defineProperty(exports, "FigmaAPIClient", { enumerable: true, get: function () { return FigmaAPIClient_1.FigmaAPIClient; } });
24
+ var MCPClient_1 = require("./MCPClient");
25
+ Object.defineProperty(exports, "MCPClient", { enumerable: true, get: function () { return MCPClient_1.MCPClient; } });
26
+ __exportStar(require("./types"), exports);
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extraction/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAElB,0CAAwB"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Figma API Types and Interfaces
3
+ */
4
+ export interface GetFileOptions {
5
+ version?: string;
6
+ ids?: string[];
7
+ depth?: number;
8
+ geometry?: 'paths' | 'bounds';
9
+ plugin_data?: string;
10
+ branch_data?: boolean;
11
+ }
12
+ export type ImageFormat = 'png' | 'jpg' | 'svg' | 'pdf';
13
+ export interface ImageMap {
14
+ err?: string;
15
+ images: Record<string, string>;
16
+ }
17
+ export interface FigmaFile {
18
+ name: string;
19
+ lastModified: string;
20
+ version: string;
21
+ document: DocumentNode;
22
+ components: Record<string, Component>;
23
+ styles: Record<string, Style>;
24
+ }
25
+ export type NodeType = 'DOCUMENT' | 'CANVAS' | 'FRAME' | 'GROUP' | 'VECTOR' | 'TEXT' | 'RECTANGLE' | 'ELLIPSE' | 'COMPONENT' | 'COMPONENT_SET' | 'INSTANCE' | 'POLYGON' | 'STAR' | 'LINE';
26
+ export interface DocumentNode {
27
+ id: string;
28
+ name: string;
29
+ type: NodeType;
30
+ children: Node[];
31
+ }
32
+ export interface Node {
33
+ id: string;
34
+ name: string;
35
+ type: NodeType;
36
+ visible?: boolean;
37
+ locked?: boolean;
38
+ children?: Node[];
39
+ absoluteBoundingBox?: Rectangle;
40
+ constraints?: LayoutConstraint;
41
+ layoutMode?: 'NONE' | 'HORIZONTAL' | 'VERTICAL';
42
+ layoutAlign?: LayoutAlign;
43
+ layoutGrow?: number;
44
+ primaryAxisAlignItems?: 'MIN' | 'CENTER' | 'MAX' | 'SPACE_BETWEEN';
45
+ counterAxisAlignItems?: 'MIN' | 'CENTER' | 'MAX';
46
+ itemSpacing?: number;
47
+ paddingTop?: number;
48
+ paddingRight?: number;
49
+ paddingBottom?: number;
50
+ paddingLeft?: number;
51
+ layoutGrids?: LayoutGrid[];
52
+ fills?: Paint[];
53
+ strokes?: Paint[];
54
+ effects?: Effect[];
55
+ cornerRadius?: number;
56
+ opacity?: number;
57
+ characters?: string;
58
+ style?: TypeStyle;
59
+ componentId?: string;
60
+ componentProperties?: Record<string, any>;
61
+ }
62
+ export interface LayoutGrid {
63
+ pattern: 'COLUMNS' | 'ROWS' | 'GRID';
64
+ sectionSize?: number;
65
+ visible?: boolean;
66
+ color?: Color;
67
+ }
68
+ export interface Rectangle {
69
+ x: number;
70
+ y: number;
71
+ width: number;
72
+ height: number;
73
+ }
74
+ export interface LayoutConstraint {
75
+ vertical: 'TOP' | 'BOTTOM' | 'CENTER' | 'TOP_BOTTOM' | 'SCALE';
76
+ horizontal: 'LEFT' | 'RIGHT' | 'CENTER' | 'LEFT_RIGHT' | 'SCALE';
77
+ }
78
+ export type LayoutAlign = 'MIN' | 'CENTER' | 'MAX' | 'STRETCH' | 'INHERIT';
79
+ export interface Paint {
80
+ type: 'SOLID' | 'GRADIENT_LINEAR' | 'GRADIENT_RADIAL' | 'IMAGE';
81
+ visible?: boolean;
82
+ opacity?: number;
83
+ color?: Color;
84
+ imageRef?: string;
85
+ }
86
+ export interface Color {
87
+ r: number;
88
+ g: number;
89
+ b: number;
90
+ a?: number;
91
+ }
92
+ export interface Effect {
93
+ type: 'DROP_SHADOW' | 'INNER_SHADOW' | 'LAYER_BLUR' | 'BACKGROUND_BLUR';
94
+ visible?: boolean;
95
+ radius: number;
96
+ color?: Color;
97
+ offset?: {
98
+ x: number;
99
+ y: number;
100
+ };
101
+ spread?: number;
102
+ }
103
+ export interface TypeStyle {
104
+ fontFamily: string;
105
+ fontSize: number;
106
+ fontWeight: number;
107
+ lineHeightPx?: number;
108
+ letterSpacing?: number;
109
+ textAlignHorizontal?: 'LEFT' | 'CENTER' | 'RIGHT' | 'JUSTIFIED';
110
+ textAlignVertical?: 'TOP' | 'CENTER' | 'BOTTOM';
111
+ }
112
+ export interface Component {
113
+ key: string;
114
+ name: string;
115
+ description: string;
116
+ }
117
+ export interface Style {
118
+ key: string;
119
+ name: string;
120
+ styleType: 'FILL' | 'TEXT' | 'EFFECT' | 'GRID';
121
+ }
122
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/extraction/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Figma API Types and Interfaces
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/extraction/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,10 @@
1
+ import type { GeneratedFile } from '../generation/types';
2
+ import type { LLMProvider } from '../llm/types';
3
+ export declare class AICodeOptimizer {
4
+ private llm;
5
+ constructor(llm: LLMProvider);
6
+ optimize(files: GeneratedFile[]): Promise<GeneratedFile[]>;
7
+ private optimizeCode;
8
+ private extractCode;
9
+ }
10
+ //# sourceMappingURL=AICodeOptimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AICodeOptimizer.d.ts","sourceRoot":"","sources":["../../src/generation/AICodeOptimizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,qBAAa,eAAe;IACd,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,WAAW;IAE9B,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YASlD,YAAY;IAgB1B,OAAO,CAAC,WAAW;CAIpB"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AICodeOptimizer = void 0;
4
+ class AICodeOptimizer {
5
+ constructor(llm) {
6
+ this.llm = llm;
7
+ }
8
+ async optimize(files) {
9
+ return Promise.all(files.map(async (file) => ({
10
+ ...file,
11
+ content: await this.optimizeCode(file.content, file.path),
12
+ })));
13
+ }
14
+ async optimizeCode(code, filePath) {
15
+ const response = await this.llm.chat([
16
+ {
17
+ role: 'system',
18
+ content: 'You are a code optimization expert. Improve code quality: remove redundancy, improve naming, add accessibility, optimize performance. Return ONLY the optimized code, no explanations.',
19
+ },
20
+ {
21
+ role: 'user',
22
+ content: `Optimize this ${filePath}:\n\`\`\`\n${code}\n\`\`\``,
23
+ },
24
+ ]);
25
+ return this.extractCode(response.content);
26
+ }
27
+ extractCode(response) {
28
+ const match = response.match(/```(?:tsx?|vue)?\n([\s\S]*?)\n```/);
29
+ return match ? match[1] : response;
30
+ }
31
+ }
32
+ exports.AICodeOptimizer = AICodeOptimizer;
33
+ //# sourceMappingURL=AICodeOptimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AICodeOptimizer.js","sourceRoot":"","sources":["../../src/generation/AICodeOptimizer.ts"],"names":[],"mappings":";;;AAGA,MAAa,eAAe;IAC1B,YAAoB,GAAgB;QAAhB,QAAG,GAAH,GAAG,CAAa;IAAG,CAAC;IAExC,KAAK,CAAC,QAAQ,CAAC,KAAsB;QACnC,OAAO,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACzB,GAAG,IAAI;YACP,OAAO,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;SAC1D,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,QAAgB;QACvD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YACnC;gBACE,IAAI,EAAE,QAAQ;gBACd,OAAO,EACL,wLAAwL;aAC3L;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,iBAAiB,QAAQ,cAAc,IAAI,UAAU;aAC/D;SACF,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAEO,WAAW,CAAC,QAAgB;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAClE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrC,CAAC;CACF;AAhCD,0CAgCC"}
@@ -0,0 +1,27 @@
1
+ import type { ASTNode } from '../transformation/types';
2
+ import type { CodeGenerator, GeneratorConfig, GeneratedFile } from './types';
3
+ export declare class ReactGenerator implements CodeGenerator {
4
+ private usedClassNames;
5
+ private nodeClassMap;
6
+ private imageImportMap;
7
+ private buildClassNameMap;
8
+ private buildImageImportMap;
9
+ generate(node: ASTNode, config: GeneratorConfig): GeneratedFile[];
10
+ private generateComponent;
11
+ private generateImports;
12
+ private findNodeById;
13
+ private generatePropsInterface;
14
+ private generateComponentBody;
15
+ private generateJSX;
16
+ private getHTMLTag;
17
+ private generateClassName;
18
+ private sanitizeCSSName;
19
+ private generateTailwindClasses;
20
+ private generateInlineStyle;
21
+ private toComponentName;
22
+ private toFileName;
23
+ private indent;
24
+ private generateCSSModule;
25
+ private collectStyles;
26
+ }
27
+ //# sourceMappingURL=ReactGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReactGenerator.d.ts","sourceRoot":"","sources":["../../src/generation/ReactGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7E,qBAAa,cAAe,YAAW,aAAa;IAClD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,cAAc,CAA6B;IAEnD,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,mBAAmB;IAiB3B,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,GAAG,aAAa,EAAE;IA6BjE,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,qBAAqB;IAkC7B,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,uBAAuB;IAyB/B,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,aAAa;CA8ItB"}