Skip to content

Apply BitMenuButton improvements (#12701)#12702

Merged
msynk merged 5 commits into
bitfoundation:developfrom
msynk:12701-blazorui-menubutton-improvements
Jul 20, 2026
Merged

Apply BitMenuButton improvements (#12701)#12702
msynk merged 5 commits into
bitfoundation:developfrom
msynk:12701-blazorui-menubutton-improvements

Conversation

@msynk

@msynk msynk commented Jul 19, 2026

Copy link
Copy Markdown
Member

closes #12701

Summary by CodeRabbit

  • New Features
    • Enhanced MenuButton support for separator items, link-style items (href/target), per-item tooltips/titles, full-width layout, loading spinner states, and configurable drop direction (including split-mode chevron behavior).
    • Improved keyboard navigation and accessibility with richer ARIA wiring, focus management, and type-ahead item selection.
  • Documentation
    • Updated MenuButton demos and guidance, adding WAI-ARIA keyboard pattern details and new example sections (separators, links, full-width, loading, title, drop direction, RTL).
  • Tests
    • Added validation for link/separator rendering, loading vs. icon output, full-width styling, title attributes, and ARIA correctness.

@msynk
msynk requested review from mhrastegari and yasmoradi July 19, 2026 17:33
@coderabbitai

coderabbitai Bot commented Jul 19, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@msynk, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 28 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 15db248b-8d12-4cd1-bb78-7d20014b7875

📥 Commits

Reviewing files that changed from the base of the PR and between 5b05193 and c89163c.

📒 Files selected for processing (22)
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.scss
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonClassStyles.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonItem.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonNameSelectors.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonOption.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/_BitMenuButtonItem.razor
  • src/BlazorUI/Bit.BlazorUI/Extensions/JsInterop/MenuButtonsJsRuntimeExtensions.cs
  • src/BlazorUI/Bit.BlazorUI/Scripts/MenuButtons.ts
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/BitMenuButtonDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/BitMenuButtonDemo.razor.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/Operation.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonCustomDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonCustomDemo.razor.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonCustomDemo.razor.samples.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonItemDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonItemDemo.razor.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonItemDemo.razor.samples.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonOptionDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonOptionDemo.razor.cs
  • src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Buttons/MenuButton/BitMenuButtonTests.cs

Walkthrough

BitMenuButton adds link and separator items, loading and full-width states, configurable drop direction, ARIA semantics, keyboard navigation, focus management, JavaScript lifecycle handling, expanded demos, and automated coverage.

Changes

MenuButton improvements

Layer / File(s) Summary
Menu item contracts and rendering
src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/*
Items and options support links, separators, targets, titles, shared content rendering, spinner styling, and full-width layout.
Interaction and accessibility
src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/*, src/BlazorUI/Bit.BlazorUI/Scripts/MenuButtons.ts, src/BlazorUI/Bit.BlazorUI/Extensions/JsInterop/*
ARIA attributes, loading behavior, drop direction, keyboard navigation, focus movement, and JavaScript setup/disposal are wired into the component.
Validation
src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Buttons/MenuButton/*
Tests cover separators, links, ARIA attributes, full-width rendering, loading indicators, and titles.
Demos and documentation
src/BlazorUI/Demo/Client/.../MenuButton/*
Demo metadata, descriptions, sample data, and examples are expanded for the new menu button capabilities.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant BitMenuButton
  participant MenuButtons
  participant Callout
  User->>BitMenuButton: Press keyboard navigation key
  BitMenuButton->>MenuButtons: Request item focus
  MenuButtons->>Callout: Select enabled item
  Callout-->>User: Move focus to item
  BitMenuButton-->>User: Restore trigger focus after close
Loading

Suggested reviewers: yasmoradi, mhrastegari

Poem

A rabbit taps keys with a hop and a cheer,
New links and separators now appear.
A spinner twirls, the menu knows where,
ARIA whispers travel through air.
Full width blooms beneath the moon—
“Review this burrow soon!” 🐇

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately summarizes the BitMenuButton improvements in this PR.
Linked Issues check ✅ Passed The PR adds the requested BitMenuButton features, demo examples, and description updates from issue #12701.
Out of Scope Changes check ✅ Passed The changes stay focused on BitMenuButton features, demos, docs, accessibility, and tests tied to the issue scope.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/_BitMenuButtonItem.razor`:
- Around line 45-54: Update the anchor rendered by _BitMenuButtonItem to add
rel="noopener noreferrer" whenever MenuButton.GetTarget(Item) resolves to
"_blank"; leave rel unset for other targets and preserve the existing click,
URL, and styling behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: dd9d495a-d3cb-4835-81e3-e60b759f9026

📥 Commits

Reviewing files that changed from the base of the PR and between 7bb7bb0 and 1712025.

📒 Files selected for processing (22)
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.scss
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonClassStyles.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonItem.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonNameSelectors.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonOption.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/_BitMenuButtonItem.razor
  • src/BlazorUI/Bit.BlazorUI/Extensions/JsInterop/MenuButtonsJsRuntimeExtensions.cs
  • src/BlazorUI/Bit.BlazorUI/Scripts/MenuButtons.ts
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/BitMenuButtonDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/BitMenuButtonDemo.razor.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/Operation.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonCustomDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonCustomDemo.razor.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonCustomDemo.razor.samples.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonItemDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonItemDemo.razor.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonItemDemo.razor.samples.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonOptionDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonOptionDemo.razor.cs
  • src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Buttons/MenuButton/BitMenuButtonTests.cs

@msynk

msynk commented Jul 20, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai full-review

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

@msynk: Starting a full review of the complete PR, including the BitMenuButton implementation, accessibility/keyboard behavior, JS interop, demos, and tests.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor`:
- Around line 92-101: Update the split-mode menu labeling logic in BitMenuButton
so the ul’s aria-labelledby references the operator button when
ChevronDownAriaLabel is unset, and uses the chevron button only when that label
provides an accessible name. Preserve the existing chevron target when an
explicit ChevronDownAriaLabel is supplied.

In
`@src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor.cs`:
- Around line 884-897: Update OpenCallout to return immediately when IsLoading
is true, before changing focus state or calling AssignIsOpen. Keep the existing
opening and focus behavior unchanged when loading is false, so both
keyboard-triggered and split-chevron invocations respect the click-disable
contract.

In `@src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.scss`:
- Around line 34-50: Update the border-top-color value in the .bit-mnb-spn rule
from currentColor to the lowercase currentcolor keyword to satisfy the project's
stylelint value-keyword-case rule.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: c8db6ba0-10c0-476b-83a3-9a682ca3ac3c

📥 Commits

Reviewing files that changed from the base of the PR and between 7bb7bb0 and 4302724.

📒 Files selected for processing (22)
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.scss
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonClassStyles.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonItem.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonNameSelectors.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonOption.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/_BitMenuButtonItem.razor
  • src/BlazorUI/Bit.BlazorUI/Extensions/JsInterop/MenuButtonsJsRuntimeExtensions.cs
  • src/BlazorUI/Bit.BlazorUI/Scripts/MenuButtons.ts
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/BitMenuButtonDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/BitMenuButtonDemo.razor.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/Operation.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonCustomDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonCustomDemo.razor.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonCustomDemo.razor.samples.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonItemDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonItemDemo.razor.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonItemDemo.razor.samples.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonOptionDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonOptionDemo.razor.cs
  • src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Buttons/MenuButton/BitMenuButtonTests.cs

Comment thread src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor.cs Outdated
@msynk

msynk commented Jul 20, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai full-review

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

@msynk: Starting a fresh full review of the complete PR, including BitMenuButton behavior, accessibility and keyboard navigation, JavaScript interop, demos, and tests.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Buttons/MenuButton/BitMenuButtonTests.cs (1)

404-427: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Consider asserting rel for the target="_blank" link item.

The implementation now sets rel="noopener noreferrer" when Target is "_blank" (fixing a past security review comment); adding an assertion here would lock in that regression protection.

✅ Proposed addition
         Assert.AreEqual("menuitem", anchor.GetAttribute("role"));
+        Assert.AreEqual("noopener noreferrer", anchor.GetAttribute("rel"));
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Buttons/MenuButton/BitMenuButtonTests.cs`
around lines 404 - 427, Add an assertion in BitMenuButtonShouldRenderLinkItems
for the rendered anchor’s rel attribute, verifying that a Target of "_blank"
produces "noopener noreferrer" while preserving the existing link and button
assertions.
src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor.cs (1)

405-416: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Consider guarding the first-render JS setup call against JSDisconnectedException.

OnAfterRenderAsync calls _js.BitMenuButtonsSetup(...) without a try/catch, whereas DisposeAsync explicitly ignores JSDisconnectedException for the equivalent teardown call. If the circuit disconnects right around first render, this call could throw unhandled.

🔧 Proposed fix
         if (firstRender)
         {
             // Prevents the default behavior (scrolling) of the navigation keys handled by the
             // keydown handlers, since Blazor cannot conditionally preventDefault per key.
-            await _js.BitMenuButtonsSetup(_Id, _calloutId);
+            try
+            {
+                await _js.BitMenuButtonsSetup(_Id, _calloutId);
+            }
+            catch (JSDisconnectedException) { } // we can ignore this exception here
         }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor.cs`
around lines 405 - 416, Guard the first-render _js.BitMenuButtonsSetup call in
OnAfterRenderAsync with a JSDisconnectedException catch, matching the existing
disposal behavior. Ignore the disconnection exception while preserving normal
propagation of other exceptions and leaving the base render call unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor.cs`:
- Around line 806-833: Update HandleOnTriggerKeyDown so ArrowDown/ArrowUp calls
FocusItem only after OpenCallout successfully opens the callout. Make
OpenCallout expose whether it opened, or otherwise verify the resulting open
state, while preserving the existing first/last item selection; ensure early
returns from its IsLoading guard or failed AssignIsOpen prevent focus.

---

Nitpick comments:
In
`@src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor.cs`:
- Around line 405-416: Guard the first-render _js.BitMenuButtonsSetup call in
OnAfterRenderAsync with a JSDisconnectedException catch, matching the existing
disposal behavior. Ignore the disconnection exception while preserving normal
propagation of other exceptions and leaving the base render call unchanged.

In
`@src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Buttons/MenuButton/BitMenuButtonTests.cs`:
- Around line 404-427: Add an assertion in BitMenuButtonShouldRenderLinkItems
for the rendered anchor’s rel attribute, verifying that a Target of "_blank"
produces "noopener noreferrer" while preserving the existing link and button
assertions.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 1af88e5a-9e0e-4049-b7ae-82b5559700df

📥 Commits

Reviewing files that changed from the base of the PR and between 7bb7bb0 and b4117da.

📒 Files selected for processing (22)
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.razor.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButton.scss
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonClassStyles.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonItem.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonNameSelectors.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/BitMenuButtonOption.cs
  • src/BlazorUI/Bit.BlazorUI/Components/Buttons/MenuButton/_BitMenuButtonItem.razor
  • src/BlazorUI/Bit.BlazorUI/Extensions/JsInterop/MenuButtonsJsRuntimeExtensions.cs
  • src/BlazorUI/Bit.BlazorUI/Scripts/MenuButtons.ts
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/BitMenuButtonDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/BitMenuButtonDemo.razor.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/Operation.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonCustomDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonCustomDemo.razor.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonCustomDemo.razor.samples.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonItemDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonItemDemo.razor.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonItemDemo.razor.samples.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonOptionDemo.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Buttons/MenuButton/_BitMenuButtonOptionDemo.razor.cs
  • src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Buttons/MenuButton/BitMenuButtonTests.cs

…into 12701-blazorui-menubutton-improvements
@msynk

msynk commented Jul 20, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai full-review

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

@msynk: Starting a fresh full review of the complete PR, including BitMenuButton behavior, accessibility and keyboard interaction, JavaScript interop, demos, and test coverage.

✅ Action performed

Full review finished.


Your plan includes PR reviews subject to rate limits. More reviews will be available in 28 minutes.

@msynk
msynk merged commit d18139d into bitfoundation:develop Jul 20, 2026
3 checks passed
@msynk
msynk deleted the 12701-blazorui-menubutton-improvements branch July 20, 2026 07:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The BitMenuButton improvements

1 participant