diff --git a/src/ux-components/intercept-overlay/intercept-overlay.spec.js b/src/ux-components/intercept-overlay/intercept-overlay.spec.js
index f3854a47a..0a282b93d 100644
--- a/src/ux-components/intercept-overlay/intercept-overlay.spec.js
+++ b/src/ux-components/intercept-overlay/intercept-overlay.spec.js
@@ -14,4 +14,33 @@ describe("intercept-overlay.vue", () => {
expect(wrapper.text()).toBe("");
wrapper.unmount();
});
+
+ describe("keyboard interception", () => {
+ test("adds a capturing keydown listener on mount and removes it on unmount", () => {
+ const addSpy = jest.spyOn(document, "addEventListener");
+ const removeSpy = jest.spyOn(document, "removeEventListener");
+
+ const wrapper = shallowMount(interceptOverlay);
+ expect(addSpy).toHaveBeenCalledWith("keydown", expect.any(Function), true);
+
+ const [, handler] = addSpy.mock.calls.find(
+ ([type, , capture]) => type === "keydown" && capture === true
+ );
+
+ wrapper.unmount();
+ expect(removeSpy).toHaveBeenCalledWith("keydown", handler, true);
+
+ addSpy.mockRestore();
+ removeSpy.mockRestore();
+ });
+
+ test("blockKey prevents default and stops immediate propagation", () => {
+ const wrapper = shallowMount(interceptOverlay);
+ const event = { preventDefault: jest.fn(), stopImmediatePropagation: jest.fn() };
+ wrapper.vm.blockKey(event);
+ expect(event.preventDefault).toHaveBeenCalled();
+ expect(event.stopImmediatePropagation).toHaveBeenCalled();
+ wrapper.unmount();
+ });
+ });
});
diff --git a/src/ux-components/intercept-overlay/intercept-overlay.vue b/src/ux-components/intercept-overlay/intercept-overlay.vue
index 1a101589a..1269ccb9d 100644
--- a/src/ux-components/intercept-overlay/intercept-overlay.vue
+++ b/src/ux-components/intercept-overlay/intercept-overlay.vue
@@ -1,10 +1,22 @@
-
+