export interface ProcessedFile { path: string; content: string | ArrayBuffer; mimeType: string; blobUrl?: string; } export interface Route { path: string; file: string; title?: string; } export interface CompiledProject { entryPoint: string; files: ProcessedFile[]; routes: Route[]; blobUrls: Map; } export interface FocusContextPayload { domPath: string; tagName: string; attributes: Record; outerHTML: string; } export interface PlacementBlockInfo { id: string; name: string; wireframeHtml: string; } export interface PlacementResult { blockId: string; placementId: string; domPath: string; position: 'before' | 'after'; htmlContext: string; } export type ConsoleLevel = 'log' | 'warn' | 'error' | 'info' | 'debug'; export type PreviewMessage = | { type: 'navigate'; path: string } | { type: 'reload' } | { type: 'error'; error: string } | { type: 'selector-selection'; payload: FocusContextPayload } | { type: 'selector-cancelled' } | { type: 'console'; level: ConsoleLevel; args: string[] } | { type: 'placement-complete'; payload: PlacementResult } | { type: 'placement-cancelled' } | { type: 'iframe-click' }; export type PreviewHostMessage = | { type: 'selector-toggle'; active: boolean } | { type: 'placement-start'; block: PlacementBlockInfo } | { type: 'placement-hover'; x: number; y: number } | { type: 'placement-drop' } | { type: 'placement-cancel' } | { type: 'placement-remove'; placementId: string };