export interface Position { x: number; y: number; w: number; h: number; r: number; } export interface Border { radius: number; color: string; weight: number; } export interface BaseItem { id: number; type: string; value: string; position: Position; border?: Border; backgroundColor?: string; /** Horizontal padding in pt. Also the vertical padding when `paddingY` is unset (uniform / legacy). */ padding?: number; /** Vertical padding in pt. Unset means uniform: vertical equals `padding`. */ paddingY?: number; keepRatio?: boolean; style?: string; } export interface ImageItem extends BaseItem { type: 'Image'; } export interface TextItem extends BaseItem { type: 'Text'; } export interface ParagraphItem extends BaseItem { type: 'Paragraph'; } export interface ColorItem extends BaseItem { type: 'Color'; } export interface ShapeItem extends BaseItem { type: 'Shape'; } export interface GoogleMap extends BaseItem { type: 'GoogleMap'; location?: { lat?: number; lng?: number; address: string; }; fromLocation?: { lat?: number; lng?: number; address: string; }; showDirections?: boolean; } export interface StreetView extends BaseItem { type: 'StreetView'; location?: { lat?: number; lng?: number; address: string; }; } export interface QrCodeItem extends BaseItem { type: 'QrCode'; location?: { lat?: number; lng?: number; address: string; }; belongsTo?: number; belongsToType?: 'GoogleMap' | 'StreetView'; } export interface ConversionItem extends BaseItem { type: 'Conversion'; stringValue?: string; } export type MapItem = GoogleMap | StreetView; export type Item = ColorItem | TextItem | ParagraphItem | ImageItem | ShapeItem | MapItem | QrCodeItem | ConversionItem; export interface ItemState { focusedItemId: number | undefined; items: Item[]; } export interface CanvasState { size: { w: number; h: number; }; backgroundColor: string | null; backgroundImage: string | null; backgroundSize: string; backgroundPosition: string; isBorderEnabled: boolean; borderColor: string | null; borderWidth: number | null; canvasOffset?: { x: number; y: number; }; } export type GlobalState = ItemState & CanvasState;