mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-03-12 16:40:05 +00:00
## Summary Show a non-blocking warning in the keybinding edit dialog when users try to bind shortcuts that browsers intercept (e.g. Ctrl+T, Ctrl+W, F12). ## Changes - **What**: Add `RESERVED_BY_BROWSER` set of known browser-intercepted shortcuts, `isBrowserReserved` getter on `KeyComboImpl`, and a warning `<Message>` in the keybinding edit dialog. Users can still save the binding. ## Review Focus Whether the list of browser-reserved shortcuts is comprehensive enough, and whether a non-blocking warning (vs blocking) is the right UX choice. ## Before https://github.com/user-attachments/assets/5abfc062-5ed1-4fcd-b394-ff98221d82a8 ## After https://github.com/user-attachments/assets/12a49e24-051f-4579-894a-164dbf1cb7b7 Fixes #1087 ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-9406-feat-Warn-when-binding-browser-reserved-shortcuts-31a6d73d36508162a021e88ab76914f6) by [Unito](https://www.unito.io) --------- Co-authored-by: Kelly Yang <124ykl@gmail.com> Co-authored-by: Alexander Brown <drjkl@comfy.org> Co-authored-by: Christian Byrne <cbyrne@comfy.org> Co-authored-by: jaeone94 <89377375+jaeone94@users.noreply.github.com> Co-authored-by: Benjamin Lu <benjaminlu1107@gmail.com> Co-authored-by: Comfy Org PR Bot <snomiao+comfy-pr@gmail.com> Co-authored-by: christian-byrne <72887196+christian-byrne@users.noreply.github.com> Co-authored-by: github-actions <github-actions@github.com> Co-authored-by: AustinMroz <austin@comfy.org> Co-authored-by: GitHub Action <action@github.com> Co-authored-by: Terry Jia <terryjia88@gmail.com> Co-authored-by: Alexander Brown <DrJKL0424@gmail.com> Co-authored-by: Dante <bunggl@naver.com> Co-authored-by: Deep Mehta <42841935+deepme987@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Amp <amp@ampcode.com> Co-authored-by: Jin Yi <jin12cc@gmail.com> Co-authored-by: Yourz <crazilou@vip.qq.com> Co-authored-by: pythongosssss <125205205+pythongosssss@users.noreply.github.com>
57 lines
1.8 KiB
Vue
57 lines
1.8 KiB
Vue
<template>
|
|
<div class="flex w-96 flex-col border-t border-border-default px-4">
|
|
<p class="mb-4 text-sm text-muted-foreground">
|
|
{{ $t('g.setAKeybindingForTheFollowing') }}
|
|
</p>
|
|
<div class="mb-4 text-sm text-base-foreground">
|
|
{{ commandLabel }}
|
|
</div>
|
|
|
|
<input
|
|
class="text-foreground mb-4 w-full rounded-sm border border-border-default bg-secondary-background px-3 py-2 text-center shadow-none focus:outline-none"
|
|
:value="dialogState.newCombo?.toString() ?? ''"
|
|
:placeholder="$t('g.enterYourKeybind')"
|
|
:aria-label="$t('g.enterYourKeybind')"
|
|
autocomplete="off"
|
|
autofocus
|
|
@keydown.stop.prevent="captureKeybinding"
|
|
/>
|
|
<div class="min-h-12">
|
|
<p
|
|
v-if="dialogState.newCombo?.isBrowserReserved"
|
|
class="m-0 text-sm text-destructive-background"
|
|
>
|
|
{{ $t('g.browserReservedKeybinding') }}
|
|
</p>
|
|
<p
|
|
v-else-if="existingKeybindingOnCombo"
|
|
class="m-0 text-sm text-destructive-background"
|
|
>
|
|
{{ $t('g.keybindingAlreadyExists') }}
|
|
{{ existingKeybindingOnCombo.commandId }}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import type { KeybindingImpl } from '@/platform/keybindings/keybinding'
|
|
import { KeyComboImpl } from '@/platform/keybindings/keyCombo'
|
|
|
|
import type { EditKeybindingDialogState } from '@/composables/useEditKeybindingDialog'
|
|
|
|
const { dialogState, onUpdateCombo, existingKeybindingOnCombo } = defineProps<{
|
|
dialogState: EditKeybindingDialogState
|
|
commandLabel: string
|
|
onUpdateCombo: (combo: KeyComboImpl) => void
|
|
existingKeybindingOnCombo: KeybindingImpl | null
|
|
}>()
|
|
|
|
function captureKeybinding(event: KeyboardEvent) {
|
|
if (!event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey) {
|
|
if (event.key === 'Escape') return
|
|
}
|
|
onUpdateCombo(KeyComboImpl.fromEvent(event))
|
|
}
|
|
</script>
|