From 28d67818e241602af867d0fb9163e2b341a64d62 Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Thu, 30 Apr 2026 16:01:47 +0300 Subject: [PATCH] refactor(app): share browser and tauri menu model --- AGENTS.md | 3 + desktop/generated/menu.json | 288 +++++++++++++++++++++++++++++ desktop/src/menu.rs | 297 +++++++----------------------- package.json | 3 +- scripts/generate-tauri-menu.ts | 35 ++++ src/app/shell/menu/app-menu.ts | 323 ++++++++++++++++----------------- src/app/shell/menu/schema.ts | 228 +++++++++++++++++++++++ src/app/shell/menu/use.ts | 127 ++++++++++--- 8 files changed, 880 insertions(+), 424 deletions(-) create mode 100644 desktop/generated/menu.json create mode 100644 scripts/generate-tauri-menu.ts create mode 100644 src/app/shell/menu/schema.ts diff --git a/AGENTS.md b/AGENTS.md index 01def8fb6..4cafd5ca2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -305,6 +305,9 @@ Self-review checklist: ## UI - Use reka-ui for UI components (Splitter, ContextMenu, DropdownMenu, etc.) +- Browser and Tauri menus share `src/app/shell/menu/schema.ts` as the canonical menu model. Do not add menu items directly in `src/components/AppMenu.vue` or `desktop/src/menu.rs`. +- Regenerate the native menu with `bun run generate:tauri-menu` after editing the shared menu schema; `desktop/generated/menu.json` is consumed by the Tauri menu builder. +- Every shared menu item with an `id` must be handled by `src/app/shell/menu/use.ts`, an editor command, or explicitly marked browser/native-only in the schema. - Tailwind 4 for styling — no inline CSS, no component-level `