defineShortcuts
A composable to define keyboard shortcuts in your app.
Usage
Use the auto-imported defineShortcuts
composable to define keyboard shortcuts.
<script setup lang="ts">
const open = ref(false)
defineShortcuts({
meta_k: () => {
open.value = !open.value
}
})
</script>
- Shortcuts are automatically adjusted for non-macOS platforms, converting
meta
toctrl
. - The composable uses VueUse's
useEventListener
to handle keydown events. - For a complete list of available shortcut keys, refer to the
KeyboardEvent.key
API documentation. Note that the key should be written in lowercase.
API
defineShortcuts(config: ShortcutsConfig, options?: ShortcutsOptions)
Define keyboard shortcuts for your application.
config
: An object where keys are shortcut definitions and values are either handler functions or shortcut configuration objects.options
: Optional configuration for the shortcuts behavior.chainDelay
: The delay between key presses to consider the shortcut as chained. Default is250
.
Shortcut Definition
Shortcuts are defined using the following format:
- Single key:
'a'
,'b'
,'1'
,'?'
, etc. - Key combinations: Use
_
to separate keys, e.g.,'meta_k'
,'ctrl_shift_f'
- Key sequences: Use
-
to define a sequence, e.g.,'g-d'
Modifiers
meta
: Represents Command (⌘) on macOS and Control on other platformsctrl
: Represents Control keyshift
: Used for alphabetic keys when Shift is required
Special Keys
escape
: Triggers on Esc keyenter
: Triggers on Enter keyarrowleft
,arrowright
,arrowup
,arrowdown
: Trigger on respective arrow keys
Shortcut Configuration
Each shortcut can be defined as a function or an object with the following properties:
interface ShortcutConfig {
handler: () => void
usingInput?: boolean | string
}
handler
: Function to be executed when the shortcut is triggeredusingInput
:false
(default): Shortcut only triggers when no input is focusedtrue
: Shortcut triggers even when any input is focusedstring
: Shortcut only triggers when the specified input (by name) is focused
Examples
Basic usage
<script setup lang="ts">
defineShortcuts({
'?': () => openHelpModal(),
'meta_k': () => openCommandPalette(),
'g-d': () => navigateToDashboard()
})
</script>
With input focus handling
The usingInput
option allows you to specify that a shortcut should only trigger when a specific input is focused.
<template>
<UInput v-model="query" name="queryInput" />
</template>
<script setup lang="ts">
const query = ref('')
defineShortcuts({
enter: {
usingInput: 'queryInput',
handler: () => performSearch()
},
escape: {
usingInput: true,
handler: () => clearSearch()
}
})
</script>
Extracting shortcuts from menu items
The extractShortcuts
utility can be used to automatically define shortcuts from menu items:
<script setup lang="ts">
const items = [{
label: 'Save',
icon: 'i-lucide-file-down',
kbds: ['meta', 'S'],
onSelect() {
save()
}
}, {
label: 'Copy',
icon: 'i-lucide-copy',
kbds: ['meta', 'C'],
onSelect() {
copy()
}
}]
defineShortcuts(extractShortcuts(items))
</script>