diff --git a/packages/hoppscotch-common/src/helpers/keybindings.ts b/packages/hoppscotch-common/src/helpers/keybindings.ts index b06901aa..9a0528d6 100644 --- a/packages/hoppscotch-common/src/helpers/keybindings.ts +++ b/packages/hoppscotch-common/src/helpers/keybindings.ts @@ -1,7 +1,7 @@ import { onBeforeUnmount, onMounted } from "vue" import { HoppActionWithOptionalArgs, invokeAction } from "./actions" import { isAppleDevice } from "./platformutils" -import { isDOMElement, isTypableElement } from "./utils/dom" +import { isCodeMirrorEditor, isDOMElement, isTypableElement } from "./utils/dom" import { getKernelMode } from "@hoppscotch/kernel" import { listen } from "@tauri-apps/api/event" @@ -193,6 +193,15 @@ function generateKeybindingString(ev: KeyboardEvent): ShortcutKey | null { return null } + // Restrict alt+up and alt+down when the target is a codemirror editor + if ( + modifierKey === "alt" && + (key === "up" || key === "down") && + isCodeMirrorEditor(target) + ) { + return null + } + return `${modifierKey}-${key}` } diff --git a/packages/hoppscotch-common/src/helpers/utils/__tests__/dom.spec.js b/packages/hoppscotch-common/src/helpers/utils/__tests__/dom.spec.js new file mode 100644 index 00000000..8240a642 --- /dev/null +++ b/packages/hoppscotch-common/src/helpers/utils/__tests__/dom.spec.js @@ -0,0 +1,77 @@ +import { describe, expect, test } from "vitest" +import { isDOMElement, isTypableElement, isCodeMirrorEditor } from "../dom" + +describe("isDOMElement", () => { + test("returns true for valid HTMLElement", () => { + const div = document.createElement("div") + expect(isDOMElement(div)).toBe(true) + }) + + test("returns false for non-HTMLElement inputs", () => { + expect(isDOMElement(null)).toBe(false) + expect(isDOMElement(undefined)).toBe(false) + expect(isDOMElement("div")).toBe(false) + expect(isDOMElement(123)).toBe(false) + expect(isDOMElement({})).toBe(false) + }) +}) + +describe("isTypableElement", () => { + test("returns true for enabled ", () => { + const input = document.createElement("input") + expect(isTypableElement(input)).toBe(true) + }) + + test("returns false for disabled ", () => { + const input = document.createElement("input") + input.disabled = true + expect(isTypableElement(input)).toBe(false) + }) + + test("returns true for enabled