MCPcopy Create free account
hub / github.com/TanStack/hotkeys / App

Function App

examples/preact/useHotkey/src/index.tsx:13–738  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

11import './index.css'
12
13function App() {
14 const [lastHotkey, setLastHotkey] = React.useState<Hotkey | null>(null)
15 const [saveCount, setSaveCount] = React.useState(0)
16 const [incrementCount, setIncrementCount] = React.useState(0)
17 const [enabled, setEnabled] = React.useState(true)
18 const [activeTab, setActiveTab] = React.useState(1)
19 const [navigationCount, setNavigationCount] = React.useState(0)
20 const [functionKeyCount, setFunctionKeyCount] = React.useState(0)
21 const [multiModifierCount, setMultiModifierCount] = React.useState(0)
22 const [editingKeyCount, setEditingKeyCount] = React.useState(0)
23
24 // Scoped shortcuts state
25 const [modalOpen, setModalOpen] = React.useState(false)
26 const [editorContent, setEditorContent] = React.useState('')
27 const [sidebarShortcutCount, setSidebarShortcutCount] = React.useState(0)
28 const [modalShortcutCount, setModalShortcutCount] = React.useState(0)
29 const [editorShortcutCount, setEditorShortcutCount] = React.useState(0)
30
31 // Refs for scoped shortcuts
32 const sidebarRef = React.useRef<HTMLDivElement>(null)
33 const modalRef = React.useRef<HTMLDivElement>(null)
34 const editorRef = React.useRef<HTMLTextAreaElement>(null)
35
36 // Type-safe refs for useHotkey (HTMLTextAreaElement extends HTMLElement)
37 const editorRefForHotkey = editorRef as React.RefObject<HTMLElement | null>
38
39 // ============================================================================
40 // Basic Hotkeys
41 // ============================================================================
42
43 // Browser default: Save page (downloads the current page)
44 // Basic hotkey with callback context
45 useHotkey('Mod+S', (_event, { hotkey, parsedHotkey }) => {
46 setLastHotkey(hotkey)
47 setSaveCount((c) => c + 1)
48 console.log('Hotkey triggered:', hotkey)
49 console.log('Parsed hotkey:', parsedHotkey)
50 })
51
52 // requireReset prevents repeated triggering while holding keys
53 useHotkey(
54 'Mod+K',
55 (_event, { hotkey }) => {
56 setLastHotkey(hotkey)
57 setIncrementCount((c) => c + 1)
58 },
59 { requireReset: true },
60 )
61
62 // Conditional hotkey (enabled/disabled)
63 useHotkey(
64 'Mod+E',
65 (_event, { hotkey }) => {
66 setLastHotkey(hotkey)
67 alert('This hotkey can be toggled!')
68 },
69 { enabled },
70 )

Callers

nothing calls this directly

Calls 2

useHotkeyFunction · 0.90
formatForDisplayFunction · 0.85

Tested by

no test coverage detected