Skip to main content

ComponentSetNode

A component set contains the variants of a component. It behaves much like a normal frame would, but all of its children are ComponentNodes.

Be aware that some component sets reflect items in the team library that are used within this file. Those component sets and their children are read-only, though you may create new instances of the ComponentNodes that are inside them.

In Figma, component sets must always have children. A component set with no children will delete itself.

Component set properties

type: 'COMPONENT_SET' [readonly]

The type of this node, represented by the string literal "COMPONENT_SET"


clone(): ComponentSetNode

Duplicates the component set as a new component set. Its children will be duplicated as new components with no instances of them. By default, the duplicate will be parented under figma.currentPage.


defaultVariant: ComponentNode [readonly]

The default variant of this component set, which is the top-left-most variant, spatially. This corresponds to the variant that would be inserted when dragging in a component set from the team library in the Figma UI.


variantGroupProperties: { [property: string]: { values: string[] } } [readonly]

[DEPRECATED]. Use componentPropertyDefinitions instead.


Publishable properties

description: string

The annotation entered by the user for this style/component.

View more →

The documentation links for this style/component.

View more →

remote: boolean [readonly]

Whether this style/component is a remote style/component that doesn't live in the file (i.e. is from the team library). Remote components are read-only: attempts to change their properties will throw.


key: string [readonly]

The key to use with figma.importComponentByKeyAsync, figma.importComponentSetByKeyAsync and figma.importStyleByKeyAsync. Note that while this key is present on local and published components, you can only import components that are already published.


getPublishStatusAsync(): Promise<PublishStatus>

Gets the status of this style/component in the team library.


Base node properties

id: string [readonly]

An internal identifier for a node. Plugins typically don't need to use this since you can usually just access a node directly.

View more →

parent: (BaseNode & ChildrenMixin) | null [readonly]

Returns the parent of this node, if any. This property is not meant to be directly edited. To reparent, see appendChild.

View more →

name: string

The name of the layer that appears in the layers panel. This may update automatically for text layers. Returns the name of the current file on figma.root (read-only).

View more →

removed: boolean [readonly]

Returns true if this node has been removed since it was first accessed. If your plugin stays open for a while and stores references to nodes, you should write your code defensively and check that the nodes haven't been removed by the user.

View more →

toString(): string

Returns a string representation of the node. For debugging purposes only, do not rely on the exact output of this string in production code.

View more →

remove(): void

Removes this node and all of its children from the document.

View more →

setRelaunchData(data: { [command: string]: string }): void

Sets state on the node to show a button and description when the node is selected. Clears the button and description when relaunchData is {}.

info

In Figma, this shows up in the properties panel. In FigJam, this shows up in the property menu. See here for examples.

View more →

getRelaunchData(): { [command: string]: string }

Retreives the reluanch data stored on this node using setRelaunchData


getPluginData(key: string): string

Retrieves custom information that was stored on this node or style using setPluginData. If there is no data stored for the provided key, an empty string is returned.


setPluginData(key: string, value: string): void

Lets you store custom information on any node or style, private to your plugin.

View more →

getPluginDataKeys(): string[]

Retrieves a list of all keys stored on this node or style using using setPluginData. This enables iterating through all data stored privately on a node or style by your plugin.


getSharedPluginData(namespace: string, key: string): string

Retrieves custom information that was stored on this node or style using setSharedPluginData. If there is no data stored for the provided namespace and key, an empty string is returned.


setSharedPluginData(namespace: string, key: string, value: string): void

Lets you store custom information on any node or style, public to all plugins.

View more →

getSharedPluginDataKeys(namespace: string): string[]

Retrieves a list of all keys stored on this node or style using setSharedPluginData. This enables iterating through all data stored in a given namespace.


Scene node properties

visible: boolean

Whether the node is visible or not. Does not affect a plugin's ability to access the node.

View more →

locked: boolean

Whether the node is locked or not, preventing certain user interactions on the canvas such as selecting and dragging. Does not affect a plugin's ability to write to those properties.

View more →

stuckNodes: SceneNode[] [readonly]

An array of nodes that are "stuck" to this node. In FigJam, stamps, highlights, and some widgets can "stick" to other nodes if they are dragged on top of another node.

View more →

attachedConnectors: ConnectorNode[] [readonly]

An array of ConnectorNodes that are attached to a node.


componentPropertyReferences: { [nodeProperty in 'visible' | 'characters' | 'mainComponent']: string } | null

