fix(BModal): prevent focus trap error when no tabbable elements exist #2864
+35
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
When using multiple BModal components in a stacked configuration, a console error would occur under specific conditions:
This would result in the error:
The error occurred because when the second modal closed, the focus trap tried to return focus to the first modal, but it had no tabbable elements available.
Root Cause
In
useActivatedFocusTrap.ts, thefallbackFocusoption was being set to a static value at initialization time:Since
fallbackFocus.ref.valuewasnullduring initialization, the focus trap had no valid fallback element when attempting to deactivate.Solution
Changed
fallbackFocusfrom a static value to a dynamic function that resolves at runtime:This ensures that when the focus trap deactivates, it can always find a valid fallback element - either the intended fallback focus element or
document.bodyas a last resort.Testing
Screenshots
Before fix - Error scenario:

After fix - No errors:

The fix is minimal and surgical, addressing only the specific edge case without affecting any existing functionality.
Closes #[issue_number]
Original prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.