About arrange-component-set-figma
A Figma design-system skill that rearranges component-set variants into a labeled grid on the canvas. It is suited to organizing variants for documentation; rebuilding the set changes its node ID.
Key features
- 01Arrange rows and columns by variant properties
- 02Center variants in grid cells
- 03Add row labels, column headers, and a container
- 04Rebuild the component set from clones
Use cases
- 01Create component variant documentation sheets
- 02Organize variants by state and size
- 03Lay out variants with a single property axis
MCP support
The skill runs Figma Plugin API scripts through `use_figma`; the input does not describe it as an MCP server or client.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ southleft/ skills-for-figma --skill arrange-component-set-figmaAfter installing, type/arrange-component-set-figmain Claude Code to confirm it loaded.
Bundled filesscripts/arrange-component-set.js
Details
From the project READMEarrange-component-set-figma — labeled variant grid
Reorganize the variants inside a COMPONENT_SET into a tidy matrix: it parses each variant's
properties (Size=md, State=hover), uses one property for columns and the rest for rows, centers
each variant in a grid cell, and wraps everything in a white container frame with a title, left-edge
row labels, and top column headers. The result is the kind of variant sheet you'd show in design-system
docs.
Skill boundaries
use_figmarules — load the officialfigma-useskill first; it is the full Figma Plugin API reference. Essentials these scripts rely on: plain JS with top-levelawait+return(no IIFE, nofigma.closePlugin();console.logis not returned), inputs inlined asconstat the top of each script, colors in 0–1 range, load fonts before any text op,await figma.getNodeByIdAsync(...), and atomic errors (a failed script applies nothing — read the error, fix, retry).- Understanding what the variants mean (state machine, CSS) → use
analyze-component-set-figma. - This writes a new layout to the canvas — it is a design-system authoring capability the native
MCP's
get_design_context/get_metadata(read-only) do not cover.
Workflow
- Identify the set. Get the
COMPONENT_SET_IDfrom selection, search, or a pasted id. (You can also leave the constant blank and select the set on the canvas — the script falls back to the current selection.) - Pick the column axis (optional). By default the last variant property becomes columns
(usually
State); everything else becomes rows. Override withconst COLUMN_PROPERTY. - Run
scripts/arrange-component-set.jsviause_figma(skillNames: "arrange-component-set-figma"). AdjustGAP/CELL_PADDINGconstants if needed. - Verify visually. Take a screenshot. The script returns
containerId, the (re-created)componentSetId, and the grid shape (rows/columns, labels). Variants are centered per cell.
How it works
- Re-creates the set with
figma.combineAsVariants()so it gets Figma's native purple dashed frame (#9747FF, dashed[10,5], inside stroke). Old labels/containers from a previous run are removed first, so re-running is idempotent. - Grid math: cell size = max variant size + padding; the set is resized to fit
cols × (cell+gap). Variants are positioned by matching their parsed property values to the row/column index. - Labels are auto-layout frames built outside the component set (component sets don't nest well in auto-layout) and aligned to each row's vertical center / each column's horizontal center.
Notes
- Fonts: the script loads
Inter Regular+Inter Semi Boldfor labels — if Inter isn't available in the file, swap the family in theloadFontAsynccalls. - Destructive-ish: it deletes the original set and rebuilds it via clones. The variants and their
properties are preserved, but the node id of the set changes (returned as
componentSetId). - One property → columns: if your set has a single property axis, all variants land in one row. Multi-axis sets generate every row combination (cartesian product of the non-column properties).