Vendor opencode source for docker build
This commit is contained in:
191
opencode/packages/desktop/src/menu.ts
Normal file
191
opencode/packages/desktop/src/menu.ts
Normal file
@@ -0,0 +1,191 @@
|
||||
import { Menu, MenuItem, PredefinedMenuItem, Submenu } from "@tauri-apps/api/menu"
|
||||
import { type as ostype } from "@tauri-apps/plugin-os"
|
||||
import { relaunch } from "@tauri-apps/plugin-process"
|
||||
import { openUrl } from "@tauri-apps/plugin-opener"
|
||||
|
||||
import { runUpdater, UPDATER_ENABLED } from "./updater"
|
||||
import { installCli } from "./cli"
|
||||
import { initI18n, t } from "./i18n"
|
||||
import { commands } from "./bindings"
|
||||
|
||||
export async function createMenu(trigger: (id: string) => void) {
|
||||
if (ostype() !== "macos") return
|
||||
|
||||
await initI18n()
|
||||
|
||||
const menu = await Menu.new({
|
||||
items: [
|
||||
await Submenu.new({
|
||||
text: "OpenCode",
|
||||
items: [
|
||||
await PredefinedMenuItem.new({
|
||||
item: { About: null },
|
||||
}),
|
||||
await MenuItem.new({
|
||||
enabled: UPDATER_ENABLED,
|
||||
action: () => runUpdater({ alertOnFail: true }),
|
||||
text: t("desktop.menu.checkForUpdates"),
|
||||
}),
|
||||
await MenuItem.new({
|
||||
action: () => installCli(),
|
||||
text: t("desktop.menu.installCli"),
|
||||
}),
|
||||
await MenuItem.new({
|
||||
action: async () => window.location.reload(),
|
||||
text: t("desktop.menu.reloadWebview"),
|
||||
}),
|
||||
await MenuItem.new({
|
||||
action: async () => {
|
||||
await commands.killSidecar().catch(() => undefined)
|
||||
await relaunch().catch(() => undefined)
|
||||
},
|
||||
text: t("desktop.menu.restart"),
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Separator",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Hide",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "HideOthers",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "ShowAll",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Separator",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Quit",
|
||||
}),
|
||||
].filter(Boolean),
|
||||
}),
|
||||
await Submenu.new({
|
||||
text: "File",
|
||||
items: [
|
||||
await MenuItem.new({
|
||||
text: "New Session",
|
||||
accelerator: "Shift+Cmd+S",
|
||||
action: () => trigger("session.new"),
|
||||
}),
|
||||
await MenuItem.new({
|
||||
text: "Open Project...",
|
||||
accelerator: "Cmd+O",
|
||||
action: () => trigger("project.open"),
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Separator",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "CloseWindow",
|
||||
}),
|
||||
],
|
||||
}),
|
||||
await Submenu.new({
|
||||
text: "Edit",
|
||||
items: [
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Undo",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Redo",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Separator",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Cut",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Copy",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Paste",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "SelectAll",
|
||||
}),
|
||||
],
|
||||
}),
|
||||
await Submenu.new({
|
||||
text: "View",
|
||||
items: [
|
||||
await MenuItem.new({
|
||||
action: () => trigger("sidebar.toggle"),
|
||||
text: "Toggle Sidebar",
|
||||
accelerator: "Cmd+B",
|
||||
}),
|
||||
await MenuItem.new({
|
||||
action: () => trigger("terminal.toggle"),
|
||||
text: "Toggle Terminal",
|
||||
accelerator: "Ctrl+`",
|
||||
}),
|
||||
await MenuItem.new({
|
||||
action: () => trigger("fileTree.toggle"),
|
||||
text: "Toggle File Tree",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Separator",
|
||||
}),
|
||||
await MenuItem.new({
|
||||
action: () => trigger("common.goBack"),
|
||||
text: "Back",
|
||||
}),
|
||||
await MenuItem.new({
|
||||
action: () => trigger("common.goForward"),
|
||||
text: "Forward",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Separator",
|
||||
}),
|
||||
await MenuItem.new({
|
||||
action: () => trigger("session.previous"),
|
||||
text: "Previous Session",
|
||||
accelerator: "Option+ArrowUp",
|
||||
}),
|
||||
await MenuItem.new({
|
||||
action: () => trigger("session.next"),
|
||||
text: "Next Session",
|
||||
accelerator: "Option+ArrowDown",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Separator",
|
||||
}),
|
||||
],
|
||||
}),
|
||||
await Submenu.new({
|
||||
text: "Help",
|
||||
items: [
|
||||
// missing native macos search
|
||||
await MenuItem.new({
|
||||
action: () => openUrl("https://opencode.ai/docs"),
|
||||
text: "OpenCode Documentation",
|
||||
}),
|
||||
await MenuItem.new({
|
||||
action: () => openUrl("https://discord.com/invite/opencode"),
|
||||
text: "Support Forum",
|
||||
}),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Separator",
|
||||
}),
|
||||
// await MenuItem.new({
|
||||
// text: "Release Notes",
|
||||
// }),
|
||||
await PredefinedMenuItem.new({
|
||||
item: "Separator",
|
||||
}),
|
||||
await MenuItem.new({
|
||||
action: () => openUrl("https://github.com/anomalyco/opencode/issues/new?template=feature_request.yml"),
|
||||
text: "Share Feedback",
|
||||
}),
|
||||
await MenuItem.new({
|
||||
action: () => openUrl("https://github.com/anomalyco/opencode/issues/new?template=bug_report.yml"),
|
||||
text: "Report a Bug",
|
||||
}),
|
||||
],
|
||||
}),
|
||||
],
|
||||
})
|
||||
menu.setAsAppMenu()
|
||||
}
|
||||
Reference in New Issue
Block a user