@atezer/figma-mcp-bridge 1.7.23 → 1.7.25

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 (119) hide show
  1. package/.claude-plugin/plugin.json +37 -0
  2. package/.cursor-plugin/plugin.json +21 -0
  3. package/CHANGELOG.md +30 -0
  4. package/README.md +4 -3
  5. package/agents/ds-auditor.md +29 -0
  6. package/agents/screen-builder.md +29 -0
  7. package/agents/token-syncer.md +26 -0
  8. package/assets/logo.png +0 -0
  9. package/commands/add-library.md +122 -0
  10. package/commands/ds-add.md +255 -0
  11. package/commands/ds-sync.md +314 -0
  12. package/commands/implement.md +43 -0
  13. package/commands/install-library.md +73 -0
  14. package/commands/setup.md +26 -0
  15. package/commands/test.md +39 -0
  16. package/commands/update.md +25 -0
  17. package/dist/core/config.d.ts +1 -5
  18. package/dist/core/config.d.ts.map +1 -1
  19. package/dist/core/config.js +11 -111
  20. package/dist/core/config.js.map +1 -1
  21. package/dist/core/plugin-bridge-server.d.ts.map +1 -1
  22. package/dist/core/plugin-bridge-server.js +1 -2
  23. package/dist/core/plugin-bridge-server.js.map +1 -1
  24. package/dist/core/response-guard.d.ts +1 -1
  25. package/dist/core/response-guard.js +1 -1
  26. package/dist/core/types/index.d.ts +2 -98
  27. package/dist/core/types/index.d.ts.map +1 -1
  28. package/dist/core/version.d.ts +1 -1
  29. package/dist/core/version.js +1 -1
  30. package/dist/local-plugin-only.d.ts.map +1 -1
  31. package/dist/local-plugin-only.js +14 -13
  32. package/dist/local-plugin-only.js.map +1 -1
  33. package/f-mcp-plugin/README.md +8 -15
  34. package/f-mcp-plugin/manifest.json +1 -3
  35. package/hooks/hooks.json +26 -0
  36. package/package.json +15 -31
  37. package/skills/BRAND_PROFILE_SCHEMA.md +113 -0
  38. package/skills/SKILL_INDEX.md +194 -0
  39. package/skills/TOOL_MAPPING.md +111 -0
  40. package/skills/ai-handoff-export/SKILL.md +254 -0
  41. package/skills/apply-figma-design-system/SKILL.md +104 -0
  42. package/skills/audit-figma-design-system/SKILL.md +278 -0
  43. package/skills/code-design-mapper/SKILL.md +370 -0
  44. package/skills/component-documentation/SKILL.md +190 -0
  45. package/skills/design-drift-detector/SKILL.md +407 -0
  46. package/skills/design-system-rules/SKILL.md +407 -0
  47. package/skills/design-token-pipeline/SKILL.md +619 -0
  48. package/skills/ds-impact-analysis/SKILL.md +266 -0
  49. package/skills/figjam-diagram-builder/SKILL.md +172 -0
  50. package/skills/figma-a11y-audit/SKILL.md +587 -0
  51. package/skills/figma-canvas-ops/SKILL.md +325 -0
  52. package/skills/figma-screen-analyzer/SKILL.md +235 -0
  53. package/skills/fix-figma-design-system-finding/SKILL.md +117 -0
  54. package/skills/fmcp-project-rules/SKILL.md +93 -0
  55. package/skills/generate-figma-library/SKILL.md +598 -0
  56. package/skills/generate-figma-screen/SKILL.md +689 -0
  57. package/skills/implement-design/SKILL.md +473 -0
  58. package/skills/ux-copy-guidance/SKILL.md +373 -0
  59. package/skills/visual-qa-compare/SKILL.md +166 -0
  60. package/dist/browser/base.d.ts +0 -50
  61. package/dist/browser/base.d.ts.map +0 -1
  62. package/dist/browser/base.js +0 -6
  63. package/dist/browser/base.js.map +0 -1
  64. package/dist/browser/local.d.ts +0 -81
  65. package/dist/browser/local.d.ts.map +0 -1
  66. package/dist/browser/local.js +0 -283
  67. package/dist/browser/local.js.map +0 -1
  68. package/dist/core/console-monitor.d.ts +0 -82
  69. package/dist/core/console-monitor.d.ts.map +0 -1
  70. package/dist/core/console-monitor.js +0 -428
  71. package/dist/core/console-monitor.js.map +0 -1
  72. package/dist/core/design-system-manifest.d.ts +0 -272
  73. package/dist/core/design-system-manifest.d.ts.map +0 -1
  74. package/dist/core/design-system-manifest.js +0 -261
  75. package/dist/core/design-system-manifest.js.map +0 -1
  76. package/dist/core/enrichment/enrichment-service.d.ts +0 -52
  77. package/dist/core/enrichment/enrichment-service.d.ts.map +0 -1
  78. package/dist/core/enrichment/enrichment-service.js +0 -272
  79. package/dist/core/enrichment/enrichment-service.js.map +0 -1
  80. package/dist/core/enrichment/index.d.ts +0 -8
  81. package/dist/core/enrichment/index.d.ts.map +0 -1
  82. package/dist/core/enrichment/index.js +0 -8
  83. package/dist/core/enrichment/index.js.map +0 -1
  84. package/dist/core/enrichment/relationship-mapper.d.ts +0 -106
  85. package/dist/core/enrichment/relationship-mapper.d.ts.map +0 -1
  86. package/dist/core/enrichment/relationship-mapper.js +0 -352
  87. package/dist/core/enrichment/relationship-mapper.js.map +0 -1
  88. package/dist/core/enrichment/style-resolver.d.ts +0 -80
  89. package/dist/core/enrichment/style-resolver.d.ts.map +0 -1
  90. package/dist/core/enrichment/style-resolver.js +0 -327
  91. package/dist/core/enrichment/style-resolver.js.map +0 -1
  92. package/dist/core/figma-api.d.ts +0 -137
  93. package/dist/core/figma-api.d.ts.map +0 -1
  94. package/dist/core/figma-api.js +0 -274
  95. package/dist/core/figma-api.js.map +0 -1
  96. package/dist/core/figma-desktop-connector.d.ts +0 -242
  97. package/dist/core/figma-desktop-connector.d.ts.map +0 -1
  98. package/dist/core/figma-desktop-connector.js +0 -1042
  99. package/dist/core/figma-desktop-connector.js.map +0 -1
  100. package/dist/core/figma-reconstruction-spec.d.ts +0 -162
  101. package/dist/core/figma-reconstruction-spec.d.ts.map +0 -1
  102. package/dist/core/figma-reconstruction-spec.js +0 -387
  103. package/dist/core/figma-reconstruction-spec.js.map +0 -1
  104. package/dist/core/figma-tools.d.ts +0 -21
  105. package/dist/core/figma-tools.d.ts.map +0 -1
  106. package/dist/core/figma-tools.js +0 -2920
  107. package/dist/core/figma-tools.js.map +0 -1
  108. package/dist/core/snippet-injector.d.ts +0 -24
  109. package/dist/core/snippet-injector.d.ts.map +0 -1
  110. package/dist/core/snippet-injector.js +0 -97
  111. package/dist/core/snippet-injector.js.map +0 -1
  112. package/dist/core/types/enriched.d.ts +0 -213
  113. package/dist/core/types/enriched.d.ts.map +0 -1
  114. package/dist/core/types/enriched.js +0 -6
  115. package/dist/core/types/enriched.js.map +0 -1
  116. package/dist/local.d.ts +0 -73
  117. package/dist/local.d.ts.map +0 -1
  118. package/dist/local.js +0 -2605
  119. package/dist/local.js.map +0 -1
