Skip to content

feat: edge-menu, a tool dock on a screen edge for MAUI and Avalonia - #35

Merged
Shewart merged 1 commit into
feat/bottom-navfrom
feat/edge-menu
Oct 16, 2026
Merged

Shewart merged 1 commit into
feat/bottom-navfrom
feat/edge-menu

Conversation

@Shewart

@Shewart Shewart commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

Description

edge-menu: a tool dock on a screen edge for MAUI and Avalonia (EdgeMenu + EdgeMenuItem, shellui-native add edge-menu).

Stacked on the bottom-nav PR (base feat/bottom-nav); this PR adds one commit.

  • A small handle on the screen edge slides out a rail of icon tiles.
  • Side (Right / Left), Position along the edge, Variant Default (popover colors) or Solid (primary), Dim, CloseOnSelect, SelectedValue (optional), IsOpen.
  • Placed over the page: only the handle and the open rail take input, so the page stays usable while it is closed.
  • A tap outside, Escape (back on Android), the handle or a tile closes it.
  • IsOpenChanged reports every open and close; SelectedValueChanged reports user input only; EdgeMenuItem.Clicked on every press.
  • Avalonia: the handle and tiles are tab stops, Up / Down move between tiles, focus goes to the first tile on open and back to the handle on close.
  • Also: demo sections on both platforms, the CLI template and registry entry, docs/COMPONENTS.md and the roadmap, headless tests.

Type of Change

  • New component (adding a new UI component)

Checklist

  • My code follows the project's style guidelines
  • I have performed a self-review of my code
  • I have added comments where necessary
  • I have updated the documentation (if applicable)
  • My changes generate no new warnings
  • I have tested on at least one platform (MAUI/WinUI/WPF)

Testing Done

  • Solution builds with 0 warnings; 1484 main tests and 168 headless tests pass; format clean.
  • Headless tests: the handle opens it on both sides; a tile click raises Clicked and SelectedValueChanged once and closes it; values set from code raise nothing; a click outside and Escape close it; a button under the closed menu stays clickable.
  • add edge-menu builds 0/0 in a fresh Avalonia app; add edge-menu bottom-nav in a fresh dotnet new maui app (Android and Windows).
  • Checked in light and dark: Avalonia (headless renders) and the MAUI demo on Windows with both menus open.

EdgeMenu and EdgeMenuItem: a small handle on a screen edge slides out a
rail of icon tiles, for tools and shortcuts that shouldn't take a tab in
the bottom nav. Native only (ShellUI for Blazor has none).

- Side (Right / Left) and Position along the edge; Variant Default
  (popover colors) or Solid (primary, like a dark dock); Dim darkens the
  page while open
- Placed over the page: only the handle and the open rail take input, so
  the page stays usable while it is closed
- A tap outside, Escape (back on Android), the handle or a tile closes
  it; CloseOnSelect, SelectedValue (optional highlight)
- IsOpenChanged reports every open and close; SelectedValueChanged
  reports user input only; EdgeMenuItem.Clicked on every press
- Slide and fade in about 220 ms, the chevron flips, a small press-in
- Avalonia: handle and tiles are tab stops, Up / Down between tiles,
  focus moves to the first tile on open and back to the handle on close

Demo sections on both platforms, the edge-menu CLI template, docs, and
headless tests (pick reported once, close on outside click and Escape,
page clickable while closed).
@github-actions github-actions Bot added documentation Improvements or additions to documentation templates examples labels Oct 16, 2026
@Shewart
Shewart marked this pull request as ready for review October 16, 2026 17:34
@Shewart
Shewart merged commit 5c9247d into feat/bottom-nav Oct 16, 2026
2 checks passed
@Shewart Shewart mentioned this pull request Oct 16, 2026
8 tasks done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation examples templates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant