@ufira/vibma 1.0.0-rc6 → 1.0.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.
- package/dist/mcp.cjs +80 -26
- package/dist/mcp.js +80 -26
- package/dist/tools/generated/guards.cjs +35 -0
- package/dist/tools/generated/guards.d.cts +3 -1
- package/dist/tools/generated/guards.d.ts +3 -1
- package/dist/tools/generated/guards.js +34 -0
- package/dist/tools/registry.cjs +29 -13
- package/dist/tools/registry.js +29 -13
- package/package.json +1 -1
package/dist/mcp.js
CHANGED
|
@@ -134,7 +134,7 @@ Discriminant: type (component | from_node | variant_set)
|
|
|
134
134
|
bottomLeftRadius (string, optional)
|
|
135
135
|
effectStyleName (string, optional) \u2014 Effect style name (e.g. 'Shadow/Card') for shadows, blurs
|
|
136
136
|
layoutMode (NONE | HORIZONTAL | VERTICAL, optional) \u2014 Layout direction (default: auto \u2014 NONE when width+height set, otherwise inferred from layout props)
|
|
137
|
-
layoutWrap (NO_WRAP | WRAP, optional)
|
|
137
|
+
layoutWrap (NO_WRAP | WRAP, optional) \u2014 Wrap children to new rows (HORIZONTAL layout only \u2014 Figma does not support WRAP on VERTICAL layouts). Use column frames inside a HORIZONTAL parent for vertical grid patterns.
|
|
138
138
|
padding (string, optional) \u2014 All edges (number) or variable name (string). Per-edge: paddingTop, paddingRight, paddingBottom, paddingLeft.
|
|
139
139
|
paddingTop (string, optional)
|
|
140
140
|
paddingRight (string, optional)
|
|
@@ -200,7 +200,7 @@ Discriminant: type (component | from_node | variant_set)
|
|
|
200
200
|
bottomLeftRadius (string, optional)
|
|
201
201
|
effectStyleName (string, optional) \u2014 Effect style name (e.g. 'Shadow/Card') for shadows, blurs
|
|
202
202
|
layoutMode (NONE | HORIZONTAL | VERTICAL, optional) \u2014 Layout direction (default: auto \u2014 NONE when width+height set, otherwise inferred from layout props)
|
|
203
|
-
layoutWrap (NO_WRAP | WRAP, optional)
|
|
203
|
+
layoutWrap (NO_WRAP | WRAP, optional) \u2014 Wrap children to new rows (HORIZONTAL layout only \u2014 Figma does not support WRAP on VERTICAL layouts). Use column frames inside a HORIZONTAL parent for vertical grid patterns.
|
|
204
204
|
padding (string, optional) \u2014 All edges (number) or variable name (string). Per-edge: paddingTop, paddingRight, paddingBottom, paddingLeft.
|
|
205
205
|
paddingTop (string, optional)
|
|
206
206
|
paddingRight (string, optional)
|
|
@@ -286,7 +286,7 @@ Params:
|
|
|
286
286
|
blendMode (PASS_THROUGH | NORMAL | DARKEN | MULTIPLY | LINEAR_BURN | COLOR_BURN | LIGHTEN | SCREEN | LINEAR_DODGE | COLOR_DODGE | OVERLAY | SOFT_LIGHT | HARD_LIGHT | DIFFERENCE | EXCLUSION | HUE | SATURATION | COLOR | LUMINOSITY, optional)
|
|
287
287
|
effectStyleName (string, optional) \u2014 Effect style name (e.g. 'Shadow/Card') for shadows, blurs
|
|
288
288
|
layoutMode (NONE | HORIZONTAL | VERTICAL, optional) \u2014 Layout direction (default: NONE)
|
|
289
|
-
layoutWrap (NO_WRAP | WRAP, optional)
|
|
289
|
+
layoutWrap (NO_WRAP | WRAP, optional) \u2014 Wrap children to new rows (HORIZONTAL layout only \u2014 Figma does not support WRAP on VERTICAL layouts). Use column frames inside a HORIZONTAL parent for vertical grid patterns.
|
|
290
290
|
padding (string, optional) \u2014 All edges (number) or variable name (string). Per-edge: paddingTop, paddingRight, paddingBottom, paddingLeft.
|
|
291
291
|
paddingTop (string, optional)
|
|
292
292
|
paddingRight (string, optional)
|
|
@@ -307,6 +307,10 @@ Params:
|
|
|
307
307
|
fontFamily (string, optional) \u2014 Font family
|
|
308
308
|
fontStyle (string, optional) \u2014 Font variant e.g. "Bold", "Italic" \u2014 overrides fontWeight
|
|
309
309
|
fontWeight (number, optional) \u2014 100-900. Ignored when fontStyle is set.
|
|
310
|
+
lineHeight (number | {value, unit: "PIXELS"|"PERCENT"|"AUTO"}, optional)
|
|
311
|
+
letterSpacing (number | {value, unit: "PIXELS"|"PERCENT"}, optional)
|
|
312
|
+
textCase (ORIGINAL | UPPER | LOWER | TITLE | SMALL_CAPS | SMALL_CAPS_FORCED, optional)
|
|
313
|
+
textDecoration (NONE | UNDERLINE | STRIKETHROUGH, optional)
|
|
310
314
|
fontColor (Color, optional) \u2014 Shorthand \u2014 sets text color (auto-binds to matching variable/style)
|
|
311
315
|
fontColorVariableName (string, optional) \u2014 Bind color variable by name e.g. 'text/primary'
|
|
312
316
|
fontColorStyleName (string, optional) \u2014 Apply paint style \u2014 overrides fontColor
|
|
@@ -388,7 +392,7 @@ Discriminant: type (frame | auto_layout | section | rectangle | ellipse | line |
|
|
|
388
392
|
bottomLeftRadius (string, optional)
|
|
389
393
|
effectStyleName (string, optional) \u2014 Effect style name (e.g. 'Shadow/Card') for shadows, blurs
|
|
390
394
|
layoutMode (NONE | HORIZONTAL | VERTICAL, optional) \u2014 Layout direction (default: auto \u2014 NONE when width+height set, otherwise inferred from layout props)
|
|
391
|
-
layoutWrap (NO_WRAP | WRAP, optional)
|
|
395
|
+
layoutWrap (NO_WRAP | WRAP, optional) \u2014 Wrap children to new rows (HORIZONTAL layout only \u2014 Figma does not support WRAP on VERTICAL layouts). Use column frames inside a HORIZONTAL parent for vertical grid patterns.
|
|
392
396
|
padding (string, optional) \u2014 All edges (number) or variable name (string). Per-edge: paddingTop, paddingRight, paddingBottom, paddingLeft.
|
|
393
397
|
paddingTop (string, optional)
|
|
394
398
|
paddingRight (string, optional)
|
|
@@ -444,7 +448,7 @@ Discriminant: type (frame | auto_layout | section | rectangle | ellipse | line |
|
|
|
444
448
|
bottomLeftRadius (string, optional)
|
|
445
449
|
effectStyleName (string, optional) \u2014 Effect style name (e.g. 'Shadow/Card') for shadows, blurs
|
|
446
450
|
layoutMode (HORIZONTAL | VERTICAL, required) \u2014 Primary axis direction
|
|
447
|
-
layoutWrap (NO_WRAP | WRAP, optional)
|
|
451
|
+
layoutWrap (NO_WRAP | WRAP, optional) \u2014 Wrap children to new rows (HORIZONTAL layout only \u2014 Figma does not support WRAP on VERTICAL layouts). Use column frames inside a HORIZONTAL parent for vertical grid patterns.
|
|
448
452
|
padding (string, optional) \u2014 All edges (number) or variable name (string). Per-edge: paddingTop, paddingRight, paddingBottom, paddingLeft.
|
|
449
453
|
paddingTop (string, optional)
|
|
450
454
|
paddingRight (string, optional)
|
|
@@ -641,7 +645,7 @@ Params:
|
|
|
641
645
|
blendMode (PASS_THROUGH | NORMAL | DARKEN | MULTIPLY | LINEAR_BURN | COLOR_BURN | LIGHTEN | SCREEN | LINEAR_DODGE | COLOR_DODGE | OVERLAY | SOFT_LIGHT | HARD_LIGHT | DIFFERENCE | EXCLUSION | HUE | SATURATION | COLOR | LUMINOSITY, optional)
|
|
642
646
|
effectStyleName (string, optional) \u2014 Effect style name (e.g. 'Shadow/Card') for shadows, blurs
|
|
643
647
|
layoutMode (NONE | HORIZONTAL | VERTICAL, optional) \u2014 Layout direction (default: NONE)
|
|
644
|
-
layoutWrap (NO_WRAP | WRAP, optional)
|
|
648
|
+
layoutWrap (NO_WRAP | WRAP, optional) \u2014 Wrap children to new rows (HORIZONTAL layout only \u2014 Figma does not support WRAP on VERTICAL layouts). Use column frames inside a HORIZONTAL parent for vertical grid patterns.
|
|
645
649
|
padding (string, optional) \u2014 All edges (number) or variable name (string). Per-edge: paddingTop, paddingRight, paddingBottom, paddingLeft.
|
|
646
650
|
paddingTop (string, optional)
|
|
647
651
|
paddingRight (string, optional)
|
|
@@ -662,6 +666,10 @@ Params:
|
|
|
662
666
|
fontFamily (string, optional) \u2014 Font family
|
|
663
667
|
fontStyle (string, optional) \u2014 Font variant e.g. "Bold", "Italic" \u2014 overrides fontWeight
|
|
664
668
|
fontWeight (number, optional) \u2014 100-900. Ignored when fontStyle is set.
|
|
669
|
+
lineHeight (number | {value, unit: "PIXELS"|"PERCENT"|"AUTO"}, optional)
|
|
670
|
+
letterSpacing (number | {value, unit: "PIXELS"|"PERCENT"}, optional)
|
|
671
|
+
textCase (ORIGINAL | UPPER | LOWER | TITLE | SMALL_CAPS | SMALL_CAPS_FORCED, optional)
|
|
672
|
+
textDecoration (NONE | UNDERLINE | STRIKETHROUGH, optional)
|
|
665
673
|
fontColor (Color, optional) \u2014 Shorthand \u2014 sets text color (auto-binds to matching variable/style)
|
|
666
674
|
fontColorVariableName (string, optional) \u2014 Bind color variable by name e.g. 'text/primary'
|
|
667
675
|
fontColorStyleName (string, optional) \u2014 Apply paint style \u2014 overrides fontColor
|
|
@@ -759,7 +767,7 @@ Use lint(method: "help", topic: "<method>") for method details.`,
|
|
|
759
767
|
"summary": '# prototyping\nManage prototype interactions, reactions, and navigation flows.\n\nMethods:\n get Get reactions and overflow direction on a node [read]\n add Add a prototype reaction to a node [edit]\n set Replace all reactions on a node (raw reactions array) [edit]\n remove Remove a reaction from a node by index [edit]\n\n// Reactions wire up interactions: trigger (ON_CLICK, ON_HOVER, ...) \u2192 action (navigate, swap, overlay).\n// Common patterns: button ON_CLICK \u2192 NAVIGATE to detail frame; card ON_HOVER \u2192 CHANGE_TO hover variant.\n// Multi-action: pass actions[] array to run multiple actions on one trigger (e.g. navigate + set variable mode).\n// ---\n// IMPORTANT: destination rules depend on navigation type:\n// NAVIGATE/SWAP/OVERLAY/SCROLL_TO \u2192 destination must be a top-level frame (direct child of a page). Nested frames are rejected.\n// CHANGE_TO \u2192 destination must be a variant (COMPONENT inside a COMPONENT_SET). Used for hover/state swaps within the same component.\n// ---\n// TRIGGERS: ON_CLICK | ON_HOVER | ON_PRESS | ON_DRAG | AFTER_TIMEOUT(timeout) | MOUSE_ENTER(delay) | MOUSE_LEAVE(delay) | ON_KEY_DOWN(keyCodes)\n// NAVIGATION: NAVIGATE (go to frame) | SWAP (swap overlay) | OVERLAY (show overlay) | SCROLL_TO | CHANGE_TO (swap component variant)\n// TRANSITIONS: DISSOLVE | SMART_ANIMATE | MOVE_IN | MOVE_OUT | PUSH | SLIDE_IN | SLIDE_OUT (+ direction for directional)\n// EASING: EASE_IN | EASE_OUT | EASE_IN_AND_OUT | LINEAR | GENTLE | QUICK | BOUNCY | SLOW\n// ACTIONS: NODE (navigate/swap) | BACK (go back) | CLOSE (close overlay) | URL (open link) | SET_VARIABLE_MODE (switch theme/mode)\n\nUse prototyping(method: "help", topic: "<method>") for method details.',
|
|
760
768
|
"methods": {
|
|
761
769
|
"get": "# prototyping.get\nGet reactions and overflow direction on a node\n\nParams:\n id (string, required) \u2014 Node ID",
|
|
762
|
-
"add": '# prototyping.add\nAdd a prototype reaction to a node\n\nExample: prototyping(method:"add", id:"btn-1", trigger:"ON_CLICK", destination:"
|
|
770
|
+
"add": '# prototyping.add\nAdd a prototype reaction to a node\n\nExample: prototyping(method:"add", items:[{id:"btn-1", trigger:"ON_CLICK", destination:"frame-2", navigation:"NAVIGATE", transition:"SMART_ANIMATE"}, {id:"btn-2", trigger:"ON_CLICK", destination:"frame-3"}])\n\nParams:\n id (string, optional) \u2014 Node ID\n trigger (ON_CLICK | ON_HOVER | ON_PRESS | ON_DRAG | AFTER_TIMEOUT | MOUSE_ENTER | MOUSE_LEAVE | ON_KEY_DOWN, optional) \u2014 Trigger type\n triggerDelay (number, optional) \u2014 Delay in ms for AFTER_TIMEOUT / MOUSE_ENTER / MOUSE_LEAVE triggers\n triggerKeyCodes (number[], optional) \u2014 Key codes for ON_KEY_DOWN trigger\n triggerDevice (KEYBOARD | XBOX_ONE | PS4 | SWITCH_PRO, optional) \u2014 Device for ON_KEY_DOWN (default: KEYBOARD)\n destination (string, optional) \u2014 Target node ID (required for NODE actions). NAVIGATE/SWAP/OVERLAY: must be a top-level frame. CHANGE_TO: must be a variant (component inside a component set).\n navigation (NAVIGATE | SWAP | OVERLAY | SCROLL_TO | CHANGE_TO, optional) \u2014 Navigation type (default: NAVIGATE)\n transition (DISSOLVE | SMART_ANIMATE | MOVE_IN | MOVE_OUT | PUSH | SLIDE_IN | SLIDE_OUT | INSTANT, optional) \u2014 Transition animation (default: DISSOLVE). INSTANT = no animation.\n transitionDirection (LEFT | RIGHT | TOP | BOTTOM, optional) \u2014 Direction for MOVE_IN, MOVE_OUT, PUSH, SLIDE_IN, SLIDE_OUT\n duration (number, optional) \u2014 Transition duration in seconds (default: 0.3)\n easing (EASE_IN | EASE_OUT | EASE_IN_AND_OUT | LINEAR | GENTLE | QUICK | BOUNCY | SLOW, optional) \u2014 Easing function (default: EASE_OUT)\n actionType (NODE | BACK | CLOSE | URL | SET_VARIABLE_MODE, optional) \u2014 Action type (default: NODE). SET_VARIABLE_MODE switches a variable collection mode.\n url (string, optional) \u2014 URL for URL action type\n collectionName (string, optional) \u2014 Variable collection name (for SET_VARIABLE_MODE)\n modeName (string, optional) \u2014 Mode name to switch to (for SET_VARIABLE_MODE)\n resetScrollPosition (boolean, optional) \u2014 Reset scroll position on navigate (default: true)\n actions (array, optional) \u2014 Multi-action: [{actionType, destination?, navigation?, collectionName?, modeName?, ...}]. Overrides single-action params.\n items (array, optional) \u2014 Batch: array of {id, trigger, destination?, ...} reaction items\n id (string, required) \u2014 Node ID\n trigger (ON_CLICK | ON_HOVER | ON_PRESS | ON_DRAG | AFTER_TIMEOUT | MOUSE_ENTER | MOUSE_LEAVE | ON_KEY_DOWN, required) \u2014 Trigger type\n destination (string, optional) \u2014 Target node ID\n navigation (NAVIGATE | SWAP | OVERLAY | SCROLL_TO | CHANGE_TO, optional)\n transition (DISSOLVE | SMART_ANIMATE | MOVE_IN | MOVE_OUT | PUSH | SLIDE_IN | SLIDE_OUT | INSTANT, optional)\n transitionDirection (LEFT | RIGHT | TOP | BOTTOM, optional)\n duration (number, optional)\n easing (EASE_IN | EASE_OUT | EASE_IN_AND_OUT | LINEAR | GENTLE | QUICK | BOUNCY | SLOW, optional)\n actionType (NODE | BACK | CLOSE | URL | SET_VARIABLE_MODE, optional)\n triggerDelay (number, optional)\n url (string, optional)\n collectionName (string, optional)\n modeName (string, optional)\n resetScrollPosition (boolean, optional)\n actions (array, optional)',
|
|
763
771
|
"set": "# prototyping.set\nReplace all reactions on a node (raw reactions array)\n\nParams:\n id (string, required) \u2014 Node ID\n reactions (array, required) \u2014 Full reactions array \u2014 [{trigger:{type}, actions:[{type, destinationId, navigation, transition}]}]",
|
|
764
772
|
"remove": "# prototyping.remove\nRemove a reaction from a node by index\n\nParams:\n id (string, required) \u2014 Node ID\n index (number, required) \u2014 Reaction index (0-based)"
|
|
765
773
|
}
|
|
@@ -776,8 +784,8 @@ Use lint(method: "help", topic: "<method>") for method details.`,
|
|
|
776
784
|
"methods": {
|
|
777
785
|
"list": '# styles.list\nList local styles with optional type filter\n\nParams:\n type (paint | text | effect | grid, optional) \u2014 Filter by style type\n fields (string[], optional) \u2014 Property whitelist. Identity fields (id, name, type) always included. Omit for stubs on list, full on get. Pass ["*"] for all.\n offset (number, optional) \u2014 Skip N items for pagination (default 0)\n limit (number, optional) \u2014 Max items per page (default 100)',
|
|
778
786
|
"get": '# styles.get\nGet full style detail by ID\n\nParams:\n id (string, required) \u2014 Style ID or name\n fields (string[], optional) \u2014 Property whitelist. Identity fields (id, name, type) always included. Omit for stubs on list, full on get. Pass ["*"] for all.',
|
|
779
|
-
"create": '# styles.create\nCreate local styles\n\nExample: styles(method:"create", type:"effect", name:"Shadow/Medium", effects:[{type:"DROP_SHADOW", color:"#00000040", offset:{x:0,y:4}, radius:8}])\n\nDiscriminant: type (paint | text | effect | grid)\n\n ## paint \u2014 Paint/color style\n name (string, required) \u2014 Style name\n color (Color, optional) \u2014 Color value. Optional when colorVariableName is provided.\n colorVariableName (string, optional) \u2014 Bind to a COLOR variable by name (style tracks the variable). Can be used alone \u2014 color is resolved from the variable.\n description (string, optional) \u2014 Style description\n\n ## text \u2014 Text style\n name (string, required) \u2014 Style name\n fontFamily (string, required) \u2014 Font family\n fontStyle (string, optional) \u2014 Font style (default: Regular)\n fontSize (number, required) \u2014 Font size\n lineHeight (
|
|
780
|
-
"update": '# styles.update\nUpdate styles by ID or name\n\nExample: styles(method:"update", items:[{id:"Surface/Primary", color:"#F5F5F5"}])\n\nParams:\n type (paint | text | effect | grid, optional) \u2014 Style type hint for strict validation (optional, auto-detected)\n items (PatchStyleItem[], required) \u2014 Array of {id, ...fields} to update\n id (string, required) \u2014 Style ID or name\n name (string, optional) \u2014 Rename the style\n description (string, optional) \u2014 Style description\n color (Color, optional) \u2014 New color (paint styles)\n colorVariableName (string, optional) \u2014 Bind to a COLOR variable by name (paint styles)\n fontFamily (string, optional)\n fontStyle (string, optional)\n fontSize (number, optional)\n lineHeight (
|
|
787
|
+
"create": '# styles.create\nCreate local styles\n\nExample: styles(method:"create", type:"effect", name:"Shadow/Medium", effects:[{type:"DROP_SHADOW", color:"#00000040", offset:{x:0,y:4}, radius:8}])\n\nDiscriminant: type (paint | text | effect | grid)\n\n ## paint \u2014 Paint/color style\n name (string, required) \u2014 Style name\n color (Color, optional) \u2014 Color value. Optional when colorVariableName is provided.\n colorVariableName (string, optional) \u2014 Bind to a COLOR variable by name (style tracks the variable). Can be used alone \u2014 color is resolved from the variable.\n description (string, optional) \u2014 Style description\n\n ## text \u2014 Text style\n name (string, required) \u2014 Style name\n fontFamily (string, required) \u2014 Font family\n fontStyle (string, optional) \u2014 Font style (default: Regular)\n fontSize (number, required) \u2014 Font size\n lineHeight (number | {value, unit: "PIXELS"|"PERCENT"|"AUTO"}, optional)\n letterSpacing (number | {value, unit: "PIXELS"|"PERCENT"}, optional)\n textCase (ORIGINAL | UPPER | LOWER | TITLE | SMALL_CAPS | SMALL_CAPS_FORCED, optional)\n textDecoration (NONE | UNDERLINE | STRIKETHROUGH, optional)\n paragraphIndent (number, optional) \u2014 Paragraph indent (px)\n paragraphSpacing (number, optional) \u2014 Paragraph spacing (px)\n leadingTrim (CAP_HEIGHT | NONE, optional) \u2014 Leading trim mode\n description (string, optional) \u2014 Style description\n\n ## effect \u2014 Effect style\n name (string, required) \u2014 Style name\n effects (array, required) \u2014 Array of Effect objects\n description (string, optional) \u2014 Style description\n\n ## grid \u2014 Grid/layout grid style\n name (string, required) \u2014 Style name\n layoutGrids (array, required) \u2014 Array of LayoutGrid objects\n description (string, optional) \u2014 Style description',
|
|
788
|
+
"update": '# styles.update\nUpdate styles by ID or name\n\nExample: styles(method:"update", items:[{id:"Surface/Primary", color:"#F5F5F5"}])\n\nParams:\n type (paint | text | effect | grid, optional) \u2014 Style type hint for strict validation (optional, auto-detected)\n items (PatchStyleItem[], required) \u2014 Array of {id, ...fields} to update\n id (string, required) \u2014 Style ID or name\n name (string, optional) \u2014 Rename the style\n description (string, optional) \u2014 Style description\n color (Color, optional) \u2014 New color (paint styles)\n colorVariableName (string, optional) \u2014 Bind to a COLOR variable by name (paint styles)\n fontFamily (string, optional)\n fontStyle (string, optional)\n fontSize (number, optional)\n lineHeight (number | {value, unit: "PIXELS"|"PERCENT"|"AUTO"}, optional)\n letterSpacing (number | {value, unit: "PIXELS"|"PERCENT"}, optional)\n textCase (ORIGINAL | UPPER | LOWER | TITLE | SMALL_CAPS | SMALL_CAPS_FORCED, optional)\n textDecoration (NONE | UNDERLINE | STRIKETHROUGH, optional)\n paragraphIndent (number, optional) \u2014 Paragraph indent (px)\n paragraphSpacing (number, optional) \u2014 Paragraph spacing (px)\n leadingTrim (CAP_HEIGHT | NONE, optional)\n effects (array, optional) \u2014 Array of Effect objects\n layoutGrids (array, optional) \u2014 Array of LayoutGrid objects (grid styles)',
|
|
781
789
|
"delete": "# styles.delete\nDelete styles\n\nParams:\n id (string, optional) \u2014 Style ID or name\n items (array, optional) \u2014 Batch: [{id}, ...]\n id (string, required) \u2014 Style ID or name"
|
|
782
790
|
}
|
|
783
791
|
},
|
|
@@ -817,7 +825,7 @@ Params:
|
|
|
817
825
|
blendMode (PASS_THROUGH | NORMAL | DARKEN | MULTIPLY | LINEAR_BURN | COLOR_BURN | LIGHTEN | SCREEN | LINEAR_DODGE | COLOR_DODGE | OVERLAY | SOFT_LIGHT | HARD_LIGHT | DIFFERENCE | EXCLUSION | HUE | SATURATION | COLOR | LUMINOSITY, optional)
|
|
818
826
|
effectStyleName (string, optional) \u2014 Effect style name (e.g. 'Shadow/Card') for shadows, blurs
|
|
819
827
|
layoutMode (NONE | HORIZONTAL | VERTICAL, optional) \u2014 Layout direction (default: NONE)
|
|
820
|
-
layoutWrap (NO_WRAP | WRAP, optional)
|
|
828
|
+
layoutWrap (NO_WRAP | WRAP, optional) \u2014 Wrap children to new rows (HORIZONTAL layout only \u2014 Figma does not support WRAP on VERTICAL layouts). Use column frames inside a HORIZONTAL parent for vertical grid patterns.
|
|
821
829
|
padding (string, optional) \u2014 All edges (number) or variable name (string). Per-edge: paddingTop, paddingRight, paddingBottom, paddingLeft.
|
|
822
830
|
paddingTop (string, optional)
|
|
823
831
|
paddingRight (string, optional)
|
|
@@ -838,6 +846,10 @@ Params:
|
|
|
838
846
|
fontFamily (string, optional) \u2014 Font family
|
|
839
847
|
fontStyle (string, optional) \u2014 Font variant e.g. "Bold", "Italic" \u2014 overrides fontWeight
|
|
840
848
|
fontWeight (number, optional) \u2014 100-900. Ignored when fontStyle is set.
|
|
849
|
+
lineHeight (number | {value, unit: "PIXELS"|"PERCENT"|"AUTO"}, optional)
|
|
850
|
+
letterSpacing (number | {value, unit: "PIXELS"|"PERCENT"}, optional)
|
|
851
|
+
textCase (ORIGINAL | UPPER | LOWER | TITLE | SMALL_CAPS | SMALL_CAPS_FORCED, optional)
|
|
852
|
+
textDecoration (NONE | UNDERLINE | STRIKETHROUGH, optional)
|
|
841
853
|
fontColor (Color, optional) \u2014 Shorthand \u2014 sets text color (auto-binds to matching variable/style)
|
|
842
854
|
fontColorVariableName (string, optional) \u2014 Bind color variable by name e.g. 'text/primary'
|
|
843
855
|
fontColorStyleName (string, optional) \u2014 Apply paint style \u2014 overrides fontColor
|
|
@@ -894,6 +906,10 @@ Params:
|
|
|
894
906
|
fontStyle (string, optional) \u2014 Font variant e.g. "Bold", "Italic" \u2014 overrides fontWeight
|
|
895
907
|
fontSize (number, optional) \u2014 Font size (default: 14)
|
|
896
908
|
fontWeight (number, optional) \u2014 100-900 (default: 400). Ignored when fontStyle is set.
|
|
909
|
+
lineHeight (number | {value, unit: "PIXELS"|"PERCENT"|"AUTO"}, optional)
|
|
910
|
+
letterSpacing (number | {value, unit: "PIXELS"|"PERCENT"}, optional)
|
|
911
|
+
textCase (ORIGINAL | UPPER | LOWER | TITLE | SMALL_CAPS | SMALL_CAPS_FORCED, optional)
|
|
912
|
+
textDecoration (NONE | UNDERLINE | STRIKETHROUGH, optional)
|
|
897
913
|
fills (array, optional) \u2014 Text color paints \u2014 e.g. [{type: 'SOLID', color: '#hex'}]. Same as node fills.
|
|
898
914
|
fontColor (Color, optional) \u2014 Shorthand \u2014 sets text color (auto-binds to matching variable/style)
|
|
899
915
|
fontColorVariableName (string, optional) \u2014 Bind color variable by name e.g. 'text/primary'
|
|
@@ -929,7 +945,7 @@ Params:
|
|
|
929
945
|
variables (array, optional) \u2014 Variables to create inside this collection
|
|
930
946
|
name (string, required) \u2014 Variable name (unique within collection)
|
|
931
947
|
type (COLOR | FLOAT | STRING | BOOLEAN, required) \u2014 Variable type
|
|
932
|
-
value (variable_value, optional) \u2014
|
|
948
|
+
value (variable_value, optional) \u2014 Sets all modes to this value. Use valuesByMode for per-mode control.
|
|
933
949
|
valuesByMode (object, optional) \u2014 Values keyed by mode name (e.g. {"Light": "#FFF", "Dark": "#111"})
|
|
934
950
|
description (string, optional)
|
|
935
951
|
scopes (string[], optional) \u2014 Restrict where variable can be applied (default: ALL_SCOPES)`,
|
|
@@ -941,11 +957,11 @@ Params:
|
|
|
941
957
|
}
|
|
942
958
|
},
|
|
943
959
|
"variables": {
|
|
944
|
-
"summary": '# variables\nSearch and update design variables within a collection.\n\nMethods:\n list Search variables within a collection [read]\n get Get variable detail by name [read]\n create Create variables in a collection. Use valuesByMode for
|
|
960
|
+
"summary": '# variables\nSearch and update design variables within a collection.\n\nMethods:\n list Search variables within a collection [read]\n get Get variable detail by name [read]\n create Create variables in a collection. Use valuesByMode for per-mode control, or value to set all modes at once. [create]\n update Update variable metadata and/or set values [edit]\n delete Delete variables [edit]\n\n// Search and update variables within a collection. collectionId is required on all methods.\n// Use variable_collections to create full token sets (collection + modes + variables in one call).\n// ---\n// query: prefix match first, then substring. "bg/" matches bg/canvas, bg/surface, etc.\n// valuesByMode: values keyed by mode name. On create, value sets all modes; on update, value sets the default mode only.\n// Aliases: {type: "VARIABLE_ALIAS", name: "other/variable"}.\n// scopes: ALL_SCOPES, TEXT_CONTENT, WIDTH_HEIGHT, GAP, CORNER_RADIUS, ALL_FILLS, FRAME_FILL, SHAPE_FILL,\n// TEXT_FILL, STROKE_COLOR, STROKE_FLOAT, EFFECT_FLOAT, EFFECT_COLOR, OPACITY, FONT_FAMILY, FONT_STYLE,\n// FONT_WEIGHT, FONT_SIZE, LINE_HEIGHT, LETTER_SPACING, PARAGRAPH_SPACING, PARAGRAPH_INDENT\n\nUse variables(method: "help", topic: "<method>") for method details.',
|
|
945
961
|
"methods": {
|
|
946
962
|
"list": '# variables.list\nSearch variables within a collection\n\nExample: variables(method:"list", collectionId:"Colors", query:"bg/")\n\nParams:\n collectionId (string, required) \u2014 Collection ID or name\n query (string, optional) \u2014 Search query \u2014 prefix match first, then substring fallback\n type (COLOR | FLOAT | STRING | BOOLEAN, optional) \u2014 Filter by variable type\n fields (string[], optional) \u2014 Property whitelist. Identity fields (id, name, type) always included. Omit for stubs on list, full on get. Pass ["*"] for all.\n offset (number, optional) \u2014 Skip N items for pagination (default 0)\n limit (number, optional) \u2014 Max items per page (default 100)',
|
|
947
963
|
"get": '# variables.get\nGet variable detail by name\n\nParams:\n name (string, required) \u2014 Variable name (unique within collection)\n collectionId (string, required) \u2014 Collection ID or name\n fields (string[], optional) \u2014 Property whitelist. Identity fields (id, name, type) always included. Omit for stubs on list, full on get. Pass ["*"] for all.',
|
|
948
|
-
"create": '# variables.create\nCreate variables in a collection. Use valuesByMode for
|
|
964
|
+
"create": '# variables.create\nCreate variables in a collection. Use valuesByMode for per-mode control, or value to set all modes at once.\n\nExample: variables(method:"create", collectionId:"Colors", items:[{name:"bg/primary", type:"COLOR", valuesByMode:{"Light":"#FFF","Dark":"#111"}, scopes:["ALL_FILLS"]}])\n\nParams:\n collectionId (string, required) \u2014 Collection ID or name\n items (VariableCreateItem[], required) \u2014 Array of variables to create\n name (string, required) \u2014 Variable name (must be unique within collection)\n type (COLOR | FLOAT | STRING | BOOLEAN, required) \u2014 Variable type\n value (variable_value, optional) \u2014 Sets all modes to this value. Use valuesByMode for per-mode control.\n valuesByMode (object, optional) \u2014 Values keyed by mode name (e.g. {"Light": "#FFF", "Dark": "#111"}). Takes precedence over value.\n description (string, optional) \u2014 Variable description\n scopes (string[], optional) \u2014 Restrict where variable can be applied (default: ALL_SCOPES)',
|
|
949
965
|
"update": '# variables.update\nUpdate variable metadata and/or set values\n\nExample: variables(method:"update", collectionId:"Colors", items:[{name:"bg/primary", valuesByMode:{"Light":"#FFF","Dark":"#222"}}])\n\nParams:\n collectionId (string, required) \u2014 Collection ID or name\n items (VariableUpdateItem[], required) \u2014 Array of variable updates\n name (string, required) \u2014 Variable name\n rename (string, optional) \u2014 Rename the variable\n description (string, optional) \u2014 Set description\n scopes (string[], optional) \u2014 Update scopes\n value (variable_value, optional) \u2014 Shorthand \u2014 sets the default mode value. Use valuesByMode for multi-mode.\n valuesByMode (object, optional) \u2014 Values keyed by mode name. Takes precedence over value.',
|
|
950
966
|
"delete": "# variables.delete\nDelete variables\n\nParams:\n collectionId (string, required) \u2014 Collection ID or name\n name (string, optional) \u2014 Variable name\n items (array, optional) \u2014 Batch: [{name}, ...]\n name (string, required)"
|
|
951
967
|
}
|
|
@@ -1229,7 +1245,7 @@ var tools = [
|
|
|
1229
1245
|
bottomLeftRadius: token.optional(),
|
|
1230
1246
|
effectStyleName: z3.string().optional().describe("Effect style name (e.g. 'Shadow/Card') for shadows, blurs"),
|
|
1231
1247
|
layoutMode: z3.enum(["NONE", "HORIZONTAL", "VERTICAL"]).optional().describe("Layout direction (default: auto \u2014 NONE when width+height set, otherwise inferred from layout props)"),
|
|
1232
|
-
layoutWrap: z3.enum(["NO_WRAP", "WRAP"]).optional(),
|
|
1248
|
+
layoutWrap: z3.enum(["NO_WRAP", "WRAP"]).optional().describe("Wrap children to new rows (HORIZONTAL layout only \u2014 Figma does not support WRAP on VERTICAL layouts). Use column frames inside a HORIZONTAL parent for vertical grid patterns."),
|
|
1233
1249
|
padding: token.optional().describe("All edges (number) or variable name (string). Per-edge: paddingTop, paddingRight, paddingBottom, paddingLeft."),
|
|
1234
1250
|
paddingTop: token.optional(),
|
|
1235
1251
|
paddingRight: token.optional(),
|
|
@@ -1290,7 +1306,7 @@ var tools = [
|
|
|
1290
1306
|
bottomLeftRadius: token.optional(),
|
|
1291
1307
|
effectStyleName: z3.string().optional().describe("Effect style name (e.g. 'Shadow/Card') for shadows, blurs"),
|
|
1292
1308
|
layoutMode: z3.enum(["NONE", "HORIZONTAL", "VERTICAL"]).optional().describe("Layout direction (default: auto \u2014 NONE when width+height set, otherwise inferred from layout props)"),
|
|
1293
|
-
layoutWrap: z3.enum(["NO_WRAP", "WRAP"]).optional(),
|
|
1309
|
+
layoutWrap: z3.enum(["NO_WRAP", "WRAP"]).optional().describe("Wrap children to new rows (HORIZONTAL layout only \u2014 Figma does not support WRAP on VERTICAL layouts). Use column frames inside a HORIZONTAL parent for vertical grid patterns."),
|
|
1294
1310
|
padding: token.optional().describe("All edges (number) or variable name (string). Per-edge: paddingTop, paddingRight, paddingBottom, paddingLeft."),
|
|
1295
1311
|
paddingTop: token.optional(),
|
|
1296
1312
|
paddingRight: token.optional(),
|
|
@@ -1477,7 +1493,7 @@ var tools = [
|
|
|
1477
1493
|
bottomLeftRadius: token.optional(),
|
|
1478
1494
|
effectStyleName: z3.string().optional().describe("Effect style name (e.g. 'Shadow/Card') for shadows, blurs"),
|
|
1479
1495
|
layoutMode: z3.enum(["NONE", "HORIZONTAL", "VERTICAL"]).optional().describe("Layout direction (default: auto \u2014 NONE when width+height set, otherwise inferred from layout props)"),
|
|
1480
|
-
layoutWrap: z3.enum(["NO_WRAP", "WRAP"]).optional(),
|
|
1496
|
+
layoutWrap: z3.enum(["NO_WRAP", "WRAP"]).optional().describe("Wrap children to new rows (HORIZONTAL layout only \u2014 Figma does not support WRAP on VERTICAL layouts). Use column frames inside a HORIZONTAL parent for vertical grid patterns."),
|
|
1481
1497
|
padding: token.optional().describe("All edges (number) or variable name (string). Per-edge: paddingTop, paddingRight, paddingBottom, paddingLeft."),
|
|
1482
1498
|
paddingTop: token.optional(),
|
|
1483
1499
|
paddingRight: token.optional(),
|
|
@@ -1532,7 +1548,7 @@ var tools = [
|
|
|
1532
1548
|
bottomLeftRadius: token.optional(),
|
|
1533
1549
|
effectStyleName: z3.string().optional().describe("Effect style name (e.g. 'Shadow/Card') for shadows, blurs"),
|
|
1534
1550
|
layoutMode: z3.enum(["HORIZONTAL", "VERTICAL"]).describe("Primary axis direction"),
|
|
1535
|
-
layoutWrap: z3.enum(["NO_WRAP", "WRAP"]).optional(),
|
|
1551
|
+
layoutWrap: z3.enum(["NO_WRAP", "WRAP"]).optional().describe("Wrap children to new rows (HORIZONTAL layout only \u2014 Figma does not support WRAP on VERTICAL layouts). Use column frames inside a HORIZONTAL parent for vertical grid patterns."),
|
|
1536
1552
|
padding: token.optional().describe("All edges (number) or variable name (string). Per-edge: paddingTop, paddingRight, paddingBottom, paddingLeft."),
|
|
1537
1553
|
paddingTop: token.optional(),
|
|
1538
1554
|
paddingRight: token.optional(),
|
|
@@ -1770,7 +1786,7 @@ var tools = [
|
|
|
1770
1786
|
blendMode: z3.enum(["PASS_THROUGH", "NORMAL", "DARKEN", "MULTIPLY", "LINEAR_BURN", "COLOR_BURN", "LIGHTEN", "SCREEN", "LINEAR_DODGE", "COLOR_DODGE", "OVERLAY", "SOFT_LIGHT", "HARD_LIGHT", "DIFFERENCE", "EXCLUSION", "HUE", "SATURATION", "COLOR", "LUMINOSITY"]).optional(),
|
|
1771
1787
|
effectStyleName: z3.string().optional().describe("Effect style name (e.g. 'Shadow/Card') for shadows, blurs"),
|
|
1772
1788
|
layoutMode: z3.enum(["NONE", "HORIZONTAL", "VERTICAL"]).optional().describe("Layout direction (default: NONE)"),
|
|
1773
|
-
layoutWrap: z3.enum(["NO_WRAP", "WRAP"]).optional(),
|
|
1789
|
+
layoutWrap: z3.enum(["NO_WRAP", "WRAP"]).optional().describe("Wrap children to new rows (HORIZONTAL layout only \u2014 Figma does not support WRAP on VERTICAL layouts). Use column frames inside a HORIZONTAL parent for vertical grid patterns."),
|
|
1774
1790
|
padding: token.optional().describe("All edges (number) or variable name (string). Per-edge: paddingTop, paddingRight, paddingBottom, paddingLeft."),
|
|
1775
1791
|
paddingTop: token.optional(),
|
|
1776
1792
|
paddingRight: token.optional(),
|
|
@@ -1791,6 +1807,10 @@ var tools = [
|
|
|
1791
1807
|
fontFamily: z3.string().optional().describe("Font family"),
|
|
1792
1808
|
fontStyle: z3.string().optional().describe('Font variant e.g. "Bold", "Italic" \u2014 overrides fontWeight'),
|
|
1793
1809
|
fontWeight: z3.number().optional().describe("100-900. Ignored when fontStyle is set."),
|
|
1810
|
+
lineHeight: lineHeight.optional(),
|
|
1811
|
+
letterSpacing: letterSpacing.optional(),
|
|
1812
|
+
textCase: z3.enum(["ORIGINAL", "UPPER", "LOWER", "TITLE", "SMALL_CAPS", "SMALL_CAPS_FORCED"]).optional(),
|
|
1813
|
+
textDecoration: z3.enum(["NONE", "UNDERLINE", "STRIKETHROUGH"]).optional(),
|
|
1794
1814
|
fontColor: colorRgba.optional().describe("Shorthand \u2014 sets text color (auto-binds to matching variable/style)"),
|
|
1795
1815
|
fontColorVariableName: z3.string().optional().describe("Bind color variable by name e.g. 'text/primary'"),
|
|
1796
1816
|
fontColorStyleName: z3.string().optional().describe("Apply paint style \u2014 overrides fontColor"),
|
|
@@ -1938,7 +1958,7 @@ var tools = [
|
|
|
1938
1958
|
},
|
|
1939
1959
|
{
|
|
1940
1960
|
name: "prototyping",
|
|
1941
|
-
description: '/** Manage prototype interactions, reactions, and navigation flows. Use method "help" for detailed parameter docs. */\n get (id) \u2192 { reactions?, overflowDirection? } // Get reactions and overflow direction on a node\n add (id
|
|
1961
|
+
description: '/** Manage prototype interactions, reactions, and navigation flows. Use method "help" for detailed parameter docs. */\n get (id) \u2192 { reactions?, overflowDirection? } // Get reactions and overflow direction on a node\n add (id?, trigger?: ON_CLICK|ON_HOVER|ON_PRESS|ON_DRAG|AFTER_TIMEOUT|MOUSE_ENTER|MOUSE_LEAVE|ON_KEY_DOWN, triggerDelay?, triggerKeyCodes?, triggerDevice?: KEYBOARD|XBOX_ONE|PS4|SWITCH_PRO, destination?, navigation?: NAVIGATE|SWAP|OVERLAY|SCROLL_TO|CHANGE_TO, transition?: DISSOLVE|SMART_ANIMATE|MOVE_IN|MOVE_OUT|PUSH|SLIDE_IN|SLIDE_OUT|INSTANT, transitionDirection?: LEFT|RIGHT|TOP|BOTTOM, duration?, easing?: EASE_IN|EASE_OUT|EASE_IN_AND_OUT|LINEAR|GENTLE|QUICK|BOUNCY|SLOW, actionType?: NODE|BACK|CLOSE|URL|SET_VARIABLE_MODE, url?, collectionName?, modeName?, resetScrollPosition?, actions?, items?: { id: string; trigger: "ON_CLICK" | "ON_HOVER" | "ON_PRESS" | "ON_DRAG" | "AFTER_TIMEOUT" | "MOUSE_ENTER" | "MOUSE_LEAVE" | "ON_KEY_DOWN"; destination?: string; navigation?: "NAVIGATE" | "SWAP" | "OVERLAY" | "SCROLL_TO" | "CHANGE_TO"; transition?: "DISSOLVE" | "SMART_ANIMATE" | "MOVE_IN" | "MOVE_OUT" | "PUSH" | "SLIDE_IN" | "SLIDE_OUT" | "INSTANT"; transitionDirection?: "LEFT" | "RIGHT" | "TOP" | "BOTTOM"; duration?: number; easing?: "EASE_IN" | "EASE_OUT" | "EASE_IN_AND_OUT" | "LINEAR" | "GENTLE" | "QUICK" | "BOUNCY" | "SLOW"; actionType?: "NODE" | "BACK" | "CLOSE" | "URL" | "SET_VARIABLE_MODE"; triggerDelay?: number; url?: string; collectionName?: string; modeName?: string; resetScrollPosition?: boolean; actions?: unknown[] }[]) \u2192 { results: "ok"[] } // Add a prototype reaction to a node\n set (id, reactions) \u2192 { results: "ok"[] } // Replace all reactions on a node (raw reactions array)\n remove (id, index) \u2192 { results: "ok"[] } // Remove a reaction from a node by index\n// Reactions wire up interactions: trigger (ON_CLICK, ON_HOVER, ...) \u2192 action (navigate, swap, overlay).\n// Common patterns: button ON_CLICK \u2192 NAVIGATE to detail frame; card ON_HOVER \u2192 CHANGE_TO hover variant.\n// Multi-action: pass actions[] array to run multiple actions on one trigger (e.g. navigate + set variable mode).',
|
|
1942
1962
|
schema: (caps2) => filterMethodsByTier({
|
|
1943
1963
|
method: z3.enum(["get", "add", "set", "remove", "help"]),
|
|
1944
1964
|
id: z3.string().optional().describe("Node ID"),
|
|
@@ -1958,6 +1978,7 @@ var tools = [
|
|
|
1958
1978
|
modeName: z3.string().optional().describe("Mode name to switch to (for SET_VARIABLE_MODE)"),
|
|
1959
1979
|
resetScrollPosition: flexBool(z3.boolean()).optional().describe("Reset scroll position on navigate (default: true)"),
|
|
1960
1980
|
actions: flexJson(z3.array(z3.record(z3.string(), z3.unknown()))).optional().describe("Multi-action: [{actionType, destination?, navigation?, collectionName?, modeName?, ...}]. Overrides single-action params."),
|
|
1981
|
+
items: flexJson(z3.array(z3.record(z3.string(), z3.unknown()))).optional().describe("Batch: array of {id, trigger, destination?, ...} reaction items"),
|
|
1961
1982
|
reactions: flexJson(z3.array(z3.record(z3.string(), z3.unknown()))).optional().describe("Full reactions array \u2014 [{trigger:{type}, actions:[{type, destinationId, navigation, transition}]}]"),
|
|
1962
1983
|
index: z3.coerce.number().optional().describe("Reaction index (0-based)"),
|
|
1963
1984
|
topic: z3.string().optional().describe('Help topic \u2014 method name for endpoint help, e.g. "create"')
|
|
@@ -1968,10 +1989,6 @@ var tools = [
|
|
|
1968
1989
|
if (m === "get") {
|
|
1969
1990
|
if (params.id === void 0) throw new Error('get requires "id"');
|
|
1970
1991
|
}
|
|
1971
|
-
if (m === "add") {
|
|
1972
|
-
if (params.id === void 0) throw new Error('add requires "id"');
|
|
1973
|
-
if (params.trigger === void 0) throw new Error('add requires "trigger"');
|
|
1974
|
-
}
|
|
1975
1992
|
if (m === "set") {
|
|
1976
1993
|
if (params.id === void 0) throw new Error('set requires "id"');
|
|
1977
1994
|
if (params.reactions === void 0) throw new Error('set requires "reactions"');
|
|
@@ -1980,6 +1997,39 @@ var tools = [
|
|
|
1980
1997
|
if (params.id === void 0) throw new Error('remove requires "id"');
|
|
1981
1998
|
if (params.index === void 0) throw new Error('remove requires "index"');
|
|
1982
1999
|
}
|
|
2000
|
+
if (!params.items) return;
|
|
2001
|
+
if (m === "add") {
|
|
2002
|
+
const itemSchema = z3.object({
|
|
2003
|
+
id: z3.string().describe("Node ID"),
|
|
2004
|
+
trigger: z3.enum(["ON_CLICK", "ON_HOVER", "ON_PRESS", "ON_DRAG", "AFTER_TIMEOUT", "MOUSE_ENTER", "MOUSE_LEAVE", "ON_KEY_DOWN"]).describe("Trigger type"),
|
|
2005
|
+
destination: z3.string().optional().describe("Target node ID"),
|
|
2006
|
+
navigation: z3.enum(["NAVIGATE", "SWAP", "OVERLAY", "SCROLL_TO", "CHANGE_TO"]).optional(),
|
|
2007
|
+
transition: z3.enum(["DISSOLVE", "SMART_ANIMATE", "MOVE_IN", "MOVE_OUT", "PUSH", "SLIDE_IN", "SLIDE_OUT", "INSTANT"]).optional(),
|
|
2008
|
+
transitionDirection: z3.enum(["LEFT", "RIGHT", "TOP", "BOTTOM"]).optional(),
|
|
2009
|
+
duration: z3.coerce.number().optional(),
|
|
2010
|
+
easing: z3.enum(["EASE_IN", "EASE_OUT", "EASE_IN_AND_OUT", "LINEAR", "GENTLE", "QUICK", "BOUNCY", "SLOW"]).optional(),
|
|
2011
|
+
actionType: z3.enum(["NODE", "BACK", "CLOSE", "URL", "SET_VARIABLE_MODE"]).optional(),
|
|
2012
|
+
triggerDelay: z3.coerce.number().optional(),
|
|
2013
|
+
url: z3.string().optional(),
|
|
2014
|
+
collectionName: z3.string().optional(),
|
|
2015
|
+
modeName: z3.string().optional(),
|
|
2016
|
+
resetScrollPosition: flexBool(z3.boolean()).optional(),
|
|
2017
|
+
actions: flexJson(z3.array(z3.record(z3.string(), z3.unknown()))).optional()
|
|
2018
|
+
}).passthrough();
|
|
2019
|
+
try {
|
|
2020
|
+
params.items = z3.array(itemSchema).parse(params.items);
|
|
2021
|
+
} catch (e) {
|
|
2022
|
+
if (e instanceof z3.ZodError) {
|
|
2023
|
+
throw new Error(e.issues.map((i) => {
|
|
2024
|
+
const path = i.path.join(".");
|
|
2025
|
+
const shape = itemSchema instanceof z3.ZodObject ? itemSchema.shape : null;
|
|
2026
|
+
const desc = shape?.[i.path[1]]?.description;
|
|
2027
|
+
return path + ": " + i.message + (desc ? " (expected: " + desc + ")" : "");
|
|
2028
|
+
}).join("; "));
|
|
2029
|
+
}
|
|
2030
|
+
throw e;
|
|
2031
|
+
}
|
|
2032
|
+
}
|
|
1983
2033
|
},
|
|
1984
2034
|
commandMap: { "get": "prototyping.get", "add": "prototyping.add", "set": "prototyping.set", "remove": "prototyping.remove" }
|
|
1985
2035
|
},
|
|
@@ -2174,6 +2224,10 @@ var tools = [
|
|
|
2174
2224
|
fontStyle: z3.string().optional().describe('Font variant e.g. "Bold", "Italic" \u2014 overrides fontWeight'),
|
|
2175
2225
|
fontSize: z3.number().optional().describe("Font size (default: 14)"),
|
|
2176
2226
|
fontWeight: z3.number().optional().describe("100-900 (default: 400). Ignored when fontStyle is set."),
|
|
2227
|
+
lineHeight: lineHeight.optional(),
|
|
2228
|
+
letterSpacing: letterSpacing.optional(),
|
|
2229
|
+
textCase: z3.enum(["ORIGINAL", "UPPER", "LOWER", "TITLE", "SMALL_CAPS", "SMALL_CAPS_FORCED"]).optional(),
|
|
2230
|
+
textDecoration: z3.enum(["NONE", "UNDERLINE", "STRIKETHROUGH"]).optional(),
|
|
2177
2231
|
fills: z3.array(z3.record(z3.string(), z3.unknown())).optional().describe("Text color paints \u2014 e.g. [{type: 'SOLID', color: '#hex'}]. Same as node fills."),
|
|
2178
2232
|
fontColor: colorRgba.optional().describe("Shorthand \u2014 sets text color (auto-binds to matching variable/style)"),
|
|
2179
2233
|
fontColorVariableName: z3.string().optional().describe("Bind color variable by name e.g. 'text/primary'"),
|
|
@@ -2373,7 +2427,7 @@ var tools = [
|
|
|
2373
2427
|
},
|
|
2374
2428
|
{
|
|
2375
2429
|
name: "variables",
|
|
2376
|
-
description: '/** Search and update design variables within a collection. Use method "help" for detailed parameter docs. */\n list (collectionId, query?, type?: COLOR|FLOAT|STRING|BOOLEAN, fields?, offset?, limit?) \u2192 { totalCount, items } // Search variables within a collection\n get (name, collectionId, fields?) \u2192 { name, type, collectionId, valuesByMode: Record<string, number | boolean | string | Color | {type: "VARIABLE_ALIAS", name: string}>, description?, scopes? } // Get variable detail by name\n create (collectionId, items: VariableCreateItem[]) \u2192 { results: {name}[] } // Create variables in a collection. Use valuesByMode for
|
|
2430
|
+
description: '/** Search and update design variables within a collection. Use method "help" for detailed parameter docs. */\n list (collectionId, query?, type?: COLOR|FLOAT|STRING|BOOLEAN, fields?, offset?, limit?) \u2192 { totalCount, items } // Search variables within a collection\n get (name, collectionId, fields?) \u2192 { name, type, collectionId, valuesByMode: Record<string, number | boolean | string | Color | {type: "VARIABLE_ALIAS", name: string}>, description?, scopes? } // Get variable detail by name\n create (collectionId, items: VariableCreateItem[]) \u2192 { results: {name}[] } // Create variables in a collection. Use valuesByMode for per-mode control, or value to set all modes at once.\n update (collectionId, items: VariableUpdateItem[]) \u2192 { results: ("ok" | {error})[] } // Update variable metadata and/or set values\n delete (collectionId, name?, items?: { name: string }[]) \u2192 { results: "ok"[] } // Delete variables\n// Search and update variables within a collection. collectionId is required on all methods.\n// Use variable_collections to create full token sets (collection + modes + variables in one call).\n// Shared types:\n// Color: hex "#FF0000" or {r: 0-1, g: 0-1, b: 0-1, a?: 0-1}',
|
|
2377
2431
|
schema: (caps2) => filterMethodsByTier({
|
|
2378
2432
|
method: z3.enum(["list", "get", "create", "update", "delete", "help"]),
|
|
2379
2433
|
collectionId: z3.string().optional().describe("Collection ID or name"),
|
|
@@ -2410,7 +2464,7 @@ var tools = [
|
|
|
2410
2464
|
const itemSchema = z3.object({
|
|
2411
2465
|
name: z3.string().describe("Variable name (must be unique within collection)"),
|
|
2412
2466
|
type: z3.enum(["COLOR", "FLOAT", "STRING", "BOOLEAN"]).describe("Variable type"),
|
|
2413
|
-
value: variableValue.optional().describe("
|
|
2467
|
+
value: variableValue.optional().describe("Sets all modes to this value. Use valuesByMode for per-mode control."),
|
|
2414
2468
|
valuesByMode: z3.record(z3.string(), z3.unknown()).optional().describe('Values keyed by mode name (e.g. {"Light": "#FFF", "Dark": "#111"}). Takes precedence over value.'),
|
|
2415
2469
|
description: z3.string().optional().describe("Variable description"),
|
|
2416
2470
|
scopes: flexJson(z3.array(z3.string())).optional().describe("Restrict where variable can be applied (default: ALL_SCOPES)")
|
|
@@ -2523,7 +2577,7 @@ var guidelinesList = [
|
|
|
2523
2577
|
var guidelinesContent = {
|
|
2524
2578
|
"component-structure": '# Component Structure\n\nComponents need correct sizing, property bindings, and token usage to work well as instances.\n\n## Width Constraints\n\nComponents with text content need a width \u2014 otherwise text never wraps.\n\n- Set `width` and `layoutSizingHorizontal:"FIXED"` on cards, panels, list items\n- HUG on both axes is only correct for buttons, badges, icons \u2014 intrinsically-sized elements\n\n## Property Bindings\n\nEvery text node inside a component should be bound to a TEXT property so instances can edit the content.\n\n- On creation: `children:[{type:"text", text:"Title", componentPropertyName:"Title"}]` auto-creates and binds\n- On creation: `children:[{type:"text", text:"Title", componentPropertyName:"Title"}]` auto-creates and binds\n- After creation: `frames(method:"update", items:[{id:"<textNodeId>", componentPropertyName:"<propName>"}])`\n- For existing nodes with many text children: `components(method:"create", type:"from_node", exposeText:true)`\n\nOrphaned properties (defined but not bound to any node) should be deleted:\n```\ncomponents(method:"update", items:[{id, propertyName:"<key>", action:"delete"}])\n```\n\n## Variant Sets\n\nGroup related components as variants \u2014 don\'t leave them as separate components.\n\n- Name variants with the property format: `Style=Primary`, `Style=Secondary`\n- Combine: `components(method:"create", type:"variant_set", items:[{componentIds:[...], name:"Button"}])`\n- Instances pick variants via `variantProperties:{"Style":"Primary"}`\n\n### Adding Variants to an Existing Set\n\nClone an existing variant into the same set with a new name. The `name` param is required \u2014 without it, the duplicate name corrupts the set.\n\n**Add a new value to an existing dimension** (e.g. State=Hover):\n```\ncomponents(method:"clone", id:"<variant_id>", name:"Style=Primary, State=Hover", parentId:"<set_id>")\n```\nClone one variant per combination. For a Style\xD7State set, adding State=Hover requires two clones (one per Style). Use batch `items` for efficiency:\n```\ncomponents(method:"clone", items:[\n {id:"<Primary/Default>", name:"Style=Primary, State=Hover", parentId:"<set_id>"},\n {id:"<Secondary/Default>", name:"Style=Secondary, State=Hover", parentId:"<set_id>"}\n])\n```\nThen patch the new variants: `frames(method:"update", items:[{id:"<new>", fillVariableName:"color/hover"}])`\n\n**Add a new dimension** (e.g. Size=sm to a Style\xD7State set):\n1. Batch rename existing variants to include the new dimension: `frames(method:"update", items:[{id:"<each>", name:"..., Size=md"}])`\n2. Batch clone all variants with the new value: `components(method:"clone", items:[{id:"<each>", name:"..., Size=sm", parentId:"<set_id>"}])`\n3. Batch patch the new variants: `frames(method:"update", items:[{id:"<each>", padding:8, minHeight:32}])`\n\nProperty bindings (TEXT, INSTANCE_SWAP) are preserved on cloned variants.\n\n## Checking\n\nRun `components(method:"audit", id)` \u2014 checks both lint rules and property bindings in one call.',
|
|
2525
2579
|
"library-components": '# Working with Library Components\n\nLibrary components are read-only \u2014 they come from external team libraries and cannot be edited in the current file.\n\n## Reading\n\nWhen reading nodes, library instances appear as stubs with their overridable properties:\n```\n{name: "Header", type: "INSTANCE", componentProperties: {"Platform": "Desktop"}}\n```\n\nLibrary internals are hidden: no `componentId`, no variable names, no style names. You see resolved values (hex colors, numbers) instead.\n\n## Using\n\nPlace library instances via `instances(method:"create", items:[{componentId:"<id>"}])` when you have a local component ID. For library components, instances are already placed by the designer \u2014 interact via `instances(method:"update")` to set properties.\n\n## Customizing\n\nTo edit a library component, clone it into the local file first:\n\n```\ncomponents(method:"clone", id:"<instanceId>")\n```\n\nThis resolves the instance to its source component (or full component set) and creates a local copy with a new ID. Edit the local copy freely \u2014 it is independent of the library.\n\nDo not attempt to `components(method:"get")` or `components(method:"update")` a library component directly \u2014 these will error.\n\n## Overriding Instance Properties\n\nUse `instances(method:"update")` to change overridable properties on library instances:\n```\ninstances(method:"update", items:[{id:"<instanceId>", properties:{"Label":"New Text", "State":"Hover"}}])\n```\n\nProperty names are clean (no hash suffixes needed for update \u2014 the system resolves partial keys).',
|
|
2526
|
-
"responsive-designs": '# Responsive Sizing\n\n## Workflow: Top-Down Sizing\n\nBuild layouts from the outside in:\n\n1. **Set the container first.** Every container needs an explicit width \u2014 either `width` + `layoutSizingHorizontal:"FIXED"` for shells and bounded panels, or `layoutSizingHorizontal:"FILL"` inside an auto-layout parent. Set `layoutMode` (VERTICAL or HORIZONTAL) and spacing/padding.\n2. **Children fill the container.** Use `layoutSizingHorizontal:"FILL"` on children so they stretch to the available space. Use `layoutSizingVertical:"HUG"` so height follows content.\n3. **Only leaves use HUG on both axes.** Buttons, badges, icons \u2014 elements with short, predictable content that should shrink-wrap.\n\nThis ensures every level of the tree has a clear width constraint. Text wraps, FILL children stretch, and the layout adapts when the container resizes.\n\nAlways set BOTH axes explicitly on every node. Omitting sizing leads to unintended defaults.\n\n## FIXED / FILL / HUG\n\n- **FIXED** \u2014 explicit bounded widths: page shell, sidebar, modal max-width, specimen frames\n- **FILL** \u2014 children that adapt to parent: cards, rows, panels, nav stacks, text that should wrap. Use `minWidth`/`maxWidth` for responsive constraints.\n- **HUG** \u2014 content-sized leaves only: icons, badges, pills, button labels\n\n## Anti-patterns: HUG/HUG\n\nHUG on both axes is the most common cause of broken layouts. It means "shrink to fit my content on both axes" \u2014 the container has no opinion about its own size and collapses to whatever its children measure.\n\n**Why HUG/HUG breaks designs:**\n\n1. **Text never wraps.** A HUG-width container grows to fit the longest text line. Body text becomes a single very long line instead of wrapping at a readable width. The design looks correct with short placeholder text but breaks with real content.\n\n2. **Layouts don\'t adapt.** HUG/HUG containers ignore their parent\'s width. A card inside a responsive column won\'t stretch to fill available space \u2014 it stays at its content width, leaving gaps or overflowing.\n\n3. **FILL children become under-constrained.** A child with `layoutSizingHorizontal:"FILL"` inside a HUG-width parent has no space to fill \u2014 the parent defers its width to its children, but the FILL child defers its width to the parent. The result is under-constrained sizing that produces unpredictable or collapsed layouts.\n\n4. **Cascading failures.** One HUG/HUG container at the top of a tree forces every child to resolve its own width. The entire layout becomes rigid and content-dependent instead of responsive.\n\n**HUG/HUG is only correct for:**\n- Buttons, pills, badges, chips \u2014 intrinsically-sized leaf elements with short, predictable content\n- Icon containers with fixed-size children\n- Inline tags and status indicators\n\n**For everything else, set at least one axis to FIXED or FILL:**\n- Cards, panels, list rows \u2192 `layoutSizingHorizontal:"FILL"`, vertical `HUG`. Add `minWidth`/`maxWidth` for responsive bounds.\n- Shells, sidebars, modals \u2192 `width` + `layoutSizingHorizontal:"FIXED"`, vertical `FILL` or `HUG`\n- Full-width sections \u2192 `layoutSizingHorizontal:"FILL"`, `layoutSizingVertical:"HUG"`\n\n## Component Sizing\n\nComponent roots use `FILL` when placed in a parent \u2014 they adapt to context, not a fixed specimen width. Use `FIXED` only for the specimen (the component definition itself when it needs a specific preview width).\n\nExample sidebar item:\n- Instance: `FILL` in parent nav stack\n- Icon child: fixed 18x18\n- Label child: `FILL`\n- Badge child: `HUG`\n\n## Text Sizing\n\n- Body text inside containers: prefer `FILL` width, `HUG` height (auto-wraps)\n- Single-line labels: prefer `FILL` horizontal (truncates if needed)\n- Standalone headings: `HUG` is fine\n\nInside auto-layout parents, target `layoutSizingHorizontal:"FILL"` + `layoutSizingVertical:"HUG"` + `textAutoResize:"HEIGHT"` for text that should wrap. These are not auto-applied \u2014 set them explicitly on text.create or text.update.\n\n## Checklist\n\nBefore finalizing a layout, verify:\n1. No container with text has HUG on the horizontal axis (unless it\'s a button/badge)\n2. Children use FILL on the axis that should absorb available space \u2014 not blindly on both axes. Compact controls in horizontal rows often stay HUG vertically.\n3. Top-level containers have an explicit width (FIXED) or stretch to their parent (FILL)\n4. Run `lint(method:"check", nodeId:"<rootId>", rules:["composition"])` to catch overflow-parent, unbounded-hug, and fixed-in-autolayout issues',
|
|
2580
|
+
"responsive-designs": '# Responsive Sizing\n\n## Workflow: Top-Down Sizing\n\nBuild layouts from the outside in:\n\n1. **Set the container first.** Every container needs an explicit width \u2014 either `width` + `layoutSizingHorizontal:"FIXED"` for shells and bounded panels, or `layoutSizingHorizontal:"FILL"` inside an auto-layout parent. Set `layoutMode` (VERTICAL or HORIZONTAL) and spacing/padding.\n2. **Children fill the container.** Use `layoutSizingHorizontal:"FILL"` on children so they stretch to the available space. Use `layoutSizingVertical:"HUG"` so height follows content.\n3. **Only leaves use HUG on both axes.** Buttons, badges, icons \u2014 elements with short, predictable content that should shrink-wrap.\n\nThis ensures every level of the tree has a clear width constraint. Text wraps, FILL children stretch, and the layout adapts when the container resizes.\n\nAlways set BOTH axes explicitly on every node. Omitting sizing leads to unintended defaults.\n\n## FIXED / FILL / HUG\n\n- **FIXED** \u2014 explicit bounded widths: page shell, sidebar, modal max-width, specimen frames\n- **FILL** \u2014 children that adapt to parent: cards, rows, panels, nav stacks, text that should wrap. Use `minWidth`/`maxWidth` for responsive constraints.\n- **HUG** \u2014 content-sized leaves only: icons, badges, pills, button labels\n\n## Anti-patterns: HUG/HUG\n\nHUG on both axes is the most common cause of broken layouts. It means "shrink to fit my content on both axes" \u2014 the container has no opinion about its own size and collapses to whatever its children measure.\n\n**Why HUG/HUG breaks designs:**\n\n1. **Text never wraps.** A HUG-width container grows to fit the longest text line. Body text becomes a single very long line instead of wrapping at a readable width. The design looks correct with short placeholder text but breaks with real content.\n\n2. **Layouts don\'t adapt.** HUG/HUG containers ignore their parent\'s width. A card inside a responsive column won\'t stretch to fill available space \u2014 it stays at its content width, leaving gaps or overflowing.\n\n3. **FILL children become under-constrained.** A child with `layoutSizingHorizontal:"FILL"` inside a HUG-width parent has no space to fill \u2014 the parent defers its width to its children, but the FILL child defers its width to the parent. The result is under-constrained sizing that produces unpredictable or collapsed layouts.\n\n4. **Cascading failures.** One HUG/HUG container at the top of a tree forces every child to resolve its own width. The entire layout becomes rigid and content-dependent instead of responsive.\n\n**HUG/HUG is only correct for:**\n- Buttons, pills, badges, chips \u2014 intrinsically-sized leaf elements with short, predictable content\n- Icon containers with fixed-size children\n- Inline tags and status indicators\n\n**For everything else, set at least one axis to FIXED or FILL:**\n- Cards, panels, list rows \u2192 `layoutSizingHorizontal:"FILL"`, vertical `HUG`. Add `minWidth`/`maxWidth` for responsive bounds.\n- Shells, sidebars, modals \u2192 `width` + `layoutSizingHorizontal:"FIXED"`, vertical `FILL` or `HUG`\n- Full-width sections \u2192 `layoutSizingHorizontal:"FILL"`, `layoutSizingVertical:"HUG"`\n\n## Wrapping Layouts (layoutWrap)\n\n`layoutWrap: WRAP` enables children to flow into new rows when they exceed the container width \u2014 like CSS `flex-wrap`. This only works with **HORIZONTAL** auto-layout. Figma does not support wrap on VERTICAL layouts.\n\n**When to use wrap:**\n- Card grids with a fixed number of columns at a known width\n- Tag/chip collections where items flow into multiple rows\n- Any layout where items should reflow based on available width\n\n**Horizontal wrap pattern:**\n```\nframes.create(type: "auto_layout", layoutMode: "HORIZONTAL", layoutWrap: "WRAP",\n itemSpacing: "space/16", counterAxisSpacing: "space/16")\n```\nChildren use FIXED width to control column count. `counterAxisSpacing` sets the gap between wrapped rows.\n\n**Vertical grid alternative:**\nSince VERTICAL layouts cannot wrap, build column-based grids by nesting VERTICAL columns inside a HORIZONTAL parent:\n```\nouter (HORIZONTAL, itemSpacing: 20, FILL width)\n col-1 (VERTICAL, FILL width, HUG height, itemSpacing: 20)\n col-2 (VERTICAL, FILL width, HUG height, itemSpacing: 20)\n col-3 (VERTICAL, FILL width, HUG height, itemSpacing: 20)\n```\nEach column gets equal width via FILL. Reparent items into columns for column-first ordering. This handles variable card heights per column independently.\n\n## Component Sizing\n\nComponent roots use `FILL` when placed in a parent \u2014 they adapt to context, not a fixed specimen width. Use `FIXED` only for the specimen (the component definition itself when it needs a specific preview width).\n\nExample sidebar item:\n- Instance: `FILL` in parent nav stack\n- Icon child: fixed 18x18\n- Label child: `FILL`\n- Badge child: `HUG`\n\n## Text Sizing\n\n- Body text inside containers: prefer `FILL` width, `HUG` height (auto-wraps)\n- Single-line labels: prefer `FILL` horizontal (truncates if needed)\n- Standalone headings: `HUG` is fine\n\nInside auto-layout parents, target `layoutSizingHorizontal:"FILL"` + `layoutSizingVertical:"HUG"` + `textAutoResize:"HEIGHT"` for text that should wrap. These are not auto-applied \u2014 set them explicitly on text.create or text.update.\n\n## Checklist\n\nBefore finalizing a layout, verify:\n1. No container with text has HUG on the horizontal axis (unless it\'s a button/badge)\n2. Children use FILL on the axis that should absorb available space \u2014 not blindly on both axes. Compact controls in horizontal rows often stay HUG vertically.\n3. Top-level containers have an explicit width (FIXED) or stretch to their parent (FILL)\n4. Run `lint(method:"check", nodeId:"<rootId>", rules:["composition"])` to catch overflow-parent, unbounded-hug, and fixed-in-autolayout issues',
|
|
2527
2581
|
"token-discipline": '# Token Discipline\n\nEvery color, spacing value, and text style should come from a design token \u2014 not hardcoded values.\n\n## Colors\n\nBind fills and strokes to color variables instead of hex values.\n\n- Fill: `fillVariableName:"bg/primary"` or `fillStyleName:"Surface/Primary"`\n- Stroke: `strokeVariableName:"border/default"`\n- Text color: `fontColorVariableName:"text/primary"`\n\nIf no matching variable exists, create one first:\n```\nvariables(method:"create", collectionId:"Colors", items:[{name:"bg/accent", type:"COLOR", valuesByMode:{"Light":"#E8F0FE","Dark":"#1A3A5C"}, scopes:["ALL_FILLS"]}])\n```\n\n## Spacing and Radius\n\nPass a variable name string instead of a number for cornerRadius, padding, itemSpacing, strokeWeight, opacity.\n\n- `cornerRadius:"radius/8"` not `cornerRadius:8`\n- `paddingTop:"space/16"` not `paddingTop:16`\n- `itemSpacing:"space/8"` not `itemSpacing:8`\n\nCreate FLOAT variables with appropriate scopes:\n```\nvariables(method:"create", collectionId:"Metrics", items:[{name:"space/12", type:"FLOAT", value:12, scopes:["GAP","WIDTH_HEIGHT"]}])\n```\n\n## Text Styles\n\nApply text styles by name \u2014 don\'t set fontSize/fontFamily/fontWeight manually.\n\n- `textStyleName:"Body/M"` on text.create or frames.update\n- Create styles with `styles(method:"create", type:"text", items:[{name:"Body/M", fontFamily:"Inter", fontSize:14, lineHeight:{value:20, unit:"PIXELS"}}])`\n\n## Common Scopes\n\nCOLOR variables:\n- `ALL_FILLS` \u2014 background fills\n- `TEXT_FILL` \u2014 text color\n- `STROKE_COLOR` \u2014 borders and outlines\n\nFLOAT variables:\n- `GAP`, `WIDTH_HEIGHT` \u2014 spacing and padding\n- `CORNER_RADIUS` \u2014 border radius\n- `STROKE_FLOAT` \u2014 stroke weight\n- `OPACITY` \u2014 transparency\n\n## Checking\n\nLint rules `hardcoded-color`, `hardcoded-token`, `no-text-style` catch unbound values. Run `audit` on any node to check.',
|
|
2528
2582
|
"vibma-workflow": '# Vibma Workflow\n\nWork with the tool in a predictable sequence: read before writing, create parents before children, verify after mutations.\n\n## Build Order\n\n1. `connection.create` \u2192 `connection.get` to verify\n2. Inspect existing structure: `document.get`, `variables.list`, `styles.list`, `components.list`\n3. Create design tokens: variable collections \u2192 variables \u2192 text styles \u2192 effect styles\n4. Create components from tokens\n5. Assemble screens from component instances\n6. Verify with `lint.check` and `frames.export`\n\n## Parent-First Rule\n\nCreate parent containers before children. Dependent creates must be sequential \u2014 never parallelize when the child needs the parent ID.\n\n## Component Creation\n\nBuild components early \u2014 they are the building blocks for screens. A component IS a frame: create it directly with layout properties, then add children.\n\n- Use `components.create(type: "component")` with properties for TEXT, BOOLEAN, INSTANCE_SWAP\n- TEXT properties auto-bind to child text nodes with matching names\n- Group related components into variant sets with `components.create(type: "variant_set")` for state dimensions (Style, Size, State)\n- Use flat components (not variant sets) for INSTANCE_SWAP slots like icons or avatars\n- Assemble screens from `instances.create`, not by cloning frames\n\n## Placement Rule\n\nAlways pass `x` and `y` for top-level nodes and clones. Do not stack everything at `0,0`.\n\n## Instance Rule\n\nCall `components.get` or `instances.get` to discover property keys (including `#suffix`) before setting overrides. Do not guess property names.\n\n## Verify After Mutations\n\n`"ok"` means the write succeeded, not that the result is correct. Read back the node after clone, swap, mode pinning, or large batch updates.'
|
|
2529
2583
|
};
|
|
@@ -48,6 +48,7 @@ __export(guards_exports, {
|
|
|
48
48
|
nodeDelete: () => nodeDelete,
|
|
49
49
|
nodeReparent: () => nodeReparent,
|
|
50
50
|
nodeUpdate: () => nodeUpdate,
|
|
51
|
+
prototypingAdd: () => prototypingAdd,
|
|
51
52
|
stylesCreateEffect: () => stylesCreateEffect,
|
|
52
53
|
stylesCreateGrid: () => stylesCreateGrid,
|
|
53
54
|
stylesCreatePaint: () => stylesCreatePaint,
|
|
@@ -224,6 +225,8 @@ var nodeUpdate = /* @__PURE__ */ new Set([
|
|
|
224
225
|
"layoutSizingHorizontal",
|
|
225
226
|
"layoutSizingVertical",
|
|
226
227
|
"layoutWrap",
|
|
228
|
+
"letterSpacing",
|
|
229
|
+
"lineHeight",
|
|
227
230
|
"locked",
|
|
228
231
|
"maxHeight",
|
|
229
232
|
"maxWidth",
|
|
@@ -254,6 +257,8 @@ var nodeUpdate = /* @__PURE__ */ new Set([
|
|
|
254
257
|
"textAlignHorizontal",
|
|
255
258
|
"textAlignVertical",
|
|
256
259
|
"textAutoResize",
|
|
260
|
+
"textCase",
|
|
261
|
+
"textDecoration",
|
|
257
262
|
"textStyleId",
|
|
258
263
|
"textStyleName",
|
|
259
264
|
"topLeftRadius",
|
|
@@ -515,6 +520,8 @@ var instancesUpdate = /* @__PURE__ */ new Set([
|
|
|
515
520
|
"layoutSizingHorizontal",
|
|
516
521
|
"layoutSizingVertical",
|
|
517
522
|
"layoutWrap",
|
|
523
|
+
"letterSpacing",
|
|
524
|
+
"lineHeight",
|
|
518
525
|
"locked",
|
|
519
526
|
"maxHeight",
|
|
520
527
|
"maxWidth",
|
|
@@ -544,6 +551,8 @@ var instancesUpdate = /* @__PURE__ */ new Set([
|
|
|
544
551
|
"textAlignHorizontal",
|
|
545
552
|
"textAlignVertical",
|
|
546
553
|
"textAutoResize",
|
|
554
|
+
"textCase",
|
|
555
|
+
"textDecoration",
|
|
547
556
|
"textStyleId",
|
|
548
557
|
"textStyleName",
|
|
549
558
|
"topLeftRadius",
|
|
@@ -557,6 +566,23 @@ var instancesSwap = /* @__PURE__ */ new Set(["componentId", "id"]);
|
|
|
557
566
|
var instancesDetach = /* @__PURE__ */ new Set(["id"]);
|
|
558
567
|
var instancesResetOverrides = /* @__PURE__ */ new Set(["id"]);
|
|
559
568
|
var lintFix = /* @__PURE__ */ new Set(["itemSpacing", "layoutMode", "nodeId"]);
|
|
569
|
+
var prototypingAdd = /* @__PURE__ */ new Set([
|
|
570
|
+
"actionType",
|
|
571
|
+
"actions",
|
|
572
|
+
"collectionName",
|
|
573
|
+
"destination",
|
|
574
|
+
"duration",
|
|
575
|
+
"easing",
|
|
576
|
+
"id",
|
|
577
|
+
"modeName",
|
|
578
|
+
"navigation",
|
|
579
|
+
"resetScrollPosition",
|
|
580
|
+
"transition",
|
|
581
|
+
"transitionDirection",
|
|
582
|
+
"trigger",
|
|
583
|
+
"triggerDelay",
|
|
584
|
+
"url"
|
|
585
|
+
]);
|
|
560
586
|
var stylesCreatePaint = /* @__PURE__ */ new Set(["color", "colorVariableName", "description", "name"]);
|
|
561
587
|
var stylesCreateText = /* @__PURE__ */ new Set([
|
|
562
588
|
"description",
|
|
@@ -607,12 +633,16 @@ var textCreate = /* @__PURE__ */ new Set([
|
|
|
607
633
|
"fontWeight",
|
|
608
634
|
"layoutSizingHorizontal",
|
|
609
635
|
"layoutSizingVertical",
|
|
636
|
+
"letterSpacing",
|
|
637
|
+
"lineHeight",
|
|
610
638
|
"name",
|
|
611
639
|
"parentId",
|
|
612
640
|
"text",
|
|
613
641
|
"textAlignHorizontal",
|
|
614
642
|
"textAlignVertical",
|
|
615
643
|
"textAutoResize",
|
|
644
|
+
"textCase",
|
|
645
|
+
"textDecoration",
|
|
616
646
|
"textStyleId",
|
|
617
647
|
"textStyleName",
|
|
618
648
|
"width",
|
|
@@ -735,9 +765,13 @@ var mixinTextParams = /* @__PURE__ */ new Set([
|
|
|
735
765
|
"fontSize",
|
|
736
766
|
"fontStyle",
|
|
737
767
|
"fontWeight",
|
|
768
|
+
"letterSpacing",
|
|
769
|
+
"lineHeight",
|
|
738
770
|
"textAlignHorizontal",
|
|
739
771
|
"textAlignVertical",
|
|
740
772
|
"textAutoResize",
|
|
773
|
+
"textCase",
|
|
774
|
+
"textDecoration",
|
|
741
775
|
"textStyleId",
|
|
742
776
|
"textStyleName"
|
|
743
777
|
]);
|
|
@@ -772,6 +806,7 @@ var mixinTextParams = /* @__PURE__ */ new Set([
|
|
|
772
806
|
nodeDelete,
|
|
773
807
|
nodeReparent,
|
|
774
808
|
nodeUpdate,
|
|
809
|
+
prototypingAdd,
|
|
775
810
|
stylesCreateEffect,
|
|
776
811
|
stylesCreateGrid,
|
|
777
812
|
stylesCreatePaint,
|
|
@@ -44,6 +44,8 @@ declare const instancesDetach: ReadonlySet<string>;
|
|
|
44
44
|
declare const instancesResetOverrides: ReadonlySet<string>;
|
|
45
45
|
/** lint.fix item params */
|
|
46
46
|
declare const lintFix: ReadonlySet<string>;
|
|
47
|
+
/** prototyping.add item params */
|
|
48
|
+
declare const prototypingAdd: ReadonlySet<string>;
|
|
47
49
|
/** styles create type="paint" */
|
|
48
50
|
declare const stylesCreatePaint: ReadonlySet<string>;
|
|
49
51
|
/** styles create type="text" */
|
|
@@ -91,4 +93,4 @@ declare const mixinSizingParams: ReadonlySet<string>;
|
|
|
91
93
|
/** text_params */
|
|
92
94
|
declare const mixinTextParams: ReadonlySet<string>;
|
|
93
95
|
|
|
94
|
-
export { componentsCreateComponent, componentsCreateFromNode, componentsCreateVariantSet, componentsUpdate, framesCreateAutoLayout, framesCreateBooleanOperation, framesCreateEllipse, framesCreateFrame, framesCreateGroup, framesCreateLine, framesCreateRectangle, framesCreateSection, framesCreateSvg, instancesCreate, instancesDetach, instancesResetOverrides, instancesSwap, instancesUpdate, lintFix, mixinAutoLayoutParams, mixinBlendParams, mixinFrameParams, mixinGeometryParams, mixinSizingParams, mixinTextParams, nodeClone, nodeDelete, nodeReparent, nodeUpdate, stylesCreateEffect, stylesCreateGrid, stylesCreatePaint, stylesCreateText, stylesDelete, stylesUpdate, textCreate, textSetContent, variableCollectionsAddMode, variableCollectionsCreate, variableCollectionsDelete, variableCollectionsRemoveMode, variableCollectionsRenameMode, variableCollectionsUpdate, variablesCreate, variablesDelete, variablesUpdate };
|
|
96
|
+
export { componentsCreateComponent, componentsCreateFromNode, componentsCreateVariantSet, componentsUpdate, framesCreateAutoLayout, framesCreateBooleanOperation, framesCreateEllipse, framesCreateFrame, framesCreateGroup, framesCreateLine, framesCreateRectangle, framesCreateSection, framesCreateSvg, instancesCreate, instancesDetach, instancesResetOverrides, instancesSwap, instancesUpdate, lintFix, mixinAutoLayoutParams, mixinBlendParams, mixinFrameParams, mixinGeometryParams, mixinSizingParams, mixinTextParams, nodeClone, nodeDelete, nodeReparent, nodeUpdate, prototypingAdd, stylesCreateEffect, stylesCreateGrid, stylesCreatePaint, stylesCreateText, stylesDelete, stylesUpdate, textCreate, textSetContent, variableCollectionsAddMode, variableCollectionsCreate, variableCollectionsDelete, variableCollectionsRemoveMode, variableCollectionsRenameMode, variableCollectionsUpdate, variablesCreate, variablesDelete, variablesUpdate };
|
|
@@ -44,6 +44,8 @@ declare const instancesDetach: ReadonlySet<string>;
|
|
|
44
44
|
declare const instancesResetOverrides: ReadonlySet<string>;
|
|
45
45
|
/** lint.fix item params */
|
|
46
46
|
declare const lintFix: ReadonlySet<string>;
|
|
47
|
+
/** prototyping.add item params */
|
|
48
|
+
declare const prototypingAdd: ReadonlySet<string>;
|
|
47
49
|
/** styles create type="paint" */
|
|
48
50
|
declare const stylesCreatePaint: ReadonlySet<string>;
|
|
49
51
|
/** styles create type="text" */
|
|
@@ -91,4 +93,4 @@ declare const mixinSizingParams: ReadonlySet<string>;
|
|
|
91
93
|
/** text_params */
|
|
92
94
|
declare const mixinTextParams: ReadonlySet<string>;
|
|
93
95
|
|
|
94
|
-
export { componentsCreateComponent, componentsCreateFromNode, componentsCreateVariantSet, componentsUpdate, framesCreateAutoLayout, framesCreateBooleanOperation, framesCreateEllipse, framesCreateFrame, framesCreateGroup, framesCreateLine, framesCreateRectangle, framesCreateSection, framesCreateSvg, instancesCreate, instancesDetach, instancesResetOverrides, instancesSwap, instancesUpdate, lintFix, mixinAutoLayoutParams, mixinBlendParams, mixinFrameParams, mixinGeometryParams, mixinSizingParams, mixinTextParams, nodeClone, nodeDelete, nodeReparent, nodeUpdate, stylesCreateEffect, stylesCreateGrid, stylesCreatePaint, stylesCreateText, stylesDelete, stylesUpdate, textCreate, textSetContent, variableCollectionsAddMode, variableCollectionsCreate, variableCollectionsDelete, variableCollectionsRemoveMode, variableCollectionsRenameMode, variableCollectionsUpdate, variablesCreate, variablesDelete, variablesUpdate };
|
|
96
|
+
export { componentsCreateComponent, componentsCreateFromNode, componentsCreateVariantSet, componentsUpdate, framesCreateAutoLayout, framesCreateBooleanOperation, framesCreateEllipse, framesCreateFrame, framesCreateGroup, framesCreateLine, framesCreateRectangle, framesCreateSection, framesCreateSvg, instancesCreate, instancesDetach, instancesResetOverrides, instancesSwap, instancesUpdate, lintFix, mixinAutoLayoutParams, mixinBlendParams, mixinFrameParams, mixinGeometryParams, mixinSizingParams, mixinTextParams, nodeClone, nodeDelete, nodeReparent, nodeUpdate, prototypingAdd, stylesCreateEffect, stylesCreateGrid, stylesCreatePaint, stylesCreateText, stylesDelete, stylesUpdate, textCreate, textSetContent, variableCollectionsAddMode, variableCollectionsCreate, variableCollectionsDelete, variableCollectionsRemoveMode, variableCollectionsRenameMode, variableCollectionsUpdate, variablesCreate, variablesDelete, variablesUpdate };
|