@infinium/react-keyboard-event-handler
Version:
A React component for handling keyboard events.
1 lines • 7.6 kB
JavaScript
!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define("react-keyboard-event-handler",["react","prop-types"],n):"object"==typeof exports?exports["react-keyboard-event-handler"]=n(require("react"),require("prop-types")):t["react-keyboard-event-handler"]=n(t.react,t["prop-types"])}(window,function(r,o){return function(r){var o={};function i(t){if(o[t])return o[t].exports;var n=o[t]={i:t,l:!1,exports:{}};return r[t].call(n.exports,n,n.exports,i),n.l=!0,n.exports}return i.m=r,i.c=o,i.d=function(t,n,r){i.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(n,t){if(1&t&&(n=i(n)),8&t)return n;if(4&t&&"object"==typeof n&&n&&n.__esModule)return n;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:n}),2&t&&"string"!=typeof n)for(var o in n)i.d(r,o,function(t){return n[t]}.bind(null,o));return r},i.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(n,"a",n),n},i.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},i.p="",i(i.s=0)}([function(t,n,r){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var o=r(1);Object.defineProperty(n,"default",{enumerable:!0,get:function(){return(t=o,t&&t.__esModule?t:{default:t}).default;var t}}),t.exports=n.default},function(t,n,r){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var c=Object.assign||function(t){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(t[o]=r[o])}return t},o=function(){function o(t,n){for(var r=0;r<n.length;r++){var o=n[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(t,n,r){return n&&o(t.prototype,n),r&&o(t,r),t}}(),d=u(r(2)),i=u(r(3)),f=r(4);function u(t){return t&&t.__esModule?t:{default:t}}var p=[],a=function(t){function s(t){!function(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}(this,s);var n=function(t,n){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!n||"object"!=typeof n&&"function"!=typeof n?t:n}(this,(s.__proto__||Object.getPrototypeOf(s)).call(this,t));return n.handleKeyboardEvent=n.handleKeyboardEvent.bind(n),n.registerExclusiveHandler=n.registerExclusiveHandler.bind(n),n.deregisterExclusiveHandler=n.deregisterExclusiveHandler.bind(n),n}return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function, not "+typeof n);t.prototype=Object.create(n&&n.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),n&&(Object.setPrototypeOf?Object.setPrototypeOf(t,n):t.__proto__=n)}(s,d.default.Component),o(s,[{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyboardEvent,!1),document.addEventListener("keyup",this.handleKeyboardEvent,!1),document.addEventListener("keypress",this.handleKeyboardEvent,!1);var t=this.props,n=t.isExclusive,r=t.isDisabled;n&&!r&&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(t){var n=t.isExclusive,r=t.isDisabled;(this.props.isExclusive!==n||this.props.isDisabled!==r)&&(this.props.isExclusive&&!this.props.isDisabled?this.registerExclusiveHandler():this.deregisterExclusiveHandler())}},{key:"registerExclusiveHandler",value:function(){this.deregisterExclusiveHandler(),p.unshift(this)}},{key:"deregisterExclusiveHandler",value:function(){var n=this;p.includes(this)&&(p=p.filter(function(t){return t!==n}))}},{key:"handleKeyboardEvent",value:function(t){var n=this.props,r=n.isDisabled,o=n.handleKeys,i=n.onKeyEvent,u=n.handleEventType,a=n.children,l=n.handleFocusableElements;if(r)return!1;if(!(u===t.type))return!1;if(0<p.length&&p[0]!==this)return!1;var s=t.target===document.body||l,c=this.childrenContainer&&this.childrenContainer.contains(t.target);if(!(a?c:s))return!1;var d=(0,f.findMatchedKey)(t,o);return!!d&&(i(d,t),!0)}},{key:"render",value:function(){var t=this,n=this.props.children,r=Object.assign({},this.props),o=!0,i=!1,u=void 0;try{for(var a,l=Object.keys(s.propTypes)[Symbol.iterator]();!(o=(a=l.next()).done);o=!0){delete r[a.value]}}catch(t){i=!0,u=t}finally{try{!o&&l.return&&l.return()}finally{if(i)throw u}}return n?d.default.createElement("span",c({ref:function(e){t.childrenContainer=e}},r),n):null}}]),s}();(n.default=a).propTypes={handleKeys:i.default.array,handleEventType:i.default.oneOf(["keydown","keyup","keypress"]),handleFocusableElements:i.default.bool,onKeyEvent:i.default.func,isDisabled:i.default.bool,isExclusive:i.default.bool,children:i.default.any},a.defaultProps={handleKeys:[],handleFocusableElements:!1,handleEventType:"keydown",onKeyEvent:function(){return null}},t.exports=n.default},function(t,n){t.exports=r},function(t,n){t.exports=o},function(t,n,r){"use strict";function o(t,n,r){return n in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r,t}Object.defineProperty(n,"__esModule",{value:!0}),n.matchKeyEvent=f,n.findMatchedKey=function(n,t){var r=t.map(function(t){var n=t.toLowerCase(),r=d[n];return r||[t]}).reduce(function(t,n){return t.concat(n)},[]).find(function(t){return f(n,t)});!r&&t.includes("all")&&(r="other");return r};var i={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]},u=Object.keys(i).reduce(function(t,n){return Object.assign(t,o({},n.toUpperCase(),i[n]))},{}),a="0123456789".split("").reduce(function(t,n,r){return Object.assign(t,o({},n,[r+48,r+96]))},{}),l="ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").reduce(function(t,n,r){return Object.assign(t,o({},n.toLowerCase(),[r+65]),o({},n,[r+65]))},{}),s="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19".split(",").reduce(function(t,n,r){return Object.assign(t,o({},"f"+n,[r+112]))},{}),p={control:"ctrl",ctrl:"ctrl",shift:"shift",meta:"meta",cmd:"meta",command:"meta",option:"alt",alt:"alt"},y=n.AllKeys=Object.assign({},i,u,a,l,s),c=Object.assign({},a,l),d={all:Object.keys(y),alphanumeric:Object.keys(c),numeric:Object.keys(a),alphabetic:Object.keys(l),function:Object.keys(s)};function f(n,t){var r=n.which||n.keyCode,o=n.type,i=Object.keys(p).filter(function(t){return n[t+"Key"]}).sort(),u=t.toLowerCase().trim(),a="+"===u?["+"]:u.split(/\s?\+\s?/),l=a.pop(),s=y[l],c=a;if("keypress"===o)return t==String.fromCharCode(r).toLowerCase();if(0===c.length&&0===i.length)return 0<=s.indexOf(r);if(0<c.length&&0<i.length){var d=c.map(function(t){return p[t]}).sort(),f=d.length===i.length&&d.every(function(t,n){return i[n]===t});return 0<=s.indexOf(r)&&f}return 0==c.length&&1===i.length&&l===i[0]}}])});