New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@figma/plugin-typings

Package Overview
Dependencies
Maintainers
25
Versions
113
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@figma/plugin-typings - npm Package Compare versions

Comparing version 1.38.0 to 1.39.0

plugin-api.d.ts

1123

index.d.ts

@@ -1,2 +0,3 @@

// Figma Plugin API version 1, update 38
// Figma Plugin API version 1, update 39
/// <reference path="./plugin-api" />

@@ -12,1104 +13,2 @@ declare global {

type ArgFreeEventType = "selectionchange" | "currentpagechange" | "close" | "timerstart" | "timerstop" | "timerpause" | "timerresume" | "timeradjust" | "timerdone"
interface PluginAPI {
readonly apiVersion: "1.0.0"
readonly command: string
readonly editorType: 'figma' | 'figjam'
readonly fileKey: string | undefined
readonly timer?: TimerAPI
readonly viewport: ViewportAPI
readonly currentUser: User | null
readonly activeUsers: ActiveUser[]
closePlugin(message?: string): void
notify(message: string, options?: NotificationOptions): NotificationHandler
commitUndo(): void
triggerUndo(): void
saveVersionHistoryAsync(title: string, description?: string): Promise<void>
showUI(html: string, options?: ShowUIOptions): void
readonly ui: UIAPI
readonly clientStorage: ClientStorageAPI
readonly parameters: ParametersAPI
getNodeById(id: string): BaseNode | null
getStyleById(id: string): BaseStyle | null
readonly root: DocumentNode
currentPage: PageNode
on(type: ArgFreeEventType, callback: () => void): void
once(type: ArgFreeEventType, callback: () => void): void
off(type: ArgFreeEventType, callback: () => void): void
on(type: "run", callback: (event: RunEvent) => void): void
once(type: "run", callback: (event: RunEvent) => void): void
off(type: "run", callback: (event: RunEvent) => void): void
readonly mixed: unique symbol
createRectangle(): RectangleNode
createLine(): LineNode
createEllipse(): EllipseNode
createPolygon(): PolygonNode
createStar(): StarNode
createVector(): VectorNode
createText(): TextNode
createFrame(): FrameNode
createComponent(): ComponentNode
createPage(): PageNode
createSlice(): SliceNode
createSticky(): StickyNode
createConnector(): ConnectorNode
createShapeWithText(): ShapeWithTextNode
createCodeBlock(): CodeBlockNode
/**
* [DEPRECATED]: This API often fails to create a valid boolean operation. Use figma.union, figma.subtract, figma.intersect and figma.exclude instead.
*/
createBooleanOperation(): BooleanOperationNode
createPaintStyle(): PaintStyle
createTextStyle(): TextStyle
createEffectStyle(): EffectStyle
createGridStyle(): GridStyle
// The styles are returned in the same order as displayed in the UI. Only
// local styles are returned. Never styles from team library.
getLocalPaintStyles(): PaintStyle[]
getLocalTextStyles(): TextStyle[]
getLocalEffectStyles(): EffectStyle[]
getLocalGridStyles(): GridStyle[]
moveLocalPaintStyleAfter(targetNode: PaintStyle, reference: PaintStyle | null): void
moveLocalTextStyleAfter(targetNode: TextStyle, reference: TextStyle | null): void
moveLocalEffectStyleAfter(targetNode: EffectStyle, reference: EffectStyle | null): void
moveLocalGridStyleAfter(targetNode: GridStyle, reference: GridStyle | null): void
moveLocalPaintFolderAfter(targetFolder: string, reference: string | null): void
moveLocalTextFolderAfter(targetFolder: string, reference: string | null): void
moveLocalEffectFolderAfter(targetFolder: string, reference: string | null): void
moveLocalGridFolderAfter(targetFolder: string, reference: string | null): void
importComponentByKeyAsync(key: string): Promise<ComponentNode>
importComponentSetByKeyAsync(key: string): Promise<ComponentSetNode>
importStyleByKeyAsync(key: string): Promise<BaseStyle>
listAvailableFontsAsync(): Promise<Font[]>
loadFontAsync(fontName: FontName): Promise<void>
readonly hasMissingFont: boolean
createNodeFromSvg(svg: string): FrameNode
createImage(data: Uint8Array): Image
getImageByHash(hash: string): Image
combineAsVariants(nodes: ReadonlyArray<ComponentNode>, parent: BaseNode & ChildrenMixin, index?: number): ComponentSetNode
group(nodes: ReadonlyArray<BaseNode>, parent: BaseNode & ChildrenMixin, index?: number): GroupNode
flatten(nodes: ReadonlyArray<BaseNode>, parent?: BaseNode & ChildrenMixin, index?: number): VectorNode
union(nodes: ReadonlyArray<BaseNode>, parent: BaseNode & ChildrenMixin, index?: number): BooleanOperationNode
subtract(nodes: ReadonlyArray<BaseNode>, parent: BaseNode & ChildrenMixin, index?: number): BooleanOperationNode
intersect(nodes: ReadonlyArray<BaseNode>, parent: BaseNode & ChildrenMixin, index?: number): BooleanOperationNode
exclude(nodes: ReadonlyArray<BaseNode>, parent: BaseNode & ChildrenMixin, index?: number): BooleanOperationNode
}
interface ClientStorageAPI {
getAsync(key: string): Promise<any | undefined>
setAsync(key: string, value: any): Promise<void>
}
interface NotificationOptions {
timeout?: number
error?: boolean
}
interface NotificationHandler {
cancel: () => void
}
interface ShowUIOptions {
visible?: boolean
title?: string
width?: number
height?: number
position?: { x: number; y: number }
}
interface UIPostMessageOptions {
origin?: string
}
interface OnMessageProperties {
origin: string
}
type MessageEventHandler = (pluginMessage: any, props: OnMessageProperties) => void
interface UIAPI {
show(): void
hide(): void
resize(width: number, height: number): void
close(): void
postMessage(pluginMessage: any, options?: UIPostMessageOptions): void
onmessage: MessageEventHandler | undefined
on(type: "message", callback: MessageEventHandler): void
once(type: "message", callback: MessageEventHandler): void
off(type: "message", callback: MessageEventHandler): void
}
interface TimerAPI {
readonly remaining: number
readonly total: number
readonly state: "STOPPED" | "PAUSED" | "RUNNING"
pause: () => void
resume: () => void
start: (seconds: number) => void
stop: () => void
}
interface ViewportAPI {
center: Vector
zoom: number
scrollAndZoomIntoView(nodes: ReadonlyArray<BaseNode>): void
readonly bounds: Rect
}
interface ParameterValues {
[key: string]: any
}
interface SuggestionResults {
setSuggestions(suggestions: Array<string | { name: string; data?: any; icon?: (string | Uint8Array); iconUrl?: string }>): void
setError(message: string): void
setLoadingMessage(message: string): void
}
type ParameterInputEvent<ParametersType = ParameterValues> = {
query: string,
key: string,
parameters: Partial<ParametersType>,
result: SuggestionResults,
}
interface ParametersAPI {
on(type: "input", callback: (event: ParameterInputEvent) => void): void
once(type: "input", callback: (event: ParameterInputEvent) => void): void
off(type: "input", callback: (event: ParameterInputEvent) => void): void
}
interface RunEvent<ParametersType = (ParameterValues | undefined)> {
command: string
parameters: ParametersType
}
////////////////////////////////////////////////////////////////////////////////
// Datatypes
type Transform = [
[number, number, number],
[number, number, number]
]
interface Vector {
readonly x: number
readonly y: number
}
interface Rect {
readonly x: number
readonly y: number
readonly width: number
readonly height: number
}
interface RGB {
readonly r: number
readonly g: number
readonly b: number
}
interface RGBA {
readonly r: number
readonly g: number
readonly b: number
readonly a: number
}
interface FontName {
readonly family: string
readonly style: string
}
type TextCase = "ORIGINAL" | "UPPER" | "LOWER" | "TITLE"
type TextDecoration = "NONE" | "UNDERLINE" | "STRIKETHROUGH"
interface ArcData {
readonly startingAngle: number
readonly endingAngle: number
readonly innerRadius: number
}
interface DropShadowEffect {
readonly type: "DROP_SHADOW" | "INNER_SHADOW"
readonly color: RGBA
readonly offset: Vector
readonly radius: number
readonly spread?: number
readonly visible: boolean
readonly blendMode: BlendMode
readonly showShadowBehindNode?: boolean
}
interface InnerShadowEffect {
readonly type: "DROP_SHADOW" | "INNER_SHADOW"
readonly color: RGBA
readonly offset: Vector
readonly radius: number
readonly spread?: number
readonly visible: boolean
readonly blendMode: BlendMode
}
interface BlurEffect {
readonly type: "LAYER_BLUR" | "BACKGROUND_BLUR"
readonly radius: number
readonly visible: boolean
}
type Effect = DropShadowEffect | InnerShadowEffect | BlurEffect
type ConstraintType = "MIN" | "CENTER" | "MAX" | "STRETCH" | "SCALE"
interface Constraints {
readonly horizontal: ConstraintType
readonly vertical: ConstraintType
}
interface ColorStop {
readonly position: number
readonly color: RGBA
}
interface ImageFilters {
readonly exposure?: number
readonly contrast?: number
readonly saturation?: number
readonly temperature?: number
readonly tint?: number
readonly highlights?: number
readonly shadows?: number
}
interface SolidPaint {
readonly type: "SOLID"
readonly color: RGB
readonly visible?: boolean
readonly opacity?: number
readonly blendMode?: BlendMode
}
interface GradientPaint {
readonly type: "GRADIENT_LINEAR" | "GRADIENT_RADIAL" | "GRADIENT_ANGULAR" | "GRADIENT_DIAMOND"
readonly gradientTransform: Transform
readonly gradientStops: ReadonlyArray<ColorStop>
readonly visible?: boolean
readonly opacity?: number
readonly blendMode?: BlendMode
}
interface ImagePaint {
readonly type: "IMAGE"
readonly scaleMode: "FILL" | "FIT" | "CROP" | "TILE"
readonly imageHash: string | null
readonly imageTransform?: Transform // setting for "CROP"
readonly scalingFactor?: number // setting for "TILE"
readonly rotation?: number // setting for "FILL" | "FIT" | "TILE"
readonly filters?: ImageFilters
readonly visible?: boolean
readonly opacity?: number
readonly blendMode?: BlendMode
}
type Paint = SolidPaint | GradientPaint | ImagePaint
interface Guide {
readonly axis: "X" | "Y"
readonly offset: number
}
interface RowsColsLayoutGrid {
readonly pattern: "ROWS" | "COLUMNS"
readonly alignment: "MIN" | "MAX" | "STRETCH" | "CENTER"
readonly gutterSize: number
readonly count: number // Infinity when "Auto" is set in the UI
readonly sectionSize?: number // Not set for alignment: "STRETCH"
readonly offset?: number // Not set for alignment: "CENTER"
readonly visible?: boolean
readonly color?: RGBA
}
interface GridLayoutGrid {
readonly pattern: "GRID"
readonly sectionSize: number
readonly visible?: boolean
readonly color?: RGBA
}
type LayoutGrid = RowsColsLayoutGrid | GridLayoutGrid
interface ExportSettingsConstraints {
readonly type: "SCALE" | "WIDTH" | "HEIGHT"
readonly value: number
}
interface ExportSettingsImage {
readonly format: "JPG" | "PNG"
readonly contentsOnly?: boolean // defaults to true
readonly useAbsoluteBounds?: boolean // defaults to false
readonly suffix?: string
readonly constraint?: ExportSettingsConstraints
}
interface ExportSettingsSVG {
readonly format: "SVG"
readonly contentsOnly?: boolean // defaults to true
readonly useAbsoluteBounds?: boolean // defaults to false
readonly suffix?: string
readonly svgOutlineText?: boolean // defaults to true
readonly svgIdAttribute?: boolean // defaults to false
readonly svgSimplifyStroke?: boolean // defaults to true
}
interface ExportSettingsPDF {
readonly format: "PDF"
readonly contentsOnly?: boolean // defaults to true
readonly useAbsoluteBounds?: boolean // defaults to false
readonly suffix?: string
}
type ExportSettings = ExportSettingsImage | ExportSettingsSVG | ExportSettingsPDF
type WindingRule = "NONZERO" | "EVENODD"
interface VectorVertex {
readonly x: number
readonly y: number
readonly strokeCap?: StrokeCap
readonly strokeJoin?: StrokeJoin
readonly cornerRadius?: number
readonly handleMirroring?: HandleMirroring
}
interface VectorSegment {
readonly start: number
readonly end: number
readonly tangentStart?: Vector // Defaults to { x: 0, y: 0 }
readonly tangentEnd?: Vector // Defaults to { x: 0, y: 0 }
}
interface VectorRegion {
readonly windingRule: WindingRule
readonly loops: ReadonlyArray<ReadonlyArray<number>>
}
interface VectorNetwork {
readonly vertices: ReadonlyArray<VectorVertex>
readonly segments: ReadonlyArray<VectorSegment>
readonly regions?: ReadonlyArray<VectorRegion> // Defaults to []
}
interface VectorPath {
readonly windingRule: WindingRule | "NONE"
readonly data: string
}
type VectorPaths = ReadonlyArray<VectorPath>
interface LetterSpacing {
readonly value: number
readonly unit: "PIXELS" | "PERCENT"
}
type LineHeight = {
readonly value: number
readonly unit: "PIXELS" | "PERCENT"
} | {
readonly unit: "AUTO"
}
type HyperlinkTarget = {
type: "URL" | "NODE"
value: string
}
type TextListOptions = {
type: "ORDERED" | "UNORDERED" | "NONE"
}
type BlendMode =
"NORMAL" |
"DARKEN" |
"MULTIPLY" |
"LINEAR_BURN" |
"COLOR_BURN" |
"LIGHTEN" |
"SCREEN" |
"LINEAR_DODGE" |
"COLOR_DODGE" |
"OVERLAY" |
"SOFT_LIGHT" |
"HARD_LIGHT" |
"DIFFERENCE" |
"EXCLUSION" |
"HUE" |
"SATURATION" |
"COLOR" |
"LUMINOSITY"
interface Font {
fontName: FontName
}
type Reaction = { action: Action | null, trigger: Trigger | null }
type Action =
{ readonly type: "BACK" | "CLOSE" } |
{ readonly type: "URL", url: string } |
{
readonly type: "NODE"
readonly destinationId: string | null
readonly navigation: Navigation
readonly transition: Transition | null
readonly preserveScrollPosition: boolean
// Only present if navigation == "OVERLAY" and the destination uses
// overlay position type "RELATIVE"
readonly overlayRelativePosition?: Vector
}
interface SimpleTransition {
readonly type: "DISSOLVE" | "SMART_ANIMATE" | "SCROLL_ANIMATE"
readonly easing: Easing
readonly duration: number
}
interface DirectionalTransition {
readonly type: "MOVE_IN" | "MOVE_OUT" | "PUSH" | "SLIDE_IN" | "SLIDE_OUT"
readonly direction: "LEFT" | "RIGHT" | "TOP" | "BOTTOM"
readonly matchLayers: boolean
readonly easing: Easing
readonly duration: number
}
type Transition = SimpleTransition | DirectionalTransition
type Trigger =
| { readonly type: "ON_CLICK" | "ON_HOVER" | "ON_PRESS" | "ON_DRAG" }
| {
readonly type: "AFTER_TIMEOUT";
readonly timeout: number;
}
| {
readonly type:
| "MOUSE_ENTER"
| "MOUSE_LEAVE"
| "MOUSE_UP"
| "MOUSE_DOWN";
readonly delay: number;
}
| {
readonly type: "ON_KEY_DOWN";
readonly device:
| "KEYBOARD"
| "XBOX_ONE"
| "PS4"
| "SWITCH_PRO"
| "UNKNOWN_CONTROLLER";
readonly keyCodes: ReadonlyArray<number>;
};
type Navigation = "NAVIGATE" | "SWAP" | "OVERLAY" | "SCROLL_TO" | "CHANGE_TO"
interface Easing {
readonly type: "EASE_IN" | "EASE_OUT" | "EASE_IN_AND_OUT" | "LINEAR" | 'EASE_IN_BACK' | 'EASE_OUT_BACK' | 'EASE_IN_AND_OUT_BACK' | 'CUSTOM_CUBIC_BEZIER'
readonly easingFunctionCubicBezier?: EasingFunctionBezier
}
interface EasingFunctionBezier {
x1: number,
y1: number,
x2: number,
y2: number
}
type OverflowDirection = "NONE" | "HORIZONTAL" | "VERTICAL" | "BOTH"
type OverlayPositionType = "CENTER" | "TOP_LEFT" | "TOP_CENTER" | "TOP_RIGHT" | "BOTTOM_LEFT" | "BOTTOM_CENTER" | "BOTTOM_RIGHT" | "MANUAL"
type OverlayBackground =
{ readonly type: "NONE" } |
{ readonly type: "SOLID_COLOR", readonly color: RGBA }
type OverlayBackgroundInteraction = "NONE" | "CLOSE_ON_CLICK_OUTSIDE"
type PublishStatus = "UNPUBLISHED" | "CURRENT" | "CHANGED"
interface ConnectorEndpointPosition {
position: { x: number, y: number }
}
interface ConnectorEndpointPositionAndEndpointNodeId {
position: { x: number, y: number }
endpointNodeId: string
}
interface ConnectorEndpointEndpointNodeIdAndMagnet {
endpointNodeId: string
magnet: 'NONE' | 'AUTO' | 'TOP' | 'LEFT' | 'BOTTOM' | 'RIGHT'
}
type ConnectorEndpoint = ConnectorEndpointPosition | ConnectorEndpointEndpointNodeIdAndMagnet | ConnectorEndpointPositionAndEndpointNodeId
////////////////////////////////////////////////////////////////////////////////
// Mixins
interface BaseNodeMixin {
readonly id: string
readonly parent: (BaseNode & ChildrenMixin) | null
name: string // Note: setting this also sets `autoRename` to false on TextNodes
readonly removed: boolean
toString(): string
remove(): void
getPluginData(key: string): string
setPluginData(key: string, value: string): void
// Namespace is a string that must be at least 3 alphanumeric characters, and should
// be a name related to your plugin. Other plugins will be able to read this data.
getSharedPluginData(namespace: string, key: string): string
setSharedPluginData(namespace: string, key: string, value: string): void
setRelaunchData(data: { [command: string]: /* description */ string }): void
}
interface SceneNodeMixin {
visible: boolean
locked: boolean
}
interface ChildrenMixin {
readonly children: ReadonlyArray<SceneNode>
appendChild(child: SceneNode): void
insertChild(index: number, child: SceneNode): void
findChildren(callback?: (node: SceneNode) => boolean): SceneNode[]
findChild(callback: (node: SceneNode) => boolean): SceneNode | null
/**
* If you only need to search immediate children, it is much faster
* to call node.children.filter(callback) or node.findChildren(callback)
*/
findAll(callback?: (node: SceneNode) => boolean): SceneNode[]
/**
* If you only need to search immediate children, it is much faster
* to call node.children.find(callback) or node.findChild(callback)
*/
findOne(callback: (node: SceneNode) => boolean): SceneNode | null
}
interface ConstraintMixin {
constraints: Constraints
}
interface LayoutMixin {
readonly absoluteTransform: Transform
relativeTransform: Transform
x: number
y: number
rotation: number // In degrees
readonly width: number
readonly height: number
readonly absoluteRenderBounds: Rect | null
constrainProportions: boolean
layoutAlign: "MIN" | "CENTER" | "MAX" | "STRETCH" | "INHERIT" // applicable only inside auto-layout frames
layoutGrow: number
resize(width: number, height: number): void
resizeWithoutConstraints(width: number, height: number): void
rescale(scale: number): void
}
interface BlendMixin {
opacity: number
blendMode: "PASS_THROUGH" | BlendMode
isMask: boolean
effects: ReadonlyArray<Effect>
effectStyleId: string
}
interface ContainerMixin {
expanded: boolean
backgrounds: ReadonlyArray<Paint> // DEPRECATED: use 'fills' instead
backgroundStyleId: string // DEPRECATED: use 'fillStyleId' instead
}
type StrokeCap = "NONE" | "ROUND" | "SQUARE" | "ARROW_LINES" | "ARROW_EQUILATERAL"
type StrokeJoin = "MITER" | "BEVEL" | "ROUND"
type HandleMirroring = "NONE" | "ANGLE" | "ANGLE_AND_LENGTH"
interface MinimalStrokesMixin {
strokes: ReadonlyArray<Paint>
strokeStyleId: string
strokeWeight: number
strokeJoin: StrokeJoin | PluginAPI['mixed']
strokeAlign: "CENTER" | "INSIDE" | "OUTSIDE"
dashPattern: ReadonlyArray<number>
strokeGeometry: VectorPaths
}
interface MinimalFillsMixin {
fills: ReadonlyArray<Paint> | PluginAPI['mixed']
fillStyleId: string | PluginAPI['mixed']
fillGeometry: VectorPaths
}
interface GeometryMixin extends MinimalStrokesMixin, MinimalFillsMixin {
strokeCap: StrokeCap | PluginAPI['mixed']
strokeMiterLimit: number
outlineStroke(): VectorNode | null
}
interface CornerMixin {
cornerRadius: number | PluginAPI['mixed']
cornerSmoothing: number
}
interface RectangleCornerMixin {
topLeftRadius: number
topRightRadius: number
bottomLeftRadius: number
bottomRightRadius: number
}
interface ExportMixin {
exportSettings: ReadonlyArray<ExportSettings>
exportAsync(settings?: ExportSettings): Promise<Uint8Array> // Defaults to PNG format
}
interface FramePrototypingMixin {
overflowDirection: OverflowDirection
numberOfFixedChildren: number
readonly overlayPositionType: OverlayPositionType
readonly overlayBackground: OverlayBackground
readonly overlayBackgroundInteraction: OverlayBackgroundInteraction
}
interface ReactionMixin {
reactions: ReadonlyArray<Reaction>
}
interface DocumentationLink {
readonly uri: string
}
interface PublishableMixin {
description: string
documentationLinks: ReadonlyArray<DocumentationLink>
readonly remote: boolean
readonly key: string // The key to use with "importComponentByKeyAsync", "importComponentSetByKeyAsync", and "importStyleByKeyAsync"
getPublishStatusAsync(): Promise<PublishStatus>
}
interface DefaultShapeMixin extends
BaseNodeMixin, SceneNodeMixin, ReactionMixin,
BlendMixin, GeometryMixin, LayoutMixin,
ExportMixin {
}
interface BaseFrameMixin extends
BaseNodeMixin, SceneNodeMixin, ChildrenMixin,
ContainerMixin, GeometryMixin, CornerMixin,
RectangleCornerMixin, BlendMixin, ConstraintMixin,
LayoutMixin, ExportMixin {
layoutMode: "NONE" | "HORIZONTAL" | "VERTICAL"
primaryAxisSizingMode: "FIXED" | "AUTO" // applicable only if layoutMode != "NONE"
counterAxisSizingMode: "FIXED" | "AUTO" // applicable only if layoutMode != "NONE"
primaryAxisAlignItems: "MIN" | "MAX" | "CENTER" | "SPACE_BETWEEN" // applicable only if layoutMode != "NONE"
counterAxisAlignItems: "MIN" | "MAX" | "CENTER" // applicable only if layoutMode != "NONE"
paddingLeft: number // applicable only if layoutMode != "NONE"
paddingRight: number // applicable only if layoutMode != "NONE"
paddingTop: number // applicable only if layoutMode != "NONE"
paddingBottom: number // applicable only if layoutMode != "NONE"
itemSpacing: number // applicable only if layoutMode != "NONE"
horizontalPadding: number // DEPRECATED: use the individual paddings
verticalPadding: number // DEPRECATED: use the individual paddings
layoutGrids: ReadonlyArray<LayoutGrid>
gridStyleId: string
clipsContent: boolean
guides: ReadonlyArray<Guide>
}
interface DefaultFrameMixin extends
BaseFrameMixin,
FramePrototypingMixin,
ReactionMixin { }
interface OpaqueNodeMixin extends BaseNodeMixin {
readonly absoluteTransform: Transform
relativeTransform: Transform
x: number
y: number
readonly width: number
readonly height: number
}
interface MinimalBlendMixin {
readonly opacity?: number
readonly blendMode?: BlendMode
}
interface VariantMixin {
readonly variantProperties: { [property: string]: string } | null
}
interface TextSublayerNode {
readonly hasMissingFont: boolean
paragraphIndent: number
paragraphSpacing: number
fontSize: number | PluginAPI['mixed']
fontName: FontName | PluginAPI['mixed']
textCase: TextCase | PluginAPI['mixed']
textDecoration: TextDecoration | PluginAPI['mixed']
letterSpacing: LetterSpacing | PluginAPI['mixed']
lineHeight: LineHeight | PluginAPI['mixed']
hyperlink: HyperlinkTarget | null | PluginAPI['mixed']
characters: string
insertCharacters(start: number, characters: string, useStyle?: "BEFORE" | "AFTER"): void
deleteCharacters(start: number, end: number): void
getRangeFontSize(start: number, end: number): number | PluginAPI['mixed']
setRangeFontSize(start: number, end: number, value: number): void
getRangeFontName(start: number, end: number): FontName | PluginAPI['mixed']
setRangeFontName(start: number, end: number, value: FontName): void
getRangeAllFontNames(start: number, end: number): FontName[]
getRangeTextCase(start: number, end: number): TextCase | PluginAPI['mixed']
setRangeTextCase(start: number, end: number, value: TextCase): void
getRangeTextDecoration(start: number, end: number): TextDecoration | PluginAPI['mixed']
setRangeTextDecoration(start: number, end: number, value: TextDecoration): void
getRangeLetterSpacing(start: number, end: number): LetterSpacing | PluginAPI['mixed']
setRangeLetterSpacing(start: number, end: number, value: LetterSpacing): void
getRangeLineHeight(start: number, end: number): LineHeight | PluginAPI['mixed']
setRangeLineHeight(start: number, end: number, value: LineHeight): void
getRangeHyperlink(start: number, end: number): HyperlinkTarget | null | PluginAPI['mixed']
setRangeHyperlink(start: number, end: number, value: HyperlinkTarget | null): void
getRangeFills(start: number, end: number): Paint[] | PluginAPI['mixed']
setRangeFills(start: number, end: number, value: Paint[]): void
getRangeTextStyleId(start: number, end: number): string | PluginAPI['mixed']
setRangeTextStyleId(start: number, end: number, value: string): void
getRangeFillStyleId(start: number, end: number): string | PluginAPI['mixed']
setRangeFillStyleId(start: number, end: number, value: string): void
getRangeListOptions(start: number, end: number): TextListOptions | PluginAPI['mixed']
setRangeListOptions(start: number, end: number, value: TextListOptions): void
getRangeIndentation(start: number, end: number): number | PluginAPI['mixed']
setRangeIndentation(start: number, end: number, value: number): void
}
////////////////////////////////////////////////////////////////////////////////
// Nodes
interface DocumentNode extends BaseNodeMixin {
readonly type: "DOCUMENT"
readonly children: ReadonlyArray<PageNode>
appendChild(child: PageNode): void
insertChild(index: number, child: PageNode): void
findChildren(callback?: (node: PageNode) => boolean): Array<PageNode>
findChild(callback: (node: PageNode) => boolean): PageNode | null
/**
* If you only need to search immediate children, it is much faster
* to call node.children.filter(callback) or node.findChildren(callback)
*/
findAll(callback?: (node: PageNode | SceneNode) => boolean): Array<PageNode | SceneNode>
/**
* If you only need to search immediate children, it is much faster
* to call node.children.find(callback) or node.findChild(callback)
*/
findOne(callback: (node: PageNode | SceneNode) => boolean): PageNode | SceneNode | null
}
interface PageNode extends BaseNodeMixin, ChildrenMixin, ExportMixin {
readonly type: "PAGE"
clone(): PageNode
guides: ReadonlyArray<Guide>
selection: ReadonlyArray<SceneNode>
selectedTextRange: { node: TextNode, start: number, end: number } | null
flowStartingPoints: ReadonlyArray<{ nodeId: string, name: string }>
backgrounds: ReadonlyArray<Paint>
readonly prototypeStartNode: FrameNode | GroupNode | ComponentNode | InstanceNode | null
}
interface FrameNode extends DefaultFrameMixin {
readonly type: "FRAME"
clone(): FrameNode
}
interface GroupNode extends
BaseNodeMixin, SceneNodeMixin, ReactionMixin,
ChildrenMixin, ContainerMixin, BlendMixin,
LayoutMixin, ExportMixin {
readonly type: "GROUP"
clone(): GroupNode
}
interface SliceNode extends
BaseNodeMixin, SceneNodeMixin, LayoutMixin,
ExportMixin {
readonly type: "SLICE"
clone(): SliceNode
}
interface RectangleNode extends DefaultShapeMixin, ConstraintMixin, CornerMixin, RectangleCornerMixin {
readonly type: "RECTANGLE"
clone(): RectangleNode
}
interface LineNode extends DefaultShapeMixin, ConstraintMixin {
readonly type: "LINE"
clone(): LineNode
}
interface EllipseNode extends DefaultShapeMixin, ConstraintMixin, CornerMixin {
readonly type: "ELLIPSE"
clone(): EllipseNode
arcData: ArcData
}
interface PolygonNode extends DefaultShapeMixin, ConstraintMixin, CornerMixin {
readonly type: "POLYGON"
clone(): PolygonNode
pointCount: number
}
interface StarNode extends DefaultShapeMixin, ConstraintMixin, CornerMixin {
readonly type: "STAR"
clone(): StarNode
pointCount: number
innerRadius: number
}
interface VectorNode extends DefaultShapeMixin, ConstraintMixin, CornerMixin {
readonly type: "VECTOR"
clone(): VectorNode
vectorNetwork: VectorNetwork
vectorPaths: VectorPaths
handleMirroring: HandleMirroring | PluginAPI['mixed']
}
interface TextNode extends DefaultShapeMixin, ConstraintMixin, TextSublayerNode {
readonly type: "TEXT"
clone(): TextNode
textAlignHorizontal: "LEFT" | "CENTER" | "RIGHT" | "JUSTIFIED"
textAlignVertical: "TOP" | "CENTER" | "BOTTOM"
textAutoResize: "NONE" | "WIDTH_AND_HEIGHT" | "HEIGHT"
paragraphIndent: number
paragraphSpacing: number
autoRename: boolean
textStyleId: string | PluginAPI['mixed']
}
interface ComponentSetNode extends BaseFrameMixin, PublishableMixin {
readonly type: "COMPONENT_SET"
clone(): ComponentSetNode
readonly defaultVariant: ComponentNode
readonly variantGroupProperties: { [property: string]: { values: string[] } }
}
interface ComponentNode extends DefaultFrameMixin, PublishableMixin, VariantMixin {
readonly type: "COMPONENT"
clone(): ComponentNode
createInstance(): InstanceNode
}
interface InstanceNode extends DefaultFrameMixin, VariantMixin {
readonly type: "INSTANCE"
clone(): InstanceNode
mainComponent: ComponentNode | null
swapComponent(componentNode: ComponentNode): void
setProperties(properties: { [property: string]: string }): void
detachInstance(): FrameNode
scaleFactor: number
}
interface BooleanOperationNode extends DefaultShapeMixin, ChildrenMixin, CornerMixin {
readonly type: "BOOLEAN_OPERATION"
clone(): BooleanOperationNode
booleanOperation: "UNION" | "INTERSECT" | "SUBTRACT" | "EXCLUDE"
expanded: boolean
}
interface StickyNode extends OpaqueNodeMixin, SceneNodeMixin, MinimalFillsMixin, MinimalBlendMixin, ExportMixin {
readonly type: "STICKY"
readonly text: TextSublayerNode
authorVisible: boolean
}
interface StampNode extends OpaqueNodeMixin, SceneNodeMixin, MinimalFillsMixin, MinimalBlendMixin, ExportMixin {
readonly type: "STAMP",
}
interface ShapeWithTextNode extends OpaqueNodeMixin, SceneNodeMixin, MinimalFillsMixin, MinimalBlendMixin, MinimalStrokesMixin, ExportMixin {
readonly type: "SHAPE_WITH_TEXT"
shapeType: 'SQUARE' | 'ELLIPSE' | 'ROUNDED_RECTANGLE' | 'DIAMOND' | 'TRIANGLE_UP' | 'TRIANGLE_DOWN' | 'PARALLELOGRAM_RIGHT' | 'PARALLELOGRAM_LEFT'
readonly text: TextSublayerNode
readonly cornerRadius?: number
resize(width: number, height: number): void
rescale(scale: number): void
}
interface CodeBlockNode extends OpaqueNodeMixin, SceneNodeMixin, MinimalBlendMixin, ExportMixin {
readonly type: "CODE_BLOCK"
code: string
codeLanguage: 'TYPESCRIPT' | 'CPP' | 'RUBY' | 'CSS' | 'JAVASCRIPT' | 'HTML' | 'JSON' | 'GRAPHQL' | 'PYTHON' | 'GO' | 'SQL' | 'SWIFT' | 'KOTLIN' | 'RUST'
}
interface LayerSublayerNode {
fills: Paint[] | PluginAPI['mixed']
}
interface ConnectorNode extends OpaqueNodeMixin, SceneNodeMixin, MinimalFillsMixin, MinimalBlendMixin, MinimalStrokesMixin, ExportMixin {
readonly type: "CONNECTOR"
readonly text: TextSublayerNode
readonly textBackground: LayerSublayerNode
readonly cornerRadius?: number
connectorLineType: 'ELBOWED' | 'STRAIGHT'
connectorStart: ConnectorEndpoint
connectorEnd: ConnectorEndpoint
}
interface WidgetNode extends OpaqueNodeMixin, SceneNodeMixin {
readonly type: 'WIDGET'
readonly widgetSyncedState: { [key: string]: any }
clone(): WidgetNode
cloneWidget(overrides: { [key: string]: any }): WidgetNode
}
type BaseNode =
DocumentNode |
PageNode |
SceneNode
type SceneNode =
SliceNode |
FrameNode |
GroupNode |
ComponentSetNode |
ComponentNode |
InstanceNode |
BooleanOperationNode |
VectorNode |
StarNode |
LineNode |
EllipseNode |
PolygonNode |
RectangleNode |
TextNode |
StickyNode |
ConnectorNode |
ShapeWithTextNode |
CodeBlockNode |
StampNode |
WidgetNode
type NodeType = BaseNode['type']
////////////////////////////////////////////////////////////////////////////////
// Styles
type StyleType = "PAINT" | "TEXT" | "EFFECT" | "GRID"
interface BaseStyle extends PublishableMixin {
readonly id: string
readonly type: StyleType
name: string
remove(): void
}
interface PaintStyle extends BaseStyle {
type: "PAINT"
paints: ReadonlyArray<Paint>
}
interface TextStyle extends BaseStyle {
type: "TEXT"
fontSize: number
textDecoration: TextDecoration
fontName: FontName
letterSpacing: LetterSpacing
lineHeight: LineHeight
paragraphIndent: number
paragraphSpacing: number
textCase: TextCase
}
interface EffectStyle extends BaseStyle {
type: "EFFECT"
effects: ReadonlyArray<Effect>
}
interface GridStyle extends BaseStyle {
type: "GRID"
layoutGrids: ReadonlyArray<LayoutGrid>
}
////////////////////////////////////////////////////////////////////////////////
// Other
interface Image {
readonly hash: string
getBytesAsync(): Promise<Uint8Array>
}
// The plugin environment exposes the browser console API,

@@ -1129,22 +28,4 @@ // so expected calls like console.log() still work.

function clearInterval(handle: number): void;
interface User {
readonly id: string | null
readonly name: string
readonly photoUrl: string | null
// The current user's multiplayer color. This will match the color of their
// dot stamps and cursor.
readonly color: string
readonly sessionId: number
}
interface ActiveUser extends User {
readonly position: Vector | null
readonly viewport: Rect
readonly selection: string[]
}
} // declare global
export { }
{
"name": "@figma/plugin-typings",
"version": "1.38.0",
"version": "1.39.0",
"description": "Typings for the Figma Plugin API",

@@ -24,2 +24,2 @@ "main": "",

"homepage": "https://github.com/figma/plugin-typings#readme"
}
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc