@fprad0/skill-master-mcp 0.0.9 → 0.0.10

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 (195) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +16 -2
  3. package/VERSION.md +3 -3
  4. package/bin/lib/menu-core.mjs +651 -16
  5. package/bin/skill-master-bootstrap-global.mjs +14 -1
  6. package/bin/skill-master-doctor.mjs +168 -0
  7. package/bin/skill-master-install-global-skills.mjs +30 -10
  8. package/bin/skill-master-menu.mjs +184 -36
  9. package/bin/skill-master-register-clients.mjs +26 -3
  10. package/dist/index.js +30 -5
  11. package/dist/index.js.map +1 -1
  12. package/docs/skill-candidates/v0.0.10/cli-creator/LICENSE.txt +201 -0
  13. package/docs/skill-candidates/v0.0.10/cli-creator/SKILL.md +160 -0
  14. package/docs/skill-candidates/v0.0.10/cli-creator/agents/openai.yaml +4 -0
  15. package/docs/skill-candidates/v0.0.10/cli-creator/references/agent-cli-patterns.md +154 -0
  16. package/docs/skill-candidates/v0.0.10/developer-workstation-ops/SKILL.md +32 -0
  17. package/docs/skill-candidates/v0.0.10/figma/LICENSE.txt +2 -0
  18. package/docs/skill-candidates/v0.0.10/figma/SKILL.md +42 -0
  19. package/docs/skill-candidates/v0.0.10/figma/agents/openai.yaml +14 -0
  20. package/docs/skill-candidates/v0.0.10/figma/assets/figma-small.svg +3 -0
  21. package/docs/skill-candidates/v0.0.10/figma/assets/figma.png +0 -0
  22. package/docs/skill-candidates/v0.0.10/figma/assets/icon.svg +28 -0
  23. package/docs/skill-candidates/v0.0.10/figma/references/figma-mcp-config.md +35 -0
  24. package/docs/skill-candidates/v0.0.10/figma/references/figma-tools-and-prompts.md +34 -0
  25. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/LICENSE.TXT +2 -0
  26. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/SKILL.md +349 -0
  27. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/agents/openai.yaml +14 -0
  28. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/figma-small.svg +3 -0
  29. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/figma.png +0 -0
  30. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/icon.svg +28 -0
  31. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/references/mapping-checklist.md +7 -0
  32. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/scripts/normalize_node_id.py +25 -0
  33. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/LICENSE.TXT +2 -0
  34. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/SKILL.md +537 -0
  35. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/agents/openai.yaml +14 -0
  36. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/figma-small.svg +3 -0
  37. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/figma.png +0 -0
  38. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/icon.svg +28 -0
  39. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/references/rule-template.md +15 -0
  40. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/scripts/check_agents_md.sh +9 -0
  41. package/docs/skill-candidates/v0.0.10/figma-generate-design/LICENSE.TXT +2 -0
  42. package/docs/skill-candidates/v0.0.10/figma-generate-design/SKILL.md +341 -0
  43. package/docs/skill-candidates/v0.0.10/figma-generate-design/agents/openai.yaml +14 -0
  44. package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/figma-small.svg +3 -0
  45. package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/figma.png +0 -0
  46. package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/icon.svg +28 -0
  47. package/docs/skill-candidates/v0.0.10/figma-generate-design/maintainers.yml +1 -0
  48. package/docs/skill-candidates/v0.0.10/figma-generate-library/LICENSE.TXT +2 -0
  49. package/docs/skill-candidates/v0.0.10/figma-generate-library/SKILL.md +314 -0
  50. package/docs/skill-candidates/v0.0.10/figma-generate-library/agents/openai.yaml +14 -0
  51. package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/figma-small.svg +3 -0
  52. package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/figma.png +0 -0
  53. package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/icon.svg +28 -0
  54. package/docs/skill-candidates/v0.0.10/figma-generate-library/maintainers.yml +3 -0
  55. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/code-connect-setup.md +260 -0
  56. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/component-creation.md +1014 -0
  57. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/discovery-phase.md +518 -0
  58. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/documentation-creation.md +834 -0
  59. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/error-recovery.md +540 -0
  60. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/naming-conventions.md +527 -0
  61. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/token-creation.md +962 -0
  62. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/bindVariablesToComponent.js +110 -0
  63. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/cleanupOrphans.js +127 -0
  64. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createComponentWithVariants.js +148 -0
  65. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createDocumentationPage.js +139 -0
  66. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createSemanticTokens.js +108 -0
  67. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createVariableCollection.js +49 -0
  68. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/inspectFileStructure.js +121 -0
  69. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/rehydrateState.js +92 -0
  70. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/validateCreation.js +83 -0
  71. package/docs/skill-candidates/v0.0.10/figma-implement-design/LICENSE.txt +2 -0
  72. package/docs/skill-candidates/v0.0.10/figma-implement-design/SKILL.md +258 -0
  73. package/docs/skill-candidates/v0.0.10/figma-implement-design/agents/openai.yaml +14 -0
  74. package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/figma-small.svg +3 -0
  75. package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/figma.png +0 -0
  76. package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/icon.svg +28 -0
  77. package/docs/skill-candidates/v0.0.10/figma-use/LICENSE.TXT +2 -0
  78. package/docs/skill-candidates/v0.0.10/figma-use/SKILL.md +233 -0
  79. package/docs/skill-candidates/v0.0.10/figma-use/agents/openai.yaml +14 -0
  80. package/docs/skill-candidates/v0.0.10/figma-use/assets/figma-small.svg +3 -0
  81. package/docs/skill-candidates/v0.0.10/figma-use/assets/figma.png +0 -0
  82. package/docs/skill-candidates/v0.0.10/figma-use/assets/icon.svg +28 -0
  83. package/docs/skill-candidates/v0.0.10/figma-use/maintainers.yml +1 -0
  84. package/docs/skill-candidates/v0.0.10/figma-use/references/api-reference.md +301 -0
  85. package/docs/skill-candidates/v0.0.10/figma-use/references/common-patterns.md +512 -0
  86. package/docs/skill-candidates/v0.0.10/figma-use/references/component-patterns.md +488 -0
  87. package/docs/skill-candidates/v0.0.10/figma-use/references/effect-style-patterns.md +123 -0
  88. package/docs/skill-candidates/v0.0.10/figma-use/references/gotchas.md +599 -0
  89. package/docs/skill-candidates/v0.0.10/figma-use/references/maintainers.yml +12 -0
  90. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-patterns.md +513 -0
  91. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.d.ts +11293 -0
  92. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.index.md +441 -0
  93. package/docs/skill-candidates/v0.0.10/figma-use/references/text-style-patterns.md +203 -0
  94. package/docs/skill-candidates/v0.0.10/figma-use/references/validation-and-recovery.md +109 -0
  95. package/docs/skill-candidates/v0.0.10/figma-use/references/variable-patterns.md +354 -0
  96. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/maintainers.yml +9 -0
  97. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--creating.md +17 -0
  98. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--using.md +17 -0
  99. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components.md +50 -0
  100. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-effect-styles.md +52 -0
  101. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-text-styles.md +90 -0
  102. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--creating.md +13 -0
  103. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--using.md +13 -0
  104. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables.md +64 -0
  105. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds.md +41 -0
  106. package/docs/skill-candidates/v0.0.10/frontend-design/LICENSE.txt +177 -0
  107. package/docs/skill-candidates/v0.0.10/frontend-design/SKILL.md +55 -0
  108. package/docs/skill-candidates/v0.0.10/frontend-ui-ux-systems/SKILL.md +32 -0
  109. package/docs/skill-candidates/v0.0.10/github/SKILL.md +74 -0
  110. package/docs/skill-candidates/v0.0.10/github/agents/openai.yaml +6 -0
  111. package/docs/skill-candidates/v0.0.10/github/assets/github-small.svg +3 -0
  112. package/docs/skill-candidates/v0.0.10/github/assets/github.png +0 -0
  113. package/docs/skill-candidates/v0.0.10/image-graphic-design-rendering/SKILL.md +28 -0
  114. package/docs/skill-candidates/v0.0.10/language-quality-pt-en-fr-it-ru/SKILL.md +28 -0
  115. package/docs/skill-candidates/v0.0.10/math-physics-reasoning/SKILL.md +28 -0
  116. package/docs/skill-candidates/v0.0.10/mcp-builder/LICENSE.txt +202 -0
  117. package/docs/skill-candidates/v0.0.10/mcp-builder/SKILL.md +236 -0
  118. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/evaluation.md +602 -0
  119. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/mcp_best_practices.md +249 -0
  120. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/node_mcp_server.md +970 -0
  121. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/python_mcp_server.md +719 -0
  122. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/connections.py +151 -0
  123. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/evaluation.py +373 -0
  124. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/example_evaluation.xml +22 -0
  125. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/requirements.txt +2 -0
  126. package/docs/skill-candidates/v0.0.10/mcp-client-readiness/SKILL.md +31 -0
  127. package/docs/skill-candidates/v0.0.10/openai-docs/LICENSE.txt +201 -0
  128. package/docs/skill-candidates/v0.0.10/openai-docs/SKILL.md +161 -0
  129. package/docs/skill-candidates/v0.0.10/openai-docs/agents/openai.yaml +14 -0
  130. package/docs/skill-candidates/v0.0.10/openai-docs/assets/openai-small.svg +3 -0
  131. package/docs/skill-candidates/v0.0.10/openai-docs/assets/openai.png +0 -0
  132. package/docs/skill-candidates/v0.0.10/openai-docs/references/latest-model.md +37 -0
  133. package/docs/skill-candidates/v0.0.10/openai-docs/references/prompting-guide.md +244 -0
  134. package/docs/skill-candidates/v0.0.10/openai-docs/references/upgrade-guide.md +181 -0
  135. package/docs/skill-candidates/v0.0.10/openai-docs/scripts/fetch-codex-manual.mjs +598 -0
  136. package/docs/skill-candidates/v0.0.10/openai-docs/scripts/resolve-latest-model-info.js +147 -0
  137. package/docs/skill-candidates/v0.0.10/playwright/LICENSE.txt +201 -0
  138. package/docs/skill-candidates/v0.0.10/playwright/NOTICE.txt +14 -0
  139. package/docs/skill-candidates/v0.0.10/playwright/SKILL.md +147 -0
  140. package/docs/skill-candidates/v0.0.10/playwright/agents/openai.yaml +6 -0
  141. package/docs/skill-candidates/v0.0.10/playwright/assets/playwright-small.svg +3 -0
  142. package/docs/skill-candidates/v0.0.10/playwright/assets/playwright.png +0 -0
  143. package/docs/skill-candidates/v0.0.10/playwright/references/cli.md +116 -0
  144. package/docs/skill-candidates/v0.0.10/playwright/references/workflows.md +95 -0
  145. package/docs/skill-candidates/v0.0.10/playwright/scripts/playwright_cli.sh +25 -0
  146. package/docs/skill-candidates/v0.0.10/polyglot-backend-engineering/SKILL.md +32 -0
  147. package/docs/skill-candidates/v0.0.10/screenshot/LICENSE.txt +201 -0
  148. package/docs/skill-candidates/v0.0.10/screenshot/SKILL.md +267 -0
  149. package/docs/skill-candidates/v0.0.10/screenshot/agents/openai.yaml +6 -0
  150. package/docs/skill-candidates/v0.0.10/screenshot/assets/screenshot-small.svg +5 -0
  151. package/docs/skill-candidates/v0.0.10/screenshot/assets/screenshot.png +0 -0
  152. package/docs/skill-candidates/v0.0.10/screenshot/scripts/ensure_macos_permissions.sh +54 -0
  153. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_display_info.swift +22 -0
  154. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_permissions.swift +40 -0
  155. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_window_info.swift +126 -0
  156. package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.ps1 +163 -0
  157. package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.py +585 -0
  158. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/SKILL.md +62 -0
  159. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/agents/openai.yaml +4 -0
  160. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/activation-policy.md +77 -0
  161. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/human-approval-policy.md +83 -0
  162. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/persona-dev-senior-master.md +46 -0
  163. package/docs/skill-candidates/v0.0.10/terminal-menu-operations/SKILL.md +30 -0
  164. package/docs/skill-candidates/v0.0.10/terminal-pixel-art-tui/SKILL.md +43 -0
  165. package/docs/skill-candidates/v0.0.10/webapp-testing/LICENSE.txt +202 -0
  166. package/docs/skill-candidates/v0.0.10/webapp-testing/SKILL.md +96 -0
  167. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/console_logging.py +35 -0
  168. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/element_discovery.py +40 -0
  169. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/static_html_automation.py +33 -0
  170. package/docs/skill-candidates/v0.0.10/webapp-testing/scripts/with_server.py +106 -0
  171. package/docs/skill-candidates/v0.0.10/winui-app/LICENSE.txt +202 -0
  172. package/docs/skill-candidates/v0.0.10/winui-app/SKILL.md +94 -0
  173. package/docs/skill-candidates/v0.0.10/winui-app/agents/openai.yaml +5 -0
  174. package/docs/skill-candidates/v0.0.10/winui-app/assets/winui.png +0 -0
  175. package/docs/skill-candidates/v0.0.10/winui-app/config.yaml +50 -0
  176. package/docs/skill-candidates/v0.0.10/winui-app/references/_sections.md +96 -0
  177. package/docs/skill-candidates/v0.0.10/winui-app/references/accessibility-input-and-localization.md +51 -0
  178. package/docs/skill-candidates/v0.0.10/winui-app/references/build-run-and-launch-verification.md +72 -0
  179. package/docs/skill-candidates/v0.0.10/winui-app/references/community-toolkit-controls-and-helpers.md +57 -0
  180. package/docs/skill-candidates/v0.0.10/winui-app/references/controls-layout-and-adaptive-ui.md +84 -0
  181. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-environment-audit-and-remediation.md +82 -0
  182. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-setup-and-project-selection.md +67 -0
  183. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-template-first-recovery.md +62 -0
  184. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-winui-app-structure.md +62 -0
  185. package/docs/skill-candidates/v0.0.10/winui-app/references/motion-animations-and-polish.md +45 -0
  186. package/docs/skill-candidates/v0.0.10/winui-app/references/performance-diagnostics-and-responsiveness.md +46 -0
  187. package/docs/skill-candidates/v0.0.10/winui-app/references/sample-source-map.md +37 -0
  188. package/docs/skill-candidates/v0.0.10/winui-app/references/shell-navigation-and-windowing.md +67 -0
  189. package/docs/skill-candidates/v0.0.10/winui-app/references/styling-theming-materials-and-icons.md +71 -0
  190. package/docs/skill-candidates/v0.0.10/winui-app/references/testing-debugging-and-review-checklists.md +77 -0
  191. package/docs/skill-candidates/v0.0.10/winui-app/references/windows-app-sdk-lifecycle-notifications-and-deployment.md +52 -0
  192. package/manifests/channels/beta.json +7 -7
  193. package/manifests/channels/stable.json +8 -8
  194. package/network/unapproved-skill-candidates.json +34 -1
  195. package/package.json +2 -1