@@ -1,274 +0,0 @@
1
- /**
2
- * Figma REST API Client
3
- * Handles HTTP calls to Figma's REST API for file data, variables, components, and styles
4
- */
5
- import { createChildLogger } from './logger.js';
6
- const logger = createChildLogger({ component: 'figma-api' });
7
- const FIGMA_API_BASE = 'https://api.figma.com/v1';
8
- /**
9
- * Extract file key from Figma URL
10
- * @example https://www.figma.com/design/abc123/My-File -> abc123
11
- */
12
- export function extractFileKey(url) {
13
- try {
14
- const urlObj = new URL(url);
15
- // Match patterns like /design/FILE_KEY or /file/FILE_KEY
16
- const match = urlObj.pathname.match(/\/(design|file)\/([a-zA-Z0-9]+)/);
17
- return match ? match[2] : null;
18
- }
19
- catch (error) {
20
- logger.error({ error, url }, 'Failed to extract file key from URL');
21
- return null;
22
- }
23
- }
24
- /**
25
- * Figma API Client
26
- * Makes authenticated requests to Figma REST API
27
- */
28
- export class FigmaAPI {
29
- constructor(config) {
30
- this.accessToken = config.accessToken;
31
- }
32
- /**
33
- * Make authenticated request to Figma API
34
- */
35
- async request(endpoint, options = {}) {
36
- const url = `${FIGMA_API_BASE}${endpoint}`;
37
- // Detect token type and use appropriate authentication header
38
- // OAuth tokens start with 'figu_' and require Authorization: Bearer header
39
- // Personal Access Tokens use X-Figma-Token header
40
- const isOAuthToken = this.accessToken.startsWith('figu_');
41
- // Debug logging to verify token is being used
42
- const tokenPreview = this.accessToken ? `${this.accessToken.substring(0, 10)}...` : 'NO TOKEN';
43
- logger.info({
44
- url,
45
- tokenPreview,
46
- hasToken: !!this.accessToken,
47
- tokenLength: this.accessToken?.length,
48
- isOAuthToken,
49
- authMethod: isOAuthToken ? 'Bearer' : 'X-Figma-Token'
50
- }, 'Making Figma API request with token');
51
- const headers = {
52
- 'Content-Type': 'application/json',
53
- ...(options.headers || {}),
54
- };
55
- // Add authentication header based on token type
56
- if (isOAuthToken) {
57
- headers['Authorization'] = `Bearer ${this.accessToken}`;
58
- }
59
- else {
60
- headers['X-Figma-Token'] = this.accessToken;
61
- }
62
- const response = await fetch(url, {
63
- ...options,
64
- headers,
65
- });
66
- if (!response.ok) {
67
- const errorText = await response.text();
68
- logger.error({ status: response.status, statusText: response.statusText, body: errorText }, 'Figma API request failed');
69
- throw new Error(`Figma API error (${response.status}): ${errorText}`);
70
- }
71
- const data = await response.json();
72
- return data;
73
- }
74
- /**
75
- * GET /v1/files/:file_key
76
- * Get full file data including document tree, components, and styles
77
- */
78
- async getFile(fileKey, options) {
79
- let endpoint = `/files/${fileKey}`;
80
- const params = new URLSearchParams();
81
- if (options?.version)
82
- params.append('version', options.version);
83
- if (options?.ids)
84
- params.append('ids', options.ids.join(','));
85
- if (options?.depth !== undefined)
86
- params.append('depth', options.depth.toString());
87
- if (options?.geometry)
88
- params.append('geometry', options.geometry);
89
- if (options?.plugin_data)
90
- params.append('plugin_data', options.plugin_data);
91
- if (options?.branch_data)
92
- params.append('branch_data', 'true');
93
- if (params.toString()) {
94
- endpoint += `?${params.toString()}`;
95
- }
96
- return this.request(endpoint);
97
- }
98
- /**
99
- * GET /v1/files/:file_key/variables/local
100
- * Get local variables (design tokens) from a file
101
- */
102
- async getLocalVariables(fileKey) {
103
- const response = await this.request(`/files/${fileKey}/variables/local`);
104
- // Figma API returns {status, error, meta: {variableCollections, variables}}
105
- // Extract meta to match expected format
106
- return response.meta || response;
107
- }
108
- /**
109
- * GET /v1/files/:file_key/variables/published
110
- * Get published variables from a file
111
- */
112
- async getPublishedVariables(fileKey) {
113
- const response = await this.request(`/files/${fileKey}/variables/published`);
114
- // Figma API returns {status, error, meta: {variableCollections, variables}}
115
- // Extract meta to match expected format
116
- return response.meta || response;
117
- }
118
- /**
119
- * GET /v1/files/:file_key/nodes
120
- * Get specific nodes by ID
121
- */
122
- async getNodes(fileKey, nodeIds, options) {
123
- let endpoint = `/files/${fileKey}/nodes`;
124
- const params = new URLSearchParams();
125
- params.append('ids', nodeIds.join(','));
126
- if (options?.version)
127
- params.append('version', options.version);
128
- if (options?.depth !== undefined)
129
- params.append('depth', options.depth.toString());
130
- if (options?.geometry)
131
- params.append('geometry', options.geometry);
132
- if (options?.plugin_data)
133
- params.append('plugin_data', options.plugin_data);
134
- endpoint += `?${params.toString()}`;
135
- return this.request(endpoint);
136
- }
137
- /**
138
- * GET /v1/files/:file_key/styles
139
- * Get styles from a file
140
- */
141
- async getStyles(fileKey) {
142
- return this.request(`/files/${fileKey}/styles`);
143
- }
144
- /**
145
- * GET /v1/files/:file_key/components
146
- * Get components from a file
147
- */
148
- async getComponents(fileKey) {
149
- return this.request(`/files/${fileKey}/components`);
150
- }
151
- /**
152
- * GET /v1/files/:file_key/component_sets
153
- * Get component sets (variants) from a file
154
- */
155
- async getComponentSets(fileKey) {
156
- return this.request(`/files/${fileKey}/component_sets`);
157
- }
158
- /**
159
- * GET /v1/images/:file_key
160
- * Renders images for specified nodes
161
- * @param fileKey - The file key
162
- * @param nodeIds - Node IDs to render (single string or array)
163
- * @param options - Rendering options
164
- * @returns Map of node IDs to image URLs (URLs expire after 30 days)
165
- */
166
- async getImages(fileKey, nodeIds, options) {
167
- const params = new URLSearchParams();
168
- // Handle single or multiple node IDs
169
- const ids = Array.isArray(nodeIds) ? nodeIds.join(',') : nodeIds;
170
- params.append('ids', ids);
171
- // Add optional parameters
172
- if (options?.scale !== undefined)
173
- params.append('scale', options.scale.toString());
174
- if (options?.format)
175
- params.append('format', options.format);
176
- if (options?.svg_outline_text !== undefined)
177
- params.append('svg_outline_text', options.svg_outline_text.toString());
178
- if (options?.svg_include_id !== undefined)
179
- params.append('svg_include_id', options.svg_include_id.toString());
180
- if (options?.svg_include_node_id !== undefined)
181
- params.append('svg_include_node_id', options.svg_include_node_id.toString());
182
- if (options?.svg_simplify_stroke !== undefined)
183
- params.append('svg_simplify_stroke', options.svg_simplify_stroke.toString());
184
- if (options?.contents_only !== undefined)
185
- params.append('contents_only', options.contents_only.toString());
186
- const endpoint = `/images/${fileKey}?${params.toString()}`;
187
- logger.info({ fileKey, ids, options }, 'Rendering images');
188
- return this.request(endpoint);
189
- }
190
- /**
191
- * Helper: Get all design tokens (variables) with formatted output
192
- */
193
- async getAllVariables(fileKey) {
194
- // Don't catch errors - let them bubble up so proper error messages are shown
195
- const [local, published] = await Promise.all([
196
- this.getLocalVariables(fileKey),
197
- this.getPublishedVariables(fileKey).catch(() => ({ variables: {} })), // Published can fail gracefully
198
- ]);
199
- return { local, published };
200
- }
201
- /**
202
- * Helper: Get component metadata with properties
203
- */
204
- async getComponentData(fileKey, nodeId) {
205
- const response = await this.getNodes(fileKey, [nodeId], { depth: 2 });
206
- return response.nodes?.[nodeId];
207
- }
208
- /**
209
- * Helper: Search for components by name
210
- */
211
- async searchComponents(fileKey, searchTerm) {
212
- const { meta } = await this.getComponents(fileKey);
213
- const components = meta?.components || [];
214
- return components.filter((comp) => comp.name?.toLowerCase().includes(searchTerm.toLowerCase()));
215
- }
216
- }
217
- /**
218
- * Helper function to format variables for display
219
- */
220
- export function formatVariables(variablesData) {
221
- const collections = Object.entries(variablesData.variableCollections || {}).map(([id, collection]) => ({
222
- id,
223
- name: collection.name,
224
- key: collection.key,
225
- modes: collection.modes,
226
- variableIds: collection.variableIds,
227
- }));
228
- const variables = Object.entries(variablesData.variables || {}).map(([id, variable]) => ({
229
- id,
230
- name: variable.name,
231
- key: variable.key,
232
- resolvedType: variable.resolvedType,
233
- valuesByMode: variable.valuesByMode,
234
- variableCollectionId: variable.variableCollectionId,
235
- scopes: variable.scopes,
236
- description: variable.description,
237
- }));
238
- const variablesByType = variables.reduce((acc, v) => {
239
- acc[v.resolvedType] = (acc[v.resolvedType] || 0) + 1;
240
- return acc;
241
- }, {});
242
- return {
243
- collections,
244
- variables,
245
- summary: {
246
- totalCollections: collections.length,
247
- totalVariables: variables.length,
248
- variablesByType,
249
- },
250
- };
251
- }
252
- /**
253
- * Helper function to format component data for display
254
- */
255
- export function formatComponentData(componentNode) {
256
- return {
257
- id: componentNode.id,
258
- name: componentNode.name,
259
- type: componentNode.type,
260
- description: componentNode.description,
261
- descriptionMarkdown: componentNode.descriptionMarkdown,
262
- properties: componentNode.componentPropertyDefinitions,
263
- children: componentNode.children?.map((child) => ({
264
- id: child.id,
265
- name: child.name,
266
- type: child.type,
267
- })),
268
- bounds: componentNode.absoluteBoundingBox,
269
- fills: componentNode.fills,
270
- strokes: componentNode.strokes,
271
- effects: componentNode.effects,
272
- };
273
- }
274
- //# sourceMappingURL=figma-api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"figma-api.js","sourceRoot":"","sources":["../../src/core/figma-api.ts"],"names":[],"mappings":"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"}
@@ -1,242 +0,0 @@
1
- /**
2
- * Figma Desktop Connector
3
- *
4
- * This service connects directly to Figma Desktop's plugin context
5
- * to execute code with access to the full Figma Plugin API,
6
- * including variables without Enterprise access.
7
- *
8
- * Uses Puppeteer's Worker API to directly access plugin workers,
9
- * bypassing CDP context enumeration limitations.
10
- */
11
- import { Page } from 'puppeteer-core';
12
- export declare class FigmaDesktopConnector {
13
- private page;
14
- constructor(page: Page);
15
- /**
16
- * Initialize connection to Figma Desktop's plugin context
17
- * No setup needed - Puppeteer handles worker access automatically
18
- */
19
- initialize(): Promise<void>;
20
- /**
21
- * Execute code in Figma's plugin context where the figma API is available
22
- * Uses Puppeteer's direct worker access instead of CDP context enumeration
23
- */
24
- executeInPluginContext<T = any>(code: string): Promise<T>;
25
- /**
26
- * Get Figma variables from plugin UI window object
27
- * This bypasses Figma's plugin sandbox security restrictions
28
- * by accessing data that the plugin posted to its UI iframe
29
- */
30
- getVariablesFromPluginUI(fileKey?: string): Promise<any>;
31
- /**
32
- * Get component data by node ID from plugin UI window object
33
- * This bypasses the REST API bug where descriptions are missing
34
- * by accessing data from the F-MCP ATezer Bridge plugin via its UI iframe
35
- */
36
- getComponentFromPluginUI(nodeId: string): Promise<any>;
37
- /**
38
- * Get Figma variables using the desktop connection
39
- * This bypasses the Enterprise requirement!
40
- */
41
- getVariables(fileKey?: string): Promise<any>;
42
- /**
43
- * Clean up resources (no-op since we use Puppeteer's built-in worker management)
44
- */
45
- /**
46
- * Get component data by node ID using Plugin API
47
- * This bypasses the REST API bug where descriptions are missing
48
- */
49
- getComponentByNodeId(nodeId: string): Promise<any>;
50
- dispose(): Promise<void>;
51
- /**
52
- * Find the F-MCP ATezer Bridge plugin UI iframe
53
- * Returns the frame that has the write operation functions
54
- * Handles detached frame errors gracefully
55
- */
56
- private findPluginUIFrame;
57
- /**
58
- * Execute arbitrary code in Figma's plugin context
59
- * This is the power tool that can run any Figma Plugin API code
60
- * Includes retry logic for detached frame errors
61
- */
62
- executeCodeViaUI(code: string, timeout?: number): Promise<any>;
63
- /**
64
- * Update a variable's value in a specific mode
65
- */
66
- updateVariable(variableId: string, modeId: string, value: any): Promise<any>;
67
- /**
68
- * Create a new variable in a collection
69
- */
70
- createVariable(name: string, collectionId: string, resolvedType: 'COLOR' | 'FLOAT' | 'STRING' | 'BOOLEAN', options?: {
71
- valuesByMode?: Record<string, any>;
72
- description?: string;
73
- scopes?: string[];
74
- }): Promise<any>;
75
- /**
76
- * Create a new variable collection
77
- */
78
- createVariableCollection(name: string, options?: {
79
- initialModeName?: string;
80
- additionalModes?: string[];
81
- }): Promise<any>;
82
- /**
83
- * Delete a variable
84
- */
85
- deleteVariable(variableId: string): Promise<any>;
86
- /**
87
- * Delete a variable collection
88
- */
89
- deleteVariableCollection(collectionId: string): Promise<any>;
90
- /**
91
- * Refresh variables data from Figma
92
- */
93
- refreshVariables(): Promise<any>;
94
- /**
95
- * Rename a variable
96
- */
97
- renameVariable(variableId: string, newName: string): Promise<any>;
98
- /**
99
- * Add a mode to a variable collection
100
- */
101
- addMode(collectionId: string, modeName: string): Promise<any>;
102
- /**
103
- * Rename a mode in a variable collection
104
- */
105
- renameMode(collectionId: string, modeId: string, newName: string): Promise<any>;
106
- /**
107
- * Get all local components for design system manifest generation.
108
- * Defaults to currentPageOnly: true to avoid timeout on large files (dynamic-page).
109
- */
110
- getLocalComponents(opts?: {
111
- currentPageOnly?: boolean;
112
- limit?: number;
113
- }): Promise<{
114
- success: boolean;
115
- data?: {
116
- components: any[];
117
- componentSets: any[];
118
- totalComponents: number;
119
- totalComponentSets: number;
120
- fileKey: string;
121
- timestamp: number;
122
- };
123
- error?: string;
124
- }>;
125
- /**
126
- * Instantiate a component with overrides
127
- * Supports both published library components (by key) and local components (by nodeId)
128
- */
129
- instantiateComponent(componentKey: string, options?: {
130
- nodeId?: string;
131
- position?: {
132
- x: number;
133
- y: number;
134
- };
135
- size?: {
136
- width: number;
137
- height: number;
138
- };
139
- overrides?: Record<string, any>;
140
- variant?: Record<string, string>;
141
- parentId?: string;
142
- }): Promise<{
143
- success: boolean;
144
- instance?: {
145
- id: string;
146
- name: string;
147
- x: number;
148
- y: number;
149
- width: number;
150
- height: number;
151
- };
152
- error?: string;
153
- }>;
154
- /**
155
- * Set description on a component or style
156
- */
157
- setNodeDescription(nodeId: string, description: string, descriptionMarkdown?: string): Promise<any>;
158
- /**
159
- * Add a component property
160
- */
161
- addComponentProperty(nodeId: string, propertyName: string, type: 'BOOLEAN' | 'TEXT' | 'INSTANCE_SWAP' | 'VARIANT', defaultValue: any, options?: {
162
- preferredValues?: any[];
163
- }): Promise<any>;
164
- /**
165
- * Edit an existing component property
166
- */
167
- editComponentProperty(nodeId: string, propertyName: string, newValue: {
168
- name?: string;
169
- defaultValue?: any;
170
- preferredValues?: any[];
171
- }): Promise<any>;
172
- /**
173
- * Delete a component property
174
- */
175
- deleteComponentProperty(nodeId: string, propertyName: string): Promise<any>;
176
- /**
177
- * Resize a node
178
- */
179
- resizeNode(nodeId: string, width: number, height: number, withConstraints?: boolean): Promise<any>;
180
- /**
181
- * Move/position a node
182
- */
183
- moveNode(nodeId: string, x: number, y: number): Promise<any>;
184
- /**
185
- * Set fills (colors) on a node
186
- */
187
- setNodeFills(nodeId: string, fills: any[]): Promise<any>;
188
- /**
189
- * Set strokes on a node
190
- */
191
- setNodeStrokes(nodeId: string, strokes: any[], strokeWeight?: number): Promise<any>;
192
- /**
193
- * Set opacity on a node
194
- */
195
- setNodeOpacity(nodeId: string, opacity: number): Promise<any>;
196
- /**
197
- * Set corner radius on a node
198
- */
199
- setNodeCornerRadius(nodeId: string, radius: number): Promise<any>;
200
- /**
201
- * Clone/duplicate a node
202
- */
203
- cloneNode(nodeId: string): Promise<any>;
204
- /**
205
- * Delete a node
206
- */
207
- deleteNode(nodeId: string): Promise<any>;
208
- /**
209
- * Rename a node
210
- */
211
- renameNode(nodeId: string, newName: string): Promise<any>;
212
- /**
213
- * Set text content on a text node
214
- */
215
- setTextContent(nodeId: string, text: string, options?: {
216
- fontSize?: number;
217
- }): Promise<any>;
218
- /**
219
- * Create a child node
220
- */
221
- createChildNode(parentId: string, nodeType: 'RECTANGLE' | 'ELLIPSE' | 'FRAME' | 'TEXT' | 'LINE' | 'POLYGON' | 'STAR' | 'VECTOR', properties?: {
222
- name?: string;
223
- x?: number;
224
- y?: number;
225
- width?: number;
226
- height?: number;
227
- fills?: any[];
228
- text?: string;
229
- }): Promise<any>;
230
- /**
231
- * Capture screenshot via plugin UI (for visual validation)
232
- */
233
- captureScreenshot(nodeId: string | null, options?: {
234
- format?: string;
235
- scale?: number;
236
- }): Promise<any>;
237
- /**
238
- * Set instance properties via plugin UI
239
- */
240
- setInstanceProperties(nodeId: string, properties: Record<string, unknown>): Promise<any>;
241
- }
242
- //# sourceMappingURL=figma-desktop-connector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"figma-desktop-connector.d.ts","sourceRoot":"","sources":["../../src/core/figma-desktop-connector.ts"],"names":[],"mappings":"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"}