Menu bar — File / Edit / View / Insert / Format / Data / Help
A Google-Sheets-organized top menu bar sits above the toolbar; active items run real commands, not-yet-built items are visible but disabled with a "coming soon" tooltip, and persisted-mode-only items are locked in try mode.
What it does
A top menu bar sits above the toolbar, organized exactly like Google Sheets: File · Edit · View · Insert · Format · Data · Help. Every item is visible — nothing is hidden — but only items backed by a real, already-shipped command are clickable:
- 🟢 Active — wired to the same seam the toolbar/keyboard already use (
run/apply/applyBorders) or a thin, purely client-side action (New, Download, Full screen, Show gridlines/formula bar, and — once the active sheet has one — Show chart). The three View > Show toggles persist per browser: unchecking one and reloading leaves it unchecked, and a first-time visitor with nothing stored gets gridlines and the formula bar ON. Sheets is reported to store its ownShow gridlinesin the document rather than per user — unverified by this repo; the chart-insert feature's own note on browser-local preferences versus document state covers the same distinction. - ◻️ Disabled ("coming soon") — the item renders, greyed, with a tooltip explaining it's not built yet. Clicking it does nothing.
- 🔒 Locked ("requires a saved account") — Version history, Share, and Chart are gated on persisted/identified storage, which Studio doesn't have yet; they're disabled the same way, with a different tooltip.
File absorbs the old standalone "Save, load, export" toolbar button and its Import rows — there's exactly one home for those actions now.
Try it
Verified behavior
Matches Google Sheets: Google Sheets' real top menu bar is File · Edit · View · Insert · Format · Data · Tools · Extensions · Help, in that left-to-right order, each opening a dropdown of grouped commands (separators between groups, greyed rows for unavailable commands, a lock/cloud glyph on account-gated rows). Studio's menu bar matches that same relative order and grouping for the SEVEN menus this feature scopes in (Tools and Extensions are out of scope — Studio has no add-ons/macros surface yet). Within each menu, items are grouped exactly as Sheets groups them (e.g. Undo/Redo, then Cut/Copy/Paste, then Delete values/rows/columns, then Clear formatting in Edit), separated by hairlines. A command Sheets shows greyed-out (e.g. "Merge cells" with nothing merge-able selected) still LOOKS like a menu item with a tooltip on hover explaining why it's unavailable — never hidden — which is the same visible-roadmap pattern this feature uses for not-yet-built commands. View ▸ Full screen hides Sheets' own title/menu row, toolbar, and sheet tabs in place — but NOT its name-box/formula-bar row, which stays visible — leaving the grid plus that one row; it is NOT the browser's native fullscreen API. A single Escape restores everything at once.
All 7 menus render in Google-Sheets order and grouping
Given
When I click A1
Then
[data-testid="menu-bar"]is visible containing "FileEditViewInsertFormatDataHelp"
Clicking an active item (Edit > Undo) invokes the real existing command
Given
- A1 =
10
When I type 99 into A1, then click menu item edit.undo
Then
- A1 shows
10
Clicking Insert > Function starts a real formula edit AND immediately opens the function picker — no typing required first
Given
When I click A1, then click menu item insert.function
Then
[data-slot="formula-autocomplete"]is visible
Insert > Function's picker still hands off to the SAME prefix-filtered autocomplete once the user starts typing — no regression to manual "=" entry
Given
When I click A1, then click menu item insert.function, then press s, then press u
Then
[data-slot="formula-autocomplete"]is visible containing "SUM"
A disabled item (Data > Split text to columns) is visibly disabled and invokes nothing
Given
- A1 =
10
When I click menu item data.splitToColumns
Then
- A1 shows
10 [data-menu-item="data.splitToColumns"]is visible
Clicking Format > Conditional formatting opens the rules dialog
Given
When I click menu item format.conditionalFormatting
Then
[data-testid="conditional-format-dialog"]is visible
Clicking Format > Merge cells merges the selection, through the SAME confirm-gated seam the toolbar's merge control uses
Given
- A1 =
Anchor
When I click A1, then press Shift+ArrowRight, then click menu item format.mergeCells, then click B1
Then
- the active cell is A1
Clicking Edit > Clear formatting clears formatting without touching the value
Given
- A1 =
hello
When I click A1, then press Control+b, then click menu item edit.clearFormatting
Then
- A1 shows
hello - A1 is bold=false
Clicking Help > Keyboard shortcuts opens the shortcuts panel (a chrome-only action, not a registry command)
Given
When I click menu item help.shortcuts
Then
[data-testid="shortcuts-panel"]is visible
A submenu leaf (Format > Text > Underline) is reachable and runs its real command
Given
- A1 =
hello
When I click A1, then click menu item format.underline
Then
- A1 is underline
A submenu leaf (Format > Number > Currency) is reachable and runs its real command
Given
- A1 =
1234.5
When I click A1, then click menu item format.numberCurrency
Then
- A1 shows
1234.5 - A1 is numberFormat=currency
A checkbox item nested inside a submenu (View > Show > Show gridlines) is still reachable and clickable
Given
When I click menu item view.gridlines
Then
[data-menu-item="view.gridlines"]is visible
Hiding the formula bar survives a reload — a View > Show choice is a stored preference, not session state
Given
When I click menu item view.formulaBar, then save, reload the page, and load the workbook back
Then
[data-testid="menu-bar"]is visible[data-testid="formula-input"]is hidden
A first load with nothing stored shows the formula bar — a missing preference never reads as hidden
Given
When I save, reload the page, and load the workbook back
Then
[data-testid="formula-input"]is visible
View > Full screen hides the menu bar itself
Given
When I click menu item view.fullScreen
Then
[data-testid="menu-bar"]is hidden[data-testid="full-screen-banner"]is visible
Escape exits full screen and restores the menu bar
Given
When I click menu item view.fullScreen, then press Escape
Then
[data-testid="menu-bar"]is visible[data-testid="full-screen-banner"]is hidden