@deephaven/components 0.22.3-embed-pandas.11 → 0.23.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AutoCompleteInput.js +12 -85
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/AutoResizeTextarea.d.ts +5 -5
- package/dist/AutoResizeTextarea.d.ts.map +1 -1
- package/dist/AutoResizeTextarea.js +8 -23
- package/dist/AutoResizeTextarea.js.map +1 -1
- package/dist/BasicModal.d.ts +28 -1
- package/dist/BasicModal.d.ts.map +1 -1
- package/dist/BasicModal.js +2 -8
- package/dist/BasicModal.js.map +1 -1
- package/dist/Button.d.ts +9 -9
- package/dist/Button.d.ts.map +1 -1
- package/dist/Button.js +8 -34
- package/dist/Button.js.map +1 -1
- package/dist/ButtonGroup.d.ts +7 -7
- package/dist/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup.js +2 -4
- package/dist/ButtonGroup.js.map +1 -1
- package/dist/ButtonOld.js.map +1 -1
- package/dist/CardFlip.d.ts +2 -2
- package/dist/CardFlip.d.ts.map +1 -1
- package/dist/CardFlip.js +2 -7
- package/dist/CardFlip.js.map +1 -1
- package/dist/Checkbox.js +3 -14
- package/dist/Checkbox.js.map +1 -1
- package/dist/Collapse.d.ts +1 -1
- package/dist/Collapse.js +0 -15
- package/dist/Collapse.js.map +1 -1
- package/dist/ComboBox.js +4 -83
- package/dist/ComboBox.js.map +1 -1
- package/dist/CopyButton.d.ts +22 -0
- package/dist/CopyButton.d.ts.map +1 -0
- package/dist/CopyButton.js +30 -0
- package/dist/CopyButton.js.map +1 -0
- package/dist/CustomTimeSelect.d.ts +3 -3
- package/dist/CustomTimeSelect.d.ts.map +1 -1
- package/dist/CustomTimeSelect.js +2 -86
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DateInput.d.ts +1 -1
- package/dist/DateInput.d.ts.map +1 -1
- package/dist/DateInput.js.map +1 -1
- package/dist/DateInputUtils.js +0 -7
- package/dist/DateInputUtils.js.map +1 -1
- package/dist/DateTimeInput.d.ts +1 -1
- package/dist/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput.js +7 -10
- package/dist/DateTimeInput.js.map +1 -1
- package/dist/DebouncedSearchInput.js +0 -14
- package/dist/DebouncedSearchInput.js.map +1 -1
- package/dist/DragUtils.d.ts +1 -1
- package/dist/DragUtils.d.ts.map +1 -1
- package/dist/DragUtils.js +4 -16
- package/dist/DragUtils.js.map +1 -1
- package/dist/DraggableItemList.d.ts +4 -4
- package/dist/DraggableItemList.d.ts.map +1 -1
- package/dist/DraggableItemList.js +22 -44
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/EditableItemList.d.ts +1 -1
- package/dist/EditableItemList.d.ts.map +1 -1
- package/dist/EditableItemList.js +2 -6
- package/dist/EditableItemList.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.d.ts +3 -3
- package/dist/HierarchicalCheckboxMenu.d.ts.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +6 -28
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.d.ts +5 -5
- package/dist/ItemList.d.ts.map +1 -1
- package/dist/ItemList.js +22 -115
- package/dist/ItemList.js.map +1 -1
- package/dist/ItemListItem.d.ts +0 -1
- package/dist/ItemListItem.d.ts.map +1 -1
- package/dist/ItemListItem.js +26 -50
- package/dist/ItemListItem.js.map +1 -1
- package/dist/LoadingOverlay.d.ts +2 -2
- package/dist/LoadingOverlay.d.ts.map +1 -1
- package/dist/LoadingOverlay.js +3 -5
- package/dist/LoadingOverlay.js.map +1 -1
- package/dist/LoadingSpinner.d.ts +2 -2
- package/dist/LoadingSpinner.d.ts.map +1 -1
- package/dist/LoadingSpinner.js +2 -4
- package/dist/LoadingSpinner.js.map +1 -1
- package/dist/MaskedInput.d.ts +2 -2
- package/dist/MaskedInput.d.ts.map +1 -1
- package/dist/MaskedInput.js +26 -85
- package/dist/MaskedInput.js.map +1 -1
- package/dist/Option.d.ts +2 -2
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +2 -4
- package/dist/Option.js.map +1 -1
- package/dist/RadioGroup.d.ts +2 -2
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RadioGroup.js +4 -6
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioItem.d.ts +1 -1
- package/dist/RadioItem.d.ts.map +1 -1
- package/dist/RadioItem.js +0 -1
- package/dist/RadioItem.js.map +1 -1
- package/dist/SearchInput.js +2 -13
- package/dist/SearchInput.js.map +1 -1
- package/dist/Select.d.ts +2 -2
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +2 -4
- package/dist/Select.js.map +1 -1
- package/dist/SelectValueList.d.ts +1 -1
- package/dist/SelectValueList.d.ts.map +1 -1
- package/dist/SelectValueList.js +0 -28
- package/dist/SelectValueList.js.map +1 -1
- package/dist/SocketedButton.d.ts +1 -1
- package/dist/SocketedButton.d.ts.map +1 -1
- package/dist/SocketedButton.js.map +1 -1
- package/dist/ThemeExport.d.ts +4 -4
- package/dist/ThemeExport.js +0 -4
- package/dist/ThemeExport.js.map +1 -1
- package/dist/TimeInput.d.ts +2 -2
- package/dist/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput.js +2 -12
- package/dist/TimeInput.js.map +1 -1
- package/dist/TimeSlider.d.ts +2 -2
- package/dist/TimeSlider.d.ts.map +1 -1
- package/dist/TimeSlider.js +19 -33
- package/dist/TimeSlider.js.map +1 -1
- package/dist/ToastNotification.d.ts +6 -6
- package/dist/ToastNotification.d.ts.map +1 -1
- package/dist/ToastNotification.js +2 -4
- package/dist/ToastNotification.js.map +1 -1
- package/dist/UISwitch.d.ts +2 -2
- package/dist/UISwitch.d.ts.map +1 -1
- package/dist/UISwitch.js +2 -4
- package/dist/UISwitch.js.map +1 -1
- package/dist/ValidateLabelInput.d.ts +1 -1
- package/dist/ValidateLabelInput.d.ts.map +1 -1
- package/dist/ValidateLabelInput.js +3 -3
- package/dist/ValidateLabelInput.js.map +1 -1
- package/dist/context-actions/ContextActionUtils.d.ts +3 -15
- package/dist/context-actions/ContextActionUtils.d.ts.map +1 -1
- package/dist/context-actions/ContextActionUtils.js +8 -85
- package/dist/context-actions/ContextActionUtils.js.map +1 -1
- package/dist/context-actions/ContextActions.js +1 -34
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.js +29 -110
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
- package/dist/context-actions/ContextMenuItem.js +3 -19
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/ContextMenuRoot.d.ts +1 -1
- package/dist/context-actions/ContextMenuRoot.d.ts.map +1 -1
- package/dist/context-actions/ContextMenuRoot.js +7 -26
- package/dist/context-actions/ContextMenuRoot.js.map +1 -1
- package/dist/context-actions/GlobalContextAction.js +0 -15
- package/dist/context-actions/GlobalContextAction.js.map +1 -1
- package/dist/context-actions/GlobalContextActions.js +0 -6
- package/dist/context-actions/GlobalContextActions.js.map +1 -1
- package/dist/context-actions/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.d.ts +3 -3
- package/dist/menu-actions/DropdownMenu.d.ts.map +1 -1
- package/dist/menu-actions/DropdownMenu.js +4 -32
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.d.ts +3 -3
- package/dist/menu-actions/Menu.d.ts.map +1 -1
- package/dist/menu-actions/Menu.js +7 -52
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/menu-actions/index.d.ts +2 -1
- package/dist/menu-actions/index.d.ts.map +1 -1
- package/dist/menu-actions/index.js +2 -2
- package/dist/menu-actions/index.js.map +1 -1
- package/dist/modal/Modal.d.ts +2 -2
- package/dist/modal/Modal.d.ts.map +1 -1
- package/dist/modal/Modal.js +3 -9
- package/dist/modal/Modal.js.map +1 -1
- package/dist/modal/ModalBody.d.ts +1 -1
- package/dist/modal/ModalBody.d.ts.map +1 -1
- package/dist/modal/ModalBody.js +2 -4
- package/dist/modal/ModalBody.js.map +1 -1
- package/dist/modal/ModalFooter.d.ts +1 -1
- package/dist/modal/ModalFooter.d.ts.map +1 -1
- package/dist/modal/ModalFooter.js +2 -4
- package/dist/modal/ModalFooter.js.map +1 -1
- package/dist/modal/ModalHeader.d.ts +1 -1
- package/dist/modal/ModalHeader.d.ts.map +1 -1
- package/dist/modal/ModalHeader.js +2 -4
- package/dist/modal/ModalHeader.js.map +1 -1
- package/dist/modal/index.js.map +1 -1
- package/dist/navigation/Menu.d.ts +3 -3
- package/dist/navigation/Menu.d.ts.map +1 -1
- package/dist/navigation/Menu.js +2 -2
- package/dist/navigation/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.d.ts +4 -4
- package/dist/navigation/MenuItem.d.ts.map +1 -1
- package/dist/navigation/MenuItem.js +4 -7
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/Page.d.ts +2 -2
- package/dist/navigation/Page.d.ts.map +1 -1
- package/dist/navigation/Page.js +2 -3
- package/dist/navigation/Page.js.map +1 -1
- package/dist/navigation/Stack.d.ts +2 -2
- package/dist/navigation/Stack.d.ts.map +1 -1
- package/dist/navigation/Stack.js +3 -6
- package/dist/navigation/Stack.js.map +1 -1
- package/dist/navigation/index.js.map +1 -1
- package/dist/popper/Popper.d.ts +2 -2
- package/dist/popper/Popper.d.ts.map +1 -1
- package/dist/popper/Popper.js +13 -46
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.d.ts +1 -1
- package/dist/popper/Tooltip.d.ts.map +1 -1
- package/dist/popper/Tooltip.js +0 -56
- package/dist/popper/Tooltip.js.map +1 -1
- package/dist/popper/index.js.map +1 -1
- package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
- package/dist/shortcuts/Shortcut.d.ts +2 -2
- package/dist/shortcuts/Shortcut.d.ts.map +1 -1
- package/dist/shortcuts/Shortcut.js +19 -76
- package/dist/shortcuts/Shortcut.js.map +1 -1
- package/dist/shortcuts/ShortcutRegistry.d.ts +1 -1
- package/dist/shortcuts/ShortcutRegistry.d.ts.map +1 -1
- package/dist/shortcuts/ShortcutRegistry.js +3 -18
- package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
- package/dist/shortcuts/index.js.map +1 -1
- package/package.json +8 -8
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
/* eslint-disable no-underscore-dangle */
|
|
4
3
|
import { EventTarget } from 'event-target-shim';
|
|
5
4
|
import { Log } from '@deephaven/log';
|
|
6
5
|
import { EventShimCustomEvent } from '@deephaven/utils';
|
|
7
6
|
import { ContextActionUtils } from "../context-actions/index.js";
|
|
8
7
|
var log = Log.module('Shortcut');
|
|
9
|
-
export var MODIFIER;
|
|
10
|
-
// This is the value which will be displayed if no display overrides are done in the OS specific getDisplayString methods
|
|
8
|
+
export var MODIFIER;
|
|
11
9
|
|
|
10
|
+
// The value should match the KeyboardEvent.key value
|
|
11
|
+
// This is the value which will be displayed if no display overrides are done in the OS specific getDisplayString methods
|
|
12
12
|
(function (MODIFIER) {
|
|
13
13
|
MODIFIER["CTRL"] = "MODIFIER_CTRL";
|
|
14
14
|
MODIFIER["CMD"] = "MODIFIER_CMD";
|
|
@@ -16,9 +16,7 @@ export var MODIFIER; // The value should match the KeyboardEvent.key value
|
|
|
16
16
|
MODIFIER["OPTION"] = "MODIFIER_OPTION";
|
|
17
17
|
MODIFIER["SHIFT"] = "MODIFIER_SHIFT";
|
|
18
18
|
})(MODIFIER || (MODIFIER = {}));
|
|
19
|
-
|
|
20
19
|
export var KEY;
|
|
21
|
-
|
|
22
20
|
(function (KEY) {
|
|
23
21
|
KEY["A"] = "A";
|
|
24
22
|
KEY["B"] = "B";
|
|
@@ -95,10 +93,10 @@ export var KEY;
|
|
|
95
93
|
KEY["F11"] = "F11";
|
|
96
94
|
KEY["F12"] = "F12";
|
|
97
95
|
})(KEY || (KEY = {}));
|
|
98
|
-
|
|
99
96
|
var ALLOWED_SINGLE_KEY_SET = new Set([KEY.ENTER, KEY.DELETE, KEY.F1, KEY.F2, KEY.F3, KEY.F4, KEY.F5, KEY.F6, KEY.F7, KEY.F8, KEY.F9, KEY.F10, KEY.F11, KEY.F12]);
|
|
100
97
|
export default class Shortcut extends EventTarget {
|
|
101
98
|
// Unique identifier for the shortcut
|
|
99
|
+
|
|
102
100
|
// e.g. Rename, Save, Run Selected
|
|
103
101
|
|
|
104
102
|
/**
|
|
@@ -109,36 +107,30 @@ export default class Shortcut extends EventTarget {
|
|
|
109
107
|
static isAllowedKey(key) {
|
|
110
108
|
return Object.values(KEY).includes(key);
|
|
111
109
|
}
|
|
110
|
+
|
|
112
111
|
/**
|
|
113
112
|
* Checks if a KeyState has a valid key.
|
|
114
113
|
* @param state KeyState with any string as the key
|
|
115
114
|
* @returns True if KeyState is is using an allowed keyCode
|
|
116
115
|
*/
|
|
117
|
-
|
|
118
|
-
|
|
119
116
|
static isValidKeyState(state) {
|
|
120
117
|
var {
|
|
121
118
|
keyValue
|
|
122
119
|
} = state;
|
|
123
|
-
|
|
124
120
|
if (keyValue === null) {
|
|
125
121
|
// Null state is valid
|
|
126
122
|
return true;
|
|
127
123
|
}
|
|
128
|
-
|
|
129
124
|
if (!Shortcut.isMacPlatform && state.metaKey) {
|
|
130
125
|
// MetaKey not allowed in windows
|
|
131
126
|
return false;
|
|
132
127
|
}
|
|
133
|
-
|
|
134
128
|
if (!Shortcut.isAllowedKey(keyValue)) {
|
|
135
129
|
return false;
|
|
136
130
|
}
|
|
137
|
-
|
|
138
131
|
var isSingleKey = !state.altKey && !state.ctrlKey && !state.metaKey && !state.shiftKey;
|
|
139
132
|
return !isSingleKey || ALLOWED_SINGLE_KEY_SET.has(keyValue);
|
|
140
133
|
}
|
|
141
|
-
|
|
142
134
|
/**
|
|
143
135
|
* Creates a KeyState from a valid array of modifier and key constants
|
|
144
136
|
* @param keys Array of keys in the shortcut. Modifiers first and key last. Should use the MODIFIER and KEY enums
|
|
@@ -157,44 +149,38 @@ export default class Shortcut extends EventTarget {
|
|
|
157
149
|
case MODIFIER.CTRL:
|
|
158
150
|
keyState.ctrlKey = true;
|
|
159
151
|
break;
|
|
160
|
-
|
|
161
152
|
case MODIFIER.ALT:
|
|
162
153
|
case MODIFIER.OPTION:
|
|
163
154
|
keyState.altKey = true;
|
|
164
155
|
break;
|
|
165
|
-
|
|
166
156
|
case MODIFIER.CMD:
|
|
167
157
|
keyState.metaKey = true;
|
|
168
158
|
break;
|
|
169
|
-
|
|
170
159
|
case MODIFIER.SHIFT:
|
|
171
160
|
keyState.shiftKey = true;
|
|
172
161
|
break;
|
|
173
|
-
|
|
174
162
|
default:
|
|
175
163
|
break;
|
|
176
164
|
}
|
|
177
165
|
});
|
|
178
166
|
return keyState;
|
|
179
167
|
}
|
|
180
|
-
|
|
181
168
|
static getKeyStateFromEvent(e) {
|
|
182
169
|
var {
|
|
183
170
|
key: eventKey,
|
|
184
171
|
keyCode
|
|
185
172
|
} = e;
|
|
186
173
|
var key = '';
|
|
187
|
-
|
|
188
174
|
if (eventKey === 'Shift' || eventKey === 'Meta' || eventKey === 'Control' || eventKey === 'Alt') {
|
|
189
175
|
key = '';
|
|
190
|
-
} else if (
|
|
176
|
+
} else if (
|
|
177
|
+
// This is primarily for Mac which has a symbol keyboard hidden behind the alt key
|
|
191
178
|
// The keyCode still corresponds to the letter keyCode, but the key value will be a symbol
|
|
192
179
|
!Shortcut.isAllowedKey(eventKey) && Shortcut.isAllowedKey(String.fromCharCode(keyCode))) {
|
|
193
180
|
key = String.fromCharCode(keyCode);
|
|
194
181
|
} else {
|
|
195
182
|
key = eventKey;
|
|
196
183
|
}
|
|
197
|
-
|
|
198
184
|
return {
|
|
199
185
|
keyValue: key,
|
|
200
186
|
altKey: e.altKey,
|
|
@@ -203,118 +189,95 @@ export default class Shortcut extends EventTarget {
|
|
|
203
189
|
shiftKey: e.shiftKey
|
|
204
190
|
};
|
|
205
191
|
}
|
|
192
|
+
|
|
206
193
|
/**
|
|
207
194
|
* Gets display string for Windows (and Linux + any other non-Mac OS)
|
|
208
195
|
* If the key is not an allowed key, the display will only display the modifiers
|
|
209
196
|
* @param keyState KeyState to get the display for
|
|
210
197
|
* @returns The string to display on Windows/non-Mac OS
|
|
211
198
|
*/
|
|
212
|
-
|
|
213
|
-
|
|
214
199
|
static getWindowsDisplayText(keyState) {
|
|
215
200
|
var display = '';
|
|
216
|
-
|
|
217
201
|
if (keyState.ctrlKey) {
|
|
218
202
|
display += 'Ctrl+';
|
|
219
203
|
}
|
|
220
|
-
|
|
221
204
|
if (keyState.altKey) {
|
|
222
205
|
display += 'Alt+';
|
|
223
206
|
}
|
|
224
|
-
|
|
225
207
|
if (keyState.shiftKey) {
|
|
226
208
|
display += 'Shift+';
|
|
227
209
|
}
|
|
228
|
-
|
|
229
210
|
if (keyState.keyValue === KEY.ESCAPE) {
|
|
230
211
|
display += 'Esc';
|
|
231
212
|
} else if (keyState.keyValue !== null) {
|
|
232
213
|
display += keyState.keyValue;
|
|
233
214
|
}
|
|
234
|
-
|
|
235
215
|
return display;
|
|
236
216
|
}
|
|
217
|
+
|
|
237
218
|
/**
|
|
238
219
|
* Gets display string Mac OS
|
|
239
220
|
* If the key is not an allowed key, the display will only display the modifiers
|
|
240
221
|
* @param keyState KeyState to get the display for
|
|
241
222
|
* @returns The string to display on Mac OS
|
|
242
223
|
*/
|
|
243
|
-
|
|
244
|
-
|
|
245
224
|
static getMacDisplayText(keyState) {
|
|
246
225
|
var display = '';
|
|
247
|
-
|
|
248
226
|
if (keyState.ctrlKey) {
|
|
249
227
|
display += '⌃';
|
|
250
228
|
}
|
|
251
|
-
|
|
252
229
|
if (keyState.altKey) {
|
|
253
230
|
display += '⌥';
|
|
254
231
|
}
|
|
255
|
-
|
|
256
232
|
if (keyState.shiftKey) {
|
|
257
233
|
display += '⇧';
|
|
258
234
|
}
|
|
259
|
-
|
|
260
235
|
if (keyState.metaKey) {
|
|
261
236
|
display += '⌘';
|
|
262
237
|
}
|
|
263
|
-
|
|
264
238
|
switch (keyState.keyValue) {
|
|
265
239
|
case KEY.ENTER:
|
|
266
240
|
display += '⏎';
|
|
267
241
|
break;
|
|
268
|
-
|
|
269
242
|
case KEY.ESCAPE:
|
|
270
243
|
display += '⎋';
|
|
271
244
|
break;
|
|
272
|
-
|
|
273
245
|
case KEY.BACKSPACE:
|
|
274
246
|
display += '⌫';
|
|
275
247
|
break;
|
|
276
|
-
|
|
277
248
|
case KEY.DELETE:
|
|
278
249
|
display += '⌦';
|
|
279
250
|
break;
|
|
280
|
-
|
|
281
251
|
case null:
|
|
282
252
|
break;
|
|
283
|
-
|
|
284
253
|
default:
|
|
285
254
|
display += keyState.keyValue;
|
|
286
255
|
}
|
|
287
|
-
|
|
288
256
|
return display;
|
|
289
257
|
}
|
|
258
|
+
|
|
290
259
|
/**
|
|
291
260
|
* Checks if 2 KeyStates match
|
|
292
261
|
* @param state1 First KeyState to compare
|
|
293
262
|
* @param state2 Second KeyState to compare
|
|
294
263
|
* @returns True if the KeyStates match and have non-null keyValues
|
|
295
264
|
*/
|
|
296
|
-
|
|
297
|
-
|
|
298
265
|
static doKeyStatesMatch(state1, state2) {
|
|
299
266
|
var _state1$keyValue, _state2$keyValue;
|
|
300
|
-
|
|
301
267
|
return ((_state1$keyValue = state1.keyValue) === null || _state1$keyValue === void 0 ? void 0 : _state1$keyValue.toUpperCase()) === ((_state2$keyValue = state2.keyValue) === null || _state2$keyValue === void 0 ? void 0 : _state2$keyValue.toUpperCase()) && state1.altKey === state2.altKey && state1.ctrlKey === state2.ctrlKey && state1.metaKey === state2.metaKey && state1.shiftKey === state2.shiftKey;
|
|
302
268
|
}
|
|
269
|
+
|
|
303
270
|
/**
|
|
304
271
|
* Gets the display string for the current OS from a KeyState.
|
|
305
272
|
* @param keyState KeyState to get the display for
|
|
306
273
|
* @returns Display string for the current OS
|
|
307
274
|
*/
|
|
308
|
-
|
|
309
|
-
|
|
310
275
|
static getDisplayText(keyState) {
|
|
311
276
|
if (keyState.keyValue === null) {
|
|
312
277
|
return '';
|
|
313
278
|
}
|
|
314
|
-
|
|
315
279
|
return Shortcut.isMacPlatform ? Shortcut.getMacDisplayText(keyState) : Shortcut.getWindowsDisplayText(keyState);
|
|
316
280
|
}
|
|
317
|
-
|
|
318
281
|
constructor(_ref) {
|
|
319
282
|
var {
|
|
320
283
|
id,
|
|
@@ -325,19 +288,12 @@ export default class Shortcut extends EventTarget {
|
|
|
325
288
|
tooltip
|
|
326
289
|
} = _ref;
|
|
327
290
|
super();
|
|
328
|
-
|
|
329
291
|
_defineProperty(this, "id", void 0);
|
|
330
|
-
|
|
331
292
|
_defineProperty(this, "name", void 0);
|
|
332
|
-
|
|
333
293
|
_defineProperty(this, "tooltip", void 0);
|
|
334
|
-
|
|
335
294
|
_defineProperty(this, "isEditable", void 0);
|
|
336
|
-
|
|
337
295
|
_defineProperty(this, "defaultKeyState", void 0);
|
|
338
|
-
|
|
339
296
|
_defineProperty(this, "keyState", void 0);
|
|
340
|
-
|
|
341
297
|
this.id = id;
|
|
342
298
|
this.name = name;
|
|
343
299
|
this.tooltip = tooltip;
|
|
@@ -347,28 +303,25 @@ export default class Shortcut extends EventTarget {
|
|
|
347
303
|
this.defaultKeyState = Shortcut.createKeyState(activeShortcut);
|
|
348
304
|
this.keyState = this.defaultKeyState;
|
|
349
305
|
}
|
|
306
|
+
|
|
350
307
|
/**
|
|
351
308
|
* Gets the display string for the current OS
|
|
352
309
|
*/
|
|
353
|
-
|
|
354
|
-
|
|
355
310
|
getDisplayText() {
|
|
356
311
|
return Shortcut.getDisplayText(this.keyState);
|
|
357
312
|
}
|
|
313
|
+
|
|
358
314
|
/**
|
|
359
315
|
* Gets the current keyState for the Shortcut
|
|
360
316
|
*/
|
|
361
|
-
|
|
362
|
-
|
|
363
317
|
getKeyState() {
|
|
364
318
|
return this.keyState;
|
|
365
319
|
}
|
|
320
|
+
|
|
366
321
|
/**
|
|
367
322
|
* Sets the KeyState if it is valid
|
|
368
323
|
* @param keyState
|
|
369
324
|
*/
|
|
370
|
-
|
|
371
|
-
|
|
372
325
|
setKeyState(keyState) {
|
|
373
326
|
if (Shortcut.isValidKeyState(keyState)) {
|
|
374
327
|
log.debug2("Shortcut ".concat(this.id, " updated to ").concat(JSON.stringify(keyState)));
|
|
@@ -380,62 +333,53 @@ export default class Shortcut extends EventTarget {
|
|
|
380
333
|
log.debug2("Shortcut ".concat(this.id, " tried to update to invalid keyState ").concat(JSON.stringify(keyState)));
|
|
381
334
|
}
|
|
382
335
|
}
|
|
336
|
+
|
|
383
337
|
/**
|
|
384
338
|
* Gets the default key state of the shortcut
|
|
385
339
|
* @returns Default key state
|
|
386
340
|
*/
|
|
387
|
-
|
|
388
|
-
|
|
389
341
|
getDefaultKeyState() {
|
|
390
342
|
return this.defaultKeyState;
|
|
391
343
|
}
|
|
392
|
-
|
|
393
344
|
isDefault() {
|
|
394
345
|
return Shortcut.doKeyStatesMatch(this.getDefaultKeyState(), this.getKeyState());
|
|
395
346
|
}
|
|
347
|
+
|
|
396
348
|
/**
|
|
397
349
|
* Sets the shortcut to have null keyValue
|
|
398
350
|
*/
|
|
399
|
-
|
|
400
|
-
|
|
401
351
|
setToNull() {
|
|
402
352
|
this.setKeyState(Shortcut.NULL_KEY_STATE);
|
|
403
353
|
}
|
|
404
|
-
|
|
405
354
|
isNull() {
|
|
406
355
|
return Shortcut.doKeyStatesMatch(this.keyState, Shortcut.NULL_KEY_STATE);
|
|
407
356
|
}
|
|
357
|
+
|
|
408
358
|
/**
|
|
409
359
|
* Sets the shortcut to its default key state
|
|
410
360
|
*/
|
|
411
|
-
|
|
412
|
-
|
|
413
361
|
setToDefault() {
|
|
414
362
|
this.setKeyState(this.defaultKeyState);
|
|
415
363
|
}
|
|
364
|
+
|
|
416
365
|
/**
|
|
417
366
|
* Checks if a KeyState matches the KeyState for the shortcut
|
|
418
367
|
* @param keyState KeyState to check
|
|
419
368
|
* @returns True if the passed KeyState matches the Shortcut's KeyState
|
|
420
369
|
*/
|
|
421
|
-
|
|
422
|
-
|
|
423
370
|
matchesKeyState(keyState) {
|
|
424
371
|
return Shortcut.doKeyStatesMatch(keyState, this.keyState);
|
|
425
372
|
}
|
|
373
|
+
|
|
426
374
|
/**
|
|
427
375
|
* Alias for matchesKeyState
|
|
428
376
|
* @param e KeyboardEvent to check if the Shortcut matches
|
|
429
377
|
* @returns True if the event matches the Shortcut's KeyState
|
|
430
378
|
*/
|
|
431
|
-
|
|
432
|
-
|
|
433
379
|
matchesEvent(e) {
|
|
434
380
|
return this.matchesKeyState(Shortcut.getKeyStateFromEvent(e));
|
|
435
381
|
}
|
|
436
|
-
|
|
437
382
|
}
|
|
438
|
-
|
|
439
383
|
_defineProperty(Shortcut, "NULL_KEY_STATE", {
|
|
440
384
|
metaKey: false,
|
|
441
385
|
shiftKey: false,
|
|
@@ -443,6 +387,5 @@ _defineProperty(Shortcut, "NULL_KEY_STATE", {
|
|
|
443
387
|
ctrlKey: false,
|
|
444
388
|
keyValue: null
|
|
445
389
|
});
|
|
446
|
-
|
|
447
390
|
_defineProperty(Shortcut, "isMacPlatform", ContextActionUtils.isMacPlatform());
|
|
448
391
|
//# sourceMappingURL=Shortcut.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shortcut.js","names":["EventTarget","Log","EventShimCustomEvent","ContextActionUtils","log","module","MODIFIER","KEY","ALLOWED_SINGLE_KEY_SET","Set","ENTER","DELETE","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","Shortcut","isAllowedKey","key","Object","values","includes","isValidKeyState","state","keyValue","isMacPlatform","metaKey","isSingleKey","altKey","ctrlKey","shiftKey","has","createKeyState","keys","keyState","length","forEach","CTRL","ALT","OPTION","CMD","SHIFT","getKeyStateFromEvent","e","eventKey","keyCode","String","fromCharCode","getWindowsDisplayText","display","ESCAPE","getMacDisplayText","BACKSPACE","doKeyStatesMatch","state1","state2","toUpperCase","getDisplayText","constructor","id","shortcut","macShortcut","isEditable","name","tooltip","isMac","activeShortcut","defaultKeyState","getKeyState","setKeyState","debug2","JSON","stringify","dispatchEvent","detail","getDefaultKeyState","isDefault","setToNull","NULL_KEY_STATE","isNull","setToDefault","matchesKeyState","matchesEvent"],"sources":["../../src/shortcuts/Shortcut.ts"],"sourcesContent":["/* eslint-disable no-underscore-dangle */\nimport { EventTarget } from 'event-target-shim';\nimport React from 'react';\nimport { Log } from '@deephaven/log';\nimport { CustomEventMap, EventShimCustomEvent } from '@deephaven/utils';\nimport { ContextActionUtils } from '../context-actions';\n\nconst log = Log.module('Shortcut');\n\nexport enum MODIFIER {\n CTRL = 'MODIFIER_CTRL',\n CMD = 'MODIFIER_CMD',\n ALT = 'MODIFIER_ALT',\n OPTION = 'MODIFIER_OPTION',\n SHIFT = 'MODIFIER_SHIFT',\n}\n\n// The value should match the KeyboardEvent.key value\n// This is the value which will be displayed if no display overrides are done in the OS specific getDisplayString methods\nexport enum KEY {\n A = 'A',\n B = 'B',\n C = 'C',\n D = 'D',\n E = 'E',\n F = 'F',\n G = 'G',\n H = 'H',\n I = 'I',\n J = 'J',\n K = 'K',\n L = 'L',\n M = 'M',\n N = 'N',\n O = 'O',\n P = 'P',\n Q = 'Q',\n R = 'R',\n S = 'S',\n T = 'T',\n U = 'U',\n V = 'V',\n W = 'W',\n X = 'X',\n Y = 'Y',\n Z = 'Z',\n ZERO = '0',\n ONE = '1',\n TWO = '2',\n THREE = '3',\n FOUR = '4',\n FIVE = '5',\n SIX = '6',\n SEVEN = '7',\n EIGHT = '8',\n NINE = '9',\n BACKSPACE = 'Backspace',\n ESCAPE = 'Escape',\n ENTER = 'Enter',\n DELETE = 'Delete',\n SLASH = '/',\n QUESTION_MARK = '?',\n BACKSLASH = '\\\\',\n PIPE = '|',\n MINUS = '-',\n UNDERSCORE = '_',\n EQUALS = '=',\n PLUS = '+',\n BACKTICK = '`',\n TILDE = '~',\n COMMA = ',',\n LEFT_CHEVRON = '<',\n PERIOD = '.',\n RIGHT_CHEVRON = '>',\n SEMICOLON = ';',\n COLON = ':',\n SINGLE_QUOTE = \"'\",\n DOUBLE_QUOTE = '\"',\n LEFT_BRACKET = '[',\n RIGHT_BRACKET = ']',\n LEFT_CURLY = '{',\n RIGHT_CURLY = '}',\n F1 = 'F1',\n F2 = 'F2',\n F3 = 'F3',\n F4 = 'F4',\n F5 = 'F5',\n F6 = 'F6',\n F7 = 'F7',\n F8 = 'F8',\n F9 = 'F9',\n F10 = 'F10',\n F11 = 'F11',\n F12 = 'F12',\n}\n\nconst ALLOWED_SINGLE_KEY_SET: Set<KEY> = new Set([\n KEY.ENTER,\n KEY.DELETE,\n KEY.F1,\n KEY.F2,\n KEY.F3,\n KEY.F4,\n KEY.F5,\n KEY.F6,\n KEY.F7,\n KEY.F8,\n KEY.F9,\n KEY.F10,\n KEY.F11,\n KEY.F12,\n]);\n\ntype ShortcutKeys = [...MODIFIER[], KEY];\n\nexport interface KeyState {\n /**\n * This is purposely keyValue and not key to make KeyboardEvents not match the interface\n * KeyboardEvents need some processing to get the actual value\n * Use Shortcut.getKeyStateFromEvent to get the right KeyState from an event\n */\n keyValue: string | null;\n altKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n shiftKey: boolean;\n}\n\nexport interface ValidKeyState extends KeyState {\n keyValue: KEY | null;\n}\n\ntype EventMap = CustomEventMap<{\n onUpdate: CustomEvent<Shortcut>;\n}>;\n\nexport default class Shortcut extends EventTarget<EventMap, 'strict'> {\n readonly id: string; // Unique identifier for the shortcut\n\n readonly name: string; // e.g. Rename, Save, Run Selected\n\n readonly tooltip?: string;\n\n readonly isEditable: boolean;\n\n private readonly defaultKeyState: ValidKeyState;\n\n keyState: ValidKeyState;\n\n static NULL_KEY_STATE: ValidKeyState = {\n metaKey: false,\n shiftKey: false,\n altKey: false,\n ctrlKey: false,\n keyValue: null,\n };\n\n /**\n * Use to check if a keyCode corresponds to an allowed key for a shortcut\n * @param keyCode The keyCode to check. This should be the charCode of the key\n * @returns Type predicate asserting the key is an allowed KEY\n */\n static isAllowedKey(key: string | null): key is KEY {\n return Object.values(KEY).includes(key as KEY);\n }\n\n /**\n * Checks if a KeyState has a valid key.\n * @param state KeyState with any string as the key\n * @returns True if KeyState is is using an allowed keyCode\n */\n static isValidKeyState(state: KeyState): state is ValidKeyState {\n const { keyValue } = state;\n\n if (keyValue === null) {\n // Null state is valid\n return true;\n }\n\n if (!Shortcut.isMacPlatform && state.metaKey) {\n // MetaKey not allowed in windows\n return false;\n }\n\n if (!Shortcut.isAllowedKey(keyValue)) {\n return false;\n }\n\n const isSingleKey =\n !state.altKey && !state.ctrlKey && !state.metaKey && !state.shiftKey;\n\n return !isSingleKey || ALLOWED_SINGLE_KEY_SET.has(keyValue);\n }\n\n static isMacPlatform = ContextActionUtils.isMacPlatform();\n\n /**\n * Creates a KeyState from a valid array of modifier and key constants\n * @param keys Array of keys in the shortcut. Modifiers first and key last. Should use the MODIFIER and KEY enums\n * @returns KeyState representing the array of constants\n */\n static createKeyState(keys: ShortcutKeys): ValidKeyState {\n const keyState: ValidKeyState = {\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n keyValue: keys[keys.length - 1] as KEY,\n };\n\n keys.forEach(key => {\n switch (key) {\n case MODIFIER.CTRL:\n keyState.ctrlKey = true;\n break;\n case MODIFIER.ALT:\n case MODIFIER.OPTION:\n keyState.altKey = true;\n break;\n case MODIFIER.CMD:\n keyState.metaKey = true;\n break;\n case MODIFIER.SHIFT:\n keyState.shiftKey = true;\n break;\n default:\n break;\n }\n });\n\n return keyState;\n }\n\n static getKeyStateFromEvent(\n e: React.KeyboardEvent | KeyboardEvent\n ): KeyState {\n const { key: eventKey, keyCode } = e;\n let key = '';\n if (\n eventKey === 'Shift' ||\n eventKey === 'Meta' ||\n eventKey === 'Control' ||\n eventKey === 'Alt'\n ) {\n key = '';\n } else if (\n // This is primarily for Mac which has a symbol keyboard hidden behind the alt key\n // The keyCode still corresponds to the letter keyCode, but the key value will be a symbol\n !Shortcut.isAllowedKey(eventKey) &&\n Shortcut.isAllowedKey(String.fromCharCode(keyCode))\n ) {\n key = String.fromCharCode(keyCode);\n } else {\n key = eventKey;\n }\n\n return {\n keyValue: key,\n altKey: e.altKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n shiftKey: e.shiftKey,\n };\n }\n\n /**\n * Gets display string for Windows (and Linux + any other non-Mac OS)\n * If the key is not an allowed key, the display will only display the modifiers\n * @param keyState KeyState to get the display for\n * @returns The string to display on Windows/non-Mac OS\n */\n private static getWindowsDisplayText(keyState: KeyState): string {\n let display = '';\n\n if (keyState.ctrlKey) {\n display += 'Ctrl+';\n }\n if (keyState.altKey) {\n display += 'Alt+';\n }\n if (keyState.shiftKey) {\n display += 'Shift+';\n }\n\n if (keyState.keyValue === KEY.ESCAPE) {\n display += 'Esc';\n } else if (keyState.keyValue !== null) {\n display += keyState.keyValue;\n }\n\n return display;\n }\n\n /**\n * Gets display string Mac OS\n * If the key is not an allowed key, the display will only display the modifiers\n * @param keyState KeyState to get the display for\n * @returns The string to display on Mac OS\n */\n private static getMacDisplayText(keyState: KeyState): string {\n let display = '';\n\n if (keyState.ctrlKey) {\n display += '⌃';\n }\n if (keyState.altKey) {\n display += '⌥';\n }\n if (keyState.shiftKey) {\n display += '⇧';\n }\n if (keyState.metaKey) {\n display += '⌘';\n }\n\n switch (keyState.keyValue) {\n case KEY.ENTER:\n display += '⏎';\n break;\n case KEY.ESCAPE:\n display += '⎋';\n break;\n case KEY.BACKSPACE:\n display += '⌫';\n break;\n case KEY.DELETE:\n display += '⌦';\n break;\n case null:\n break;\n default:\n display += keyState.keyValue;\n }\n\n return display;\n }\n\n /**\n * Checks if 2 KeyStates match\n * @param state1 First KeyState to compare\n * @param state2 Second KeyState to compare\n * @returns True if the KeyStates match and have non-null keyValues\n */\n static doKeyStatesMatch(state1: KeyState, state2: KeyState): boolean {\n return (\n state1.keyValue?.toUpperCase() === state2.keyValue?.toUpperCase() &&\n state1.altKey === state2.altKey &&\n state1.ctrlKey === state2.ctrlKey &&\n state1.metaKey === state2.metaKey &&\n state1.shiftKey === state2.shiftKey\n );\n }\n\n /**\n * Gets the display string for the current OS from a KeyState.\n * @param keyState KeyState to get the display for\n * @returns Display string for the current OS\n */\n static getDisplayText(keyState: KeyState): string {\n if (keyState.keyValue === null) {\n return '';\n }\n return Shortcut.isMacPlatform\n ? Shortcut.getMacDisplayText(keyState)\n : Shortcut.getWindowsDisplayText(keyState);\n }\n\n constructor({\n id,\n shortcut,\n macShortcut,\n isEditable = true,\n name,\n tooltip,\n }: {\n id: string;\n shortcut: ShortcutKeys;\n macShortcut: ShortcutKeys;\n isEditable?: boolean;\n name: string;\n tooltip?: string;\n }) {\n super();\n this.id = id;\n this.name = name;\n this.tooltip = tooltip;\n this.isEditable = isEditable;\n\n const isMac = Shortcut.isMacPlatform;\n const activeShortcut = isMac ? macShortcut : shortcut;\n this.defaultKeyState = Shortcut.createKeyState(activeShortcut);\n this.keyState = this.defaultKeyState;\n }\n\n /**\n * Gets the display string for the current OS\n */\n getDisplayText(): string {\n return Shortcut.getDisplayText(this.keyState);\n }\n\n /**\n * Gets the current keyState for the Shortcut\n */\n getKeyState(): ValidKeyState {\n return this.keyState;\n }\n\n /**\n * Sets the KeyState if it is valid\n * @param keyState\n */\n setKeyState(keyState: KeyState): void {\n if (Shortcut.isValidKeyState(keyState)) {\n log.debug2(`Shortcut ${this.id} updated to ${JSON.stringify(keyState)}`);\n this.keyState = keyState;\n this.dispatchEvent(\n new EventShimCustomEvent('onUpdate', { detail: this })\n );\n } else {\n log.debug2(\n `Shortcut ${\n this.id\n } tried to update to invalid keyState ${JSON.stringify(keyState)}`\n );\n }\n }\n\n /**\n * Gets the default key state of the shortcut\n * @returns Default key state\n */\n getDefaultKeyState(): ValidKeyState {\n return this.defaultKeyState;\n }\n\n isDefault(): boolean {\n return Shortcut.doKeyStatesMatch(\n this.getDefaultKeyState(),\n this.getKeyState()\n );\n }\n\n /**\n * Sets the shortcut to have null keyValue\n */\n setToNull(): void {\n this.setKeyState(Shortcut.NULL_KEY_STATE);\n }\n\n isNull(): boolean {\n return Shortcut.doKeyStatesMatch(this.keyState, Shortcut.NULL_KEY_STATE);\n }\n\n /**\n * Sets the shortcut to its default key state\n */\n setToDefault(): void {\n this.setKeyState(this.defaultKeyState);\n }\n\n /**\n * Checks if a KeyState matches the KeyState for the shortcut\n * @param keyState KeyState to check\n * @returns True if the passed KeyState matches the Shortcut's KeyState\n */\n matchesKeyState(keyState: KeyState): boolean {\n return Shortcut.doKeyStatesMatch(keyState, this.keyState);\n }\n\n /**\n * Alias for matchesKeyState\n * @param e KeyboardEvent to check if the Shortcut matches\n * @returns True if the event matches the Shortcut's KeyState\n */\n matchesEvent(e: React.KeyboardEvent | KeyboardEvent): boolean {\n return this.matchesKeyState(Shortcut.getKeyStateFromEvent(e));\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Shortcut.js","names":["EventTarget","Log","EventShimCustomEvent","ContextActionUtils","log","module","MODIFIER","KEY","ALLOWED_SINGLE_KEY_SET","Set","ENTER","DELETE","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","Shortcut","isAllowedKey","key","Object","values","includes","isValidKeyState","state","keyValue","isMacPlatform","metaKey","isSingleKey","altKey","ctrlKey","shiftKey","has","createKeyState","keys","keyState","length","forEach","CTRL","ALT","OPTION","CMD","SHIFT","getKeyStateFromEvent","e","eventKey","keyCode","String","fromCharCode","getWindowsDisplayText","display","ESCAPE","getMacDisplayText","BACKSPACE","doKeyStatesMatch","state1","state2","toUpperCase","getDisplayText","constructor","id","shortcut","macShortcut","isEditable","name","tooltip","isMac","activeShortcut","defaultKeyState","getKeyState","setKeyState","debug2","JSON","stringify","dispatchEvent","detail","getDefaultKeyState","isDefault","setToNull","NULL_KEY_STATE","isNull","setToDefault","matchesKeyState","matchesEvent"],"sources":["../../src/shortcuts/Shortcut.ts"],"sourcesContent":["/* eslint-disable no-underscore-dangle */\nimport { EventTarget } from 'event-target-shim';\nimport React from 'react';\nimport { Log } from '@deephaven/log';\nimport { CustomEventMap, EventShimCustomEvent } from '@deephaven/utils';\nimport { ContextActionUtils } from '../context-actions';\n\nconst log = Log.module('Shortcut');\n\nexport enum MODIFIER {\n CTRL = 'MODIFIER_CTRL',\n CMD = 'MODIFIER_CMD',\n ALT = 'MODIFIER_ALT',\n OPTION = 'MODIFIER_OPTION',\n SHIFT = 'MODIFIER_SHIFT',\n}\n\n// The value should match the KeyboardEvent.key value\n// This is the value which will be displayed if no display overrides are done in the OS specific getDisplayString methods\nexport enum KEY {\n A = 'A',\n B = 'B',\n C = 'C',\n D = 'D',\n E = 'E',\n F = 'F',\n G = 'G',\n H = 'H',\n I = 'I',\n J = 'J',\n K = 'K',\n L = 'L',\n M = 'M',\n N = 'N',\n O = 'O',\n P = 'P',\n Q = 'Q',\n R = 'R',\n S = 'S',\n T = 'T',\n U = 'U',\n V = 'V',\n W = 'W',\n X = 'X',\n Y = 'Y',\n Z = 'Z',\n ZERO = '0',\n ONE = '1',\n TWO = '2',\n THREE = '3',\n FOUR = '4',\n FIVE = '5',\n SIX = '6',\n SEVEN = '7',\n EIGHT = '8',\n NINE = '9',\n BACKSPACE = 'Backspace',\n ESCAPE = 'Escape',\n ENTER = 'Enter',\n DELETE = 'Delete',\n SLASH = '/',\n QUESTION_MARK = '?',\n BACKSLASH = '\\\\',\n PIPE = '|',\n MINUS = '-',\n UNDERSCORE = '_',\n EQUALS = '=',\n PLUS = '+',\n BACKTICK = '`',\n TILDE = '~',\n COMMA = ',',\n LEFT_CHEVRON = '<',\n PERIOD = '.',\n RIGHT_CHEVRON = '>',\n SEMICOLON = ';',\n COLON = ':',\n SINGLE_QUOTE = \"'\",\n DOUBLE_QUOTE = '\"',\n LEFT_BRACKET = '[',\n RIGHT_BRACKET = ']',\n LEFT_CURLY = '{',\n RIGHT_CURLY = '}',\n F1 = 'F1',\n F2 = 'F2',\n F3 = 'F3',\n F4 = 'F4',\n F5 = 'F5',\n F6 = 'F6',\n F7 = 'F7',\n F8 = 'F8',\n F9 = 'F9',\n F10 = 'F10',\n F11 = 'F11',\n F12 = 'F12',\n}\n\nconst ALLOWED_SINGLE_KEY_SET: Set<KEY> = new Set([\n KEY.ENTER,\n KEY.DELETE,\n KEY.F1,\n KEY.F2,\n KEY.F3,\n KEY.F4,\n KEY.F5,\n KEY.F6,\n KEY.F7,\n KEY.F8,\n KEY.F9,\n KEY.F10,\n KEY.F11,\n KEY.F12,\n]);\n\ntype ShortcutKeys = [...MODIFIER[], KEY];\n\nexport interface KeyState {\n /**\n * This is purposely keyValue and not key to make KeyboardEvents not match the interface\n * KeyboardEvents need some processing to get the actual value\n * Use Shortcut.getKeyStateFromEvent to get the right KeyState from an event\n */\n keyValue: string | null;\n altKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n shiftKey: boolean;\n}\n\nexport interface ValidKeyState extends KeyState {\n keyValue: KEY | null;\n}\n\ntype EventMap = CustomEventMap<{\n onUpdate: CustomEvent<Shortcut>;\n}>;\n\nexport default class Shortcut extends EventTarget<EventMap, 'strict'> {\n readonly id: string; // Unique identifier for the shortcut\n\n readonly name: string; // e.g. Rename, Save, Run Selected\n\n readonly tooltip?: string;\n\n readonly isEditable: boolean;\n\n private readonly defaultKeyState: ValidKeyState;\n\n keyState: ValidKeyState;\n\n static NULL_KEY_STATE: ValidKeyState = {\n metaKey: false,\n shiftKey: false,\n altKey: false,\n ctrlKey: false,\n keyValue: null,\n };\n\n /**\n * Use to check if a keyCode corresponds to an allowed key for a shortcut\n * @param keyCode The keyCode to check. This should be the charCode of the key\n * @returns Type predicate asserting the key is an allowed KEY\n */\n static isAllowedKey(key: string | null): key is KEY {\n return Object.values(KEY).includes(key as KEY);\n }\n\n /**\n * Checks if a KeyState has a valid key.\n * @param state KeyState with any string as the key\n * @returns True if KeyState is is using an allowed keyCode\n */\n static isValidKeyState(state: KeyState): state is ValidKeyState {\n const { keyValue } = state;\n\n if (keyValue === null) {\n // Null state is valid\n return true;\n }\n\n if (!Shortcut.isMacPlatform && state.metaKey) {\n // MetaKey not allowed in windows\n return false;\n }\n\n if (!Shortcut.isAllowedKey(keyValue)) {\n return false;\n }\n\n const isSingleKey =\n !state.altKey && !state.ctrlKey && !state.metaKey && !state.shiftKey;\n\n return !isSingleKey || ALLOWED_SINGLE_KEY_SET.has(keyValue);\n }\n\n static isMacPlatform = ContextActionUtils.isMacPlatform();\n\n /**\n * Creates a KeyState from a valid array of modifier and key constants\n * @param keys Array of keys in the shortcut. Modifiers first and key last. Should use the MODIFIER and KEY enums\n * @returns KeyState representing the array of constants\n */\n static createKeyState(keys: ShortcutKeys): ValidKeyState {\n const keyState: ValidKeyState = {\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n keyValue: keys[keys.length - 1] as KEY,\n };\n\n keys.forEach(key => {\n switch (key) {\n case MODIFIER.CTRL:\n keyState.ctrlKey = true;\n break;\n case MODIFIER.ALT:\n case MODIFIER.OPTION:\n keyState.altKey = true;\n break;\n case MODIFIER.CMD:\n keyState.metaKey = true;\n break;\n case MODIFIER.SHIFT:\n keyState.shiftKey = true;\n break;\n default:\n break;\n }\n });\n\n return keyState;\n }\n\n static getKeyStateFromEvent(\n e: React.KeyboardEvent | KeyboardEvent\n ): KeyState {\n const { key: eventKey, keyCode } = e;\n let key = '';\n if (\n eventKey === 'Shift' ||\n eventKey === 'Meta' ||\n eventKey === 'Control' ||\n eventKey === 'Alt'\n ) {\n key = '';\n } else if (\n // This is primarily for Mac which has a symbol keyboard hidden behind the alt key\n // The keyCode still corresponds to the letter keyCode, but the key value will be a symbol\n !Shortcut.isAllowedKey(eventKey) &&\n Shortcut.isAllowedKey(String.fromCharCode(keyCode))\n ) {\n key = String.fromCharCode(keyCode);\n } else {\n key = eventKey;\n }\n\n return {\n keyValue: key,\n altKey: e.altKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n shiftKey: e.shiftKey,\n };\n }\n\n /**\n * Gets display string for Windows (and Linux + any other non-Mac OS)\n * If the key is not an allowed key, the display will only display the modifiers\n * @param keyState KeyState to get the display for\n * @returns The string to display on Windows/non-Mac OS\n */\n private static getWindowsDisplayText(keyState: KeyState): string {\n let display = '';\n\n if (keyState.ctrlKey) {\n display += 'Ctrl+';\n }\n if (keyState.altKey) {\n display += 'Alt+';\n }\n if (keyState.shiftKey) {\n display += 'Shift+';\n }\n\n if (keyState.keyValue === KEY.ESCAPE) {\n display += 'Esc';\n } else if (keyState.keyValue !== null) {\n display += keyState.keyValue;\n }\n\n return display;\n }\n\n /**\n * Gets display string Mac OS\n * If the key is not an allowed key, the display will only display the modifiers\n * @param keyState KeyState to get the display for\n * @returns The string to display on Mac OS\n */\n private static getMacDisplayText(keyState: KeyState): string {\n let display = '';\n\n if (keyState.ctrlKey) {\n display += '⌃';\n }\n if (keyState.altKey) {\n display += '⌥';\n }\n if (keyState.shiftKey) {\n display += '⇧';\n }\n if (keyState.metaKey) {\n display += '⌘';\n }\n\n switch (keyState.keyValue) {\n case KEY.ENTER:\n display += '⏎';\n break;\n case KEY.ESCAPE:\n display += '⎋';\n break;\n case KEY.BACKSPACE:\n display += '⌫';\n break;\n case KEY.DELETE:\n display += '⌦';\n break;\n case null:\n break;\n default:\n display += keyState.keyValue;\n }\n\n return display;\n }\n\n /**\n * Checks if 2 KeyStates match\n * @param state1 First KeyState to compare\n * @param state2 Second KeyState to compare\n * @returns True if the KeyStates match and have non-null keyValues\n */\n static doKeyStatesMatch(state1: KeyState, state2: KeyState): boolean {\n return (\n state1.keyValue?.toUpperCase() === state2.keyValue?.toUpperCase() &&\n state1.altKey === state2.altKey &&\n state1.ctrlKey === state2.ctrlKey &&\n state1.metaKey === state2.metaKey &&\n state1.shiftKey === state2.shiftKey\n );\n }\n\n /**\n * Gets the display string for the current OS from a KeyState.\n * @param keyState KeyState to get the display for\n * @returns Display string for the current OS\n */\n static getDisplayText(keyState: KeyState): string {\n if (keyState.keyValue === null) {\n return '';\n }\n return Shortcut.isMacPlatform\n ? Shortcut.getMacDisplayText(keyState)\n : Shortcut.getWindowsDisplayText(keyState);\n }\n\n constructor({\n id,\n shortcut,\n macShortcut,\n isEditable = true,\n name,\n tooltip,\n }: {\n id: string;\n shortcut: ShortcutKeys;\n macShortcut: ShortcutKeys;\n isEditable?: boolean;\n name: string;\n tooltip?: string;\n }) {\n super();\n this.id = id;\n this.name = name;\n this.tooltip = tooltip;\n this.isEditable = isEditable;\n\n const isMac = Shortcut.isMacPlatform;\n const activeShortcut = isMac ? macShortcut : shortcut;\n this.defaultKeyState = Shortcut.createKeyState(activeShortcut);\n this.keyState = this.defaultKeyState;\n }\n\n /**\n * Gets the display string for the current OS\n */\n getDisplayText(): string {\n return Shortcut.getDisplayText(this.keyState);\n }\n\n /**\n * Gets the current keyState for the Shortcut\n */\n getKeyState(): ValidKeyState {\n return this.keyState;\n }\n\n /**\n * Sets the KeyState if it is valid\n * @param keyState\n */\n setKeyState(keyState: KeyState): void {\n if (Shortcut.isValidKeyState(keyState)) {\n log.debug2(`Shortcut ${this.id} updated to ${JSON.stringify(keyState)}`);\n this.keyState = keyState;\n this.dispatchEvent(\n new EventShimCustomEvent('onUpdate', { detail: this })\n );\n } else {\n log.debug2(\n `Shortcut ${\n this.id\n } tried to update to invalid keyState ${JSON.stringify(keyState)}`\n );\n }\n }\n\n /**\n * Gets the default key state of the shortcut\n * @returns Default key state\n */\n getDefaultKeyState(): ValidKeyState {\n return this.defaultKeyState;\n }\n\n isDefault(): boolean {\n return Shortcut.doKeyStatesMatch(\n this.getDefaultKeyState(),\n this.getKeyState()\n );\n }\n\n /**\n * Sets the shortcut to have null keyValue\n */\n setToNull(): void {\n this.setKeyState(Shortcut.NULL_KEY_STATE);\n }\n\n isNull(): boolean {\n return Shortcut.doKeyStatesMatch(this.keyState, Shortcut.NULL_KEY_STATE);\n }\n\n /**\n * Sets the shortcut to its default key state\n */\n setToDefault(): void {\n this.setKeyState(this.defaultKeyState);\n }\n\n /**\n * Checks if a KeyState matches the KeyState for the shortcut\n * @param keyState KeyState to check\n * @returns True if the passed KeyState matches the Shortcut's KeyState\n */\n matchesKeyState(keyState: KeyState): boolean {\n return Shortcut.doKeyStatesMatch(keyState, this.keyState);\n }\n\n /**\n * Alias for matchesKeyState\n * @param e KeyboardEvent to check if the Shortcut matches\n * @returns True if the event matches the Shortcut's KeyState\n */\n matchesEvent(e: React.KeyboardEvent | KeyboardEvent): boolean {\n return this.matchesKeyState(Shortcut.getKeyStateFromEvent(e));\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EventTarget } from 'event-target-shim';
|
|
2
2
|
import { CustomEventMap } from '@deephaven/utils';
|
|
3
3
|
import Shortcut, { KeyState } from './Shortcut';
|
|
4
|
-
|
|
4
|
+
type EventMap = CustomEventMap<{
|
|
5
5
|
onUpdate: CustomEvent<Shortcut>;
|
|
6
6
|
}>;
|
|
7
7
|
declare class ShortcutRegistry extends EventTarget<EventMap, 'strict'> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShortcutRegistry.d.ts","sourceRoot":"","sources":["../../src/shortcuts/ShortcutRegistry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAwB,MAAM,kBAAkB,CAAC;AACxE,OAAO,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIhD,
|
|
1
|
+
{"version":3,"file":"ShortcutRegistry.d.ts","sourceRoot":"","sources":["../../src/shortcuts/ShortcutRegistry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAwB,MAAM,kBAAkB,CAAC;AACxE,OAAO,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIhD,KAAK,QAAQ,GAAG,cAAc,CAAC;IAC7B,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;CACjC,CAAC,CAAC;AAEH,cAAM,gBAAiB,SAAQ,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5D,QAAQ,CAAC,WAAW,wBAA+B;IAEnD,QAAQ,CAAC,mBAAmB,0BAAiC;IAE7D;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ;IAKzE;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ;IA2BjC;;;;OAIG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIrC;;;;;OAKG;IACH,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE;CAKxD;AAED,QAAA,MAAM,QAAQ,4BAAwC,CAAC;AAEvD,eAAe,QAAQ,CAAC"}
|
|
@@ -1,21 +1,16 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
/* eslint-disable max-classes-per-file */
|
|
4
3
|
import { EventTarget } from 'event-target-shim';
|
|
5
4
|
import { Log } from '@deephaven/log';
|
|
6
5
|
import { EventShimCustomEvent } from '@deephaven/utils';
|
|
7
6
|
import Shortcut from "./Shortcut.js";
|
|
8
7
|
var log = Log.module('ShortcutRegistry');
|
|
9
|
-
|
|
10
8
|
class ShortcutRegistry extends EventTarget {
|
|
11
9
|
constructor() {
|
|
12
10
|
super(...arguments);
|
|
13
|
-
|
|
14
11
|
_defineProperty(this, "shortcutMap", new Map());
|
|
15
|
-
|
|
16
12
|
_defineProperty(this, "shortcutsByCategory", new Map());
|
|
17
13
|
}
|
|
18
|
-
|
|
19
14
|
/**
|
|
20
15
|
* Creates a Shortcut and adds it to the registry
|
|
21
16
|
* @param params The constructor params for the {@link Shortcut}
|
|
@@ -25,21 +20,18 @@ class ShortcutRegistry extends EventTarget {
|
|
|
25
20
|
var shortcut = new Shortcut(params);
|
|
26
21
|
return this.add(shortcut);
|
|
27
22
|
}
|
|
23
|
+
|
|
28
24
|
/**
|
|
29
25
|
* Adds a shortcut to the registry. Warns and returns existing shortcut if a shortcut with the same ID already exists
|
|
30
26
|
* @param shortcut Shortcut to add to the registry
|
|
31
27
|
* @returns Shortcut passed if it is not in the registry. Shortcut from the registry if one exists for the same ID
|
|
32
28
|
*/
|
|
33
|
-
|
|
34
|
-
|
|
35
29
|
add(shortcut) {
|
|
36
30
|
var existingShortcut = this.shortcutMap.get(shortcut.id);
|
|
37
|
-
|
|
38
31
|
if (existingShortcut) {
|
|
39
32
|
log.warn("Skipping attempt to add duplicate shortcut ID to registry: ".concat(shortcut.id));
|
|
40
33
|
return existingShortcut;
|
|
41
34
|
}
|
|
42
|
-
|
|
43
35
|
log.debug2("Adding shortcut to registry: ".concat(shortcut.id));
|
|
44
36
|
shortcut.addEventListener('onUpdate', _ref => {
|
|
45
37
|
var {
|
|
@@ -51,41 +43,34 @@ class ShortcutRegistry extends EventTarget {
|
|
|
51
43
|
});
|
|
52
44
|
var category = shortcut.id.split('.')[0];
|
|
53
45
|
this.shortcutMap.set(shortcut.id, shortcut);
|
|
54
|
-
|
|
55
46
|
if (this.shortcutsByCategory.has(category)) {
|
|
56
47
|
var _this$shortcutsByCate;
|
|
57
|
-
|
|
58
48
|
(_this$shortcutsByCate = this.shortcutsByCategory.get(category)) === null || _this$shortcutsByCate === void 0 ? void 0 : _this$shortcutsByCate.push(shortcut);
|
|
59
49
|
} else {
|
|
60
50
|
this.shortcutsByCategory.set(category, [shortcut]);
|
|
61
51
|
}
|
|
62
|
-
|
|
63
52
|
return shortcut;
|
|
64
53
|
}
|
|
54
|
+
|
|
65
55
|
/**
|
|
66
56
|
* Gets a shortcut from the registry from an ID
|
|
67
57
|
* @param id ID of the shortcut
|
|
68
58
|
* @returns The shortcut for that ID if it exists
|
|
69
59
|
*/
|
|
70
|
-
|
|
71
|
-
|
|
72
60
|
get(id) {
|
|
73
61
|
return this.shortcutMap.get(id);
|
|
74
62
|
}
|
|
63
|
+
|
|
75
64
|
/**
|
|
76
65
|
* Gets an array of any registered shortcuts with conflicting key states.
|
|
77
66
|
* Only checks the key states of the current OS (Mac or Windows/Linux)
|
|
78
67
|
* @param keyState
|
|
79
68
|
* @returns Array of conflicting shortcuts. Empty array if none conflict
|
|
80
69
|
*/
|
|
81
|
-
|
|
82
|
-
|
|
83
70
|
getConflictingShortcuts(keyState) {
|
|
84
71
|
return Array.from(this.shortcutMap.values()).filter(shortcut => !shortcut.isNull() && shortcut.matchesKeyState(keyState));
|
|
85
72
|
}
|
|
86
|
-
|
|
87
73
|
}
|
|
88
|
-
|
|
89
74
|
var registry = Object.freeze(new ShortcutRegistry());
|
|
90
75
|
export default registry;
|
|
91
76
|
//# sourceMappingURL=ShortcutRegistry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShortcutRegistry.js","names":["EventTarget","Log","EventShimCustomEvent","Shortcut","log","module","ShortcutRegistry","Map","createAndAdd","params","shortcut","add","existingShortcut","shortcutMap","get","id","warn","debug2","addEventListener","detail","dispatchEvent","category","split","set","shortcutsByCategory","has","push","getConflictingShortcuts","keyState","Array","from","values","filter","isNull","matchesKeyState","registry","Object","freeze"],"sources":["../../src/shortcuts/ShortcutRegistry.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nimport { EventTarget } from 'event-target-shim';\nimport { Log } from '@deephaven/log';\nimport { CustomEventMap, EventShimCustomEvent } from '@deephaven/utils';\nimport Shortcut, { KeyState } from './Shortcut';\n\nconst log = Log.module('ShortcutRegistry');\n\ntype EventMap = CustomEventMap<{\n onUpdate: CustomEvent<Shortcut>;\n}>;\n\nclass ShortcutRegistry extends EventTarget<EventMap, 'strict'> {\n readonly shortcutMap = new Map<string, Shortcut>();\n\n readonly shortcutsByCategory = new Map<string, Shortcut[]>();\n\n /**\n * Creates a Shortcut and adds it to the registry\n * @param params The constructor params for the {@link Shortcut}\n * @returns The created shortcut or the shortcut in the registry if 1 already exists w/ the same ID\n */\n createAndAdd(params: ConstructorParameters<typeof Shortcut>[0]): Shortcut {\n const shortcut = new Shortcut(params);\n return this.add(shortcut);\n }\n\n /**\n * Adds a shortcut to the registry. Warns and returns existing shortcut if a shortcut with the same ID already exists\n * @param shortcut Shortcut to add to the registry\n * @returns Shortcut passed if it is not in the registry. Shortcut from the registry if one exists for the same ID\n */\n add(shortcut: Shortcut): Shortcut {\n const existingShortcut = this.shortcutMap.get(shortcut.id);\n if (existingShortcut) {\n log.warn(\n `Skipping attempt to add duplicate shortcut ID to registry: ${shortcut.id}`\n );\n return existingShortcut;\n }\n\n log.debug2(`Adding shortcut to registry: ${shortcut.id}`);\n\n shortcut.addEventListener('onUpdate', ({ detail }) =>\n this.dispatchEvent(new EventShimCustomEvent('onUpdate', { detail }))\n );\n\n const category = shortcut.id.split('.')[0];\n\n this.shortcutMap.set(shortcut.id, shortcut);\n if (this.shortcutsByCategory.has(category)) {\n this.shortcutsByCategory.get(category)?.push(shortcut);\n } else {\n this.shortcutsByCategory.set(category, [shortcut]);\n }\n\n return shortcut;\n }\n\n /**\n * Gets a shortcut from the registry from an ID\n * @param id ID of the shortcut\n * @returns The shortcut for that ID if it exists\n */\n get(id: string): Shortcut | undefined {\n return this.shortcutMap.get(id);\n }\n\n /**\n * Gets an array of any registered shortcuts with conflicting key states.\n * Only checks the key states of the current OS (Mac or Windows/Linux)\n * @param keyState\n * @returns Array of conflicting shortcuts. Empty array if none conflict\n */\n getConflictingShortcuts(keyState: KeyState): Shortcut[] {\n return Array.from(this.shortcutMap.values()).filter(\n shortcut => !shortcut.isNull() && shortcut.matchesKeyState(keyState)\n );\n }\n}\n\nconst registry = Object.freeze(new ShortcutRegistry());\n\nexport default registry;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ShortcutRegistry.js","names":["EventTarget","Log","EventShimCustomEvent","Shortcut","log","module","ShortcutRegistry","Map","createAndAdd","params","shortcut","add","existingShortcut","shortcutMap","get","id","warn","debug2","addEventListener","detail","dispatchEvent","category","split","set","shortcutsByCategory","has","push","getConflictingShortcuts","keyState","Array","from","values","filter","isNull","matchesKeyState","registry","Object","freeze"],"sources":["../../src/shortcuts/ShortcutRegistry.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nimport { EventTarget } from 'event-target-shim';\nimport { Log } from '@deephaven/log';\nimport { CustomEventMap, EventShimCustomEvent } from '@deephaven/utils';\nimport Shortcut, { KeyState } from './Shortcut';\n\nconst log = Log.module('ShortcutRegistry');\n\ntype EventMap = CustomEventMap<{\n onUpdate: CustomEvent<Shortcut>;\n}>;\n\nclass ShortcutRegistry extends EventTarget<EventMap, 'strict'> {\n readonly shortcutMap = new Map<string, Shortcut>();\n\n readonly shortcutsByCategory = new Map<string, Shortcut[]>();\n\n /**\n * Creates a Shortcut and adds it to the registry\n * @param params The constructor params for the {@link Shortcut}\n * @returns The created shortcut or the shortcut in the registry if 1 already exists w/ the same ID\n */\n createAndAdd(params: ConstructorParameters<typeof Shortcut>[0]): Shortcut {\n const shortcut = new Shortcut(params);\n return this.add(shortcut);\n }\n\n /**\n * Adds a shortcut to the registry. Warns and returns existing shortcut if a shortcut with the same ID already exists\n * @param shortcut Shortcut to add to the registry\n * @returns Shortcut passed if it is not in the registry. Shortcut from the registry if one exists for the same ID\n */\n add(shortcut: Shortcut): Shortcut {\n const existingShortcut = this.shortcutMap.get(shortcut.id);\n if (existingShortcut) {\n log.warn(\n `Skipping attempt to add duplicate shortcut ID to registry: ${shortcut.id}`\n );\n return existingShortcut;\n }\n\n log.debug2(`Adding shortcut to registry: ${shortcut.id}`);\n\n shortcut.addEventListener('onUpdate', ({ detail }) =>\n this.dispatchEvent(new EventShimCustomEvent('onUpdate', { detail }))\n );\n\n const category = shortcut.id.split('.')[0];\n\n this.shortcutMap.set(shortcut.id, shortcut);\n if (this.shortcutsByCategory.has(category)) {\n this.shortcutsByCategory.get(category)?.push(shortcut);\n } else {\n this.shortcutsByCategory.set(category, [shortcut]);\n }\n\n return shortcut;\n }\n\n /**\n * Gets a shortcut from the registry from an ID\n * @param id ID of the shortcut\n * @returns The shortcut for that ID if it exists\n */\n get(id: string): Shortcut | undefined {\n return this.shortcutMap.get(id);\n }\n\n /**\n * Gets an array of any registered shortcuts with conflicting key states.\n * Only checks the key states of the current OS (Mac or Windows/Linux)\n * @param keyState\n * @returns Array of conflicting shortcuts. Empty array if none conflict\n */\n getConflictingShortcuts(keyState: KeyState): Shortcut[] {\n return Array.from(this.shortcutMap.values()).filter(\n shortcut => !shortcut.isNull() && shortcut.matchesKeyState(keyState)\n );\n }\n}\n\nconst registry = Object.freeze(new ShortcutRegistry());\n\nexport default registry;\n"],"mappings":";AAAA;AACA,SAASA,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,GAAG,QAAQ,gBAAgB;AACpC,SAAyBC,oBAAoB,QAAQ,kBAAkB;AAAC,OACjEC,QAAQ;AAEf,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAM,CAAC,kBAAkB,CAAC;AAM1C,MAAMC,gBAAgB,SAASN,WAAW,CAAqB;EAAA;IAAA;IAAA,qCACtC,IAAIO,GAAG,EAAoB;IAAA,6CAEnB,IAAIA,GAAG,EAAsB;EAAA;EAE5D;AACF;AACA;AACA;AACA;EACEC,YAAY,CAACC,MAAiD,EAAY;IACxE,IAAMC,QAAQ,GAAG,IAAIP,QAAQ,CAACM,MAAM,CAAC;IACrC,OAAO,IAAI,CAACE,GAAG,CAACD,QAAQ,CAAC;EAC3B;;EAEA;AACF;AACA;AACA;AACA;EACEC,GAAG,CAACD,QAAkB,EAAY;IAChC,IAAME,gBAAgB,GAAG,IAAI,CAACC,WAAW,CAACC,GAAG,CAACJ,QAAQ,CAACK,EAAE,CAAC;IAC1D,IAAIH,gBAAgB,EAAE;MACpBR,GAAG,CAACY,IAAI,sEACwDN,QAAQ,CAACK,EAAE,EAC1E;MACD,OAAOH,gBAAgB;IACzB;IAEAR,GAAG,CAACa,MAAM,wCAAiCP,QAAQ,CAACK,EAAE,EAAG;IAEzDL,QAAQ,CAACQ,gBAAgB,CAAC,UAAU,EAAE;MAAA,IAAC;QAAEC;MAAO,CAAC;MAAA,OAC/C,IAAI,CAACC,aAAa,CAAC,IAAIlB,oBAAoB,CAAC,UAAU,EAAE;QAAEiB;MAAO,CAAC,CAAC,CAAC;IAAA,EACrE;IAED,IAAME,QAAQ,GAAGX,QAAQ,CAACK,EAAE,CAACO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE1C,IAAI,CAACT,WAAW,CAACU,GAAG,CAACb,QAAQ,CAACK,EAAE,EAAEL,QAAQ,CAAC;IAC3C,IAAI,IAAI,CAACc,mBAAmB,CAACC,GAAG,CAACJ,QAAQ,CAAC,EAAE;MAAA;MAC1C,6BAAI,CAACG,mBAAmB,CAACV,GAAG,CAACO,QAAQ,CAAC,0DAAtC,sBAAwCK,IAAI,CAAChB,QAAQ,CAAC;IACxD,CAAC,MAAM;MACL,IAAI,CAACc,mBAAmB,CAACD,GAAG,CAACF,QAAQ,EAAE,CAACX,QAAQ,CAAC,CAAC;IACpD;IAEA,OAAOA,QAAQ;EACjB;;EAEA;AACF;AACA;AACA;AACA;EACEI,GAAG,CAACC,EAAU,EAAwB;IACpC,OAAO,IAAI,CAACF,WAAW,CAACC,GAAG,CAACC,EAAE,CAAC;EACjC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEY,uBAAuB,CAACC,QAAkB,EAAc;IACtD,OAAOC,KAAK,CAACC,IAAI,CAAC,IAAI,CAACjB,WAAW,CAACkB,MAAM,EAAE,CAAC,CAACC,MAAM,CACjDtB,QAAQ,IAAI,CAACA,QAAQ,CAACuB,MAAM,EAAE,IAAIvB,QAAQ,CAACwB,eAAe,CAACN,QAAQ,CAAC,CACrE;EACH;AACF;AAEA,IAAMO,QAAQ,GAAGC,MAAM,CAACC,MAAM,CAAC,IAAI/B,gBAAgB,EAAE,CAAC;AAEtD,eAAe6B,QAAQ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["default","GLOBAL_SHORTCUTS","Shortcut","ShortcutRegistry"],"sources":["../../src/shortcuts/index.ts"],"sourcesContent":["export { default as GLOBAL_SHORTCUTS } from './GlobalShortcuts';\nexport { default as Shortcut } from './Shortcut';\nexport * from './Shortcut';\nexport { default as ShortcutRegistry } from './ShortcutRegistry';\n"],"mappings":"SAASA,OAAO,IAAIC,
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","GLOBAL_SHORTCUTS","Shortcut","ShortcutRegistry"],"sources":["../../src/shortcuts/index.ts"],"sourcesContent":["export { default as GLOBAL_SHORTCUTS } from './GlobalShortcuts';\nexport { default as Shortcut } from './Shortcut';\nexport * from './Shortcut';\nexport { default as ShortcutRegistry } from './ShortcutRegistry';\n"],"mappings":"SAASA,OAAO,IAAIC,gBAAgB;AAAA,SAC3BD,OAAO,IAAIE,QAAQ;AAAA;AAAA,SAEnBF,OAAO,IAAIG,gBAAgB"}
|