export type TextAlign = 'left' | 'center' | 'right'; export type TextBaseline = 'top' | 'middle' | 'bottom' | 'alphabetic'; export type FontStyle = 'normal' | 'italic'; export type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'; export interface TextSettings { text: string; fontFamily: string; fontSize: number; fontStyle: FontStyle; fontWeight: FontWeight; color: string; align: TextAlign; baseline: TextBaseline; lineHeight: number; letterSpacing: number; } export interface TextObject { id: string; layerId: string; x: number; y: number; text: string; fontFamily: string; fontSize: number; fontStyle: FontStyle; fontWeight: FontWeight; color: string; align: TextAlign; baseline: TextBaseline; lineHeight: number; letterSpacing: number; } export interface TextStore { settings: TextSettings; // Text objects (non-rasterized text) textObjects: TextObject[]; // On-canvas editor state isOnCanvasEditorActive: boolean; editorPosition: { x: number; y: number } | null; // Canvas coordinates editorText: string; // Current text being edited editingTextId: string | null; // ID of text object being edited (null for new text) // Setters setText: (text: string) => void; setFontFamily: (fontFamily: string) => void; setFontSize: (fontSize: number) => void; setFontStyle: (fontStyle: FontStyle) => void; setFontWeight: (fontWeight: FontWeight) => void; setColor: (color: string) => void; setAlign: (align: TextAlign) => void; setBaseline: (baseline: TextBaseline) => void; setLineHeight: (lineHeight: number) => void; setLetterSpacing: (letterSpacing: number) => void; updateSettings: (settings: Partial) => void; // Text object management addTextObject: (textObject: Omit) => void; updateTextObject: (id: string, updates: Partial) => void; deleteTextObject: (id: string) => void; getTextObjectAt: (x: number, y: number, layerId: string) => TextObject | null; // On-canvas editor control activateOnCanvasEditor: (canvasX: number, canvasY: number, textId?: string) => void; deactivateOnCanvasEditor: () => void; updateEditorPosition: (canvasX: number, canvasY: number) => void; updateEditorText: (text: string) => void; }