Files
standardnotes-app-web/packages/ui-services/src/Keyboard/getKeyboardShortcuts.ts
Aman Harwara efba7c682d feat: Added command palette for quick actions and switching between items (#2933) [skip e2e]
* wip: command palette

* use code instead of key

* show recent items above commands

* refactor

* fix command

* add placeholder

* Tab/Shift-Tab to switch tabs

* Fix test

* Add menu item to general account menu

* if shortcut_id is available, use that as the id

* make toggle fn more stable

* small naming changes

* fix name

* Close open modals and popovers when opening command palette

* use stable ids + make sure selectedNotesCount only changes when the count actually changes

* display all commands, even ones in recents list
2025-09-25 10:06:09 -03:00

211 lines
5.5 KiB
TypeScript

import { Environment, Platform } from '@standardnotes/models'
import {
CREATE_NEW_NOTE_KEYBOARD_COMMAND,
TOGGLE_LIST_PANE_KEYBOARD_COMMAND,
TOGGLE_NAVIGATION_PANE_KEYBOARD_COMMAND,
NEXT_LIST_ITEM_KEYBOARD_COMMAND,
PREVIOUS_LIST_ITEM_KEYBOARD_COMMAND,
SEARCH_KEYBOARD_COMMAND,
SELECT_ALL_ITEMS_KEYBOARD_COMMAND,
SHOW_HIDDEN_OPTIONS_KEYBOARD_COMMAND,
DELETE_NOTE_KEYBOARD_COMMAND,
TAB_COMMAND,
ESCAPE_COMMAND,
CANCEL_SEARCH_COMMAND,
TOGGLE_FOCUS_MODE_COMMAND,
CHANGE_EDITOR_COMMAND,
FOCUS_TAGS_INPUT_COMMAND,
CREATE_NEW_TAG_COMMAND,
OPEN_NOTE_HISTORY_COMMAND,
CAPTURE_SAVE_COMMAND,
STAR_NOTE_COMMAND,
PIN_NOTE_COMMAND,
SUPER_SHOW_MARKDOWN_PREVIEW,
OPEN_PREFERENCES_COMMAND,
TOGGLE_DARK_MODE_COMMAND,
SUPER_TOGGLE_SEARCH,
SUPER_SEARCH_TOGGLE_CASE_SENSITIVE,
SUPER_SEARCH_NEXT_RESULT,
SUPER_SEARCH_PREVIOUS_RESULT,
SUPER_SEARCH_TOGGLE_REPLACE_MODE,
CHANGE_EDITOR_WIDTH_COMMAND,
SUPER_TOGGLE_TOOLBAR,
TOGGLE_KEYBOARD_SHORTCUTS_MODAL,
TOGGLE_COMMAND_PALETTE,
} from './KeyboardCommands'
import { KeyboardKey } from './KeyboardKey'
import { KeyboardModifier, getPrimaryModifier } from './KeyboardModifier'
import { KeyboardShortcut } from './KeyboardShortcut'
import { isMacPlatform } from './platformCheck'
export function getKeyboardShortcuts(platform: Platform, _environment: Environment): KeyboardShortcut[] {
const primaryModifier = getPrimaryModifier(platform)
return [
{
command: TOGGLE_LIST_PANE_KEYBOARD_COMMAND,
key: 'l',
modifiers: [primaryModifier, KeyboardModifier.Shift],
},
{
command: TOGGLE_NAVIGATION_PANE_KEYBOARD_COMMAND,
key: 'e',
modifiers: [primaryModifier, KeyboardModifier.Shift],
},
{
command: CREATE_NEW_NOTE_KEYBOARD_COMMAND,
code: 'KeyN',
modifiers: [KeyboardModifier.Alt, KeyboardModifier.Shift],
},
{
command: NEXT_LIST_ITEM_KEYBOARD_COMMAND,
key: KeyboardKey.Down,
},
{
command: PREVIOUS_LIST_ITEM_KEYBOARD_COMMAND,
key: KeyboardKey.Up,
},
{
command: SEARCH_KEYBOARD_COMMAND,
code: 'KeyF',
modifiers: [KeyboardModifier.Alt, KeyboardModifier.Shift],
},
{
command: CANCEL_SEARCH_COMMAND,
key: KeyboardKey.Escape,
},
{
command: SELECT_ALL_ITEMS_KEYBOARD_COMMAND,
key: 'a',
modifiers: [primaryModifier],
},
{
command: SHOW_HIDDEN_OPTIONS_KEYBOARD_COMMAND,
modifiers: [KeyboardModifier.Alt],
},
{
command: DELETE_NOTE_KEYBOARD_COMMAND,
key: KeyboardKey.Backspace,
modifiers: [primaryModifier],
},
{
command: TAB_COMMAND,
key: KeyboardKey.Tab,
},
{
command: ESCAPE_COMMAND,
key: KeyboardKey.Escape,
},
{
command: TOGGLE_FOCUS_MODE_COMMAND,
key: 'f',
modifiers: [primaryModifier, KeyboardModifier.Shift],
},
{
command: TOGGLE_DARK_MODE_COMMAND,
key: 'd',
modifiers: [primaryModifier, KeyboardModifier.Shift],
preventDefault: true,
},
{
command: CHANGE_EDITOR_COMMAND,
key: '?',
modifiers: [primaryModifier, KeyboardModifier.Shift],
preventDefault: true,
},
{
command: FOCUS_TAGS_INPUT_COMMAND,
code: 'KeyT',
modifiers: [primaryModifier, KeyboardModifier.Alt],
preventDefault: true,
},
{
command: CREATE_NEW_TAG_COMMAND,
code: 'KeyN',
modifiers: [primaryModifier, KeyboardModifier.Alt],
},
{
command: OPEN_NOTE_HISTORY_COMMAND,
key: 'h',
modifiers: [primaryModifier, KeyboardModifier.Shift],
preventDefault: true,
},
{
command: CAPTURE_SAVE_COMMAND,
key: 's',
modifiers: [primaryModifier],
preventDefault: true,
},
{
command: STAR_NOTE_COMMAND,
key: 's',
modifiers: [primaryModifier, KeyboardModifier.Shift],
preventDefault: true,
},
{
command: PIN_NOTE_COMMAND,
key: 'p',
modifiers: [primaryModifier, KeyboardModifier.Shift],
preventDefault: true,
},
{
command: SUPER_TOGGLE_TOOLBAR,
key: 'k',
modifiers: [primaryModifier, KeyboardModifier.Shift],
},
{
command: SUPER_TOGGLE_SEARCH,
key: 'f',
modifiers: [primaryModifier],
},
{
command: SUPER_SEARCH_TOGGLE_REPLACE_MODE,
key: isMacPlatform(platform) ? undefined : 'h',
code: isMacPlatform(platform) ? 'KeyF' : undefined,
modifiers: isMacPlatform(platform) ? [KeyboardModifier.Alt, primaryModifier] : [primaryModifier],
},
{
command: SUPER_SEARCH_TOGGLE_CASE_SENSITIVE,
key: 'c',
modifiers: [KeyboardModifier.Alt],
},
{
command: SUPER_SEARCH_NEXT_RESULT,
key: 'F3',
},
{
command: SUPER_SEARCH_PREVIOUS_RESULT,
key: 'F3',
modifiers: [KeyboardModifier.Shift],
},
{
command: SUPER_SHOW_MARKDOWN_PREVIEW,
key: 'm',
modifiers: [primaryModifier, KeyboardModifier.Shift],
preventDefault: true,
},
{
command: OPEN_PREFERENCES_COMMAND,
key: ',',
modifiers: [primaryModifier],
preventDefault: true,
},
{
command: CHANGE_EDITOR_WIDTH_COMMAND,
key: 'j',
modifiers: [primaryModifier, KeyboardModifier.Shift],
preventDefault: true,
},
{
command: TOGGLE_KEYBOARD_SHORTCUTS_MODAL,
key: '/',
modifiers: [primaryModifier],
},
{
command: TOGGLE_COMMAND_PALETTE,
code: 'Semicolon',
modifiers: [primaryModifier, KeyboardModifier.Shift],
},
]
}