Skip to content

Commit 836b19e

Browse files
committed
Update mode toggle shortcut to Alt+Esc and add a visual indicator
- ctrl+esc/cmd+esc should be replaced with alt/option+esc. make sure prompt field properly ignore this shortcut and don't de-focus when focused. - in `apps/editor/src/views/panel/frontend/Main/MainView/components/Header/Header.tsx`, over the [Fragment], show red rectangle with text 'esc' when alt/option is pressed. - the 'esc' should be shown positioned absolutely on top of the toggler - when alt is pressed, keep showing the mode
1 parent 46ad155 commit 836b19e

5 files changed

Lines changed: 46 additions & 6 deletions

File tree

apps/editor/src/views/panel/frontend/Main/MainView/components/Header/Header.module.scss

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
line-height: 1;
2929
white-space: nowrap;
3030
letter-spacing: 1px;
31+
position: relative;
3132

3233
&:focus {
3334
outline: none;
@@ -36,6 +37,21 @@
3637
&:hover {
3738
background-color: var(--vscode-toolbar-hoverBackground);
3839
}
40+
41+
&__esc {
42+
position: absolute;
43+
top: 50%;
44+
left: 50%;
45+
transform: translate(-50%, -50%);
46+
background-color: var(--vscode-sideBar-background);
47+
color: var(--vscode-foreground);
48+
border: 1px solid var(--cwc-border-color-dimmed);
49+
padding: 2px 4px 3px 4px;
50+
border-radius: 4px;
51+
font-size: 11px;
52+
font-family: var(--vscode-font-family);
53+
letter-spacing: normal;
54+
}
3955
}
4056
}
4157

apps/editor/src/views/panel/frontend/Main/MainView/components/Header/Header.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const Header: React.FC<Props> = (props) => {
4242
}
4343
}, [props.mode, props.on_mode_change])
4444

45-
use_keyboard_shortcuts({
45+
const { is_alt_pressed } = use_keyboard_shortcuts({
4646
mode: props.mode,
4747
handle_heading_click,
4848
on_web_prompt_type_change: props.on_web_prompt_type_change,
@@ -62,9 +62,12 @@ export const Header: React.FC<Props> = (props) => {
6262
<button
6363
className={styles['header__left__toggler']}
6464
onClick={handle_heading_click}
65-
title={`Change mode (${is_mac ? 'Esc' : 'Ctrl+Esc'})`}
65+
title={`Change mode (${is_mac ? 'Esc' : 'Alt+Esc'})`}
6666
>
67-
{props.mode == MODE.WEB ? MODE.WEB : MODE.API}
67+
<span>
68+
{props.mode == MODE.WEB ? MODE.WEB : MODE.API}
69+
</span>
70+
{is_alt_pressed && <span className={styles['header__left__toggler__esc']}>esc</span>}
6871
</button>
6972
</div>
7073

apps/editor/src/views/panel/frontend/Main/MainView/components/Header/hooks/use-keyboard-shortcuts.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect } from 'react'
1+
import { useEffect, useState } from 'react'
22
import { use_is_mac } from '@shared/hooks'
33
import { MODE, Mode } from '@/views/panel/types/main-view-mode'
44
import { ApiPromptType, WebPromptType } from '@shared/types/prompt-types'
@@ -25,9 +25,12 @@ export const use_keyboard_shortcuts = ({
2525
is_disabled
2626
}: UseKeyboardShortcutsParams) => {
2727
const is_mac = use_is_mac()
28+
const [is_alt_pressed, set_is_alt_pressed] = useState(false)
2829

2930
useEffect(() => {
3031
const handle_key_down = (event: KeyboardEvent) => {
32+
if (event.key == 'Alt') set_is_alt_pressed(true)
33+
3134
if (is_disabled) return
3235

3336
if (
@@ -40,13 +43,24 @@ export const use_keyboard_shortcuts = ({
4043
on_show_home()
4144
} else if (
4245
event.key == 'Escape' &&
43-
((is_mac && event.metaKey) || (!is_mac && event.ctrlKey))
46+
event.altKey &&
47+
!event.metaKey &&
48+
!event.ctrlKey &&
49+
!event.shiftKey
4450
) {
4551
event.preventDefault()
4652
handle_heading_click()
4753
}
4854
}
4955

56+
const handle_key_up = (event: KeyboardEvent) => {
57+
if (event.key == 'Alt') set_is_alt_pressed(false)
58+
}
59+
60+
const handle_blur = () => {
61+
set_is_alt_pressed(false)
62+
}
63+
5064
const handle_mouse_up = (event: MouseEvent) => {
5165
if (is_disabled) return
5266

@@ -56,10 +70,14 @@ export const use_keyboard_shortcuts = ({
5670
}
5771

5872
window.addEventListener('keydown', handle_key_down)
73+
window.addEventListener('keyup', handle_key_up)
74+
window.addEventListener('blur', handle_blur)
5975
window.addEventListener('mouseup', handle_mouse_up)
6076

6177
return () => {
6278
window.removeEventListener('keydown', handle_key_down)
79+
window.removeEventListener('keyup', handle_key_up)
80+
window.removeEventListener('blur', handle_blur)
6381
window.removeEventListener('mouseup', handle_mouse_up)
6482
}
6583
}, [is_disabled, on_show_home, is_mac, handle_heading_click])
@@ -103,4 +121,6 @@ export const use_keyboard_shortcuts = ({
103121
window.removeEventListener('keydown', handle_key_down)
104122
}
105123
}, [mode, on_web_prompt_type_change, on_api_prompt_type_change, is_disabled])
124+
125+
return { is_alt_pressed }
106126
}

packages/ui/src/components/editor/panel/prompts/PromptField/hooks/use-handlers/handle-key-down.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,7 @@ export const create_handle_key_down = (
508508
}
509509

510510
if (key == 'Escape') {
511+
if (e.altKey) return
511512
handle_escape_key()
512513
return
513514
}

packages/ui/src/components/editor/panel/prompts/PromptField/hooks/use-keyboard-shortcuts.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ export const use_keyboard_shortcuts = (
112112
const handle_container_key_down = (
113113
e: React.KeyboardEvent<HTMLDivElement>
114114
) => {
115-
if (e.key == 'Escape' && !e.ctrlKey && !e.metaKey) {
115+
if (e.key == 'Escape' && !e.ctrlKey && !e.metaKey && !e.altKey) {
116116
if (props.is_recording) {
117117
props.on_recording_finished()
118118
}

0 commit comments

Comments
 (0)