@@ -45,10 +45,6 @@ const MODIFIER_KEYS = ['ctrl', 'alt', 'shift'];
45
45
const IGNORE_ELEMENTS = [ 'input' , 'textarea' ] ;
46
46
//#endregion
47
47
48
- //#region store
49
- let latestHotkey : Pattern & { callback : CallbackFunction } | null = null ;
50
- //#endregion
51
-
52
48
//#region impl
53
49
export const makeHotkey = ( keymap : Keymap ) => {
54
50
const actions = parseKeymap ( keymap ) ;
@@ -58,12 +54,11 @@ export const makeHotkey = (keymap: Keymap) => {
58
54
if ( IGNORE_ELEMENTS . includes ( document . activeElement . tagName . toLowerCase ( ) ) ) return ;
59
55
if ( getHTMLElementOrNull ( document . activeElement ) ?. isContentEditable ) return ;
60
56
}
61
- for ( const action of actions ) {
62
- if ( matchPatterns ( ev , action ) ) {
57
+ for ( const { patterns , callback , options } of actions ) {
58
+ if ( matchPatterns ( ev , patterns , options ) ) {
63
59
ev . preventDefault ( ) ;
64
60
ev . stopPropagation ( ) ;
65
- action . callback ( ev ) ;
66
- storePattern ( ev , action . callback ) ;
61
+ callback ( ev ) ;
67
62
}
68
63
}
69
64
} ;
@@ -108,21 +103,10 @@ const parseOptions = (rawCallback: Keymap[keyof Keymap]) => {
108
103
return { ...defaultOptions } as const satisfies Action [ 'options' ] ;
109
104
} ;
110
105
111
- const matchPatterns = ( ev : KeyboardEvent , action : Action ) => {
112
- const { patterns, options, callback } = action ;
106
+ const matchPatterns = ( ev : KeyboardEvent , patterns : Action [ 'patterns' ] , options : Action [ 'options' ] ) => {
113
107
if ( ev . repeat && ! options . allowRepeat ) return false ;
114
108
const key = ev . key . toLowerCase ( ) ;
115
109
return patterns . some ( ( { which, ctrl, shift, alt } ) => {
116
- if (
117
- latestHotkey != null &&
118
- latestHotkey . which . includes ( key ) &&
119
- latestHotkey . ctrl === ctrl &&
120
- latestHotkey . alt === alt &&
121
- latestHotkey . shift === shift &&
122
- latestHotkey . callback === callback
123
- ) {
124
- return false ;
125
- }
126
110
if ( ! which . includes ( key ) ) return false ;
127
111
if ( ctrl !== ( ev . ctrlKey || ev . metaKey ) ) return false ;
128
112
if ( alt !== ev . altKey ) return false ;
@@ -131,16 +115,6 @@ const matchPatterns = (ev: KeyboardEvent, action: Action) => {
131
115
} ) ;
132
116
} ;
133
117
134
- const storePattern = ( ev : KeyboardEvent , callback : CallbackFunction ) => {
135
- latestHotkey = {
136
- which : [ ev . key . toLowerCase ( ) ] ,
137
- ctrl : ev . ctrlKey || ev . metaKey ,
138
- alt : ev . altKey ,
139
- shift : ev . shiftKey ,
140
- callback,
141
- } ;
142
- } ;
143
-
144
118
const parseKeyCode = ( input ?: string | null ) => {
145
119
if ( input == null ) return [ ] ;
146
120
const raw = getValueByKey ( KEY_ALIASES , input ) ;
0 commit comments