react-hotkeys-hook.cjs.development.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. 'use strict';
  2. function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
  3. var hotkeys = _interopDefault(require('hotkeys-js'));
  4. var react = require('react');
  5. /**
  6. * @deprecated Use isHotkeyPressed instead. Will be removed version 4.
  7. */
  8. function useIsHotkeyPressed() {
  9. return hotkeys.isPressed;
  10. }
  11. hotkeys.filter = function () {
  12. return true;
  13. };
  14. var tagFilter = function tagFilter(_ref, enableOnTags) {
  15. var target = _ref.target;
  16. var targetTagName = target && target.tagName;
  17. return Boolean(targetTagName && enableOnTags && enableOnTags.includes(targetTagName));
  18. };
  19. var isKeyboardEventTriggeredByInput = function isKeyboardEventTriggeredByInput(ev) {
  20. return tagFilter(ev, ['INPUT', 'TEXTAREA', 'SELECT']);
  21. };
  22. function useHotkeys(keys, callback, options, deps) {
  23. if (options instanceof Array) {
  24. deps = options;
  25. options = undefined;
  26. }
  27. var _ref2 = options || {},
  28. enableOnTags = _ref2.enableOnTags,
  29. filter = _ref2.filter,
  30. keyup = _ref2.keyup,
  31. keydown = _ref2.keydown,
  32. _ref2$filterPreventDe = _ref2.filterPreventDefault,
  33. filterPreventDefault = _ref2$filterPreventDe === void 0 ? true : _ref2$filterPreventDe,
  34. _ref2$enabled = _ref2.enabled,
  35. enabled = _ref2$enabled === void 0 ? true : _ref2$enabled,
  36. _ref2$enableOnContent = _ref2.enableOnContentEditable,
  37. enableOnContentEditable = _ref2$enableOnContent === void 0 ? false : _ref2$enableOnContent;
  38. var ref = react.useRef(null); // The return value of this callback determines if the browsers default behavior is prevented.
  39. var memoisedCallback = react.useCallback(function (keyboardEvent, hotkeysEvent) {
  40. var _keyboardEvent$target, _ref$current;
  41. if (filter && !filter(keyboardEvent)) {
  42. return !filterPreventDefault;
  43. } // Check whether the hotkeys was triggered inside an input and that input is enabled or if it was triggered by a content editable tag and it is enabled.
  44. if (isKeyboardEventTriggeredByInput(keyboardEvent) && !tagFilter(keyboardEvent, enableOnTags) || (_keyboardEvent$target = keyboardEvent.target) != null && _keyboardEvent$target.isContentEditable && !enableOnContentEditable) {
  45. return true;
  46. }
  47. if (ref.current === null || document.activeElement === ref.current || (_ref$current = ref.current) != null && _ref$current.contains(document.activeElement)) {
  48. callback(keyboardEvent, hotkeysEvent);
  49. return true;
  50. }
  51. return false;
  52. }, deps ? [ref, enableOnTags, filter].concat(deps) : [ref, enableOnTags, filter]);
  53. react.useEffect(function () {
  54. if (!enabled) {
  55. hotkeys.unbind(keys, memoisedCallback);
  56. return;
  57. } // In this case keydown is likely undefined, so we set it to false, since hotkeys needs the `keydown` key to have a value.
  58. if (keyup && keydown !== true) {
  59. options.keydown = false;
  60. }
  61. hotkeys(keys, options || {}, memoisedCallback);
  62. return function () {
  63. return hotkeys.unbind(keys, memoisedCallback);
  64. };
  65. }, [memoisedCallback, keys, enabled]);
  66. return ref;
  67. }
  68. var isHotkeyPressed = hotkeys.isPressed;
  69. exports.isHotkeyPressed = isHotkeyPressed;
  70. exports.useHotkeys = useHotkeys;
  71. exports.useIsHotkeyPressed = useIsHotkeyPressed;
  72. //# sourceMappingURL=react-hotkeys-hook.cjs.development.js.map