ComponentNode
Components are UI elements that can be reused across your designs. They are like frames, with the additional ability to have auto-updating copies called instances (see InstanceNode
).
The file may already contain instances of this frame, or you might create them via createInstance
. When you set a property on a component (or change its content), all instances of that component will update.
Be aware that some component nodes reflect components in the team library that are used within this file. Those components are read-only, though you may create new instances of them.
Component properties
type: 'COMPONENT' [readonly]
The type of this node, represented by the string literal "COMPONENT"
clone(): ComponentNode
Duplicates the component node as a new component with no instances of it. By default, the duplicate will be parented under figma.currentPage
.
createInstance(): InstanceNode
Creates an instance of this component. By default, the instance will be parented under figma.currentPage
.
instances: InstanceNode[] [readonly]
Returns an array of all of the instances of this component in the document.
Publishable properties
description: string
The annotation entered by the user for this style/component.
View more →documentationLinks: ReadonlyArray<DocumentationLink>
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
.
name: string
The name of the layer that appears in the layers panel. Calling figma.root.name
will return the name, read-only, of the current file.
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 and Dev Mode, this shows up in the properties panel. In FigJam, this shows up in the property menu. See here for examples.
getRelaunchData(): { [command: string]: string }
Retreives the reluanch data stored on this node using setRelaunchData
isAsset: boolean [readonly]
Returns true if Figma detects that a node is an asset, otherwise returns false. An asset is is either an icon or a raster image.
This property is useful if you’re building a plugin for code generation.
info
This property uses a set of heuristics to determine if a node is an asset. At a high level an icon is a small vector graphic and an image is a node with an image fill.
getCSSAsync(): Promise<{ [key: string]: string }>
Resolves to a JSON object of CSS properties of the node. This is the same CSS that Figma shows in the inspect panel and is helpful if you are building a plugin for code generation.
Plugin data properties
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.
Dev resource properties
getDevResourcesAsync(options?: { includeChildren: boolean }): Promise<DevResourceWithNodeId[]>
Gets all of the dev resources on a node. This includes any inherited dev resources from components and component sets.
View more →addDevResourceAsync(url: string, name?: string): Promise<void>
Adds a dev resource to a node. This will fail if the node already has a dev resource with the same url.
View more →editDevResourceAsync(currentUrl: string, newValue: { name: string; url: string }): Promise<void>
Edits a dev resource on a node. This will fail if the node does not have a dev resource with the same url.
View more →deleteDevResourceAsync(url: string): Promise<void>
Deletes a dev resource on a node. This will fail if the node does not have a dev resource with the same url.
View more →setDevResourcePreviewAsync(url: string, preview: PlainTextElement): Promise<void>
caution
This is a private API only available to Figma partners
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 ConnectorNode
s 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 or an instance sublayer. It will be null
otherwise. The value in the key-value pair refers to the component property name as returned by componentPropertyDefinitions
on the containing component, component set or main component (for instances).
boundVariables?: { readonly [field in VariableBindableNodeField]?: VariableAlias} & { fills: VariableAlias[]; strokes: VariableAlias[]; effects: VariableAlias[]; layoutGrids: VariableAlias[]; componentProperties: { [propertyName: string]: VariableAlias }; textRangeFills: VariableAlias[] } [readonly]
The variables bound to a particular field on this node. Please see the Working with Variables guide for how to get and set variable bindings.
setBoundVariable(field: VariableBindableNodeField, variableId: string | null): void
Binds the provided field
on this node to the given variable. Please see the Working with Variables guide for how to get and set variable bindings.
If null
is provided as the variableId
, the given field
will be unbound from any variables.
inferredVariables?: { readonly [field in VariableBindableNodeField]?: VariableAlias[]} & { fills: VariableAlias[][]; strokes: VariableAlias[][] } [readonly]
An object, keyed by field, returning any variables that match the raw value of that field for the mode of the node (or the default variable value if no mode is set)
View more →resolvedVariableModes: { [collectionId: string]: string }
The resolved mode for this node for each variable collection in this file.
View more →explicitVariableModes: { [collectionId: string]: string }
The explicitly set modes for this node. Represents a subset of resolvedVariableModes
.
clearExplicitVariableModeForCollection(collectionId: string): void
clears an explicit mode for the given collection on this node
setExplicitVariableModeForCollection(collectionId: string, modeId: string): void
Sets an explicit mode for the given collection on this node
Children-related properties
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.
insertChild(index: number, child: SceneNode): void
Adds a new child at the specified index in the children
array.
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.
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.
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.
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.
findAllWithCriteria<T extends NodeType[]>(criteria: FindAllCriteria<T>): Array<{ type: T[number] } & SceneNode>
Searches this entire subtree (this node's children, its children's children, etc). Returns all nodes that satisfy all of specified 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
.
Frame-related properties
detachedInfo: DetachedInfo | null [readonly]
Includes the id (for local components) or key (for library components) of the component the given node was detached from, if any. If the node isn't a detached instance, it will be null. If the node is a component or instance, it will be null.
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.
inferredAutoLayout: InferredAutoLayoutResult | null
Returns inferred auto layout properties of a FrameNode
if applicable. Otherwise, returns null
.
This is what Figma uses to power Dev Mode’s code snippets feature, as it makes sure the generated code is more useful.
info
This method uses a heuristic to infer the auto layout properties.
layoutMode: 'NONE' | 'HORIZONTAL' | 'VERTICAL'
Determines whether this layer uses auto-layout to position its children. Defaults to "NONE".
View more →layoutWrap: 'NO_WRAP' | 'WRAP'
Determines whether this layer should use wrapping auto-layout. Defaults to "NO_WRAP".
View more →paddingLeft: number
Applicable only on auto-layout frames. Determines the left padding between the border of the frame and its children.
paddingRight: number
Applicable only on auto-layout frames. Determines the right padding between the border of the frame and its children.
paddingTop: number
Applicable only on auto-layout frames. Determines the top padding between the border of the frame and its children.
paddingBottom: number
Applicable only on auto-layout frames. Determines the bottom padding between the border of the frame and its children.
horizontalPadding: number
[DEPRECATED]
Use paddingLeft
and paddingRight
instead.
verticalPadding: number
[DEPRECATED]
Use paddingTop
and paddingBottom
instead.
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. 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. Determines how the auto-layout frame’s children should be aligned in the counter axis direction.
View more →counterAxisAlignContent: 'AUTO' | 'SPACE_BETWEEN'
Applicable only on auto-layout frames with layoutWrap
set to "WRAP"
. Determines how the wrapped tracks are spaced out inside of the auto-layout frame.
itemSpacing: number
Applicable only on auto-layout frames. Determines distance between children of the frame.
View more →counterAxisSpacing: number | null
Applicable only on auto-layout frames with layoutWrap
set to "WRAP"
. Determines the distance between wrapped tracks. The value must be positive.
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.
View more →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
.
devStatus: DevStatus
Whether the node is marked ready for development.
There are some restrictions on how devStatus
can be set:
- Can only be set on a node directly under a page or section
- Cannot be set on a node that is inside another node that already has a
devStatus
Container-related 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.
Geometry-related properties
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.
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 [readonly]
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 [readonly]
An array of paths representing the object fills relative to the node.
Corner-related properties
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
.
Individual strokes-related properties
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.
Blend-related properties
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.
View more →maskType: MaskType
Type of masking to use if this node is a mask. Defaults to "ALPHA"
. You must check isMask
to verify that this is a mask; changing maskType
does not automatically turn on isMask
, and a node that is not a mask can still have a maskType
.
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.
Layout-related properties
x: number
The position of the node. Identical to relativeTransform[0][2]
.
y: number
The position of the node. Identical to relativeTransform[1][2]
.
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.
minWidth: number | null
Applicable only to auto-layout frames and their direct children. Value must be positive. Set to null
to remove minWidth
.
maxWidth: number | null
Applicable only to auto-layout frames and their direct children. Value must be positive. Set to null
to remove maxWidth
.
minHeight: number | null
Applicable only to auto-layout frames and their direct children. Value must be positive. Set to null to remove minHeight
.
maxHeight: number | null
Applicable only to auto-layout frames and their direct children. Value must be positive. Set to null
to remove maxHeight
.
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.
absoluteTransform: Transform [readonly]
The position of a node relative to its containing page as a Transform
matrix.
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.
layoutAlign: 'MIN' | 'CENTER' | 'MAX' | 'STRETCH' | 'INHERIT'
Applicable only on direct children of auto-layout frames. Determines if the layer should stretch along the parent’s counter axis. Defaults to “INHERIT”
.
layoutGrow: number
This property is applicable only for direct children of auto-layout frames. 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 →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.
constrainProportions: boolean
When toggled, causes the layer to keep its proportions when the user resizes it via the properties panel.
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
.
layoutSizingHorizontal: 'FIXED' | 'HUG' | 'FILL'
Applicable only on auto-layout frames, their children, and text nodes. This is a shorthand for setting layoutGrow
, layoutAlign
, primaryAxisSizingMode
, and counterAxisSizingMode
. This field maps directly to the "Horizontal sizing" dropdown in the Figma UI.
layoutSizingVertical: 'FIXED' | 'HUG' | 'FILL'
Applicable only on auto-layout frames, their children, and text nodes. This is a shorthand for setting layoutGrow
, layoutAlign
, primaryAxisSizingMode
, and counterAxisSizingMode
. This field maps directly to the "Vertical sizing" dropdown in the Figma UI.
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.
Export-related properties
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>
exportAsync(settings: ExportSettingsSVGString): Promise<string>
exportAsync(settings: ExportSettingsREST): Promise<Object>
Exports the node as an encoded image.
View more →Reaction prototyping-related properties
reactions: ReadonlyArray<Reaction>
List of Reactions on this node, which includes both the method of interaction with this node in a prototype, and the behavior of that interaction. For help on how to change this value, see Editing Properties.
View more →Frame prototyping-related properties
overflowDirection: OverflowDirection
Determines whether a frame will scroll in presentation mode when the frame contains content that exceed the frame's bounds. Reflects the value shown in "Overflow Behavior" in the Prototype tab.
View more →numberOfFixedChildren: number
Determines which children of the frame are fixed children in a scrolling frame.
View more →overlayPositionType: OverlayPositionType [readonly]
How this frame is positioned when opened as an overlay.
overlayBackground: OverlayBackground [readonly]
How this frame obscures the content under it when opened as an overlay.
overlayBackgroundInteraction: OverlayBackgroundInteraction [readonly]
How the user can interact with the content under this frame when opened as an overlay.
Variant-related properties
variantProperties: { [property: string]: string } | null [readonly]
[DEPRECATED] This property is deprecated for instance nodes. Use componentProperties
instead.
Variant properties and values for this node. Is null
for nodes that are not variants.
Component properties-related properties
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.
addComponentProperty(propertyName: string, type: ComponentPropertyType, 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 supports properties with type 'BOOLEAN'
, 'TEXT'
, 'INSTANCE_SWAP'
or 'VARIANT'
.
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 propertiesdefaultValue
is supported for'BOOLEAN'
,'TEXT'
, and'INSTANCE_SWAP'
properties, but not for'VARIANT'
propertiespreferredValues
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'
.