All component properties that are attached on this node. A node can only have componentPropertyReferences if it is a component sublayer and is not nested within an instance node. Is null otherwise. The value in the key-value pair refers to the component property name as returned by componentPropertyDefinitions on the containing component or component set.


children: ReadonlyArray<SceneNode> [readonly]

The list of children, sorted back-to-front. That is, the first child in the array is the bottommost layer on the screen, and the last child in the array is the topmost layer.

View more →

appendChild(child: SceneNode): void

Adds a new child to the end of the children array. That is, visually on top of all other children.

View more →

insertChild(index: number, child: SceneNode): void

Adds a new child at the specified index in the children array.

View more →

findChildren(callback?: (node: SceneNode) => boolean): SceneNode[]

Searches the immediate children of this node (i.e. not including the children's children). Returns all nodes for which callback returns true.

View more →

findChild(callback: (node: SceneNode) => boolean): SceneNode | null

Searches the immediate children of this node (i.e. not including the children's children). Returns the first node for which callback returns true.

View more →

findAll(callback?: (node: SceneNode) => boolean): SceneNode[]

Searches this entire subtree (this node's children, its children's children, etc). Returns all nodes for which callback returns true.

View more →

findOne(callback: (node: SceneNode) => boolean): SceneNode | null

Searches this entire subtree (this node's children, its children's children, etc). Returns the first node for which callback returns true.

View more →

findAllWithCriteria<T extends NodeType[]>(criteria: { types: T }): Array<{ type: T[number] } & SceneNode>

Searches this entire subtree (this node's children, its children's children, etc). Returns all nodes that satisfy any of the types defined in the criteria.

View more →

findWidgetNodesByWidgetId(widgetId: string): Array<WidgetNode>

Searches this entire subtree (this node's children, its children's children, etc). Returns all widget nodes that match the provided widgetId.

View more →

Frame properties

layoutMode: 'NONE' | 'HORIZONTAL' | 'VERTICAL'

Determines whether this layer uses auto-layout to position its children. Defaults to "NONE".

View more →

primaryAxisSizingMode: 'FIXED' | 'AUTO'

Applicable only on auto-layout frames. Determines whether the primary axis has a fixed length (determined by the user) or an automatic length (determined by the layout engine).

View more →

counterAxisSizingMode: 'FIXED' | 'AUTO'

Applicable only on auto-layout frames. Determines whether the counter axis has a fixed length (determined by the user) or an automatic length (determined by the layout engine).

View more →

primaryAxisAlignItems: 'MIN' | 'MAX' | 'CENTER' | 'SPACE_BETWEEN'

Applicable only on auto-layout frames, ignored otherwise. Determines how the auto-layout frame’s children should be aligned in the primary axis direction.

View more →

counterAxisAlignItems: 'MIN' | 'MAX' | 'CENTER' | 'BASELINE'

Applicable only on auto-layout frames, ignored otherwise. Determines how the auto-layout frame’s children should be aligned in the counter axis direction.

View more →

paddingLeft: number

Applicable only on auto-layout frames, ignored otherwise. Determines the left padding between the border of the frame and its children.


paddingRight: number

Applicable only on auto-layout frames, ignored otherwise. Determines the right padding between the border of the frame and its children.


paddingTop: number

Applicable only on auto-layout frames, ignored otherwise. Determines the top padding between the border of the frame and its children.


paddingBottom: number

Applicable only on auto-layout frames, ignored otherwise. Determines the bottom padding between the border of the frame and its children.


itemSpacing: number

Applicable only on auto-layout frames. Determines distance between children of the frame.


itemReverseZIndex: boolean

Applicable only on auto-layout frames. Determines the canvas stacking order of layers in this frame. When true, the first layer will be draw on top.


strokesIncludedInLayout: boolean

Applicable only on auto-layout frames. Determines whether strokes are included in layout calculations. When true, auto-layout frames behave like css box-sizing: border-box.


horizontalPadding: number

[DEPRECATED]

Use paddingLeft and paddingRight instead.


verticalPadding: number

[DEPRECATED]

Use paddingTop and paddingBottom instead.


layoutGrids: ReadonlyArray<LayoutGrid>

Array of LayoutGrid objects used as layout grids on this node. For help on how to change this value, see Editing Properties.


gridStyleId: string

The id of the GridStyle object that the layoutGrids property of this node is linked to.


clipsContent: boolean

Whether the frame clips its contents. That is, whether layers inside the frame are visible outside the bounds of the frame.


guides: ReadonlyArray<Guide>

Array of Guide used inside the frame. Note that each frame has its own guides, separate from the canvas-wide guides. For help on how to change this value, see Editing Properties.


expanded: boolean

Whether this container is shown as expanded in the layers panel.


backgrounds: ReadonlyArray<Paint>

[DEPRECATED]

Use fills instead.


backgroundStyleId: string

[DEPRECATED]

Use fillStyleId instead.


fills: ReadonlyArray<Paint> | figma.mixed

The paints used to fill the area of the shape. For help on how to change this value, see Editing Properties.

View more →

fillStyleId: string | figma.mixed

The id of the PaintStyle object that the fills property of this node is linked to.

View more →

strokes: ReadonlyArray<Paint>

The paints used to fill the area of the shape's strokes. For help on how to change this value, see Editing Properties.


strokeStyleId: string

The id of the PaintStyle object that the strokes property of this node is linked to.


strokeWeight: number | figma.mixed

The thickness of the stroke, in pixels. This value must be non-negative and can be fractional.

caution

For rectangle nodes or frame-like nodes using different individual stroke weights, this property will return figma.mixed.

info

For rectangle nodes or frame-like nodes, individual stroke weights can be set for each side using the following properties:


strokeJoin: StrokeJoin | figma.mixed

The decoration applied to vertices which have two or more connected segments.

View more →

strokeAlign: 'CENTER' | 'INSIDE' | 'OUTSIDE'

The alignment of the stroke with respect to the boundaries of the shape.

View more →

dashPattern: ReadonlyArray<number>

A list of numbers specifying alternating dash and gap lengths, in pixels.


strokeGeometry: VectorPaths

An array of paths representing the object strokes relative to the node. StrokeGeometry is always from the center regardless of the nodes strokeAlign.


strokeCap: StrokeCap | figma.mixed

The decoration applied to vertices which have only one connected segment.

View more →

strokeMiterLimit: number

The miter limit on the stroke. This is the same as the SVG miter limit.


outlineStroke(): VectorNode | null

This method performs an action similar to using the "Outline Stroke" function in the editor from the right-click menu. However, this method creates and returns a new node while leaving the original intact. Returns null if the node has no strokes.


fillGeometry: VectorPaths

An array of paths representing the object fills relative to the node.


cornerRadius: number | figma.mixed

The number of pixels to round the corners of the object by.

View more →

cornerSmoothing: number

A value that lets you control how "smooth" the corners are. Ranges from 0 to 1.

View more →

topLeftRadius: number


topRightRadius: number


bottomLeftRadius: number


bottomRightRadius: number


You can set individual corner radius of each of the four corners of a rectangle node or frame-like node. Similar to cornerRadius, these value must be non-negative and can be fractional. If an edge length is less than twice the corner radius, the corner radius for each vertex of the edge will be clamped to half the edge length.

Setting cornerRadius sets the property for all four corners. Setting these corners to different values makes cornerRadius return mixed.

You can set individual stroke weights for each of the four sides of a rectangle node or frame-like node. Similar to strokeWeight, these values must be non-negative and can be fractional. To hide a side, set the value to 0.

Setting strokeWeight sets the same value for all four sides.

strokeTopWeight: number

Determines the top stroke weight on a rectangle node or frame-like node. Must be non-negative and can be fractional.


strokeBottomWeight: number

Determines the bottom stroke weight on a rectangle node or frame-like node. Must be non-negative and can be fractional.


strokeLeftWeight: number

Determines the left stroke weight on a rectangle node or frame-like node. Must be non-negative and can be fractional.


strokeRightWeight: number

Determines the right stroke weight on a rectangle node or frame-like node. Must be non-negative and can be fractional.


opacity: number

Opacity of the node, as shown in the Layer panel. Must be between 0 and 1.


blendMode: BlendMode

Blend mode of this node, as shown in the Layer panel. In addition to the blend modes that paints & effects support, the layer blend mode can also have the value PASS_THROUGH.


isMask: boolean

Whether this node is a mask. A mask node masks its subsequent siblings.


effects: ReadonlyArray<Effect>

Array of effects. See Effect type. For help on how to change this value, see Editing Properties.


effectStyleId: string

The id of the EffectStyle object that the properties of this node are linked to.


absoluteTransform: Transform [readonly]

The position of a node relative to its containing page as a Transform matrix.


relativeTransform: Transform

The position of a node relative to its containing parent as a Transform matrix. Not used for scaling, see width and height instead. Read the details page to understand the nuances of this property.

View more →

x: number

The position of the node. Identical to relativeTransform[0][2].

View more →

y: number

The position of the node. Identical to relativeTransform[1][2].

View more →

rotation: number

The rotation of the node in degrees. Returns values from -180 to 180. Identical to Math.atan2(-m10, m00) in the relativeTransform matrix. When setting rotation, it will also set m00, m01, m10, m11.

View more →

width: number [readonly]

The width of the node. Use a resizing method to change this value.


height: number [readonly]

The height of the node. Use a resizing method to change this value.


absoluteRenderBounds: Rect | null [readonly]

The actual bounds of a node accounting for drop shadows, thick strokes, and anything else that may fall outside the node's regular bounding box defined in x, y, width, and height. The x and y inside this property represent the absolute position of the node on the page. This value will be null if the node is invisible.


absoluteBoundingBox: Rect | null [readonly]

The bounds of the node that does not include rendered properties like drop shadows or strokes. The x and y inside this property represent the absolute position of the node on the page.


constrainProportions: boolean

When toggled, causes the layer to keep its proportions when the user resizes it via the properties panel.


layoutAlign: 'MIN' | 'CENTER' | 'MAX' | 'STRETCH' | 'INHERIT'

Applicable only on direct children of auto-layout frames, ignored otherwise. Determines if the layer should stretch along the parent’s counter axis. Defaults to “INHERIT”.

View more →

layoutGrow: number

This property is applicable only for direct children of auto-layout frames, ignored otherwise. Determines whether a layer should stretch along the parent’s primary axis. 0 corresponds to a fixed size and 1 corresponds to stretch.

View more →

layoutPositioning: 'AUTO' | 'ABSOLUTE'

This property is applicable only for direct children of auto-layout frames. Determines whether a layer's size and position should be dermined by auto-layout settings or manually adjustable.

View more →

resize(width: number, height: number): void

Resizes the node. If the node contains children with constraints, it applies those constraints during resizing. If the parent has auto-layout, causes the parent to be resized.

View more →

resizeWithoutConstraints(width: number, height: number): void

Resizes the node. Children of the node are never resized, even if those children have constraints. If the parent has auto-layout, causes the parent to be resized (this constraint cannot be ignored).

View more →

rescale(scale: number): void

Rescales the node. This API function is the equivalent of using the Scale Tool from the toolbar.

View more →

constraints: Constraints

Constraints of this node relative to its containing FrameNode, if any.

View more →

exportSettings: ReadonlyArray<ExportSettings>

List of export settings stored on the node. For help on how to change this value, see Editing Properties.


exportAsync(settings?: ExportSettings): Promise<Uint8Array>

Exports the node as an encoded image.

View more →

componentPropertyDefinitions: ComponentPropertyDefinitions [readonly]

All component properties and their default values that exist on this component set. 'VARIANT' properties will also have a list of all variant options. 'BOOLEAN', 'TEXT', and 'INSTANCE_SWAP' properties will have their names suffixed by a unique identifier starting with '#', which is helpful for quickly distinguishing multiple component properties that have the same name in the Figma UI. The entire property name should be used for all Component property-related API methods and properties.

View more →

addComponentProperty(propertyName: string, type: Exclude<ComponentPropertyType, 'VARIANT'>, defaultValue: string | boolean, options?: ComponentPropertyOptions): string

Adds a new component property to this node and returns the property name with its unique identifier suffixed. This function only supports properties with type 'BOOLEAN', 'TEXT', or 'INSTANCE_SWAP' and will error if called on a 'VARIANT' property.


editComponentProperty(propertyName: string, newValue: { name?: string, defaultValue?: string | boolean, preferredValues?: InstanceSwapPreferredValue[] }): string

Modifies the name, default value, or preferred values of an existing component property on this node and returns the property name with its unique identifier suffixed.

This function supports properties with type 'BOOLEAN', 'TEXT', 'INSTANCE_SWAP', or 'VARIANT' with the following restrictions:

  • name is supported for all properties
  • defaultValue is supported for 'BOOLEAN', 'TEXT', and 'INSTANCE_SWAP' properties, but not for 'VARIANT' properties
  • preferredValues is only supported for 'INSTANCE_SWAP' properties

deleteComponentProperty(propertyName: string): void

Deletes an existing component property on this node. This function only supports properties with type 'BOOLEAN', 'TEXT', or 'INSTANCE_SWAP'.