Dungeon KeybindingConfigHUD.handleKeyDown only captures keys while rebindingActionId is set. On a conflicting rebind the HUD clears that id, stores conflictActionId, and shows Swap/Cancel — but handleKeyDown then returns false for every key, including Escape.
The parent close handler can therefore dismiss the whole keybinding modal while the conflict dialog is still on screen. Space-game KeybindingConfigHUD swallows keys when its conflict dialog is visible; dungeon does not.
Repro (unit): enter rebind → onRebind returns { success: false, conflict } → handleKeyDown(Escape) is false.
Related cleanup: dismissing the dialog via Swap/Cancel leaves conflictSwapBtn / conflictCancelBtn pointing at detached meshes (parent === null). Harmless today because handleClick is gated on conflictActionId, but the pointers are only nulled in dispose().
Dungeon `KeybindingConfigHUD.handleKeyDown` only captures keys while `rebindingActionId` is set. On a conflicting rebind the HUD clears that id, stores `conflictActionId`, and shows Swap/Cancel — but `handleKeyDown` then returns `false` for every key, including Escape.
The parent close handler can therefore dismiss the whole keybinding modal while the conflict dialog is still on screen. Space-game `KeybindingConfigHUD` swallows keys when its conflict dialog is visible; dungeon does not.
Repro (unit): enter rebind → `onRebind` returns `{ success: false, conflict }` → `handleKeyDown(Escape)` is `false`.
Related cleanup: dismissing the dialog via Swap/Cancel leaves `conflictSwapBtn` / `conflictCancelBtn` pointing at detached meshes (`parent === null`). Harmless today because `handleClick` is gated on `conflictActionId`, but the pointers are only nulled in `dispose()`.
File: `projects/spikersoft/src/app/_components/_games/dungeon-crawler/hud/keybinding-config-hud.ts` (`handleKeyDown` / `handleConflictClick`).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Dungeon
KeybindingConfigHUD.handleKeyDownonly captures keys whilerebindingActionIdis set. On a conflicting rebind the HUD clears that id, storesconflictActionId, and shows Swap/Cancel — buthandleKeyDownthen returnsfalsefor every key, including Escape.The parent close handler can therefore dismiss the whole keybinding modal while the conflict dialog is still on screen. Space-game
KeybindingConfigHUDswallows keys when its conflict dialog is visible; dungeon does not.Repro (unit): enter rebind →
onRebindreturns{ success: false, conflict }→handleKeyDown(Escape)isfalse.Related cleanup: dismissing the dialog via Swap/Cancel leaves
conflictSwapBtn/conflictCancelBtnpointing at detached meshes (parent === null). Harmless today becausehandleClickis gated onconflictActionId, but the pointers are only nulled indispose().File:
projects/spikersoft/src/app/_components/_games/dungeon-crawler/hud/keybinding-config-hud.ts(handleKeyDown/handleConflictClick).Fixed in
spikersoft-angularPR #823 (a0f0ccd9). Closing.