import { BLACK, DEFAULT_FONT_FAMILY, DEFAULT_STROKE_MITER_LIMIT } from './constants' import type { NodeType, SceneNode } from './types' export function createDefaultNode( generateId: () => string, type: NodeType, overrides: Partial = {} ): SceneNode { return { id: generateId(), type, name: type.charAt(0) + type.slice(1).toLowerCase(), parentId: null, childIds: [], x: 0, y: 0, width: 100, height: 100, rotation: 0, source: { format: null, id: null, orderKey: null, fig: { rawSize: null, rawTransform: null, rawNodeFields: {}, layout: null, symbolOverrides: [], componentPropAssignments: [], derivedSymbolData: [], derivedSymbolDataLayoutVersion: null, uniformScaleFactor: null } }, figmaDerivedLayout: null, fills: type === 'TEXT' ? [{ type: 'SOLID' as const, color: BLACK, opacity: 1, visible: true }] : [], strokes: [], effects: [], opacity: 1, cornerRadius: 0, topLeftRadius: 0, topRightRadius: 0, bottomRightRadius: 0, bottomLeftRadius: 0, independentCorners: false, cornerSmoothing: 0, visible: true, locked: false, clipsContent: false, text: '', fontSize: 14, fontFamily: DEFAULT_FONT_FAMILY, fontWeight: 400, italic: false, textAlignHorizontal: 'LEFT', textDirection: 'AUTO', leadingTrim: 'NONE', lineHeight: null, letterSpacing: 0, layoutMode: 'NONE', layoutDirection: 'AUTO', layoutWrap: 'NO_WRAP', primaryAxisAlign: 'MIN', counterAxisAlign: 'MIN', primaryAxisSizing: 'FIXED', counterAxisSizing: 'FIXED', itemSpacing: 0, counterAxisSpacing: 0, paddingTop: 0, paddingRight: 0, paddingBottom: 0, paddingLeft: 0, blendMode: 'PASS_THROUGH', layoutPositioning: 'AUTO', layoutGrow: 0, layoutAlignSelf: 'AUTO', vectorNetwork: null, fillGeometry: [], strokeGeometry: [], arcData: null, textAlignVertical: 'TOP', textAutoResize: 'NONE', textCase: 'ORIGINAL', textDecoration: 'NONE', textDecorationStyle: 'SOLID', textDecorationThickness: null, textDecorationFills: [], textDecorationSkipInk: true, textUnderlineOffset: null, maxLines: null, styleRuns: [], fontVariations: [], fontFeatures: [], horizontalConstraint: 'MIN', verticalConstraint: 'MIN', strokeCap: 'NONE', strokeJoin: 'MITER', dashPattern: [], borderTopWeight: 0, borderRightWeight: 0, borderBottomWeight: 0, borderLeftWeight: 0, independentStrokeWeights: false, strokeMiterLimit: DEFAULT_STROKE_MITER_LIMIT, minWidth: null, maxWidth: null, minHeight: null, maxHeight: null, isMask: false, maskType: 'ALPHA', maskIsOutline: false, gridTemplateColumns: [], gridTemplateRows: [], gridColumnGap: 0, gridRowGap: 0, gridPosition: null, counterAxisAlignContent: 'AUTO', itemReverseZIndex: false, strokesIncludedInLayout: false, expanded: true, textTruncation: 'DISABLED', autoRename: true, pointCount: 5, starInnerRadius: 0.38, componentId: null, overrides: {}, componentPropertyDefinitions: [], componentPropertyValues: {}, componentKey: null, sourceLibraryKey: null, publishId: null, overrideKey: null, sharedSymbolVersion: null, publishedVersion: null, isPublishable: false, isSymbolPublishable: false, symbolDescription: '', symbolLinks: [], variantPropSpecs: [], boundVariables: {}, exportSettings: [], pluginData: [], pluginRelaunchData: [], internalOnly: false, flipX: false, flipY: false, textPicture: null, figmaDerivedTextGlyphs: null, ...overrides } } export const CONTAINER_TYPES = new Set([ 'CANVAS', 'FRAME', 'GROUP', 'BOOLEAN_OPERATION', 'SECTION', 'COMPONENT', 'COMPONENT_SET', 'INSTANCE' ])