import { Application } from '../index.js'; const app = new Application(); // Set up menu event handler app.on('custom-menu-click', ({ customMenuEvent: menuEvent }) => { console.log(`Menu item clicked: "${menuEvent.id}" from window ${menuEvent.windowId}`); // Handle specific menu items switch (menuEvent.id) { case 'new': console.log('đ Creating new document...'); break; case 'open': console.log('đ Opening file...'); const result = window.openFileDialog({ title: 'Select a file to open' }); console.log({ result }); break; case 'save': console.log('đž Saving file...'); break; case 'about': console.log('âšī¸ About this application...'); break; case 'preferences': console.log('âī¸ Opening preferences...'); break; case 'quit': console.log('đ Goodbye!'); app.exit(); break; case 'reload': console.log('đ Reloading webview...'); webview.reload(); break; case 'devtools': console.log('đ§ Opening developer tools...'); webview.openDevtools(); break; default: console.log(`Unhandled menu item: ${menuEvent.id}`); } }); app.on('application-close-requested', () => { console.log('Application close requested'); app.exit(); }); app.on('window-close-requested', () => { console.log('Window close requested'); }); // Set up comprehensive application menu app.setMenu({ items: [ // File menu { label: 'File', submenu: { items: [ { id: 'new', label: 'New', accelerator: 'CmdOrCtrl+N', enabled: true, }, { id: 'open', label: 'Open...', accelerator: 'CmdOrCtrl+O', }, { role: 'separator' }, { id: 'save', label: 'Save', accelerator: 'CmdOrCtrl+S', }, { id: 'save-as', label: 'Save As...', accelerator: 'CmdOrCtrl+Shift+S', }, { role: 'separator' }, { id: 'quit', label: 'Quit', accelerator: 'CmdOrCtrl+Q', }, ], }, }, // Edit menu with predefined roles { label: 'Edit', submenu: { items: [ { role: 'cut' }, { role: 'copy' }, { role: 'paste' }, { role: 'selectall' }, { role: 'separator' }, { id: 'preferences', label: 'Preferences...', accelerator: 'CmdOrCtrl+,', }, ], }, }, // View menu { label: 'View', submenu: { items: [ { id: 'reload', label: 'Reload', accelerator: 'CmdOrCtrl+R', }, { id: 'devtools', label: 'Developer Tools', accelerator: 'F12', }, { role: 'separator' }, { label: 'Zoom', submenu: { items: [ { id: 'zoom-in', label: 'Zoom In', accelerator: 'CmdOrCtrl+Plus', }, { id: 'zoom-out', label: 'Zoom Out', accelerator: 'CmdOrCtrl+-', }, { id: 'zoom-reset', label: 'Actual Size', accelerator: 'CmdOrCtrl+0', }, ], }, }, ], }, }, // Help menu { label: 'Help', submenu: { items: [ { id: 'about', label: 'About Menu Example', }, { id: 'docs', label: 'Documentation', accelerator: 'F1', }, ], }, }, ], }); console.log('đ¯ Menu System Example'); console.log('đ Try the following:'); console.log(' âĸ Click on menu items to see event handling'); console.log(' âĸ Use keyboard shortcuts (Ctrl+N, Ctrl+O, etc.)'); console.log(' âĸ Try copy/paste with Ctrl+C/Ctrl+V'); console.log(' âĸ Use Ctrl+Q or File > Quit to exit'); console.log(''); // Create main window const window = app.createBrowserWindow({ title: 'Menu System Example', width: 800, height: 600, }); // Create webview with example content const webview = window.createWebview({ html: `
This example demonstrates the cross-platform menu system in WebviewJS.
1. Click on the menu items above to trigger events
2. Use keyboard shortcuts for quick access
3. Test copy/paste with the text area below:
Check the console to see menu events being handled!