## New Features - **Customizable Progress Bar Colors**: Users can now customize the colors for normal, warning, and danger states through a dedicated settings window - **Separate Settings Window**: Settings now open in a frameless, resizable window (500x680px) with live preview of color changes - **CSS Variables**: Converted hardcoded colors to CSS custom properties for dynamic theming ## Files Modified - **main.js**: Added settings window creation, color preference storage (electron-store), and IPC handlers - **preload.js**: Exposed color preference and settings IPC methods to renderer - **app.js**: Implemented color preference loading and live updates from settings window - **styles.css**: Added CSS variables for customizable colors, updated scrollbar styling - **index.html**: Removed unused settings overlay - **.gitignore**: Added CLAUDE_NOTES.md to prevent credential leaks ## Files Added - **src/renderer/settings.html**: Settings window UI with 2-column color picker layout - **src/renderer/settings.js**: Settings window logic and color management - **src/renderer/settings-styles.css**: Settings window styling - **CHANGES.md**: Tracking document for modifications ## Technical Details - Color preferences stored in electron-store with encryption - Live color updates via IPC communication between settings and main windows - Default color scheme: Purple (normal), Orange (warning), Red (danger) - Settings accessible via tray menu or settings button 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
49 lines
2 KiB
JavaScript
49 lines
2 KiB
JavaScript
const { contextBridge, ipcRenderer } = require('electron');
|
|
|
|
// Expose protected methods that allow the renderer process to use
|
|
// the ipcRenderer without exposing the entire object
|
|
contextBridge.exposeInMainWorld('electronAPI', {
|
|
// Credentials management
|
|
getCredentials: () => ipcRenderer.invoke('get-credentials'),
|
|
saveCredentials: (credentials) => ipcRenderer.invoke('save-credentials', credentials),
|
|
deleteCredentials: () => ipcRenderer.invoke('delete-credentials'),
|
|
|
|
// Window controls
|
|
minimizeWindow: () => ipcRenderer.send('minimize-window'),
|
|
closeWindow: () => ipcRenderer.send('close-window'),
|
|
openLogin: () => ipcRenderer.send('open-login'),
|
|
openSettings: () => ipcRenderer.send('open-settings'),
|
|
|
|
// Window position
|
|
getWindowPosition: () => ipcRenderer.invoke('get-window-position'),
|
|
setWindowPosition: (position) => ipcRenderer.invoke('set-window-position', position),
|
|
|
|
// Event listeners
|
|
onLoginSuccess: (callback) => {
|
|
ipcRenderer.on('login-success', (event, data) => callback(data));
|
|
},
|
|
onRefreshUsage: (callback) => {
|
|
ipcRenderer.on('refresh-usage', () => callback());
|
|
},
|
|
onSessionExpired: (callback) => {
|
|
ipcRenderer.on('session-expired', () => callback());
|
|
},
|
|
onSilentLoginStarted: (callback) => {
|
|
ipcRenderer.on('silent-login-started', () => callback());
|
|
},
|
|
onSilentLoginFailed: (callback) => {
|
|
ipcRenderer.on('silent-login-failed', () => callback());
|
|
},
|
|
|
|
// API
|
|
fetchUsageData: () => ipcRenderer.invoke('fetch-usage-data'),
|
|
openExternal: (url) => ipcRenderer.send('open-external', url),
|
|
|
|
// Color preferences
|
|
getColorPreferences: () => ipcRenderer.invoke('get-color-preferences'),
|
|
setColorPreferences: (preferences) => ipcRenderer.invoke('set-color-preferences', preferences),
|
|
notifyColorChange: (preferences) => ipcRenderer.invoke('notify-color-change', preferences),
|
|
onColorsChanged: (callback) => {
|
|
ipcRenderer.on('colors-changed', (event, preferences) => callback(preferences));
|
|
}
|
|
});
|