diff --git a/packages/hoppscotch-common/locales/en.json b/packages/hoppscotch-common/locales/en.json
index 2cdc2f98..929f59b5 100644
--- a/packages/hoppscotch-common/locales/en.json
+++ b/packages/hoppscotch-common/locales/en.json
@@ -12,6 +12,7 @@
"clear_cache": "Clear Cache",
"clear_history": "Clear all History",
"clear_unpinned": "Clear Unpinned",
+ "clear_response": "Clear Response",
"close": "Close",
"confirm": "Confirm",
"connect": "Connect",
diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/AudioLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/AudioLensRenderer.vue
index 4ebc0855..d959aef8 100644
--- a/packages/hoppscotch-common/src/components/lenses/renderers/AudioLensRenderer.vue
+++ b/packages/hoppscotch-common/src/components/lenses/renderers/AudioLensRenderer.vue
@@ -6,9 +6,8 @@
-
@@ -25,7 +52,7 @@
diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/HTMLLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/HTMLLensRenderer.vue
index 86e2aea7..6e486bc0 100644
--- a/packages/hoppscotch-common/src/components/lenses/renderers/HTMLLensRenderer.vue
+++ b/packages/hoppscotch-common/src/components/lenses/renderers/HTMLLensRenderer.vue
@@ -7,9 +7,9 @@
-
()
const htmlResponse = ref
(null)
+const responseMoreActionsTippy = ref(null)
const WRAP_LINES = useNestedSetting("WRAP_LINES", "httpResponseBody")
const responseName = computed(() => {
@@ -174,6 +206,10 @@ const doTogglePreview = async () => {
const { copyIcon, copyResponse } = useCopyResponse(responseBodyText)
+const eraseResponse = () => {
+ emit("update:response", null)
+}
+
const saveAsExample = () => {
emit("save-as-example")
}
@@ -196,6 +232,7 @@ useCodemirror(
defineActionHandler("response.preview.toggle", () => doTogglePreview())
defineActionHandler("response.file.download", () => downloadResponse())
defineActionHandler("response.copy", () => copyResponse())
+defineActionHandler("response.erase", () => eraseResponse())
defineActionHandler("response.save-as-example", () => {
props.isSavable ? saveAsExample() : null
})
diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/ImageLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/ImageLensRenderer.vue
index 147957aa..5f3b0d8c 100644
--- a/packages/hoppscotch-common/src/components/lenses/renderers/ImageLensRenderer.vue
+++ b/packages/hoppscotch-common/src/components/lenses/renderers/ImageLensRenderer.vue
@@ -6,9 +6,8 @@
-
()
+
+const emit = defineEmits<{
+ (e: "update:response", val: HoppRESTRequestResponse | HoppRESTResponse): void
}>()
const imageSource = ref("")
+const responseMoreActionsTippy = ref(null)
const responseType = computed(() =>
pipe(
@@ -101,5 +137,10 @@ onMounted(() => {
reader.readAsDataURL(blob)
})
+const eraseResponse = () => {
+ emit("update:response", null)
+}
+
defineActionHandler("response.file.download", () => downloadResponse())
+defineActionHandler("response.erase", () => eraseResponse())
diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/JSONLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/JSONLensRenderer.vue
index 97a054c0..704140fa 100644
--- a/packages/hoppscotch-common/src/components/lenses/renderers/JSONLensRenderer.vue
+++ b/packages/hoppscotch-common/src/components/lenses/renderers/JSONLensRenderer.vue
@@ -59,7 +59,7 @@
@click="copyResponse"
/>
+
@@ -252,6 +258,7 @@ import IconMore from "~icons/lucide/more-horizontal"
import IconHelpCircle from "~icons/lucide/help-circle"
import IconNetwork from "~icons/lucide/network"
import IconSave from "~icons/lucide/save"
+import IconEraser from "~icons/lucide/eraser"
import * as LJSON from "lossless-json"
import * as O from "fp-ts/Option"
import * as E from "fp-ts/Either"
@@ -458,6 +465,11 @@ const saveAsExample = () => {
}
const { copyIcon, copyResponse } = useCopyResponse(jsonBodyText)
+
+const eraseResponse = () => {
+ emit("update:response", null)
+}
+
const { downloadIcon, downloadResponse } = useDownloadResponse(
"application/json",
jsonBodyText,
@@ -520,6 +532,7 @@ const toggleFilterState = () => {
defineActionHandler("response.file.download", () => downloadResponse())
defineActionHandler("response.copy", () => copyResponse())
+defineActionHandler("response.erase", () => eraseResponse())
defineActionHandler("response.save-as-example", () => {
props.isSavable ? saveAsExample() : null
})
diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/PDFLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/PDFLensRenderer.vue
index 9175d353..ee6db97b 100644
--- a/packages/hoppscotch-common/src/components/lenses/renderers/PDFLensRenderer.vue
+++ b/packages/hoppscotch-common/src/components/lenses/renderers/PDFLensRenderer.vue
@@ -6,9 +6,8 @@
-
diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/RawLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/RawLensRenderer.vue
index 154c98f3..4decc253 100644
--- a/packages/hoppscotch-common/src/components/lenses/renderers/RawLensRenderer.vue
+++ b/packages/hoppscotch-common/src/components/lenses/renderers/RawLensRenderer.vue
@@ -7,9 +7,8 @@
-
import IconWrapText from "~icons/lucide/wrap-text"
import IconSave from "~icons/lucide/save"
+import IconEraser from "~icons/lucide/eraser"
+import IconMore from "~icons/lucide/more-horizontal"
import { ref, computed, reactive } from "vue"
import { flow, pipe } from "fp-ts/function"
import * as S from "fp-ts/string"
@@ -139,6 +166,10 @@ const saveAsExample = () => {
emit("save-as-example")
}
+const eraseResponse = () => {
+ emit("update:response", null)
+}
+
const responseType = computed(() =>
pipe(
props.response,
@@ -178,6 +209,7 @@ const { copyIcon, copyResponse } = useCopyResponse(responseBodyText)
const rawResponse = ref
(null)
const WRAP_LINES = useNestedSetting("WRAP_LINES", "httpResponseBody")
+const responseMoreActionsTippy = ref(null)
useCodemirror(
rawResponse,
@@ -202,4 +234,5 @@ useCodemirror(
defineActionHandler("response.file.download", () => downloadResponse())
defineActionHandler("response.copy", () => copyResponse())
+defineActionHandler("response.erase", () => eraseResponse())
diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/VideoLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/VideoLensRenderer.vue
index 45516541..09f627b2 100644
--- a/packages/hoppscotch-common/src/components/lenses/renderers/VideoLensRenderer.vue
+++ b/packages/hoppscotch-common/src/components/lenses/renderers/VideoLensRenderer.vue
@@ -6,9 +6,8 @@
-
@@ -25,7 +52,7 @@
diff --git a/packages/hoppscotch-common/src/components/lenses/renderers/XMLLensRenderer.vue b/packages/hoppscotch-common/src/components/lenses/renderers/XMLLensRenderer.vue
index 4305c9e7..db95a7dd 100644
--- a/packages/hoppscotch-common/src/components/lenses/renderers/XMLLensRenderer.vue
+++ b/packages/hoppscotch-common/src/components/lenses/renderers/XMLLensRenderer.vue
@@ -6,9 +6,8 @@
-
@@ -61,6 +86,8 @@
diff --git a/packages/hoppscotch-common/src/helpers/actions.ts b/packages/hoppscotch-common/src/helpers/actions.ts
index ceeba751..e8579aa2 100644
--- a/packages/hoppscotch-common/src/helpers/actions.ts
+++ b/packages/hoppscotch-common/src/helpers/actions.ts
@@ -70,6 +70,7 @@ export type HoppAction =
| "response.schema.toggle" // Toggle response data schema
| "response.file.download" // Download response as file
| "response.copy" // Copy response to clipboard
+ | "response.erase" // Erase/clear response
| "response.save" // Save response
| "response.save-as-example" // Save response as example
| "modals.login.toggle" // Login to Hoppscotch
diff --git a/packages/hoppscotch-common/src/helpers/keybindings.ts b/packages/hoppscotch-common/src/helpers/keybindings.ts
index 28b9d141..eab991b3 100644
--- a/packages/hoppscotch-common/src/helpers/keybindings.ts
+++ b/packages/hoppscotch-common/src/helpers/keybindings.ts
@@ -37,7 +37,7 @@ type Key =
| "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t"
| "u" | "v" | "w" | "x" | "y" | "z" | "0" | "1" | "2" | "3"
| "4" | "5" | "6" | "7" | "8" | "9" | "up" | "down" | "left"
- | "right" | "/" | "?" | "." | "enter" | "tab"
+ | "right" | "/" | "?" | "." | "enter" | "tab" | "delete" | "backspace"
/* eslint-enable */
type ModifierBasedShortcutKey = `${ModifierKeys}-${Key}`
@@ -77,6 +77,8 @@ const baseBindings: {
"ctrl-.": "response.copy",
"ctrl-e": "response.save-as-example",
"ctrl-shift-l": "editor.format",
+ "ctrl-delete": "response.erase",
+ "ctrl-backspace": "response.erase",
}
// Desktop-only bindings
@@ -225,6 +227,11 @@ function getPressedKey(ev: KeyboardEvent): Key | null {
// Check for Tab key
if (key === "tab") return "tab"
+ // Check for Delete key
+ if (key === "delete") return "delete"
+
+ if (key === "backspace") return "backspace"
+
// Check letter keys
const isLetter = key.length === 1 && key >= "a" && key <= "z"
if (isLetter) return key as Key