UNPKG

tinykeys

Version:

A tiny (~650 B) & modern library for keybindings.

3 lines (2 loc) 1.48 kB
var t=["Shift","Meta","Alt","Control"],e="object"==typeof navigator?navigator.platform:"",n=/Mac|iPod|iPhone|iPad/.test(e),o=n?"Meta":"Control",r="Win32"===e?["Control","Alt"]:n?["Alt"]:[];function i(t,e){return"function"==typeof t.getModifierState&&(t.getModifierState(e)||r.includes(e)&&t.getModifierState("AltGraph"))}function a(t){return t.trim().split(" ").map(function(t){var e=t.split(/\b\+/),n=e.pop(),r=n.match(/^\((.+)\)$/);return r&&(n=new RegExp("^"+r[1]+"$")),[e=e.map(function(t){return"$mod"===t?o:t}),n]})}function u(e,n){var o=n[0],r=n[1];return!((r instanceof RegExp?!r.test(e.key)&&!r.test(e.code):r.toUpperCase()!==e.key.toUpperCase()&&r!==e.code)||o.find(function(t){return!i(e,t)})||t.find(function(t){return!o.includes(t)&&r!==t&&i(e,t)}))}function c(t,e){var n;void 0===e&&(e={});var o=null!=(n=e.timeout)?n:1e3,r=Object.keys(t).map(function(e){return[a(e),t[e]]}),c=new Map,f=null;return function(t){t instanceof KeyboardEvent&&(r.forEach(function(e){var n=e[0],o=e[1],r=c.get(n)||n;u(t,r[0])?r.length>1?c.set(n,r.slice(1)):(c.delete(n),o(t)):i(t,t.key)||c.delete(n)}),f&&clearTimeout(f),f=setTimeout(c.clear.bind(c),o))}}function f(t,e,n){var o=void 0===n?{}:n,r=o.event,i=void 0===r?"keydown":r,a=o.capture,u=c(e,{timeout:o.timeout});return t.addEventListener(i,u,a),function(){t.removeEventListener(i,u,a)}}export{c as createKeybindingsHandler,u as matchKeyBindingPress,a as parseKeybinding,f as tinykeys}; //# sourceMappingURL=tinykeys.module.js.map