@defai.digital/ax-cli 3.14.9 → 3.14.11

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 (106) hide show
  1. package/README.md +17 -2
  2. package/dist/agent/execution/tool-executor.d.ts +6 -0
  3. package/dist/agent/execution/tool-executor.js +72 -0
  4. package/dist/agent/execution/tool-executor.js.map +1 -1
  5. package/dist/commands/design.d.ts +18 -0
  6. package/dist/commands/design.js +495 -0
  7. package/dist/commands/design.js.map +1 -0
  8. package/dist/commands/vscode.js +1 -1
  9. package/dist/commands/vscode.js.map +1 -1
  10. package/dist/design/figma-alias.d.ts +88 -0
  11. package/dist/design/figma-alias.js +324 -0
  12. package/dist/design/figma-alias.js.map +1 -0
  13. package/dist/design/figma-audit.d.ts +40 -0
  14. package/dist/design/figma-audit.js +375 -0
  15. package/dist/design/figma-audit.js.map +1 -0
  16. package/dist/design/figma-client.d.ts +123 -0
  17. package/dist/design/figma-client.js +316 -0
  18. package/dist/design/figma-client.js.map +1 -0
  19. package/dist/design/figma-map.d.ts +29 -0
  20. package/dist/design/figma-map.js +274 -0
  21. package/dist/design/figma-map.js.map +1 -0
  22. package/dist/design/figma-tokens.d.ts +73 -0
  23. package/dist/design/figma-tokens.js +431 -0
  24. package/dist/design/figma-tokens.js.map +1 -0
  25. package/dist/design/index.d.ts +13 -0
  26. package/dist/design/index.js +18 -0
  27. package/dist/design/index.js.map +1 -0
  28. package/dist/design/types.d.ts +89 -0
  29. package/dist/design/types.js +9 -0
  30. package/dist/design/types.js.map +1 -0
  31. package/dist/hooks/hook-runner.js +2 -2
  32. package/dist/hooks/hook-runner.js.map +1 -1
  33. package/dist/index.js +3 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/ipc/vscode-client.js +1 -1
  36. package/dist/ipc/vscode-client.js.map +1 -1
  37. package/dist/llm/tools.js +170 -0
  38. package/dist/llm/tools.js.map +1 -1
  39. package/dist/mcp/client-v2.js +1 -1
  40. package/dist/mcp/client-v2.js.map +1 -1
  41. package/dist/mcp/validation.js +1 -1
  42. package/dist/mcp/validation.js.map +1 -1
  43. package/dist/permissions/permission-manager.js +2 -2
  44. package/dist/permissions/permission-manager.js.map +1 -1
  45. package/dist/tools/design-tool.d.ts +59 -0
  46. package/dist/tools/design-tool.js +258 -0
  47. package/dist/tools/design-tool.js.map +1 -0
  48. package/dist/ui/hooks/use-input-history.js +1 -1
  49. package/dist/ui/hooks/use-input-history.js.map +1 -1
  50. package/dist/ui/utils/image-handler.js +1 -1
  51. package/dist/ui/utils/image-handler.js.map +1 -1
  52. package/dist/utils/path-security.js +2 -2
  53. package/dist/utils/path-security.js.map +1 -1
  54. package/dist/utils/progress-tracker.js +1 -1
  55. package/dist/utils/progress-tracker.js.map +1 -1
  56. package/dist/utils/settings-manager.js +8 -3
  57. package/dist/utils/settings-manager.js.map +1 -1
  58. package/node_modules/@ax-cli/schemas/dist/index.d.ts +1 -0
  59. package/node_modules/@ax-cli/schemas/dist/index.d.ts.map +1 -1
  60. package/node_modules/@ax-cli/schemas/dist/index.js +2 -2
  61. package/node_modules/@ax-cli/schemas/dist/index.js.map +1 -1
  62. package/node_modules/@ax-cli/schemas/dist/public/design/alias-types.d.ts +346 -0
  63. package/node_modules/@ax-cli/schemas/dist/public/design/alias-types.d.ts.map +1 -0
  64. package/node_modules/@ax-cli/schemas/dist/public/design/alias-types.js +171 -0
  65. package/node_modules/@ax-cli/schemas/dist/public/design/alias-types.js.map +1 -0
  66. package/node_modules/@ax-cli/schemas/dist/public/design/audit-types.d.ts +545 -0
  67. package/node_modules/@ax-cli/schemas/dist/public/design/audit-types.d.ts.map +1 -0
  68. package/node_modules/@ax-cli/schemas/dist/public/design/audit-types.js +307 -0
  69. package/node_modules/@ax-cli/schemas/dist/public/design/audit-types.js.map +1 -0
  70. package/node_modules/@ax-cli/schemas/dist/public/design/figma-types.d.ts +1306 -0
  71. package/node_modules/@ax-cli/schemas/dist/public/design/figma-types.d.ts.map +1 -0
  72. package/node_modules/@ax-cli/schemas/dist/public/design/figma-types.js +428 -0
  73. package/node_modules/@ax-cli/schemas/dist/public/design/figma-types.js.map +1 -0
  74. package/node_modules/@ax-cli/schemas/dist/public/design/index.d.ts +13 -0
  75. package/node_modules/@ax-cli/schemas/dist/public/design/index.d.ts.map +1 -0
  76. package/node_modules/@ax-cli/schemas/dist/public/design/index.js +82 -0
  77. package/node_modules/@ax-cli/schemas/dist/public/design/index.js.map +1 -0
  78. package/node_modules/@ax-cli/schemas/dist/public/design/token-types.d.ts +1245 -0
  79. package/node_modules/@ax-cli/schemas/dist/public/design/token-types.d.ts.map +1 -0
  80. package/node_modules/@ax-cli/schemas/dist/public/design/token-types.js +282 -0
  81. package/node_modules/@ax-cli/schemas/dist/public/design/token-types.js.map +1 -0
  82. package/package.json +2 -2
  83. package/packages/schemas/dist/index.d.ts +1 -0
  84. package/packages/schemas/dist/index.d.ts.map +1 -1
  85. package/packages/schemas/dist/index.js +2 -2
  86. package/packages/schemas/dist/index.js.map +1 -1
  87. package/packages/schemas/dist/public/design/alias-types.d.ts +346 -0
  88. package/packages/schemas/dist/public/design/alias-types.d.ts.map +1 -0
  89. package/packages/schemas/dist/public/design/alias-types.js +171 -0
  90. package/packages/schemas/dist/public/design/alias-types.js.map +1 -0
  91. package/packages/schemas/dist/public/design/audit-types.d.ts +545 -0
  92. package/packages/schemas/dist/public/design/audit-types.d.ts.map +1 -0
  93. package/packages/schemas/dist/public/design/audit-types.js +307 -0
  94. package/packages/schemas/dist/public/design/audit-types.js.map +1 -0
  95. package/packages/schemas/dist/public/design/figma-types.d.ts +1306 -0
  96. package/packages/schemas/dist/public/design/figma-types.d.ts.map +1 -0
  97. package/packages/schemas/dist/public/design/figma-types.js +428 -0
  98. package/packages/schemas/dist/public/design/figma-types.js.map +1 -0
  99. package/packages/schemas/dist/public/design/index.d.ts +13 -0
  100. package/packages/schemas/dist/public/design/index.d.ts.map +1 -0
  101. package/packages/schemas/dist/public/design/index.js +82 -0
  102. package/packages/schemas/dist/public/design/index.js.map +1 -0
  103. package/packages/schemas/dist/public/design/token-types.d.ts +1245 -0
  104. package/packages/schemas/dist/public/design/token-types.d.ts.map +1 -0
  105. package/packages/schemas/dist/public/design/token-types.js +282 -0
  106. package/packages/schemas/dist/public/design/token-types.js.map +1 -0
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Figma Token Extraction
3
+ *
4
+ * Extracts design tokens from Figma variables and converts
5
+ * to JSON or Tailwind format.
6
+ *
7
+ * @module design/figma-tokens
8
+ */
9
+ import type { FigmaVariablesResponse, TokenOutputFormat } from '@ax-cli/schemas';
10
+ interface SimpleToken {
11
+ value: string | number | boolean;
12
+ type: string;
13
+ description?: string;
14
+ }
15
+ interface TokenCollection {
16
+ [key: string]: SimpleToken | TokenCollection;
17
+ }
18
+ interface ExtractedTokens {
19
+ colors?: TokenCollection;
20
+ spacing?: TokenCollection;
21
+ radii?: TokenCollection;
22
+ opacity?: TokenCollection;
23
+ typography?: TokenCollection;
24
+ shadows?: TokenCollection;
25
+ [key: string]: TokenCollection | undefined;
26
+ }
27
+ interface ExtractOptions {
28
+ colorFormat?: 'hex' | 'rgb' | 'hsl';
29
+ dimensionUnit?: 'px' | 'rem';
30
+ remBase?: number;
31
+ includeDescription?: boolean;
32
+ }
33
+ interface TokenDiff {
34
+ path: string;
35
+ type: 'added' | 'removed' | 'modified';
36
+ figmaValue?: unknown;
37
+ localValue?: unknown;
38
+ }
39
+ interface ComparisonResult {
40
+ summary: {
41
+ totalFigma: number;
42
+ totalLocal: number;
43
+ added: number;
44
+ removed: number;
45
+ modified: number;
46
+ unchanged: number;
47
+ };
48
+ differences: TokenDiff[];
49
+ timestamp: string;
50
+ figmaFileKey?: string;
51
+ localFilePath?: string;
52
+ }
53
+ /**
54
+ * Extract tokens from Figma variables response
55
+ */
56
+ export declare function extractTokensFromVariables(response: FigmaVariablesResponse, options?: ExtractOptions): ExtractedTokens;
57
+ /**
58
+ * Convert tokens to Tailwind config format
59
+ */
60
+ export declare function tokensToTailwind(tokens: ExtractedTokens): object;
61
+ /**
62
+ * Format tokens to specified output format
63
+ */
64
+ export declare function formatTokens(tokens: ExtractedTokens, format: TokenOutputFormat): string;
65
+ /**
66
+ * Compare Figma tokens with local tokens file
67
+ */
68
+ export declare function compareTokens(figmaTokens: ExtractedTokens, localTokens: Record<string, unknown>, fileKey?: string, localPath?: string): ComparisonResult;
69
+ /**
70
+ * Format comparison result for display
71
+ */
72
+ export declare function formatComparison(result: ComparisonResult): string;
73
+ export {};
@@ -0,0 +1,431 @@
1
+ /**
2
+ * Figma Token Extraction
3
+ *
4
+ * Extracts design tokens from Figma variables and converts
5
+ * to JSON or Tailwind format.
6
+ *
7
+ * @module design/figma-tokens
8
+ */
9
+ // =============================================================================
10
+ // Color Conversion
11
+ // =============================================================================
12
+ /**
13
+ * Convert Figma RGBA (0-1) to hex
14
+ */
15
+ function figmaColorToHex(color) {
16
+ const r = Math.round(color.r * 255);
17
+ const g = Math.round(color.g * 255);
18
+ const b = Math.round(color.b * 255);
19
+ if (color.a < 1) {
20
+ const a = Math.round(color.a * 255);
21
+ return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}${a.toString(16).padStart(2, '0')}`;
22
+ }
23
+ return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;
24
+ }
25
+ /**
26
+ * Convert Figma RGBA to RGB string
27
+ */
28
+ function figmaColorToRgb(color) {
29
+ const r = Math.round(color.r * 255);
30
+ const g = Math.round(color.g * 255);
31
+ const b = Math.round(color.b * 255);
32
+ if (color.a < 1) {
33
+ return `rgba(${r}, ${g}, ${b}, ${color.a.toFixed(2)})`;
34
+ }
35
+ return `rgb(${r}, ${g}, ${b})`;
36
+ }
37
+ /**
38
+ * Convert Figma RGBA to HSL string
39
+ */
40
+ function figmaColorToHsl(color) {
41
+ const r = color.r;
42
+ const g = color.g;
43
+ const b = color.b;
44
+ const max = Math.max(r, g, b);
45
+ const min = Math.min(r, g, b);
46
+ const l = (max + min) / 2;
47
+ let h = 0;
48
+ let s = 0;
49
+ if (max !== min) {
50
+ const d = max - min;
51
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
52
+ switch (max) {
53
+ case r:
54
+ h = ((g - b) / d + (g < b ? 6 : 0)) / 6;
55
+ break;
56
+ case g:
57
+ h = ((b - r) / d + 2) / 6;
58
+ break;
59
+ case b:
60
+ h = ((r - g) / d + 4) / 6;
61
+ break;
62
+ }
63
+ }
64
+ if (color.a < 1) {
65
+ return `hsla(${Math.round(h * 360)}, ${Math.round(s * 100)}%, ${Math.round(l * 100)}%, ${color.a.toFixed(2)})`;
66
+ }
67
+ return `hsl(${Math.round(h * 360)}, ${Math.round(s * 100)}%, ${Math.round(l * 100)}%)`;
68
+ }
69
+ // =============================================================================
70
+ // Token Name Conversion
71
+ // =============================================================================
72
+ /**
73
+ * Convert Figma variable name to token path
74
+ * E.g., "Color/Primary/500" → ["colors", "primary", "500"]
75
+ */
76
+ function variableNameToPath(name) {
77
+ return name
78
+ .split('/')
79
+ .map((part) => part.toLowerCase().replace(/\s+/g, '-'));
80
+ }
81
+ // =============================================================================
82
+ // Token Extraction
83
+ // =============================================================================
84
+ /**
85
+ * Extract tokens from Figma variables response
86
+ */
87
+ export function extractTokensFromVariables(response, options = {}) {
88
+ const { colorFormat = 'hex', dimensionUnit = 'px', remBase = 16, includeDescription = true, } = options;
89
+ const tokens = {};
90
+ const variables = response.meta.variables;
91
+ const collections = response.meta.variableCollections;
92
+ // Process each variable
93
+ for (const variable of Object.values(variables)) {
94
+ // Skip hidden variables
95
+ if (variable.hiddenFromPublishing)
96
+ continue;
97
+ // Get collection
98
+ const collection = collections[variable.variableCollectionId];
99
+ if (!collection)
100
+ continue;
101
+ // Get default mode value
102
+ const defaultModeId = collection.defaultModeId;
103
+ const modeValue = variable.valuesByMode[defaultModeId];
104
+ if (modeValue === undefined)
105
+ continue;
106
+ // Determine token type and value
107
+ let tokenType;
108
+ let tokenValue;
109
+ // Handle resolved types
110
+ switch (variable.resolvedType) {
111
+ case 'COLOR': {
112
+ tokenType = 'color';
113
+ const colorValue = modeValue;
114
+ switch (colorFormat) {
115
+ case 'rgb':
116
+ tokenValue = figmaColorToRgb(colorValue);
117
+ break;
118
+ case 'hsl':
119
+ tokenValue = figmaColorToHsl(colorValue);
120
+ break;
121
+ default:
122
+ tokenValue = figmaColorToHex(colorValue);
123
+ }
124
+ break;
125
+ }
126
+ case 'FLOAT': {
127
+ const numValue = modeValue;
128
+ // Detect if this is likely a spacing/sizing value
129
+ const isSpacing = variable.scopes?.some((s) => ['GAP', 'WIDTH_HEIGHT', 'CORNER_RADIUS'].includes(s));
130
+ if (isSpacing) {
131
+ tokenType = 'dimension';
132
+ if (dimensionUnit === 'rem') {
133
+ tokenValue = `${(numValue / remBase).toFixed(4).replace(/\.?0+$/, '')}rem`;
134
+ }
135
+ else {
136
+ tokenValue = `${numValue}px`;
137
+ }
138
+ }
139
+ else if (variable.scopes?.includes('OPACITY')) {
140
+ tokenType = 'opacity';
141
+ tokenValue = numValue;
142
+ }
143
+ else {
144
+ tokenType = 'number';
145
+ tokenValue = numValue;
146
+ }
147
+ break;
148
+ }
149
+ case 'STRING':
150
+ tokenType = 'string';
151
+ tokenValue = modeValue;
152
+ break;
153
+ case 'BOOLEAN':
154
+ tokenType = 'boolean';
155
+ tokenValue = modeValue;
156
+ break;
157
+ default:
158
+ continue; // Skip unknown types
159
+ }
160
+ // Build token
161
+ const token = {
162
+ value: tokenValue,
163
+ type: tokenType,
164
+ };
165
+ if (includeDescription && variable.description) {
166
+ token.description = variable.description;
167
+ }
168
+ // Determine category from path or scopes
169
+ const path = variableNameToPath(variable.name);
170
+ let category = path[0];
171
+ // Normalize category names
172
+ if (variable.resolvedType === 'COLOR' || variable.scopes?.some((s) => s.includes('FILL') || s.includes('STROKE'))) {
173
+ category = 'colors';
174
+ }
175
+ else if (variable.scopes?.some((s) => ['GAP', 'WIDTH_HEIGHT'].includes(s))) {
176
+ category = 'spacing';
177
+ }
178
+ else if (variable.scopes?.some((s) => s.includes('CORNER_RADIUS'))) {
179
+ category = 'radii';
180
+ }
181
+ else if (variable.scopes?.some((s) => s.includes('OPACITY'))) {
182
+ category = 'opacity';
183
+ }
184
+ // Ensure category exists
185
+ if (!tokens[category]) {
186
+ tokens[category] = {};
187
+ }
188
+ // Build nested path
189
+ let current = tokens[category];
190
+ const tokenPath = path.slice(1); // Remove category
191
+ for (let i = 0; i < tokenPath.length - 1; i++) {
192
+ const key = tokenPath[i];
193
+ if (!current[key]) {
194
+ current[key] = {};
195
+ }
196
+ current = current[key];
197
+ }
198
+ // Set the token value
199
+ const tokenName = tokenPath[tokenPath.length - 1] || variable.name;
200
+ current[tokenName] = token;
201
+ }
202
+ return tokens;
203
+ }
204
+ // =============================================================================
205
+ // Output Formatters
206
+ // =============================================================================
207
+ /**
208
+ * Convert tokens to Tailwind config format
209
+ */
210
+ export function tokensToTailwind(tokens) {
211
+ const theme = {};
212
+ // Colors
213
+ if (tokens.colors) {
214
+ theme.colors = flattenTokenGroup(tokens.colors);
215
+ }
216
+ // Spacing
217
+ if (tokens.spacing) {
218
+ theme.spacing = flattenTokenGroup(tokens.spacing);
219
+ }
220
+ // Radii
221
+ if (tokens.radii) {
222
+ theme.borderRadius = flattenTokenGroup(tokens.radii);
223
+ }
224
+ // Opacity
225
+ if (tokens.opacity) {
226
+ theme.opacity = flattenTokenGroup(tokens.opacity);
227
+ }
228
+ // Typography
229
+ if (tokens.typography) {
230
+ const typography = tokens.typography;
231
+ if (typography.fontSize) {
232
+ theme.fontSize = flattenTokenGroup(typography.fontSize);
233
+ }
234
+ if (typography.fontFamily) {
235
+ theme.fontFamily = flattenTokenGroup(typography.fontFamily);
236
+ }
237
+ if (typography.fontWeight) {
238
+ theme.fontWeight = flattenTokenGroup(typography.fontWeight);
239
+ }
240
+ if (typography.lineHeight) {
241
+ theme.lineHeight = flattenTokenGroup(typography.lineHeight);
242
+ }
243
+ if (typography.letterSpacing) {
244
+ theme.letterSpacing = flattenTokenGroup(typography.letterSpacing);
245
+ }
246
+ }
247
+ // Shadows
248
+ if (tokens.shadows) {
249
+ theme.boxShadow = flattenTokenGroup(tokens.shadows);
250
+ }
251
+ return {
252
+ theme: {
253
+ extend: theme,
254
+ },
255
+ };
256
+ }
257
+ /**
258
+ * Flatten a token group to Tailwind format
259
+ */
260
+ function flattenTokenGroup(group, prefix = '') {
261
+ const result = {};
262
+ for (const [key, value] of Object.entries(group)) {
263
+ const fullKey = prefix ? `${prefix}-${key}` : key;
264
+ if (value && typeof value === 'object' && 'type' in value && 'value' in value) {
265
+ // It's a token
266
+ const token = value;
267
+ if (typeof token.value === 'string' || typeof token.value === 'number') {
268
+ result[fullKey] = token.value;
269
+ }
270
+ }
271
+ else if (value && typeof value === 'object') {
272
+ // It's a nested group
273
+ const nested = flattenTokenGroup(value, fullKey);
274
+ Object.assign(result, nested);
275
+ }
276
+ }
277
+ return result;
278
+ }
279
+ /**
280
+ * Format tokens to specified output format
281
+ */
282
+ export function formatTokens(tokens, format) {
283
+ switch (format) {
284
+ case 'tailwind': {
285
+ const config = tokensToTailwind(tokens);
286
+ return `/** @type {import('tailwindcss').Config} */
287
+ module.exports = ${JSON.stringify(config, null, 2)};`;
288
+ }
289
+ case 'css': {
290
+ const lines = [':root {'];
291
+ const flatTokens = flattenAllTokens(tokens);
292
+ for (const [name, value] of Object.entries(flatTokens)) {
293
+ lines.push(` --${name}: ${value};`);
294
+ }
295
+ lines.push('}');
296
+ return lines.join('\n');
297
+ }
298
+ case 'scss': {
299
+ const lines = [];
300
+ const flatTokens = flattenAllTokens(tokens);
301
+ for (const [name, value] of Object.entries(flatTokens)) {
302
+ lines.push(`$${name}: ${value};`);
303
+ }
304
+ return lines.join('\n');
305
+ }
306
+ case 'json':
307
+ default:
308
+ return JSON.stringify(tokens, null, 2);
309
+ }
310
+ }
311
+ /**
312
+ * Flatten all tokens to a flat map
313
+ */
314
+ function flattenAllTokens(tokens, prefix = '') {
315
+ const result = {};
316
+ for (const [key, value] of Object.entries(tokens)) {
317
+ if (value === undefined)
318
+ continue;
319
+ const fullKey = prefix ? `${prefix}-${key}` : key;
320
+ if (value && typeof value === 'object' && 'type' in value && 'value' in value) {
321
+ const token = value;
322
+ if (typeof token.value === 'string' || typeof token.value === 'number') {
323
+ result[fullKey] = token.value;
324
+ }
325
+ }
326
+ else if (value && typeof value === 'object') {
327
+ Object.assign(result, flattenAllTokens(value, fullKey));
328
+ }
329
+ }
330
+ return result;
331
+ }
332
+ // =============================================================================
333
+ // Token Comparison
334
+ // =============================================================================
335
+ /**
336
+ * Compare Figma tokens with local tokens file
337
+ */
338
+ export function compareTokens(figmaTokens, localTokens, fileKey, localPath) {
339
+ const differences = [];
340
+ const figmaFlat = flattenAllTokens(figmaTokens);
341
+ const localFlat = flattenAllTokens(localTokens);
342
+ const allPaths = new Set([...Object.keys(figmaFlat), ...Object.keys(localFlat)]);
343
+ let added = 0;
344
+ let removed = 0;
345
+ let modified = 0;
346
+ let unchanged = 0;
347
+ for (const path of allPaths) {
348
+ const figmaValue = figmaFlat[path];
349
+ const localValue = localFlat[path];
350
+ if (figmaValue !== undefined && localValue === undefined) {
351
+ differences.push({
352
+ path,
353
+ type: 'added',
354
+ figmaValue,
355
+ });
356
+ added++;
357
+ }
358
+ else if (figmaValue === undefined && localValue !== undefined) {
359
+ differences.push({
360
+ path,
361
+ type: 'removed',
362
+ localValue,
363
+ });
364
+ removed++;
365
+ }
366
+ else if (figmaValue !== localValue) {
367
+ differences.push({
368
+ path,
369
+ type: 'modified',
370
+ figmaValue,
371
+ localValue,
372
+ });
373
+ modified++;
374
+ }
375
+ else {
376
+ unchanged++;
377
+ }
378
+ }
379
+ return {
380
+ summary: {
381
+ totalFigma: Object.keys(figmaFlat).length,
382
+ totalLocal: Object.keys(localFlat).length,
383
+ added,
384
+ removed,
385
+ modified,
386
+ unchanged,
387
+ },
388
+ differences,
389
+ timestamp: new Date().toISOString(),
390
+ figmaFileKey: fileKey,
391
+ localFilePath: localPath,
392
+ };
393
+ }
394
+ /**
395
+ * Format comparison result for display
396
+ */
397
+ export function formatComparison(result) {
398
+ const lines = [
399
+ 'Token Comparison Summary',
400
+ '========================',
401
+ `Figma tokens: ${result.summary.totalFigma}`,
402
+ `Local tokens: ${result.summary.totalLocal}`,
403
+ '',
404
+ `Added (in Figma, not local): ${result.summary.added}`,
405
+ `Removed (in local, not Figma): ${result.summary.removed}`,
406
+ `Modified: ${result.summary.modified}`,
407
+ `Unchanged: ${result.summary.unchanged}`,
408
+ '',
409
+ ];
410
+ if (result.differences.length > 0) {
411
+ lines.push('Differences:');
412
+ lines.push('------------');
413
+ for (const diff of result.differences) {
414
+ switch (diff.type) {
415
+ case 'added':
416
+ lines.push(`+ ${diff.path}: ${diff.figmaValue}`);
417
+ break;
418
+ case 'removed':
419
+ lines.push(`- ${diff.path}: ${diff.localValue}`);
420
+ break;
421
+ case 'modified':
422
+ lines.push(`~ ${diff.path}:`);
423
+ lines.push(` Figma: ${diff.figmaValue}`);
424
+ lines.push(` Local: ${diff.localValue}`);
425
+ break;
426
+ }
427
+ }
428
+ }
429
+ return lines.join('\n');
430
+ }
431
+ //# sourceMappingURL=figma-tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figma-tokens.js","sourceRoot":"","sources":["../../src/design/figma-tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Design Module
3
+ *
4
+ * Provides Figma integration for design-to-code workflows.
5
+ *
6
+ * @module design
7
+ */
8
+ export { FigmaClient, createFigmaClient, getFigmaClient, resetFigmaClient, type FigmaClientConfig, type FigmaApiError, } from './figma-client.js';
9
+ export { mapFigmaFile, formatMapResult, findNodeById, findNodes, getNodePath, } from './figma-map.js';
10
+ export { getDesignConfigPath, loadDesignConfig, saveDesignConfig, addAlias, removeAlias, listAliases, resolveAlias, setDefaultFile, setDsFile, getAlias, hasAlias, getAliasesForFile, importAliases, } from './figma-alias.js';
11
+ export { extractTokensFromVariables, tokensToTailwind, formatTokens, compareTokens, formatComparison, } from './figma-tokens.js';
12
+ export { auditDesign, formatAuditResult, formatAuditSummary, } from './figma-audit.js';
13
+ export type { SimplifiedNode, TreeDisplayOptions, MapOutputFormat, MapResult, SelectQueryOptions, SelectResult, AuthStatus, } from './types.js';
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Design Module
3
+ *
4
+ * Provides Figma integration for design-to-code workflows.
5
+ *
6
+ * @module design
7
+ */
8
+ // Client
9
+ export { FigmaClient, createFigmaClient, getFigmaClient, resetFigmaClient, } from './figma-client.js';
10
+ // Mapping
11
+ export { mapFigmaFile, formatMapResult, findNodeById, findNodes, getNodePath, } from './figma-map.js';
12
+ // Aliases
13
+ export { getDesignConfigPath, loadDesignConfig, saveDesignConfig, addAlias, removeAlias, listAliases, resolveAlias, setDefaultFile, setDsFile, getAlias, hasAlias, getAliasesForFile, importAliases, } from './figma-alias.js';
14
+ // Tokens
15
+ export { extractTokensFromVariables, tokensToTailwind, formatTokens, compareTokens, formatComparison, } from './figma-tokens.js';
16
+ // Audit
17
+ export { auditDesign, formatAuditResult, formatAuditSummary, } from './figma-audit.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/design/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,SAAS;AACT,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GAGjB,MAAM,mBAAmB,CAAC;AAE3B,UAAU;AACV,OAAO,EACL,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,SAAS,EACT,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAExB,UAAU;AACV,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,WAAW,EACX,YAAY,EACZ,cAAc,EACd,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,SAAS;AACT,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,QAAQ;AACR,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Internal Types for Design Module
3
+ *
4
+ * Re-exports from @ax-cli/schemas plus internal types.
5
+ *
6
+ * @module design/types
7
+ */
8
+ export type { FigmaFileKey, FigmaNodeId, FigmaColor, FigmaRect, FigmaNode, FigmaNodeType, FigmaFileResponse, FigmaNodesResponse, FigmaVariablesResponse, FigmaVariable, FigmaVariableCollection, GetFileOptions, GetImagesOptions, DesignToken, TokenType, TokenFile, TokenGroup, TokenOutputFormat, TokenExtractionOptions, TailwindConfig, TokenComparisonResult, TokenDiffEntry, DesignAlias, AliasTarget, DesignConfig, AddAliasInput, AliasOperationResult, ResolvedAlias, AliasListEntry, AliasListResponse, AuditSeverity, AuditRuleId, AuditRule, AuditIssue, AuditResult, AuditConfig, AuditSummary, } from '@ax-cli/schemas';
9
+ /**
10
+ * Simplified node for tree display
11
+ */
12
+ export interface SimplifiedNode {
13
+ id: string;
14
+ name: string;
15
+ type: string;
16
+ children?: SimplifiedNode[];
17
+ componentKey?: string;
18
+ characters?: string;
19
+ hasAutoLayout?: boolean;
20
+ fillCount?: number;
21
+ }
22
+ /**
23
+ * Tree display options
24
+ */
25
+ export interface TreeDisplayOptions {
26
+ /** Maximum depth to display (undefined = unlimited) */
27
+ maxDepth?: number;
28
+ /** Include node IDs in output */
29
+ showIds?: boolean;
30
+ /** Include node types in output */
31
+ showTypes?: boolean;
32
+ /** Filter to specific node types */
33
+ filterTypes?: string[];
34
+ /** Show only frames and components */
35
+ framesOnly?: boolean;
36
+ }
37
+ /**
38
+ * Map output format
39
+ */
40
+ export type MapOutputFormat = 'tree' | 'json' | 'flat';
41
+ /**
42
+ * Result of a map operation
43
+ */
44
+ export interface MapResult {
45
+ fileKey: string;
46
+ fileName: string;
47
+ lastModified: string;
48
+ pageCount: number;
49
+ nodeCount: number;
50
+ componentCount: number;
51
+ styleCount: number;
52
+ root: SimplifiedNode;
53
+ }
54
+ /**
55
+ * Select query options
56
+ */
57
+ export interface SelectQueryOptions {
58
+ /** Search by name (partial match) */
59
+ name?: string;
60
+ /** Search by text content */
61
+ text?: string;
62
+ /** Filter by node type */
63
+ type?: string;
64
+ /** Search within a specific alias */
65
+ withinAlias?: string;
66
+ /** Search within a specific node ID */
67
+ withinNodeId?: string;
68
+ /** Maximum results to return */
69
+ limit?: number;
70
+ }
71
+ /**
72
+ * Select result entry
73
+ */
74
+ export interface SelectResult {
75
+ nodeId: string;
76
+ name: string;
77
+ type: string;
78
+ path: string;
79
+ characters?: string;
80
+ }
81
+ /**
82
+ * Auth status
83
+ */
84
+ export interface AuthStatus {
85
+ authenticated: boolean;
86
+ tokenType: 'personal' | 'oauth' | 'unknown';
87
+ tokenPreview?: string;
88
+ error?: string;
89
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Internal Types for Design Module
3
+ *
4
+ * Re-exports from @ax-cli/schemas plus internal types.
5
+ *
6
+ * @module design/types
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/design/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}