@mp3wizard/figma-console-mcp 1.14.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 (201) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +816 -0
  3. package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts +14 -0
  4. package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts.map +1 -0
  5. package/dist/apps/design-system-dashboard/scoring/accessibility.js +278 -0
  6. package/dist/apps/design-system-dashboard/scoring/accessibility.js.map +1 -0
  7. package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts +29 -0
  8. package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts.map +1 -0
  9. package/dist/apps/design-system-dashboard/scoring/component-metadata.js +358 -0
  10. package/dist/apps/design-system-dashboard/scoring/component-metadata.js.map +1 -0
  11. package/dist/apps/design-system-dashboard/scoring/consistency.d.ts +14 -0
  12. package/dist/apps/design-system-dashboard/scoring/consistency.d.ts.map +1 -0
  13. package/dist/apps/design-system-dashboard/scoring/consistency.js +342 -0
  14. package/dist/apps/design-system-dashboard/scoring/consistency.js.map +1 -0
  15. package/dist/apps/design-system-dashboard/scoring/coverage.d.ts +14 -0
  16. package/dist/apps/design-system-dashboard/scoring/coverage.d.ts.map +1 -0
  17. package/dist/apps/design-system-dashboard/scoring/coverage.js +231 -0
  18. package/dist/apps/design-system-dashboard/scoring/coverage.js.map +1 -0
  19. package/dist/apps/design-system-dashboard/scoring/engine.d.ts +27 -0
  20. package/dist/apps/design-system-dashboard/scoring/engine.d.ts.map +1 -0
  21. package/dist/apps/design-system-dashboard/scoring/engine.js +93 -0
  22. package/dist/apps/design-system-dashboard/scoring/engine.js.map +1 -0
  23. package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts +14 -0
  24. package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts.map +1 -0
  25. package/dist/apps/design-system-dashboard/scoring/naming-semantics.js +309 -0
  26. package/dist/apps/design-system-dashboard/scoring/naming-semantics.js.map +1 -0
  27. package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts +14 -0
  28. package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts.map +1 -0
  29. package/dist/apps/design-system-dashboard/scoring/token-architecture.js +350 -0
  30. package/dist/apps/design-system-dashboard/scoring/token-architecture.js.map +1 -0
  31. package/dist/apps/design-system-dashboard/scoring/types.d.ts +89 -0
  32. package/dist/apps/design-system-dashboard/scoring/types.d.ts.map +1 -0
  33. package/dist/apps/design-system-dashboard/scoring/types.js +41 -0
  34. package/dist/apps/design-system-dashboard/scoring/types.js.map +1 -0
  35. package/dist/apps/design-system-dashboard/server.d.ts +24 -0
  36. package/dist/apps/design-system-dashboard/server.d.ts.map +1 -0
  37. package/dist/apps/design-system-dashboard/server.js +160 -0
  38. package/dist/apps/design-system-dashboard/server.js.map +1 -0
  39. package/dist/apps/token-browser/server.d.ts +26 -0
  40. package/dist/apps/token-browser/server.d.ts.map +1 -0
  41. package/dist/apps/token-browser/server.js +137 -0
  42. package/dist/apps/token-browser/server.js.map +1 -0
  43. package/dist/browser/base.d.ts +58 -0
  44. package/dist/browser/base.d.ts.map +1 -0
  45. package/dist/browser/base.js +6 -0
  46. package/dist/browser/base.js.map +1 -0
  47. package/dist/browser/local.d.ts +87 -0
  48. package/dist/browser/local.d.ts.map +1 -0
  49. package/dist/browser/local.js +318 -0
  50. package/dist/browser/local.js.map +1 -0
  51. package/dist/cloudflare/apps/design-system-dashboard/scoring/accessibility.js +277 -0
  52. package/dist/cloudflare/apps/design-system-dashboard/scoring/component-metadata.js +357 -0
  53. package/dist/cloudflare/apps/design-system-dashboard/scoring/consistency.js +341 -0
  54. package/dist/cloudflare/apps/design-system-dashboard/scoring/coverage.js +230 -0
  55. package/dist/cloudflare/apps/design-system-dashboard/scoring/engine.js +92 -0
  56. package/dist/cloudflare/apps/design-system-dashboard/scoring/naming-semantics.js +308 -0
  57. package/dist/cloudflare/apps/design-system-dashboard/scoring/token-architecture.js +349 -0
  58. package/dist/cloudflare/apps/design-system-dashboard/scoring/types.js +40 -0
  59. package/dist/cloudflare/apps/design-system-dashboard/server.js +159 -0
  60. package/dist/cloudflare/apps/token-browser/server.js +136 -0
  61. package/dist/cloudflare/browser/base.js +5 -0
  62. package/dist/cloudflare/browser/cloudflare.js +156 -0
  63. package/dist/cloudflare/browser-manager.js +157 -0
  64. package/dist/cloudflare/core/cloud-websocket-connector.js +267 -0
  65. package/dist/cloudflare/core/cloud-websocket-relay.js +199 -0
  66. package/dist/cloudflare/core/comment-tools.js +292 -0
  67. package/dist/cloudflare/core/config.js +161 -0
  68. package/dist/cloudflare/core/console-monitor.js +427 -0
  69. package/dist/cloudflare/core/design-code-tools.js +2504 -0
  70. package/dist/cloudflare/core/design-system-manifest.js +260 -0
  71. package/dist/cloudflare/core/design-system-tools.js +863 -0
  72. package/dist/cloudflare/core/enrichment/enrichment-service.js +272 -0
  73. package/dist/cloudflare/core/enrichment/index.js +7 -0
  74. package/dist/cloudflare/core/enrichment/relationship-mapper.js +351 -0
  75. package/dist/cloudflare/core/enrichment/style-resolver.js +326 -0
  76. package/dist/cloudflare/core/figma-api.js +409 -0
  77. package/dist/cloudflare/core/figma-connector.js +7 -0
  78. package/dist/cloudflare/core/figma-desktop-connector.js +1184 -0
  79. package/dist/cloudflare/core/figma-reconstruction-spec.js +402 -0
  80. package/dist/cloudflare/core/figma-style-extractor.js +311 -0
  81. package/dist/cloudflare/core/figma-tools.js +2947 -0
  82. package/dist/cloudflare/core/logger.js +53 -0
  83. package/dist/cloudflare/core/port-discovery.js +282 -0
  84. package/dist/cloudflare/core/snippet-injector.js +96 -0
  85. package/dist/cloudflare/core/types/design-code.js +4 -0
  86. package/dist/cloudflare/core/types/enriched.js +5 -0
  87. package/dist/cloudflare/core/types/index.js +4 -0
  88. package/dist/cloudflare/core/websocket-connector.js +256 -0
  89. package/dist/cloudflare/core/websocket-server.js +646 -0
  90. package/dist/cloudflare/core/write-tools.js +2091 -0
  91. package/dist/cloudflare/index.js +2899 -0
  92. package/dist/cloudflare/test-browser.js +88 -0
  93. package/dist/core/comment-tools.d.ts +11 -0
  94. package/dist/core/comment-tools.d.ts.map +1 -0
  95. package/dist/core/comment-tools.js +293 -0
  96. package/dist/core/comment-tools.js.map +1 -0
  97. package/dist/core/config.d.ts +17 -0
  98. package/dist/core/config.d.ts.map +1 -0
  99. package/dist/core/config.js +162 -0
  100. package/dist/core/config.js.map +1 -0
  101. package/dist/core/console-monitor.d.ts +82 -0
  102. package/dist/core/console-monitor.d.ts.map +1 -0
  103. package/dist/core/console-monitor.js +428 -0
  104. package/dist/core/console-monitor.js.map +1 -0
  105. package/dist/core/design-code-tools.d.ts +127 -0
  106. package/dist/core/design-code-tools.d.ts.map +1 -0
  107. package/dist/core/design-code-tools.js +2505 -0
  108. package/dist/core/design-code-tools.js.map +1 -0
  109. package/dist/core/design-system-manifest.d.ts +272 -0
  110. package/dist/core/design-system-manifest.d.ts.map +1 -0
  111. package/dist/core/design-system-manifest.js +261 -0
  112. package/dist/core/design-system-manifest.js.map +1 -0
  113. package/dist/core/design-system-tools.d.ts +17 -0
  114. package/dist/core/design-system-tools.d.ts.map +1 -0
  115. package/dist/core/design-system-tools.js +864 -0
  116. package/dist/core/design-system-tools.js.map +1 -0
  117. package/dist/core/enrichment/enrichment-service.d.ts +52 -0
  118. package/dist/core/enrichment/enrichment-service.d.ts.map +1 -0
  119. package/dist/core/enrichment/enrichment-service.js +273 -0
  120. package/dist/core/enrichment/enrichment-service.js.map +1 -0
  121. package/dist/core/enrichment/index.d.ts +8 -0
  122. package/dist/core/enrichment/index.d.ts.map +1 -0
  123. package/dist/core/enrichment/index.js +8 -0
  124. package/dist/core/enrichment/index.js.map +1 -0
  125. package/dist/core/enrichment/relationship-mapper.d.ts +106 -0
  126. package/dist/core/enrichment/relationship-mapper.d.ts.map +1 -0
  127. package/dist/core/enrichment/relationship-mapper.js +352 -0
  128. package/dist/core/enrichment/relationship-mapper.js.map +1 -0
  129. package/dist/core/enrichment/style-resolver.d.ts +80 -0
  130. package/dist/core/enrichment/style-resolver.d.ts.map +1 -0
  131. package/dist/core/enrichment/style-resolver.js +327 -0
  132. package/dist/core/enrichment/style-resolver.js.map +1 -0
  133. package/dist/core/figma-api.d.ts +201 -0
  134. package/dist/core/figma-api.d.ts.map +1 -0
  135. package/dist/core/figma-api.js +410 -0
  136. package/dist/core/figma-api.js.map +1 -0
  137. package/dist/core/figma-connector.d.ts +48 -0
  138. package/dist/core/figma-connector.d.ts.map +1 -0
  139. package/dist/core/figma-connector.js +8 -0
  140. package/dist/core/figma-connector.js.map +1 -0
  141. package/dist/core/figma-desktop-connector.d.ts +265 -0
  142. package/dist/core/figma-desktop-connector.d.ts.map +1 -0
  143. package/dist/core/figma-desktop-connector.js +1184 -0
  144. package/dist/core/figma-desktop-connector.js.map +1 -0
  145. package/dist/core/figma-reconstruction-spec.d.ts +166 -0
  146. package/dist/core/figma-reconstruction-spec.d.ts.map +1 -0
  147. package/dist/core/figma-reconstruction-spec.js +403 -0
  148. package/dist/core/figma-reconstruction-spec.js.map +1 -0
  149. package/dist/core/figma-style-extractor.d.ts +76 -0
  150. package/dist/core/figma-style-extractor.d.ts.map +1 -0
  151. package/dist/core/figma-style-extractor.js +312 -0
  152. package/dist/core/figma-style-extractor.js.map +1 -0
  153. package/dist/core/figma-tools.d.ts +23 -0
  154. package/dist/core/figma-tools.d.ts.map +1 -0
  155. package/dist/core/figma-tools.js +2948 -0
  156. package/dist/core/figma-tools.js.map +1 -0
  157. package/dist/core/logger.d.ts +22 -0
  158. package/dist/core/logger.d.ts.map +1 -0
  159. package/dist/core/logger.js +54 -0
  160. package/dist/core/logger.js.map +1 -0
  161. package/dist/core/port-discovery.d.ts +110 -0
  162. package/dist/core/port-discovery.d.ts.map +1 -0
  163. package/dist/core/port-discovery.js +283 -0
  164. package/dist/core/port-discovery.js.map +1 -0
  165. package/dist/core/snippet-injector.d.ts +24 -0
  166. package/dist/core/snippet-injector.d.ts.map +1 -0
  167. package/dist/core/snippet-injector.js +97 -0
  168. package/dist/core/snippet-injector.js.map +1 -0
  169. package/dist/core/types/design-code.d.ts +262 -0
  170. package/dist/core/types/design-code.d.ts.map +1 -0
  171. package/dist/core/types/design-code.js +5 -0
  172. package/dist/core/types/design-code.js.map +1 -0
  173. package/dist/core/types/enriched.d.ts +213 -0
  174. package/dist/core/types/enriched.d.ts.map +1 -0
  175. package/dist/core/types/enriched.js +6 -0
  176. package/dist/core/types/enriched.js.map +1 -0
  177. package/dist/core/types/index.d.ts +112 -0
  178. package/dist/core/types/index.d.ts.map +1 -0
  179. package/dist/core/types/index.js +5 -0
  180. package/dist/core/types/index.js.map +1 -0
  181. package/dist/core/websocket-connector.d.ts +55 -0
  182. package/dist/core/websocket-connector.d.ts.map +1 -0
  183. package/dist/core/websocket-connector.js +257 -0
  184. package/dist/core/websocket-connector.js.map +1 -0
  185. package/dist/core/websocket-server.d.ts +191 -0
  186. package/dist/core/websocket-server.d.ts.map +1 -0
  187. package/dist/core/websocket-server.js +647 -0
  188. package/dist/core/websocket-server.js.map +1 -0
  189. package/dist/core/write-tools.d.ts +7 -0
  190. package/dist/core/write-tools.d.ts.map +1 -0
  191. package/dist/core/write-tools.js +2092 -0
  192. package/dist/core/write-tools.js.map +1 -0
  193. package/dist/local.d.ts +84 -0
  194. package/dist/local.d.ts.map +1 -0
  195. package/dist/local.js +5039 -0
  196. package/dist/local.js.map +1 -0
  197. package/figma-desktop-bridge/README.md +313 -0
  198. package/figma-desktop-bridge/code.js +2818 -0
  199. package/figma-desktop-bridge/manifest.json +67 -0
  200. package/figma-desktop-bridge/ui.html +1236 -0
  201. package/package.json +87 -0
