@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,326 @@
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
+ }