Skip to content

Commit 27d2fe5

Browse files
committed
Add Alt plus digit shortcuts and keycap indicators for switching targets
- replace shortcut alt+esc with 'alt+1' (web) 'alt+2' (api) and 'alt+3' (cli). Regarding keycaps: once alt is pressed, open the 'target dropdown', and render keycaps over the items - don't show numeric keycap over current target └── packages └── ui └── src └── components └── editor └── common └── prompts ├── PromptField │ ├── PromptField.module.scss │ ├── PromptField.stories.tsx │ ├── PromptField.tsx │ ├── hooks │ │ ├── use-drag-drop.ts │ │ ├── use-dropdown.ts │ │ ├── use-ghost-text.ts │ │ ├── use-handlers │ │ │ ├── handle-copy.ts │ │ │ ├── handle-cut.ts │ │ │ ├── handle-input-change.ts │ │ │ ├── handle-input-click.ts │ │ │ ├── handle-key-down.ts │ │ │ ├── handle-paste.ts │ │ │ ├── handle-submit.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ ├── use-handlers.ts │ │ │ └── utils.ts │ │ └── use-keyboard-shortcuts.ts │ └── index.ts ├── Template │ ├── Template.module.scss │ ├── Template.tsx │ └── index.ts └── shared └── symbols ├── caret.ts ├── get-highlighted-text.tsx ├── index.ts ├── position-mapping.ts ├── prompt-symbols.module.scss ├── reconstruct-raw-value.ts └── use-symbol-deletion.ts
1 parent 4ff8f7e commit 27d2fe5

2 files changed

Lines changed: 40 additions & 34 deletions

File tree

‎packages/ui/src/components/editor/common/prompts/PromptField/PromptField.tsx‎

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,7 @@ export const PromptField: React.FC<PromptFieldProps> = (props) => {
673673
onMouseEnter={() => set_is_target_dropdown_open(true)}
674674
onMouseLeave={() => set_is_target_dropdown_open(false)}
675675
>
676-
{is_target_dropdown_open && (
676+
{(is_target_dropdown_open || is_alt_pressed) && (
677677
<div
678678
className={
679679
styles['footer__right__target-switch__dropdown-wrapper']
@@ -683,7 +683,7 @@ export const PromptField: React.FC<PromptFieldProps> = (props) => {
683683
className={styles['footer__right__target-switch__dropdown']}
684684
onClick={(e) => e.stopPropagation()}
685685
>
686-
{(['WEB', 'API', 'CLI'] as Target[]).map((t) => (
686+
{(['WEB', 'API', 'CLI'] as Target[]).map((t, idx) => (
687687
<button
688688
key={t}
689689
className={
@@ -696,34 +696,38 @@ export const PromptField: React.FC<PromptFieldProps> = (props) => {
696696
}}
697697
disabled={t == props.target}
698698
>
699-
{t}
699+
{is_alt_pressed && t != props.target ? (
700+
<KeycapWrapper char={(idx + 1).toString()}>
701+
<span style={{ padding: '0 2px' }}>{t}</span>
702+
</KeycapWrapper>
703+
) : (
704+
t
705+
)}
700706
</button>
701707
))}
702708
</div>
703709
</div>
704710
)}
705-
<KeycapWrapper char={is_alt_pressed ? 'Esc' : undefined}>
706-
<button
707-
className={cn(
708-
styles['footer__right__submit__button'],
709-
styles['footer__right__target-switch__button'],
710-
{
711-
[styles['footer__right__submit__button--hovered']]:
712-
is_target_dropdown_open
713-
}
714-
)}
711+
<button
712+
className={cn(
713+
styles['footer__right__submit__button'],
714+
styles['footer__right__target-switch__button'],
715+
{
716+
[styles['footer__right__submit__button--hovered']]:
717+
is_target_dropdown_open || is_alt_pressed
718+
}
719+
)}
720+
>
721+
<span
722+
className={styles['footer__right__target-switch__label']}
715723
>
716-
<span
717-
className={styles['footer__right__target-switch__label']}
718-
>
719-
{props.target == 'WEB'
720-
? 'WEB'
721-
: props.target == 'API'
722-
? 'API'
723-
: 'CLI'}
724-
</span>
725-
</button>
726-
</KeycapWrapper>
724+
{props.target == 'WEB'
725+
? 'WEB'
726+
: props.target == 'API'
727+
? 'API'
728+
: 'CLI'}
729+
</span>
730+
</button>
727731
</div>
728732
)}
729733
{!props.is_copy_only &&

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

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,19 @@ export const use_keyboard_shortcuts = (props: PromptFieldProps) => {
3939
!e.ctrlKey &&
4040
!e.metaKey
4141
) {
42-
if (e.code == 'Escape') {
42+
if (e.code == 'Digit1') {
4343
e.preventDefault()
44-
if (props.on_target_change) {
45-
props.on_target_change(
46-
props.target == 'WEB'
47-
? 'API'
48-
: props.target == 'API'
49-
? 'CLI'
50-
: 'WEB'
51-
)
52-
}
44+
props.on_target_change?.('WEB')
45+
return
46+
}
47+
if (e.code == 'Digit2') {
48+
e.preventDefault()
49+
props.on_target_change?.('API')
50+
return
51+
}
52+
if (e.code == 'Digit3') {
53+
e.preventDefault()
54+
props.on_target_change?.('CLI')
5355
return
5456
}
5557

0 commit comments

Comments
 (0)