File size: 1,534 Bytes
391c43e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 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<string, string>;
}
export interface FocusContextPayload {
domPath: string;
tagName: string;
attributes: Record<string, string>;
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 };
|