@@ -0,0 +1,513 @@
1
+ # Plugin API Patterns
2
+
3
+ > Part of the [use_figma skill](../SKILL.md). Quick reference for common Figma Plugin API operations.
4
+
5
+ ## Contents
6
+
7
+ - Execution Basics
8
+ - Creating Nodes
9
+ - Fills and Strokes
10
+ - Auto Layout
11
+ - Effects
12
+ - Opacity and Blend Modes
13
+ - Corner Radius and Clipping
14
+ - Grouping and Organization
15
+ - Components and Variants
16
+ - Styles
17
+ - Cloning, Finding Nodes, and Grids
18
+ - Constraints and Viewport
19
+
20
+
21
+ ## Execution Basics
22
+
23
+ ### Page Context
24
+
25
+ Page context resets between `use_figma` calls — `figma.currentPage` always starts on the first page. Use `await figma.setCurrentPageAsync(page)` at the start of each invocation to switch to the correct page.
26
+
27
+ ```javascript
28
+ const targetPage = figma.root.children.find(p => p.name === "My Page");
29
+ await figma.setCurrentPageAsync(targetPage);
30
+ // targetPage.children is now populated
31
+ ```
32
+
33
+ ### Closing the Plugin
34
+
35
+ Every execution **must** call `figma.closePlugin()` on success and `figma.closePluginWithFailure()` on error:
36
+
37
+ ```javascript
38
+ figma.closePlugin("Success message describing what was done");
39
+ figma.closePluginWithFailure("Description of what went wrong");
40
+ ```
41
+
42
+ `figma.notify()` does **not** exist. Return all information via the close message string.
43
+
44
+ ### Working Incrementally
45
+
46
+ Don't build an entire screen in one call. Break work into small steps:
47
+ 1. Create tokens/variables
48
+ 2. Create text styles
49
+ 3. Build individual components
50
+ 4. Compose sections
51
+ 5. Assemble screens
52
+
53
+ Verify structure with `get_metadata` between steps. Use `get_screenshot` after each major creation milestone to catch visual problems early.
54
+
55
+ ## Creating Nodes
56
+
57
+ ### Frames
58
+
59
+ ```javascript
60
+ const frame = figma.createFrame();
61
+ frame.name = "Container";
62
+ frame.resize(1440, 900);
63
+ frame.x = 0;
64
+ frame.y = 0;
65
+ frame.fills = [{ type: "SOLID", color: { r: 0.98, g: 0.98, b: 0.99 } }];
66
+ ```
67
+
68
+ ### Text
69
+
70
+ ```javascript
71
+ // MUST load font before any text operations
72
+ await figma.loadFontAsync({ family: "Inter", style: "Regular" });
73
+
74
+ const text = figma.createText();
75
+ text.fontName = { family: "Inter", style: "Regular" };
76
+ text.fontSize = 16;
77
+ text.lineHeight = { value: 24, unit: "PIXELS" };
78
+ text.letterSpacing = { value: 0, unit: "PERCENT" };
79
+ text.characters = "Hello World";
80
+ text.fills = [{ type: "SOLID", color: { r: 0.1, g: 0.1, b: 0.12 } }];
81
+ ```
82
+
83
+ ### Rectangles
84
+
85
+ ```javascript
86
+ const rect = figma.createRectangle();
87
+ rect.name = "Background";
88
+ rect.resize(400, 300);
89
+ rect.cornerRadius = 12;
90
+ rect.fills = [{ type: "SOLID", color: { r: 0.95, g: 0.95, b: 0.96 } }];
91
+ ```
92
+
93
+ ### Ellipses
94
+
95
+ ```javascript
96
+ const circle = figma.createEllipse();
97
+ circle.name = "Avatar Circle";
98
+ circle.resize(48, 48);
99
+ circle.fills = [{ type: "SOLID", color: { r: 0.85, g: 0.87, b: 0.90 } }];
100
+ ```
101
+
102
+ ### Lines
103
+
104
+ ```javascript
105
+ const line = figma.createLine();
106
+ line.name = "Divider";
107
+ line.resize(400, 0);
108
+ line.strokes = [{ type: "SOLID", color: { r: 0, g: 0, b: 0 }, opacity: 0.08 }];
109
+ line.strokeWeight = 1;
110
+ ```
111
+
112
+ ### SVG Import
113
+
114
+ ```javascript
115
+ const svgString = `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
116
+ <path d="M5 12h14M12 5l7 7-7 7" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
117
+ </svg>`;
118
+
119
+ const node = figma.createNodeFromSvg(svgString);
120
+ node.name = "Icon/Arrow Right";
121
+ node.resize(24, 24);
122
+ ```
123
+
124
+ ## Fills & Strokes
125
+
126
+ ### Solid Fill
127
+
128
+ ```javascript
129
+ node.fills = [{ type: "SOLID", color: { r: 0.2, g: 0.2, b: 0.25 } }];
130
+ ```
131
+
132
+ ### Fill with Opacity
133
+
134
+ ```javascript
135
+ node.fills = [{ type: "SOLID", color: { r: 0.2, g: 0.2, b: 0.25 }, opacity: 0.5 }];
136
+ ```
137
+
138
+ ### No Fill (Transparent)
139
+
140
+ ```javascript
141
+ node.fills = [];
142
+ ```
143
+
144
+ ### Linear Gradient
145
+
146
+ ```javascript
147
+ node.fills = [{
148
+ type: "GRADIENT_LINEAR",
149
+ gradientStops: [
150
+ { color: { r: 0.2, g: 0.36, b: 0.96, a: 1 }, position: 0 },
151
+ { color: { r: 0.56, g: 0.24, b: 0.88, a: 1 }, position: 1 }
152
+ ],
153
+ gradientTransform: [[1, 0, 0], [0, 1, 0]]
154
+ }];
155
+ ```
156
+
157
+ ### Strokes
158
+
159
+ ```javascript
160
+ node.strokes = [{ type: "SOLID", color: { r: 0.85, g: 0.85, b: 0.87 } }];
161
+ node.strokeWeight = 1;
162
+ node.strokeAlign = "INSIDE"; // "CENTER", "OUTSIDE"
163
+ ```
164
+
165
+ ### Multiple Fills (Layered)
166
+
167
+ ```javascript
168
+ node.fills = [
169
+ { type: "SOLID", color: { r: 0.95, g: 0.95, b: 0.96 } },
170
+ { type: "SOLID", color: { r: 0.2, g: 0.36, b: 0.96 }, opacity: 0.05 }
171
+ ];
172
+ ```
173
+
174
+ ## Auto Layout
175
+
176
+ ### Setting Up Auto Layout
177
+
178
+ ```javascript
179
+ const frame = figma.createFrame();
180
+ frame.layoutMode = "VERTICAL"; // or "HORIZONTAL"
181
+ frame.primaryAxisSizingMode = "AUTO"; // Hug main axis
182
+ frame.counterAxisSizingMode = "FIXED"; // Fixed cross axis
183
+ frame.resize(360, 1); // Width fixed, height auto
184
+ frame.itemSpacing = 16; // Gap between children
185
+ frame.paddingTop = 24;
186
+ frame.paddingBottom = 24;
187
+ frame.paddingLeft = 24;
188
+ frame.paddingRight = 24;
189
+ ```
190
+
191
+ ### Alignment
192
+
193
+ ```javascript
194
+ // Main axis (direction of layout)
195
+ frame.primaryAxisAlignItems = "MIN"; // Start
196
+ frame.primaryAxisAlignItems = "CENTER"; // Center
197
+ frame.primaryAxisAlignItems = "MAX"; // End
198
+ frame.primaryAxisAlignItems = "SPACE_BETWEEN"; // Distribute
199
+
200
+ // Cross axis
201
+ frame.counterAxisAlignItems = "MIN"; // Start
202
+ frame.counterAxisAlignItems = "CENTER"; // Center
203
+ frame.counterAxisAlignItems = "MAX"; // End
204
+ // NOTE: 'STRETCH' is NOT valid — use 'MIN' + child.layoutSizingX = 'FILL'
205
+ ```
206
+
207
+ ### Child Sizing
208
+
209
+ ```javascript
210
+ // IMPORTANT: FILL can only be set AFTER the child is appended to an auto-layout parent
211
+ parent.appendChild(child)
212
+ child.layoutSizingHorizontal = "FILL"; // Stretch to parent
213
+ child.layoutSizingHorizontal = "HUG"; // Shrink to content
214
+ child.layoutSizingHorizontal = "FIXED"; // Manual width
215
+
216
+ child.layoutSizingVertical = "FILL";
217
+ child.layoutSizingVertical = "HUG";
218
+ child.layoutSizingVertical = "FIXED";
219
+ ```
220
+
221
+ ### Wrapping (Grid-like Layout)
222
+
223
+ ```javascript
224
+ frame.layoutMode = "HORIZONTAL";
225
+ frame.layoutWrap = "WRAP";
226
+ frame.itemSpacing = 24; // Horizontal gap
227
+ frame.counterAxisSpacing = 24; // Vertical gap (between rows)
228
+ ```
229
+
230
+ ### Absolute Positioning Within Auto Layout
231
+
232
+ ```javascript
233
+ child.layoutPositioning = "ABSOLUTE";
234
+ child.constraints = { horizontal: "MAX", vertical: "MIN" }; // Top-right
235
+ child.x = parentWidth - childWidth - 8;
236
+ child.y = 8;
237
+ ```
238
+
239
+ ## Effects
240
+
241
+ ### Drop Shadow
242
+
243
+ ```javascript
244
+ node.effects = [{
245
+ type: "DROP_SHADOW",
246
+ color: { r: 0, g: 0, b: 0, a: 0.08 },
247
+ offset: { x: 0, y: 4 },
248
+ radius: 16,
249
+ spread: -2,
250
+ visible: true,
251
+ blendMode: "NORMAL"
252
+ }];
253
+ ```
254
+
255
+ ### Inner Shadow
256
+
257
+ ```javascript
258
+ node.effects = [{
259
+ type: "INNER_SHADOW",
260
+ color: { r: 0, g: 0, b: 0, a: 0.05 },
261
+ offset: { x: 0, y: 1 },
262
+ radius: 2,
263
+ spread: 0,
264
+ visible: true,
265
+ blendMode: "NORMAL"
266
+ }];
267
+ ```
268
+
269
+ ### Background Blur
270
+
271
+ ```javascript
272
+ node.effects = [{
273
+ type: "BACKGROUND_BLUR",
274
+ radius: 16,
275
+ visible: true
276
+ }];
277
+ ```
278
+
279
+ ### Layer Blur
280
+
281
+ ```javascript
282
+ node.effects = [{
283
+ type: "LAYER_BLUR",
284
+ radius: 8,
285
+ visible: true
286
+ }];
287
+ ```
288
+
289
+ ### Multiple Effects
290
+
291
+ ```javascript
292
+ node.effects = [
293
+ { type: "DROP_SHADOW", color: { r: 0, g: 0, b: 0, a: 0.04 }, offset: { x: 0, y: 1 }, radius: 3, spread: 0, visible: true, blendMode: "NORMAL" },
294
+ { type: "DROP_SHADOW", color: { r: 0, g: 0, b: 0, a: 0.06 }, offset: { x: 0, y: 8 }, radius: 24, spread: -4, visible: true, blendMode: "NORMAL" }
295
+ ];
296
+ ```
297
+
298
+ ## Opacity & Blend Modes
299
+
300
+ ```javascript
301
+ node.opacity = 0.5;
302
+ node.blendMode = "NORMAL"; // "MULTIPLY", "SCREEN", "OVERLAY", "DARKEN", "LIGHTEN", etc.
303
+ ```
304
+
305
+ ## Corner Radius
306
+
307
+ ```javascript
308
+ // Uniform
309
+ node.cornerRadius = 12;
310
+
311
+ // Per-corner
312
+ node.topLeftRadius = 12;
313
+ node.topRightRadius = 12;
314
+ node.bottomLeftRadius = 0;
315
+ node.bottomRightRadius = 0;
316
+ ```
317
+
318
+ ## Clipping
319
+
320
+ ```javascript
321
+ frame.clipsContent = true; // Children clipped to frame bounds
322
+ ```
323
+
324
+ ## Grouping & Organization
325
+
326
+ ### Groups
327
+
328
+ ```javascript
329
+ const group = figma.group([node1, node2, node3], figma.currentPage);
330
+ group.name = "Grouped Elements";
331
+ ```
332
+
333
+ ### Sections
334
+
335
+ ```javascript
336
+ const section = figma.createSection();
337
+ section.name = "My Section";
338
+ section.resizeWithoutConstraints(800, 600);
339
+ section.x = 0;
340
+ section.y = 0;
341
+ // IMPORTANT: Sections don't auto-resize — always resize after adding content
342
+ ```
343
+
344
+ ### Appending Children
345
+
346
+ ```javascript
347
+ parentFrame.appendChild(childNode);
348
+
349
+ // Insert at a specific index
350
+ parentFrame.insertChild(0, childNode); // Insert at beginning
351
+ ```
352
+
353
+ ## Components & Variants
354
+
355
+ ### Create Component
356
+
357
+ ```javascript
358
+ const component = figma.createComponent();
359
+ component.name = "Button/Primary";
360
+ component.description = "Primary action button.";
361
+ ```
362
+
363
+ ### Create Instance
364
+
365
+ ```javascript
366
+ const instance = component.createInstance();
367
+ instance.x = 200;
368
+ instance.y = 100;
369
+ ```
370
+
371
+ ### Import Components by Key (Team Libraries)
372
+
373
+ These methods import components from **team libraries** (not the same file). For components in the current file, use `figma.getNodeByIdAsync()` or `findOne()`/`findAll()`.
374
+
375
+ ```javascript
376
+ // Import a published component from a team library by its key
377
+ const comp = await figma.importComponentByKeyAsync(componentKey)
378
+ const instance = comp.createInstance()
379
+
380
+ // Import a published component set from a team library by its key
381
+ const set = await figma.importComponentSetByKeyAsync(componentSetKey)
382
+ const variant = set.defaultVariant
383
+ const variantInstance = variant.createInstance()
384
+ ```
385
+
386
+ ### Combine as Variants
387
+
388
+ ```javascript
389
+ // IMPORTANT: Pass ComponentNodes (not frames)
390
+ const componentSet = figma.combineAsVariants(
391
+ [variantA, variantB, variantC],
392
+ figma.currentPage
393
+ );
394
+ componentSet.name = "Button";
395
+ componentSet.description = "Button component with multiple variants.";
396
+
397
+ // CRITICAL: Layout variants in a grid after combining (they stack at 0,0)
398
+ let maxX = 0, maxY = 0;
399
+ componentSet.children.forEach((child, i) => {
400
+ child.x = (i % numCols) * colWidth;
401
+ child.y = Math.floor(i / numCols) * rowHeight;
402
+ });
403
+ for (const child of componentSet.children) {
404
+ maxX = Math.max(maxX, child.x + child.width);
405
+ maxY = Math.max(maxY, child.y + child.height);
406
+ }
407
+ componentSet.resizeWithoutConstraints(maxX + 40, maxY + 40);
408
+ ```
409
+
410
+ ### Component Properties
411
+
412
+ ```javascript
413
+ // addComponentProperty returns a STRING key — capture it!
414
+ const labelKey = component.addComponentProperty("label", "TEXT", "Button");
415
+ const showIconKey = component.addComponentProperty("showIcon", "BOOLEAN", true);
416
+ const iconSlotKey = component.addComponentProperty("iconSlot", "INSTANCE_SWAP", defaultIconId);
417
+
418
+ // MUST link properties to child nodes via componentPropertyReferences
419
+ labelNode.componentPropertyReferences = { characters: labelKey };
420
+ iconInstance.componentPropertyReferences = {
421
+ visible: showIconKey,
422
+ mainComponent: iconSlotKey
423
+ };
424
+ ```
425
+
426
+ ## Styles
427
+
428
+ ### Text Style
429
+
430
+ ```javascript
431
+ await figma.loadFontAsync({ family: "Inter", style: "Regular" });
432
+
433
+ const style = figma.createTextStyle();
434
+ style.name = "Body/Default";
435
+ style.fontName = { family: "Inter", style: "Regular" };
436
+ style.fontSize = 16;
437
+ style.lineHeight = { value: 24, unit: "PIXELS" };
438
+ style.letterSpacing = { value: 0, unit: "PERCENT" };
439
+
440
+ // Apply to a text node
441
+ textNode.textStyleId = style.id;
442
+ ```
443
+
444
+ ### Effect Style
445
+
446
+ ```javascript
447
+ const shadowStyle = figma.createEffectStyle();
448
+ shadowStyle.name = "Shadow/Subtle";
449
+ shadowStyle.effects = [{
450
+ type: "DROP_SHADOW",
451
+ color: { r: 0, g: 0, b: 0, a: 0.06 },
452
+ offset: { x: 0, y: 2 },
453
+ radius: 8,
454
+ spread: 0,
455
+ visible: true,
456
+ blendMode: "NORMAL"
457
+ }];
458
+
459
+ // Apply to a node
460
+ frame.effectStyleId = shadowStyle.id;
461
+ ```
462
+
463
+ ## Cloning & Duplication
464
+
465
+ ```javascript
466
+ const clone = originalNode.clone();
467
+ clone.x = originalNode.x + originalNode.width + 40;
468
+ clone.name = "Copy of " + originalNode.name;
469
+ ```
470
+
471
+ ## Finding Nodes
472
+
473
+ ```javascript
474
+ // Find by name on current page
475
+ const node = figma.currentPage.findOne(n => n.name === "My Frame");
476
+
477
+ // Find all by type
478
+ const allTexts = figma.currentPage.findAll(n => n.type === "TEXT");
479
+
480
+ // Find all by name pattern
481
+ const allButtons = figma.currentPage.findAll(n => n.name.startsWith("Button/"));
482
+ ```
483
+
484
+ ## Layout Grids
485
+
486
+ ```javascript
487
+ frame.layoutGrids = [
488
+ {
489
+ pattern: "COLUMNS",
490
+ alignment: "STRETCH",
491
+ count: 12,
492
+ gutterSize: 24,
493
+ offset: 80,
494
+ visible: true
495
+ }
496
+ ];
497
+ ```
498
+
499
+ ## Constraints (Non-Auto-Layout Frames)
500
+
501
+ ```javascript
502
+ child.constraints = {
503
+ horizontal: "LEFT_RIGHT", // LEFT, RIGHT, CENTER, LEFT_RIGHT, SCALE
504
+ vertical: "TOP" // TOP, BOTTOM, CENTER, TOP_BOTTOM, SCALE
505
+ };
506
+ ```
507
+
508
+ ## Viewport & Zoom
509
+
510
+ ```javascript
511
+ // Zoom to fit specific nodes
512
+ figma.viewport.scrollAndZoomIntoView([frame1, frame2]);
513
+ ```