/// 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 onStopRecordingFromTray: (callback: () => void) => () => void openExternalUrl: (url: string) => Promise<{ success: boolean; error?: string }> saveExportedVideo: (videoData: ArrayBuffer, fileName: string) => Promise<{ success: boolean; path?: string; message?: string; cancelled?: boolean }> openVideoFilePicker: () => Promise<{ success: boolean; path?: string; cancelled?: boolean }> setCurrentVideoPath: (path: string) => Promise<{ success: boolean }> getCurrentVideoPath: () => Promise<{ success: boolean; path?: string }> clearCurrentVideoPath: () => Promise<{ success: boolean }> hudOverlayHide: () => void; hudOverlayClose: () => void; } } interface ProcessedDesktopSource { id: string name: string display_id: string thumbnail: string | null appIcon: string | null }