Repository navigation
Conversation
WalkthroughSurface keydown events now propagate to ancestor Blazor handlers. Nested surfaces report Escape ownership so outer surfaces can ignore an Escape handled inside them. DataGrid and Swiper also treat nested surfaces as key consumers. ChangesNested keyboard and Escape handling
Priority: ➖ Normal Estimated code review effort: 4 (Complex) | ~50 minutes Change: Bug fix · Severity of issue fixed: Medium Sequence Diagram(s)sequenceDiagram
participant KeyboardEvent
participant Utils
participant InnerSurface
participant OuterSurface
participant PageHandler
KeyboardEvent->>Utils: Identify the Escape owner
Utils->>InnerSurface: Send the nested-surface verdict
Utils->>OuterSurface: Send the foreign Escape verdict
InnerSurface->>InnerSurface: Consume verdict and handle Escape
OuterSurface->>OuterSurface: Consume verdict and skip dismissal
KeyboardEvent->>PageHandler: Propagate keydown
Merge Risk: ⚪ Minimal · up to The stated keyboard-propagation acceptance path is exercised, and no material merge blocker is established. Merge after normal checks. Pre-merge checks |
|
|
@coderabbitai full-review |
…into msynk/13565-blazorui-overlay-prevents-keydown-events
|
✅ Action performedFull review finished. |
There was a problem hiding this comment.
🔇 Additional comments (24)
src/BlazorUI/Bit.BlazorUI/Scripts/Utils.ts (1)
1096-1114: LGTM!src/BlazorUI/Bit.BlazorUI.Extras/Scripts/BitBlazorUI.d.ts (1)
12-12: LGTM!src/BlazorUI/Bit.BlazorUI/Components/Lists/Swiper/BitSwiper.ts (1)
749-758: LGTM!src/BlazorUI/Bit.BlazorUI/Utils/BitEscapeVerdict.cs (1)
1-29: LGTM!src/BlazorUI/Bit.BlazorUI/Utils/BitEscapeClaimWatch.cs (1)
10-35: LGTM!src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor.cs (1)
1422-1429: LGTM!src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Dialog/BitDialog.razor (1)
16-18: LGTM!src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Modal/BitModal.razor (1)
9-25: LGTM!src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Panel/BitPanel.razor (1)
6-21: LGTM!src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Callout/BitCallout.razor (1)
6-19: LGTM!src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Callout/BitCallout.razor.cs (1)
898-923: LGTM!src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Modal/BitModal.razor.cs (1)
1038-1063: LGTM!src/BlazorUI/Bit.BlazorUI/Components/Surfaces/Panel/BitPanel.razor.cs (1)
891-891: LGTM!src/BlazorUI/Bit.BlazorUI/Extensions/JsInterop/CalloutsJsRuntimeExtensions.cs (1)
78-119: LGTM!src/BlazorUI/Bit.BlazorUI/Scripts/Callouts.ts (1)
189-195: LGTM!src/BlazorUI/CLAUDE.md (1)
95-105: LGTM!src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Buttons/MenuButton/BitMenuButtonTests.cs (1)
1750-1750: LGTM!src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Extras/PhoneInput/BitPhoneInputTests.cs (1)
899-900: LGTM!Also applies to: 920-920, 969-969, 2673-2673
src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Inputs/CircularTimePicker/BitCircularTimePickerTests.cs (1)
3196-3196: LGTM!src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Inputs/DatePicker/BitDatePickerTests.cs (1)
4866-4866: LGTM!src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Inputs/DateRangePicker/BitDateRangePickerTests.cs (1)
4494-4494: LGTM!src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Inputs/Dropdown/BitDropdownTests.cs (1)
1502-1502: LGTM!src/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Inputs/SearchBox/BitSearchBoxTests.cs (1)
3891-3891: LGTM!src/BlazorUI/Tests/Bit.BlazorUI.Tests/Utils/BitSurfaceKeyPropagationContractTests.cs-92-93 (1)
92-93: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
⚠️ Unverified finding
Verification ran but could not confirm this finding. It is shown for review, not as a verified issue.Dispatch the shortcut from inside each surface.
PressInsidesends Ctrl+S to the selected element itself. The callout case selects.bit-clo, not its anchor button or opened content. These assertions can pass without establishing the requested propagation from inside each surface. Target a descendant control in each case, and check the opened callout content separately.
ℹ️ Review info
⚙️ Run configuration
- Configuration used: Repository UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
48230ddc-8103-4567-a09d-b36145885442
📒 Files selected for processing (36)
src/BlazorUI/Bit.BlazorUI.Extras/Components/DataGrid/BitDataGrid.razor.cssrc/BlazorUI/Bit.BlazorUI.Extras/Components/DataGrid/BitDataGrid.tssrc/BlazorUI/Bit.BlazorUI.Extras/Components/DataGrid/BitDataGridCell.razorsrc/BlazorUI/Bit.BlazorUI.Extras/Components/DataGrid/BitDataGridRow.razorsrc/BlazorUI/Bit.BlazorUI.Extras/Scripts/BitBlazorUI.d.tssrc/BlazorUI/Bit.BlazorUI/Components/Lists/Swiper/BitSwiper.tssrc/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor.cssrc/BlazorUI/Bit.BlazorUI/Components/Surfaces/Callout/BitCallout.razorsrc/BlazorUI/Bit.BlazorUI/Components/Surfaces/Callout/BitCallout.razor.cssrc/BlazorUI/Bit.BlazorUI/Components/Surfaces/Dialog/BitDialog.razorsrc/BlazorUI/Bit.BlazorUI/Components/Surfaces/Modal/BitModal.razorsrc/BlazorUI/Bit.BlazorUI/Components/Surfaces/Modal/BitModal.razor.cssrc/BlazorUI/Bit.BlazorUI/Components/Surfaces/Panel/BitPanel.razorsrc/BlazorUI/Bit.BlazorUI/Components/Surfaces/Panel/BitPanel.razor.cssrc/BlazorUI/Bit.BlazorUI/Extensions/JsInterop/CalloutsJsRuntimeExtensions.cssrc/BlazorUI/Bit.BlazorUI/Scripts/Callouts.tssrc/BlazorUI/Bit.BlazorUI/Scripts/Utils.tssrc/BlazorUI/Bit.BlazorUI/Utils/BitEscapeClaimWatch.cssrc/BlazorUI/Bit.BlazorUI/Utils/BitEscapeVerdict.cssrc/BlazorUI/CLAUDE.mdsrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Buttons/MenuButton/BitMenuButtonTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Extras/DataGrid/BitDataGridTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Extras/PhoneInput/BitPhoneInputTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Inputs/CircularTimePicker/BitCircularTimePickerTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Inputs/DatePicker/BitDatePickerTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Inputs/DateRangePicker/BitDateRangePickerTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Inputs/Dropdown/BitDropdownTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Inputs/SearchBox/BitSearchBoxTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Inputs/TimePicker/BitTimePickerTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Navs/Breadcrumb/BitBreadcrumbTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Navs/DropMenu/BitDropMenuTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Surfaces/Callout/BitCalloutTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Surfaces/Modal/BitModalTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Components/Surfaces/Panel/BitPanelTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Utils/BitEscapeClaimContractTests.cssrc/BlazorUI/Tests/Bit.BlazorUI.Tests/Utils/BitSurfaceKeyPropagationContractTests.cs
Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 0 remain after this review.
closes #13565
Summary by CodeRabbit