@@ -0,0 +1,327 @@
1
+ /**
2
+ * Style Value Resolver
3
+ * Resolves style values from variable references and provides formatted outputs
4
+ */
5
+ export class StyleValueResolver {
6
+ constructor(logger) {
7
+ this.cache = new Map();
8
+ this.variableCache = new Map();
9
+ this.logger = logger;
10
+ }
11
+ /**
12
+ * Resolve a style's value, handling variable references
13
+ */
14
+ async resolveStyleValue(style, variables, maxDepth = 10) {
15
+ const cacheKey = `style:${style.key || style.node_id}`;
16
+ // Check cache
17
+ if (this.cache.has(cacheKey)) {
18
+ return this.cache.get(cacheKey);
19
+ }
20
+ try {
21
+ // Get the actual style node data
22
+ const styleData = await this.getStyleData(style);
23
+ if (!styleData) {
24
+ return { value: null };
25
+ }
26
+ // Check if this style uses a variable
27
+ const variableRef = this.findVariableReference(styleData);
28
+ if (variableRef && variables.has(variableRef.id)) {
29
+ // Resolve the variable value
30
+ const variable = variables.get(variableRef.id);
31
+ const resolvedValue = await this.resolveVariableValue(variable, variables, maxDepth);
32
+ const result = {
33
+ value: resolvedValue,
34
+ variableRef: {
35
+ id: variableRef.id,
36
+ name: variable.name,
37
+ collection: variable.variableCollectionId,
38
+ resolvedType: variable.resolvedType,
39
+ },
40
+ };
41
+ this.cache.set(cacheKey, result);
42
+ return result;
43
+ }
44
+ // No variable reference, return direct value
45
+ const directValue = this.extractDirectValue(styleData, style.style_type);
46
+ const result = { value: directValue };
47
+ this.cache.set(cacheKey, result);
48
+ return result;
49
+ }
50
+ catch (error) {
51
+ this.logger.error({
52
+ error,
53
+ style: style.name,
54
+ }, "Error resolving style value");
55
+ return { value: null };
56
+ }
57
+ }
58
+ /**
59
+ * Resolve a variable's value, handling alias chains
60
+ */
61
+ async resolveVariableValue(variable, allVariables, maxDepth = 10, currentDepth = 0) {
62
+ if (currentDepth >= maxDepth) {
63
+ this.logger.warn({
64
+ variable: variable.name,
65
+ }, "Max resolution depth reached");
66
+ return null;
67
+ }
68
+ const cacheKey = `var:${variable.id}`;
69
+ if (this.variableCache.has(cacheKey)) {
70
+ return this.variableCache.get(cacheKey);
71
+ }
72
+ try {
73
+ // Get the value for the default mode (or first available mode)
74
+ const modes = Object.keys(variable.valuesByMode || {});
75
+ if (modes.length === 0) {
76
+ return null;
77
+ }
78
+ const defaultMode = modes[0]; // TODO: Support mode selection
79
+ const value = variable.valuesByMode[defaultMode];
80
+ // Check if this is an alias (reference to another variable)
81
+ if (typeof value === "object" && value.type === "VARIABLE_ALIAS") {
82
+ const targetVariable = allVariables.get(value.id);
83
+ if (!targetVariable) {
84
+ this.logger.warn({
85
+ source: variable.name,
86
+ targetId: value.id,
87
+ }, "Variable alias target not found");
88
+ return null;
89
+ }
90
+ // Recursively resolve the alias
91
+ const resolvedValue = await this.resolveVariableValue(targetVariable, allVariables, maxDepth, currentDepth + 1);
92
+ this.variableCache.set(cacheKey, resolvedValue);
93
+ return resolvedValue;
94
+ }
95
+ // Direct value - format based on type
96
+ const formattedValue = this.formatVariableValue(value, variable.resolvedType);
97
+ this.variableCache.set(cacheKey, formattedValue);
98
+ return formattedValue;
99
+ }
100
+ catch (error) {
101
+ this.logger.error({
102
+ error,
103
+ variable: variable.name,
104
+ }, "Error resolving variable value");
105
+ return null;
106
+ }
107
+ }
108
+ /**
109
+ * Format a variable value based on its type
110
+ */
111
+ formatVariableValue(value, type) {
112
+ if (!value)
113
+ return null;
114
+ switch (type) {
115
+ case "COLOR":
116
+ return this.formatColor(value);
117
+ case "FLOAT":
118
+ case "NUMBER":
119
+ return value;
120
+ case "STRING":
121
+ return value;
122
+ case "BOOLEAN":
123
+ return Boolean(value);
124
+ default:
125
+ return value;
126
+ }
127
+ }
128
+ /**
129
+ * Format a color value to hex string
130
+ */
131
+ formatColor(color) {
132
+ if (typeof color === "string") {
133
+ return color;
134
+ }
135
+ if (color.r !== undefined && color.g !== undefined && color.b !== undefined) {
136
+ const r = Math.round(color.r * 255);
137
+ const g = Math.round(color.g * 255);
138
+ const b = Math.round(color.b * 255);
139
+ return `#${r.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}${b.toString(16).padStart(2, "0")}`.toUpperCase();
140
+ }
141
+ return null;
142
+ }
143
+ /**
144
+ * Generate export formats for a resolved value
145
+ */
146
+ generateExportFormats(name, value, type, formats = ["css", "sass", "tailwind", "typescript", "json"]) {
147
+ const result = {};
148
+ // Sanitize name for different formats
149
+ const cssName = this.toCSSVariableName(name);
150
+ const sassName = this.toSassVariableName(name);
151
+ const tailwindName = this.toTailwindClassName(name);
152
+ const tsName = this.toTypeScriptPath(name);
153
+ const jsonPath = this.toJSONPath(name);
154
+ for (const format of formats) {
155
+ switch (format) {
156
+ case "css":
157
+ result.css = `var(${cssName})`;
158
+ break;
159
+ case "sass":
160
+ result.sass = sassName;
161
+ break;
162
+ case "tailwind":
163
+ result.tailwind = tailwindName;
164
+ break;
165
+ case "typescript":
166
+ result.typescript = tsName;
167
+ break;
168
+ case "json":
169
+ result.json = jsonPath;
170
+ break;
171
+ }
172
+ }
173
+ return result;
174
+ }
175
+ /**
176
+ * Convert token name to CSS variable format
177
+ * Example: "color/background/primary-default" -> "--color-background-primary-default"
178
+ */
179
+ toCSSVariableName(name) {
180
+ return `--${name.replace(/\//g, "-").toLowerCase()}`;
181
+ }
182
+ /**
183
+ * Convert token name to Sass variable format
184
+ * Example: "color/background/primary-default" -> "$color-background-primary-default"
185
+ */
186
+ toSassVariableName(name) {
187
+ return `$${name.replace(/\//g, "-").toLowerCase()}`;
188
+ }
189
+ /**
190
+ * Convert token name to Tailwind class format
191
+ * Example: "color/background/primary-default" -> "bg-primary"
192
+ */
193
+ toTailwindClassName(name) {
194
+ const parts = name.split("/");
195
+ // Try to infer Tailwind utility class
196
+ if (parts[0] === "color") {
197
+ if (parts[1] === "background") {
198
+ return `bg-${parts[parts.length - 1].toLowerCase()}`;
199
+ }
200
+ if (parts[1] === "text") {
201
+ return `text-${parts[parts.length - 1].toLowerCase()}`;
202
+ }
203
+ if (parts[1] === "border") {
204
+ return `border-${parts[parts.length - 1].toLowerCase()}`;
205
+ }
206
+ }
207
+ if (parts[0] === "spacing") {
208
+ return `space-${parts[parts.length - 1].toLowerCase()}`;
209
+ }
210
+ // Fallback: use last part
211
+ return parts[parts.length - 1].toLowerCase();
212
+ }
213
+ /**
214
+ * Convert token name to TypeScript path format
215
+ * Example: "color/background/primary-default" -> "tokens.color.background.primaryDefault"
216
+ */
217
+ toTypeScriptPath(name) {
218
+ const parts = name.split("/");
219
+ const camelCaseParts = parts.map((part, index) => {
220
+ if (index === 0)
221
+ return part.toLowerCase();
222
+ return part
223
+ .split("-")
224
+ .map((word, i) => i === 0
225
+ ? word.toLowerCase()
226
+ : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
227
+ .join("");
228
+ });
229
+ return `tokens.${camelCaseParts.join(".")}`;
230
+ }
231
+ /**
232
+ * Convert token name to nested JSON path
233
+ * Example: "color/background/primary-default" -> { color: { background: { primaryDefault: value } } }
234
+ */
235
+ toJSONPath(name) {
236
+ const parts = name.split("/");
237
+ const result = {};
238
+ let current = result;
239
+ for (let i = 0; i < parts.length; i++) {
240
+ const key = parts[i]
241
+ .split("-")
242
+ .map((word, j) => j === 0
243
+ ? word.toLowerCase()
244
+ : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
245
+ .join("");
246
+ if (i === parts.length - 1) {
247
+ current[key] = "[VALUE]"; // Placeholder
248
+ }
249
+ else {
250
+ current[key] = {};
251
+ current = current[key];
252
+ }
253
+ }
254
+ return result;
255
+ }
256
+ /**
257
+ * Get style data from Figma API
258
+ * This would be called via the Figma API client
259
+ */
260
+ async getStyleData(style) {
261
+ // TODO: Implement actual Figma API call
262
+ // For now, return the style object itself
263
+ return style;
264
+ }
265
+ /**
266
+ * Find variable reference in style data
267
+ */
268
+ findVariableReference(styleData) {
269
+ // Check for boundVariables (new variables API)
270
+ if (styleData.boundVariables) {
271
+ // Check common properties that can be bound to variables
272
+ const props = ["fills", "strokes", "effects", "text"];
273
+ for (const prop of props) {
274
+ if (styleData.boundVariables[prop]) {
275
+ const binding = styleData.boundVariables[prop];
276
+ if (Array.isArray(binding) && binding.length > 0) {
277
+ return { id: binding[0].id };
278
+ }
279
+ if (binding.id) {
280
+ return { id: binding.id };
281
+ }
282
+ }
283
+ }
284
+ }
285
+ return null;
286
+ }
287
+ /**
288
+ * Extract direct value from style (no variable)
289
+ */
290
+ extractDirectValue(styleData, styleType) {
291
+ switch (styleType) {
292
+ case "FILL":
293
+ if (styleData.fills && styleData.fills.length > 0) {
294
+ const fill = styleData.fills[0];
295
+ if (fill.type === "SOLID") {
296
+ return this.formatColor(fill.color);
297
+ }
298
+ }
299
+ return null;
300
+ case "TEXT":
301
+ if (styleData.fontFamily) {
302
+ return {
303
+ fontFamily: styleData.fontFamily,
304
+ fontSize: styleData.fontSize,
305
+ fontWeight: styleData.fontWeight,
306
+ lineHeight: styleData.lineHeight,
307
+ };
308
+ }
309
+ return null;
310
+ case "EFFECT":
311
+ if (styleData.effects && styleData.effects.length > 0) {
312
+ return styleData.effects;
313
+ }
314
+ return null;
315
+ default:
316
+ return null;
317
+ }
318
+ }
319
+ /**
320
+ * Clear the cache
321
+ */
322
+ clearCache() {
323
+ this.cache.clear();
324
+ this.variableCache.clear();
325
+ }
326
+ }
327
+ //# sourceMappingURL=style-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-resolver.js","sourceRoot":"","sources":["../../../src/core/enrichment/style-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Figma REST API Client
3
+ * Handles HTTP calls to Figma's REST API for file data, variables, components, and styles
4
+ */
5
+ /**
6
+ * Figma API Client Configuration
7
+ */
8
+ export interface FigmaAPIConfig {
9
+ accessToken: string;
10
+ }
11
+ /**
12
+ * Extract file key from Figma URL
13
+ * @example https://www.figma.com/design/abc123/My-File -> abc123
14
+ */
15
+ export declare function extractFileKey(url: string): string | null;
16
+ /**
17
+ * Information extracted from a Figma URL
18
+ * Includes file key, optional branch ID, and optional node ID
19
+ */
20
+ export interface FigmaUrlInfo {
21
+ fileKey: string;
22
+ branchId?: string;
23
+ nodeId?: string;
24
+ }
25
+ /**
26
+ * Extract comprehensive URL info including branch and node IDs
27
+ * Supports both URL formats:
28
+ * - Path-based: /design/{fileKey}/branch/{branchKey}/{fileName}
29
+ * - Query-based: /design/{fileKey}/{fileName}?branch-id={branchId}
30
+ *
31
+ * @example https://www.figma.com/design/abc123/branch/xyz789/My-File?node-id=1-2
32
+ * -> { fileKey: 'abc123', branchId: 'xyz789', nodeId: '1:2' }
33
+ * @example https://www.figma.com/design/abc123/My-File?branch-id=xyz789&node-id=1-2
34
+ * -> { fileKey: 'abc123', branchId: 'xyz789', nodeId: '1:2' }
35
+ */
36
+ export declare function extractFigmaUrlInfo(url: string): FigmaUrlInfo | null;
37
+ /**
38
+ * Wrap a promise with a timeout
39
+ * @param promise The promise to wrap
40
+ * @param ms Timeout in milliseconds
41
+ * @param label Label for error message
42
+ * @returns Promise that rejects if timeout exceeded
43
+ */
44
+ export declare function withTimeout<T>(promise: Promise<T>, ms: number, label: string): Promise<T>;
45
+ /**
46
+ * Figma API Client
47
+ * Makes authenticated requests to Figma REST API
48
+ */
49
+ export declare class FigmaAPI {
50
+ private accessToken;
51
+ constructor(config: FigmaAPIConfig);
52
+ /**
53
+ * Make authenticated request to Figma API
54
+ */
55
+ private request;
56
+ /**
57
+ * GET /v1/files/:file_key
58
+ * Get full file data including document tree, components, and styles
59
+ */
60
+ getFile(fileKey: string, options?: {
61
+ version?: string;
62
+ ids?: string[];
63
+ depth?: number;
64
+ geometry?: 'paths' | 'screen';
65
+ plugin_data?: string;
66
+ branch_data?: boolean;
67
+ }): Promise<any>;
68
+ /**
69
+ * Resolve a branch key from a branch ID
70
+ * If branchId is provided, fetches branch data and returns the branch's unique key
71
+ * Otherwise returns the main file key unchanged
72
+ * @param fileKey The main file key from the URL
73
+ * @param branchId Optional branch ID from URL query param (branch-id)
74
+ * @returns The effective file key to use for API calls (branch key if on branch, otherwise fileKey)
75
+ */
76
+ getBranchKey(fileKey: string, branchId?: string): Promise<string>;
77
+ /**
78
+ * GET /v1/files/:file_key/variables/local
79
+ * Get local variables (design tokens) from a file
80
+ */
81
+ getLocalVariables(fileKey: string): Promise<any>;
82
+ /**
83
+ * GET /v1/files/:file_key/variables/published
84
+ * Get published variables from a file
85
+ */
86
+ getPublishedVariables(fileKey: string): Promise<any>;
87
+ /**
88
+ * GET /v1/files/:file_key/nodes
89
+ * Get specific nodes by ID
90
+ */
91
+ getNodes(fileKey: string, nodeIds: string[], options?: {
92
+ version?: string;
93
+ depth?: number;
94
+ geometry?: 'paths' | 'screen';
95
+ plugin_data?: string;
96
+ }): Promise<any>;
97
+ /**
98
+ * GET /v1/files/:file_key/styles
99
+ * Get styles from a file
100
+ */
101
+ getStyles(fileKey: string): Promise<any>;
102
+ /**
103
+ * GET /v1/files/:file_key/components
104
+ * Get components from a file
105
+ */
106
+ getComponents(fileKey: string): Promise<any>;
107
+ /**
108
+ * GET /v1/files/:file_key/component_sets
109
+ * Get component sets (variants) from a file
110
+ */
111
+ getComponentSets(fileKey: string): Promise<any>;
112
+ /**
113
+ * GET /v1/images/:file_key
114
+ * Renders images for specified nodes
115
+ * @param fileKey - The file key
116
+ * @param nodeIds - Node IDs to render (single string or array)
117
+ * @param options - Rendering options
118
+ * @returns Map of node IDs to image URLs (URLs expire after 30 days)
119
+ */
120
+ getImages(fileKey: string, nodeIds: string | string[], options?: {
121
+ scale?: number;
122
+ format?: 'png' | 'jpg' | 'svg' | 'pdf';
123
+ svg_outline_text?: boolean;
124
+ svg_include_id?: boolean;
125
+ svg_include_node_id?: boolean;
126
+ svg_simplify_stroke?: boolean;
127
+ contents_only?: boolean;
128
+ }): Promise<{
129
+ images: Record<string, string | null>;
130
+ }>;
131
+ /**
132
+ * GET /v1/files/:file_key/comments
133
+ * Get comments on a file
134
+ */
135
+ getComments(fileKey: string, options?: {
136
+ as_md?: boolean;
137
+ }): Promise<any>;
138
+ /**
139
+ * POST /v1/files/:file_key/comments
140
+ * Post a comment on a file
141
+ */
142
+ postComment(fileKey: string, message: string, clientMeta?: {
143
+ node_id?: string;
144
+ node_offset?: {
145
+ x: number;
146
+ y: number;
147
+ };
148
+ }, commentId?: string): Promise<any>;
149
+ /**
150
+ * DELETE /v1/files/:file_key/comments/:comment_id
151
+ * Delete a comment on a file
152
+ */
153
+ deleteComment(fileKey: string, commentId: string): Promise<any>;
154
+ /**
155
+ * Helper: Get all design tokens (variables) with formatted output
156
+ * Both local and published can fail gracefully (e.g., 403 without Enterprise plan)
157
+ */
158
+ getAllVariables(fileKey: string): Promise<{
159
+ local: any;
160
+ published: any;
161
+ localError?: string;
162
+ publishedError?: string;
163
+ }>;
164
+ /**
165
+ * Helper: Get component metadata with properties
166
+ */
167
+ getComponentData(fileKey: string, nodeId: string): Promise<any>;
168
+ /**
169
+ * Helper: Search for components by name
170
+ */
171
+ searchComponents(fileKey: string, searchTerm: string): Promise<any[]>;
172
+ }
173
+ /**
174
+ * Helper function to format variables for display
175
+ */
176
+ export declare function formatVariables(variablesData: any): {
177
+ collections: any[];
178
+ variables: any[];
179
+ summary: {
180
+ totalCollections: number;
181
+ totalVariables: number;
182
+ variablesByType: Record<string, number>;
183
+ };
184
+ };
185
+ /**
186
+ * Helper function to format component data for display
187
+ */
188
+ export declare function formatComponentData(componentNode: any): {
189
+ id: string;
190
+ name: string;
191
+ type: string;
192
+ description?: string;
193
+ descriptionMarkdown?: string;
194
+ properties?: any;
195
+ children?: any[];
196
+ bounds?: any;
197
+ fills?: any[];
198
+ strokes?: any[];
199
+ effects?: any[];
200
+ };
201
+ //# sourceMappingURL=figma-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figma-api.d.ts","sourceRoot":"","sources":["../../src/core/figma-api.ts"],"names":[],"mappings":"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"}