Files
automaker/apps/ui/src/preload.ts
trueheads 0cd3275e4a Merge main into kanban-scaling
Resolves merge conflicts while preserving:
- Kanban scaling improvements (window sizing, bounce prevention, debouncing)
- Main's sidebar refactoring into hooks
- Main's openInEditor functionality for VS Code integration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 01:49:45 -06:00

53 lines
2.0 KiB
TypeScript

/**
* Electron preload script (TypeScript)
*
* Only exposes native features (dialogs, shell) and server URL.
* All other operations go through HTTP API.
*/
import { contextBridge, ipcRenderer, OpenDialogOptions, SaveDialogOptions } from 'electron';
// Expose minimal API for native features
contextBridge.exposeInMainWorld('electronAPI', {
// Platform info
platform: process.platform,
isElectron: true,
// Connection check
ping: (): Promise<string> => ipcRenderer.invoke('ping'),
// Get server URL for HTTP client
getServerUrl: (): Promise<string> => ipcRenderer.invoke('server:getUrl'),
// Native dialogs - better UX than prompt()
openDirectory: (): Promise<Electron.OpenDialogReturnValue> =>
ipcRenderer.invoke('dialog:openDirectory'),
openFile: (options?: OpenDialogOptions): Promise<Electron.OpenDialogReturnValue> =>
ipcRenderer.invoke('dialog:openFile', options),
saveFile: (options?: SaveDialogOptions): Promise<Electron.SaveDialogReturnValue> =>
ipcRenderer.invoke('dialog:saveFile', options),
// Shell operations
openExternalLink: (url: string): Promise<{ success: boolean; error?: string }> =>
ipcRenderer.invoke('shell:openExternal', url),
openPath: (filePath: string): Promise<{ success: boolean; error?: string }> =>
ipcRenderer.invoke('shell:openPath', filePath),
openInEditor: (
filePath: string,
line?: number,
column?: number
): Promise<{ success: boolean; error?: string }> =>
ipcRenderer.invoke('shell:openInEditor', filePath, line, column),
// App info
getPath: (name: string): Promise<string> => ipcRenderer.invoke('app:getPath', name),
getVersion: (): Promise<string> => ipcRenderer.invoke('app:getVersion'),
isPackaged: (): Promise<boolean> => ipcRenderer.invoke('app:isPackaged'),
// Window management
updateMinWidth: (sidebarExpanded: boolean): Promise<void> =>
ipcRenderer.invoke('window:updateMinWidth', sidebarExpanded),
});
console.log('[Preload] Electron API exposed (TypeScript)');