/// declare namespace NodeJS { interface ProcessEnv { /** * The built directory structure * * ```tree * ├─┬─┬ dist * │ │ └── index.html * │ │ * │ ├─┬ dist-electron * │ │ ├── main.js * │ │ └── preload.js * │ * ``` */ APP_ROOT: string /** /dist/ or /public/ */ VITE_PUBLIC: string } } // Used in Renderer process, expose in `preload.ts` interface Window { electronAPI: { getSources: (opts: Electron.SourcesOptions) => Promise switchToEditor: () => Promise openSourceSelector: () => Promise selectSource: (source: any) => Promise getSelectedSource: () => Promise storeRecordedVideo: (videoData: ArrayBuffer, fileName: string) => Promise<{ success: boolean; path?: string; message?: string }> getRecordedVideoPath: () => Promise<{ success: boolean; path?: string; message?: string }> setRecordingState: (recording: boolean) => Promise getCursorTelemetry: (videoPath?: string) => Promise<{ success: boolean; samples: CursorTelemetryPoint[]; message?: string; error?: string }> onStopRecordingFromTray: (callback: () => void) => () => void openExternalUrl: (url: string) => Promise<{ success: boolean; error?: string }> saveExportedVideo: (videoData: ArrayBuffer, fileName: string) => Promise<{ success: boolean; path?: string; message?: string; canceled?: boolean }> openVideoFilePicker: () => Promise<{ success: boolean; path?: string; canceled?: boolean }> setCurrentVideoPath: (path: string) => Promise<{ success: boolean }> getCurrentVideoPath: () => Promise<{ success: boolean; path?: string }> clearCurrentVideoPath: () => Promise<{ success: boolean }> saveProjectFile: (projectData: unknown, suggestedName?: string, existingProjectPath?: string) => Promise<{ success: boolean; path?: string; message?: string; canceled?: boolean; error?: string }> loadProjectFile: () => Promise<{ success: boolean; path?: string; project?: unknown; message?: string; canceled?: boolean; error?: string }> loadCurrentProjectFile: () => Promise<{ success: boolean; path?: string; project?: unknown; message?: string; canceled?: boolean; error?: string }> onMenuLoadProject: (callback: () => void) => () => void onMenuSaveProject: (callback: () => void) => () => void onMenuSaveProjectAs: (callback: () => void) => () => void getPlatform: () => Promise getShortcuts: () => Promise | null> saveShortcuts: (shortcuts: unknown) => Promise<{ success: boolean; error?: string }> hudOverlayHide: () => void; hudOverlayClose: () => void; } } interface ProcessedDesktopSource { id: string name: string display_id: string thumbnail: string | null appIcon: string | null } interface CursorTelemetryPoint { timeMs: number cx: number cy: number }