UNPKG

@geist-ui/react

Version:

Modern and minimalist React UI library.

210 lines (189 loc) 7.78 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); /** * KeyBinding Codes * The content of this file is based on the design of the open source project "microsoft/vscode", * Copyright (c) Microsoft Corporation. All rights reserved. * * We inherit the KeyMod values from "microsoft/vscode", * but use the Browser's KeyboardEvent event implementation, and all values are used only as identification. */ exports.KeyCode = void 0; (function (KeyCode) { KeyCode[KeyCode["Unknown"] = 0] = "Unknown"; KeyCode[KeyCode["Backspace"] = 8] = "Backspace"; KeyCode[KeyCode["Tab"] = 9] = "Tab"; KeyCode[KeyCode["Enter"] = 13] = "Enter"; KeyCode[KeyCode["Shift"] = 16] = "Shift"; KeyCode[KeyCode["Ctrl"] = 17] = "Ctrl"; KeyCode[KeyCode["Alt"] = 18] = "Alt"; KeyCode[KeyCode["PauseBreak"] = 19] = "PauseBreak"; KeyCode[KeyCode["CapsLock"] = 20] = "CapsLock"; KeyCode[KeyCode["Escape"] = 27] = "Escape"; KeyCode[KeyCode["Space"] = 32] = "Space"; KeyCode[KeyCode["PageUp"] = 33] = "PageUp"; KeyCode[KeyCode["PageDown"] = 34] = "PageDown"; KeyCode[KeyCode["End"] = 35] = "End"; KeyCode[KeyCode["Home"] = 36] = "Home"; KeyCode[KeyCode["LeftArrow"] = 37] = "LeftArrow"; KeyCode[KeyCode["UpArrow"] = 38] = "UpArrow"; KeyCode[KeyCode["RightArrow"] = 39] = "RightArrow"; KeyCode[KeyCode["DownArrow"] = 40] = "DownArrow"; KeyCode[KeyCode["Insert"] = 45] = "Insert"; KeyCode[KeyCode["Delete"] = 46] = "Delete"; KeyCode[KeyCode["KEY_0"] = 48] = "KEY_0"; KeyCode[KeyCode["KEY_1"] = 49] = "KEY_1"; KeyCode[KeyCode["KEY_2"] = 50] = "KEY_2"; KeyCode[KeyCode["KEY_3"] = 51] = "KEY_3"; KeyCode[KeyCode["KEY_4"] = 52] = "KEY_4"; KeyCode[KeyCode["KEY_5"] = 53] = "KEY_5"; KeyCode[KeyCode["KEY_6"] = 54] = "KEY_6"; KeyCode[KeyCode["KEY_7"] = 55] = "KEY_7"; KeyCode[KeyCode["KEY_8"] = 56] = "KEY_8"; KeyCode[KeyCode["KEY_9"] = 57] = "KEY_9"; KeyCode[KeyCode["KEY_A"] = 65] = "KEY_A"; KeyCode[KeyCode["KEY_B"] = 66] = "KEY_B"; KeyCode[KeyCode["KEY_C"] = 67] = "KEY_C"; KeyCode[KeyCode["KEY_D"] = 68] = "KEY_D"; KeyCode[KeyCode["KEY_E"] = 69] = "KEY_E"; KeyCode[KeyCode["KEY_F"] = 70] = "KEY_F"; KeyCode[KeyCode["KEY_G"] = 71] = "KEY_G"; KeyCode[KeyCode["KEY_H"] = 72] = "KEY_H"; KeyCode[KeyCode["KEY_I"] = 73] = "KEY_I"; KeyCode[KeyCode["KEY_J"] = 74] = "KEY_J"; KeyCode[KeyCode["KEY_K"] = 75] = "KEY_K"; KeyCode[KeyCode["KEY_L"] = 76] = "KEY_L"; KeyCode[KeyCode["KEY_M"] = 77] = "KEY_M"; KeyCode[KeyCode["KEY_N"] = 78] = "KEY_N"; KeyCode[KeyCode["KEY_O"] = 79] = "KEY_O"; KeyCode[KeyCode["KEY_P"] = 80] = "KEY_P"; KeyCode[KeyCode["KEY_Q"] = 81] = "KEY_Q"; KeyCode[KeyCode["KEY_R"] = 82] = "KEY_R"; KeyCode[KeyCode["KEY_S"] = 83] = "KEY_S"; KeyCode[KeyCode["KEY_T"] = 84] = "KEY_T"; KeyCode[KeyCode["KEY_U"] = 85] = "KEY_U"; KeyCode[KeyCode["KEY_V"] = 86] = "KEY_V"; KeyCode[KeyCode["KEY_W"] = 87] = "KEY_W"; KeyCode[KeyCode["KEY_X"] = 88] = "KEY_X"; KeyCode[KeyCode["KEY_Y"] = 89] = "KEY_Y"; KeyCode[KeyCode["KEY_Z"] = 90] = "KEY_Z"; KeyCode[KeyCode["Meta"] = 91] = "Meta"; KeyCode[KeyCode["F1"] = 112] = "F1"; KeyCode[KeyCode["F2"] = 113] = "F2"; KeyCode[KeyCode["F3"] = 114] = "F3"; KeyCode[KeyCode["F4"] = 115] = "F4"; KeyCode[KeyCode["F5"] = 116] = "F5"; KeyCode[KeyCode["F6"] = 117] = "F6"; KeyCode[KeyCode["F7"] = 118] = "F7"; KeyCode[KeyCode["F8"] = 119] = "F8"; KeyCode[KeyCode["F9"] = 120] = "F9"; KeyCode[KeyCode["F10"] = 121] = "F10"; KeyCode[KeyCode["F11"] = 122] = "F11"; KeyCode[KeyCode["F12"] = 123] = "F12"; KeyCode[KeyCode["NumLock"] = 144] = "NumLock"; KeyCode[KeyCode["ScrollLock"] = 145] = "ScrollLock"; KeyCode[KeyCode["Equal"] = 187] = "Equal"; KeyCode[KeyCode["Minus"] = 189] = "Minus"; KeyCode[KeyCode["Backquote"] = 192] = "Backquote"; KeyCode[KeyCode["Backslash"] = 220] = "Backslash"; })(exports.KeyCode || (exports.KeyCode = {})); exports.KeyMod = void 0; (function (KeyMod) { KeyMod[KeyMod["CtrlCmd"] = 2048] = "CtrlCmd"; KeyMod[KeyMod["Shift"] = 1024] = "Shift"; KeyMod[KeyMod["Alt"] = 512] = "Alt"; KeyMod[KeyMod["WinCtrl"] = 256] = "WinCtrl"; })(exports.KeyMod || (exports.KeyMod = {})); var isBrowser = function isBrowser() { return Boolean(typeof window !== 'undefined' && window.document && window.document.createElement); }; var isMac = function isMac() { if (!isBrowser()) return false; return navigator.platform.toUpperCase().indexOf('MAC') >= 0; }; /* istanbul ignore next */ var getCtrlKeysByPlatform = function getCtrlKeysByPlatform() { return { CtrlCmd: isMac() ? 'metaKey' : 'ctrlKey', WinCtrl: isMac() ? 'ctrlKey' : 'metaKey' }; }; var getActiveModMap = function getActiveModMap(bindings) { var modBindings = bindings.filter(function (item) { return !!exports.KeyMod[item]; }); var activeModMap = { CtrlCmd: false, Shift: false, Alt: false, WinCtrl: false }; modBindings.forEach(function (code) { var modKey = exports.KeyMod[code]; activeModMap[modKey] = true; }); return activeModMap; }; var useKeyboard = function useKeyboard(handler, keyBindings) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var bindings = Array.isArray(keyBindings) ? keyBindings : [keyBindings]; var _options$disableGloba = options.disableGlobalEvent, disableGlobalEvent = _options$disableGloba === void 0 ? false : _options$disableGloba, _options$capture = options.capture, capture = _options$capture === void 0 ? false : _options$capture, _options$stopPropagat = options.stopPropagation, stopPropagation = _options$stopPropagat === void 0 ? false : _options$stopPropagat, _options$preventDefau = options.preventDefault, preventDefault = _options$preventDefau === void 0 ? true : _options$preventDefau, _options$event = options.event, event = _options$event === void 0 ? 'keydown' : _options$event; var activeModMap = getActiveModMap(bindings); var keyCode = bindings.filter(function (item) { return !exports.KeyMod[item]; })[0]; var _getCtrlKeysByPlatfor = getCtrlKeysByPlatform(), CtrlCmd = _getCtrlKeysByPlatfor.CtrlCmd, WinCtrl = _getCtrlKeysByPlatfor.WinCtrl; var eventHandler = function eventHandler(event) { if (activeModMap.Shift && !event.shiftKey) return; if (activeModMap.Alt && !event.altKey) return; if (activeModMap.CtrlCmd && !event[CtrlCmd]) return; if (activeModMap.WinCtrl && !event[WinCtrl]) return; if (keyCode && event.keyCode !== keyCode) return; if (stopPropagation) { event.stopPropagation(); } if (preventDefault) { event.preventDefault(); } handler && handler(event); }; React.useEffect(function () { if (!disableGlobalEvent) { document.addEventListener(event, eventHandler); } return function () { document.removeEventListener(event, eventHandler); }; }, [disableGlobalEvent]); var elementBindingHandler = function elementBindingHandler(elementEventType) { var isCapture = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (elementEventType !== event) return function () {}; if (isCapture !== capture) return function () {}; return function (e) { return eventHandler(e); }; }; return { bindings: { onKeyDown: elementBindingHandler('keydown'), onKeyDownCapture: elementBindingHandler('keydown', true), onKeyPress: elementBindingHandler('keypress'), onKeyPressCapture: elementBindingHandler('keypress', true), onKeyUp: elementBindingHandler('keyup'), onKeyUpCapture: elementBindingHandler('keyup', true) } }; }; exports["default"] = useKeyboard;