UNPKG

@mcastiello/figmatic

Version:

204 lines (203 loc) 7.48 kB
import type { AxisAlign, AxisSizing, BlendMode, BooleanOperation, LayoutAlign, LayoutMode, LayoutPositioning, LayoutSizing, LayoutWrap, LineType, MaskType, NodeType, OverflowDirection, StrokeAlign, StrokeCap, StrokeJoin, TokenStyleTypes } from "./enumerators"; import type { Annotation, ArcData, Color, Component, ComponentProperty, ComponentPropertyDefinition, DevStatus, Effect, ExportSetting, LayoutConstraint, LayoutGrid, Overrides, Paint, PaintOverride, Path, Rectangle, StrokeWeights, Style, Transform, TypeStyle, Variable, VariableAlias, VariableCollection, Vector } from "./properties"; export type NodeData = { boundVariables: Partial<Record<TokenStyleTypes, VariableAlias | VariableAlias[]>>; children?: NodeData[]; componentPropertyReferences: Record<string, string>; explicitVariableModes: Record<string, string>; id: string; name: string; rotation: number; type: NodeType; visible: boolean; }; export type GenericNodeData<Type extends NodeType = NodeType> = { type: Type; }; export type GenericNode<Type extends NodeType = NodeType> = Omit<NodeData, "type"> & GenericNodeData<Type>; export type BaseNodeDefinitionData = Partial<Omit<NodeData, "children" | "type" | "id">>; export type NodeDefinitionData<DataType extends GenericNodeData = GenericNodeData> = BaseNodeDefinitionData & Partial<Omit<DataType, "type">>; export type StyledNodeProperties = { effects?: Effect[]; fills?: Paint[]; strokes?: Paint[]; style?: TypeStyle; }; export type StyledNodeData<DataType extends GenericNodeData = GenericNodeData> = NodeDefinitionData<DataType> & StyledNodeProperties & { styles: Partial<Record<TokenStyleTypes, string>>; }; export type DocumentNodeData = GenericNodeData<NodeType.Document>; export type ExportableNode = { exportSettings: ExportSetting[]; }; export type CanvasNodeData = GenericNodeData<NodeType.Canvas> & ExportableNode & { backgroundColor: Color; }; export type FrameNodeData<Type extends NodeType = NodeType.Frame> = GenericNodeData<Type> & ExportableNode & { absoluteBoundingBox: Rectangle; absoluteRenderBounds: Rectangle; annotations: Annotation[]; blendMode: BlendMode; clipsContent: boolean; constraints: LayoutConstraint; cornerRadius: number; cornerSmoothing: number; counterAxisAlignContent: AxisAlign; counterAxisAlignItems: AxisAlign; counterAxisSizingMode: AxisSizing; counterAxisSpacing: number; devStatus: DevStatus; effects: Effect[]; fills: Paint[]; isMask: boolean; isMaskOutline: boolean; itemReverseZIndex: boolean; itemSpacing: number; layoutAlign: LayoutAlign; layoutGrids: LayoutGrid[]; layoutMode: LayoutMode; layoutPositioning: LayoutPositioning; layoutSizingHorizontal: LayoutSizing; layoutSizingVertical: LayoutSizing; layoutWrap: LayoutWrap; locked: boolean; maskType: MaskType; maxHeight: number; maxWidth: number; minHeight: number; minWidth: number; opacity: number; overflowDirection: OverflowDirection; paddingBottom: number; paddingLeft: number; paddingRight: number; paddingTop: number; preserveRatio: boolean; primaryAxisAlignItems: AxisAlign; primaryAxisSizingMode: AxisSizing; rectangleCornerRadii: [number, number, number, number]; relativeTransform: Transform; size: Vector; strokeAlign: StrokeAlign; strokeDashes: [number, number]; strokeWeight: number; strokes: Paint[]; strokesIncludedInLayout: boolean; styles: Partial<Record<TokenStyleTypes, string>>; targetAspectRatio: Vector; }; export type GroupNodeData = Omit<FrameNodeData<NodeType.Group>, "layoutGrids">; export type SectionNodeData = GenericNodeData<NodeType.Section> & { absoluteBoundingBox: Rectangle; absoluteRenderBounds: Rectangle; devStatus: DevStatus; fills: Paint[]; sectionContentsHidden: boolean; strokeAlign: StrokeAlign; strokeWeight: number; strokes: Paint[]; }; export type VectorNodeData<Type extends NodeType = NodeType.Vector> = GenericNodeData<Type> & ExportableNode & { absoluteBoundingBox: Rectangle; absoluteRenderBounds: Rectangle; annotations: Annotation[]; blendMode: BlendMode; constraints: LayoutConstraint; effects: Effect[]; fillGeometry: Path[]; fillOverrideTableMap: Record<number, PaintOverride>; fills: Paint[]; individualStrokeWeights: StrokeWeights; isMask: boolean; layoutAlign: LayoutAlign; layoutGrow: number; locked: boolean; opacity: number; preserveRatio: boolean; relativeTransform: Transform; size: Vector; strokeAlign: StrokeAlign; strokeCap: StrokeCap; strokeDashes: [number, number]; strokeGeometry: Path[]; strokeJoin: StrokeJoin; strokeMiterAngle: number; strokeWeight: number; strokes: Paint[]; styles: Partial<Record<TokenStyleTypes, string>>; }; export type BooleanOperationNodeData = VectorNodeData<NodeType.BooleanOperation> & { booleanOperation: BooleanOperation; }; export type StarNodeData = VectorNodeData<NodeType.Star>; export type LineNodeData = VectorNodeData<NodeType.Line>; export type EllipseNodeData = VectorNodeData<NodeType.Ellipse> & { arcData: ArcData; }; export type RegularPolygonNodeData = VectorNodeData<NodeType.RegularPolygon>; export type RectangleNodeData = VectorNodeData<NodeType.Rectangle> & { cornerRadius: number; cornerSmoothing: number; rectangleCornerRadii: [number, number, number, number]; }; export type WashiTapeNodeData = VectorNodeData<NodeType.WashiTape>; export type TextNodeData = Omit<VectorNodeData<NodeType.Text>, "fillOverrideTableMap"> & { characters: string; style: TypeStyle; characterStyleOverrides: number[]; styleOverrideTable: Record<number, TypeStyle>; lineTypes: LineType[]; lineIndentations: number; }; export type SliceNodeData = GenericNodeData<NodeType.Slice> & ExportableNode & { absoluteBoundingBox: Rectangle; absoluteRenderBounds: Rectangle; relativeTransform: Transform; size: Vector; }; export type ComponentNodeData = FrameNodeData<NodeType.Component> & { componentPropertyDefinitions: Record<string, ComponentPropertyDefinition>; }; export type ComponentSetNodeData = FrameNodeData<NodeType.ComponentSet> & { componentPropertyDefinitions: Record<string, ComponentPropertyDefinition>; }; export type InstanceNodeData = FrameNodeData<NodeType.Instance> & { componentId: string; isExposedInstance: boolean; exposedInstances: string[]; componentProperties: Record<string, ComponentProperty>; overrides: Overrides[]; }; export type Branch = { key: string; name: string; thumbnail_url: string; last_modified: string; link_access: string; }; export type FigmaFile = { name: string; role: string; schemaVersion: number; lastModified: string; editorType: string; thumbnailUrl: string; version: string; document: GenericNode<NodeType.Document>; components: Record<string, Component>; componentSets: Record<string, Component>; styles: Record<string, Style>; mainFileKey: string; branches: Branch[]; }; export type VariablesFile = { meta: { variables: Record<string, Variable>; variableCollections: Record<string, VariableCollection>; }; }; export type ExportFile = { err: string; status: number; images: Record<string, string>; };