@infinium/react-keyboard-event-handler
Version:
A React component for handling keyboard events.
2 lines • 7.67 kB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define("react-keyboard-event-handler",["react","prop-types"],t):"object"==typeof exports?exports["react-keyboard-event-handler"]=t(require("react"),require("prop-types")):e["react-keyboard-event-handler"]=t(e.react,e["prop-types"])}(window,function(e,t){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(1);Object.defineProperty(t,"default",{enumerable:!0,get:function(){return function(e){return e&&e.__esModule?e:{default:e}}(r).default}}),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=l(n(2)),u=l(n(3)),a=n(4);function l(e){return e&&e.__esModule?e:{default:e}}var s=[],c=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.handleKeyboardEvent=n.handleKeyboardEvent.bind(n),n.registerExclusiveHandler=n.registerExclusiveHandler.bind(n),n.deregisterExclusiveHandler=n.deregisterExclusiveHandler.bind(n),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,i.default.Component),o(t,[{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyboardEvent,!1),document.addEventListener("keyup",this.handleKeyboardEvent,!1),document.addEventListener("keypress",this.handleKeyboardEvent,!1);var e=this.props,t=e.isExclusive,n=e.isDisabled;t&&!n&&this.registerExclusiveHandler()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyboardEvent,!1),document.removeEventListener("keyup",this.handleKeyboardEvent,!1),document.removeEventListener("keypress",this.handleKeyboardEvent,!1),this.deregisterExclusiveHandler()}},{key:"componentDidUpdate",value:function(e){var t=e.isExclusive,n=e.isDisabled;(this.props.isExclusive!==t||this.props.isDisabled!==n)&&(this.props.isExclusive&&!this.props.isDisabled?this.registerExclusiveHandler():this.deregisterExclusiveHandler())}},{key:"registerExclusiveHandler",value:function(){this.deregisterExclusiveHandler(),s.unshift(this)}},{key:"deregisterExclusiveHandler",value:function(){var e=this;s.includes(this)&&(s=s.filter(function(t){return t!==e}))}},{key:"handleKeyboardEvent",value:function(e){var t=this.props,n=t.isDisabled,r=t.handleKeys,o=t.onKeyEvent,i=t.handleEventType,u=t.children,l=t.handleFocusableElements;if(n)return!1;if(!(i===e.type))return!1;if(s.length>0&&s[0]!==this)return!1;var c=e.target===document.body||l,d=this.childrenContainer&&this.childrenContainer.contains(e.target);if(!(u?d:c))return!1;var f=(0,a.findMatchedKey)(e,r);return!!f&&(o(f,e),!0)}},{key:"render",value:function(){var e=this,n=this.props.children,o=Object.assign({},this.props),u=!0,a=!1,l=void 0;try{for(var s,c=Object.keys(t.propTypes)[Symbol.iterator]();!(u=(s=c.next()).done);u=!0){delete o[s.value]}}catch(e){a=!0,l=e}finally{try{!u&&c.return&&c.return()}finally{if(a)throw l}}return n?i.default.createElement("span",r({ref:function(t){e.childrenContainer=t}},o),n):null}}]),t}();t.default=c,c.propTypes={handleKeys:u.default.array,handleEventType:u.default.oneOf(["keydown","keyup","keypress"]),handleFocusableElements:u.default.bool,onKeyEvent:u.default.func,isDisabled:u.default.bool,isExclusive:u.default.bool,children:u.default.any},c.defaultProps={handleKeys:[],handleFocusableElements:!1,handleEventType:"keydown",onKeyEvent:function(){return null}},e.exports=t.default},function(t,n){t.exports=e},function(e,n){e.exports=t},function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(t,"__esModule",{value:!0}),t.matchKeyEvent=p,t.findMatchedKey=function(e,t){var n=t.map(function(e){var t=e.toLowerCase(),n=f[t];return n||[e]}).reduce(function(e,t){return e.concat(t)},[]).find(function(t){return p(e,t)});!n&&t.includes("all")&&(n="other");return n};var o={backspace:[8],del:[46],delete:[46],ins:[45],insert:[45],tab:[9],enter:[13],return:[13],esc:[27],space:[32],pageup:[33],pagedown:[34],end:[35],home:[36],left:[37],up:[38],right:[39],down:[40],shift:[16],ctrl:[17],alt:[18],cap:[20],num:[144],clear:[12],meta:[91],";":[186,59],"=":[187,61],",":[188,44],"-":[189,45,173,109],minus:[189,45,173,109],".":[190,110],"/":[191,111],"`":[192],"[":[219],"\\":[220],"]":[221],"*":[106],"+":[107],plus:[107],"'":[222],quote:[222]},i=Object.keys(o).reduce(function(e,t){return Object.assign(e,r({},t.toUpperCase(),o[t]))},{}),u="0123456789".split("").reduce(function(e,t,n){return Object.assign(e,r({},t,[n+48,n+96]))},{}),a="ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").reduce(function(e,t,n){return Object.assign(e,r({},t.toLowerCase(),[n+65]),r({},t,[n+65]))},{}),l="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19".split(",").reduce(function(e,t,n){return Object.assign(e,r({},"f"+t,[n+112]))},{}),s={control:"ctrl",ctrl:"ctrl",shift:"shift",meta:"meta",cmd:"meta",command:"meta",option:"alt",alt:"alt"},c=t.AllKeys=Object.assign({},o,i,u,a,l),d=Object.assign({},u,a),f={all:Object.keys(c),alphanumeric:Object.keys(d),numeric:Object.keys(u),alphabetic:Object.keys(a),function:Object.keys(l)};function p(e,t){var n=e.which||e.keyCode,r=e.type,o=Object.keys(s).filter(function(t){return e[t+"Key"]}).sort(),i=t.toLowerCase().trim(),u="+"===i?["+"]:i.split(/\s?\+\s?/),a=u.pop(),l=c[a],d=u;if("keypress"===r)return t==String.fromCharCode(n).toLowerCase();if(0===d.length&&0===o.length)return l.indexOf(n)>=0;if(d.length>0&&o.length>0){var f=d.map(function(e){return s[e]}).sort(),p=f.length===o.length&&f.every(function(e,t){return o[t]===e});return l.indexOf(n)>=0&&p}return 0==d.length&&1===o.length&&a===o[0]}}])});
//# sourceMappingURL=react-keyboard-event-handler.js.map