diff --git a/build/css/index.css b/build/css/index.css index 0f46dacf..42e30ee1 100644 --- a/build/css/index.css +++ b/build/css/index.css @@ -1,6 +1,6 @@ /*! * - * simple-keyboard v2.5.11 + * simple-keyboard v2.6.0 * https://github.com/hodgef/simple-keyboard * * Copyright (c) Francisco Hodge (https://github.com/hodgef) diff --git a/build/index.js b/build/index.js index 0ab21a48..b7301201 100644 --- a/build/index.js +++ b/build/index.js @@ -1,6 +1,6 @@ /*! * - * simple-keyboard v2.5.11 + * simple-keyboard v2.6.0 * https://github.com/hodgef/simple-keyboard * * Copyright (c) Francisco Hodge (https://github.com/hodgef) @@ -9,5 +9,5 @@ * LICENSE file in the root directory of this source tree. * */ -!function(t,e){"object"===typeof exports&&"object"===typeof module?module.exports=e():"function"===typeof define&&define.amd?define([],e):"object"===typeof exports?exports.SimpleKeyboard=e():t.SimpleKeyboard=e()}(this,function(){return function(t){function e(o){if(n[o])return n[o].exports;var i=n[o]={i:o,l:!1,exports:{}};return t[o].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,o){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=n(2);e.default=o.a},function(t,e,n){"use strict";function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=n(3),a=(n.n(i),n(4)),s=n(5),r=n(6),u="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c=function t(){var e=this;o(this,t),this.handleButtonClicked=function(t){var n=e.options.debug;if("{//}"===t)return!1;"function"===typeof e.options.onKeyPress&&e.options.onKeyPress(t),e.input[e.options.inputName]||(e.input[e.options.inputName]="");var o=e.utilities.getUpdatedInput(t,e.input[e.options.inputName],e.options,e.caretPosition);if(e.input[e.options.inputName]!==o){if(e.options.maxLength&&e.utilities.handleMaxLength(e.input,e.options,o))return!1;e.input[e.options.inputName]=o,n&&console.log("Input changed:",e.input),e.options.syncInstanceInputs&&e.syncInstanceInputs(e.input),"function"===typeof e.options.onChange&&e.options.onChange(e.input[e.options.inputName])}n&&console.log("Key pressed:",t)},this.syncInstanceInputs=function(){e.dispatch(function(t){t.replaceInput(e.input)})},this.clearInput=function(t){t=t||e.options.inputName,e.input[e.options.inputName]="",e.options.syncInstanceInputs&&e.syncInstanceInputs(e.input)},this.getInput=function(t){return t=t||e.options.inputName,e.options.syncInstanceInputs&&e.syncInstanceInputs(e.input),e.input[e.options.inputName]},this.setInput=function(t,n){n=n||e.options.inputName,e.input[n]=t,e.options.syncInstanceInputs&&e.syncInstanceInputs(e.input)},this.replaceInput=function(t){e.input=t},this.setOptions=function(t){t=t||{},e.options=Object.assign(e.options,t),e.render()},this.clear=function(){e.keyboardDOM.innerHTML="",e.keyboardDOM.className=e.keyboardDOMClass,e.buttonElements={}},this.dispatch=function(t){return window.SimpleKeyboardInstances?Object.keys(window.SimpleKeyboardInstances).forEach(function(e){t(window.SimpleKeyboardInstances[e],e)}):(console.error("SimpleKeyboardInstances is not defined. Dispatch cannot be called."),!1)},this.addButtonTheme=function(t,n){if(!n||!t)return!1;t.split(" ").forEach(function(o){n.split(" ").forEach(function(n){e.options.buttonTheme||(e.options.buttonTheme=[]);var i=!1;e.options.buttonTheme.map(function(t){if(t.class.split(" ").includes(n)){i=!0;var e=t.buttons.split(" ");e.includes(o)||(i=!0,e.push(o),t.buttons=e.join(" "))}return t}),i||e.options.buttonTheme.push({class:n,buttons:t})})}),e.render()},this.removeButtonTheme=function(t,n){if(!t&&!n)return e.options.buttonTheme=[],e.render(),!1;if(t&&Array.isArray(e.options.buttonTheme)&&e.options.buttonTheme.length){var o=t.split(" ");o.forEach(function(t,i){e.options.buttonTheme.map(function(i,a){if(n&&n.includes(i.class)||!n){var s=void 0;o.includes(t)&&(s=i.buttons.split(" ").filter(function(e){return e!==t})),s.length?i.buttons=s.join(" "):(e.options.buttonTheme.splice(a,1),i=null)}return i})}),e.render()}},this.getButtonElement=function(t){var n=void 0,o=e.buttonElements[t];return o&&(n=o.length>1?o:o[0]),n},this.handleCaret=function(){e.options.debug&&console.log("Caret handling started");var t=function(t){var n=t.target.tagName.toLowerCase();"textarea"!==n&&"input"!==n||(e.caretPosition=t.target.selectionStart,e.options.debug&&console.log("Caret at: ",t.target.selectionStart,t.target.tagName.toLowerCase()))};document.addEventListener("keyup",t),document.addEventListener("mouseup",t),document.addEventListener("touchend",t)},this.onInit=function(){e.options.debug&&console.log("Initialized"),e.handleCaret(),"function"===typeof e.options.onInit&&e.options.onInit()},this.onRender=function(){"function"===typeof e.options.onRender&&e.options.onRender()},this.render=function(){e.clear();var t=e.options.layout?"hg-layout-custom":"hg-layout-"+e.options.layoutName,n=e.options.layout||s.a.getLayout(e.options.layoutName),o={};Array.isArray(e.options.buttonTheme)&&e.options.buttonTheme.forEach(function(t){if(t.buttons&&t.class){var e=t.buttons.split(" ");Array.isArray(e)&&e.forEach(function(e){var n=o[e];o[e]=n?n+" "+t.class:t.class})}else console.warn('buttonTheme row is missing the "buttons" or the "class". Please check the documentation.')}),e.keyboardDOM.className+=" "+e.options.theme+" "+t,n[e.options.layoutName].forEach(function(t,n){var i=t.split(" "),a=document.createElement("div");a.className+="hg-row",i.forEach(function(t,i){var s=e.utilities.getButtonClass(t),r=o[t],u=e.utilities.getButtonDisplayName(t,e.options.display,e.options.mergeDisplay),c=document.createElement("div");c.className+="hg-button "+s+(r?" "+r:""),c.onclick=function(){return e.handleButtonClicked(t)},c.setAttribute("data-skBtn",t);var p=e.options.layoutName+"-r"+n+"b"+i;c.setAttribute("data-skBtnUID",p);var l=document.createElement("span");l.innerHTML=u,c.appendChild(l),e.buttonElements[t]||(e.buttonElements[t]=[]),e.buttonElements[t].push(c),a.appendChild(c)}),e.keyboardDOM.appendChild(a)}),e.onRender(),e.initialized||(e.initialized=!0,e.onInit())};var n="string"===typeof(arguments.length<=0?void 0:arguments[0])?arguments.length<=0?void 0:arguments[0]:".simple-keyboard",i="object"===u(arguments.length<=0?void 0:arguments[0])?arguments.length<=0?void 0:arguments[0]:arguments.length<=1?void 0:arguments[1];i||(i={}),this.utilities=new r.a(this),this.keyboardDOM=document.querySelector(n),this.options=i,this.options.layoutName=this.options.layoutName||"default",this.options.theme=this.options.theme||"hg-theme-default",this.options.inputName=this.options.inputName||"default",this.input={},this.input[this.options.inputName]="",this.keyboardDOMClass=n.split(".").join(""),this.timers={},this.buttonElements={},this.keyboardDOM?this.render():console.error('"'+n+'" was not found in the DOM.'),window.SimpleKeyboardInstances||(window.SimpleKeyboardInstances={}),window.SimpleKeyboardInstances[this.utilities.camelCase(this.keyboardDOMClass)]=this,this.physicalKeyboardInterface=new a.a(this)};e.a=c},function(t,e){},function(t,e,n){"use strict";function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function t(e){var n=this;if(o(this,t),this.initKeyboardListener=function(){document.addEventListener("keydown",function(t){if(n.simpleKeyboardInstance.options.physicalKeyboardHighlight){var e=n.getSimpleKeyboardLayoutKey(t);n.simpleKeyboardInstance.dispatch(function(t){var o=t.getButtonElement(e)||t.getButtonElement("{"+e+"}");o&&(o.style.backgroundColor=n.simpleKeyboardInstance.options.physicalKeyboardHighlightBgColor||"#9ab4d0",o.style.color=n.simpleKeyboardInstance.options.physicalKeyboardHighlightTextColor||"white")})}}),document.addEventListener("keyup",function(t){if(n.simpleKeyboardInstance.options.physicalKeyboardHighlight){var e=n.getSimpleKeyboardLayoutKey(t);n.simpleKeyboardInstance.dispatch(function(t){var n=t.getButtonElement(e)||t.getButtonElement("{"+e+"}");n&&n.removeAttribute("style")})}})},this.getSimpleKeyboardLayoutKey=function(t){n.simpleKeyboardInstance.options.debug&&console.log(t);var e=void 0;return e=t.code.includes("Numpad")||t.code.includes("Shift")||t.code.includes("Space")||t.code.includes("Backspace")||t.code.includes("Control")||t.code.includes("Alt")||t.code.includes("Meta")?t.code:t.key,(e!==e.toUpperCase()||"F"===t.code[0]&&Number.isInteger(Number(t.code[1]))&&t.code.length<=3)&&(e=e.toLowerCase()),e},this.simpleKeyboardInstance=e,window.SimpleKeyboardPhysicalKeyboardInit)return!1;window.SimpleKeyboardPhysicalKeyboardInit=!0,this.initKeyboardListener()};e.a=i},function(t,e,n){"use strict";function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function t(){o(this,t)};i.getLayout=function(t){return"qwerty"===t?{default:["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} q w e r t y u i o p [ ] \\","{lock} a s d f g h j k l ; ' {enter}","{shift} z x c v b n m , . / {shift}",".com @ {space}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} Q W E R T Y U I O P { } |",'{lock} A S D F G H J K L : " {enter}',"{shift} Z X C V B N M < > ? {shift}",".com @ {space}"]}:"numeric"===t?{default:["1 2 3","4 5 6","7 8 9","{//} 0 {bksp}"]}:i.getLayout("qwerty")},e.a=i},function(t,e,n){"use strict";function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a=function(){function t(t,e){for(var n=0;n0?a=n.removeAt(a,i):"{space}"===t?a=n.addStringAt(a," ",i):"{tab}"!==t||"boolean"===typeof o.tabCharOnTab&&!1===o.tabCharOnTab?"{enter}"!==t&&"{numpadenter}"!==t||!o.newLineOnEnter?t.includes("numpad")&&Number.isInteger(Number(t[t.length-2]))?a=n.addStringAt(a,t[t.length-2],i):"{numpaddivide}"===t?a=n.addStringAt(a,"/",i):"{numpadmultiply}"===t?a=n.addStringAt(a,"*",i):"{numpadsubtract}"===t?a=n.addStringAt(a,"-",i):"{numpadadd}"===t?a=n.addStringAt(a,"+",i):"{numpadadd}"===t?a=n.addStringAt(a,"+",i):"{numpaddecimal}"===t?a=n.addStringAt(a,".",i):"{"===t||"}"===t?a=n.addStringAt(a,t,i):t.includes("{")||t.includes("}")||(a=n.addStringAt(a,t,i)):a=n.addStringAt(a,"\n",i):a=n.addStringAt(a,"\t",i),a},this.updateCaretPos=function(t,e){e?n.simpleKeyboardInstance.caretPosition>0&&(n.simpleKeyboardInstance.caretPosition=n.simpleKeyboardInstance.caretPosition-t):n.simpleKeyboardInstance.caretPosition=n.simpleKeyboardInstance.caretPosition+t},this.isMaxLengthReached=function(){return Boolean(n.maxLengthReached)},this.camelCase=function(t){return t.toLowerCase().trim().split(/[.\-_\s]/g).reduce(function(t,e){return t+e[0].toUpperCase()+e.slice(1)})},this.simpleKeyboardInstance=e}return a(t,[{key:"normalizeString",value:function(t){var e=void 0;return e="@"===t?"at":","===t?"comma":"."===t?"dot":"\\"===t?"backslash":"/"===t?"fordardslash":"*"===t?"asterisk":"&"===t?"ampersand":"$"===t?"dollarsign":"="===t?"equals":"+"===t?"plus":"-"===t?"minus":"'"===t?"apostrophe":";"===t?"colon":"["===t?"openbracket":"]"===t?"closebracket":"//"===t?"emptybutton":".com"===t?"com":"",e?" hg-button-"+e:""}},{key:"getDefaultDiplay",value:function(){return{"{bksp}":"backspace","{backspace}":"backspace","{enter}":"< enter","{shift}":"shift","{shiftleft}":"shift","{shiftright}":"shift","{alt}":"alt","{s}":"shift","{tab}":"tab","{lock}":"caps","{capslock}":"caps","{accept}":"Submit","{space}":" ","{//}":" ","{esc}":"esc","{escape}":"esc","{f1}":"f1","{f2}":"f2","{f3}":"f3","{f4}":"f4","{f5}":"f5","{f6}":"f6","{f7}":"f7","{f8}":"f8","{f9}":"f9","{f10}":"f10","{f11}":"f11","{f12}":"f12","{numpaddivide}":"/","{numlock}":"lock","{arrowup}":"\u2191","{arrowleft}":"\u2190","{arrowdown}":"\u2193","{arrowright}":"\u2192","{prtscr}":"print","{scrolllock}":"scroll","{pause}":"pause","{insert}":"ins","{home}":"home","{pageup}":"up","{delete}":"del","{end}":"end","{pagedown}":"down","{numpadmultiply}":"*","{numpadsubtract}":"-","{numpadadd}":"+","{numpadenter}":"enter","{period}":".","{numpaddecimal}":".","{numpad0}":"0","{numpad1}":"1","{numpad2}":"2","{numpad3}":"3","{numpad4}":"4","{numpad5}":"5","{numpad6}":"6","{numpad7}":"7","{numpad8}":"8","{numpad9}":"9"}}},{key:"addStringAt",value:function(t,e,n){var o=void 0;return this.simpleKeyboardInstance.options.debug&&console.log("Caret at:",n),n||0===n?(o=[t.slice(0,n),e,t.slice(n)].join(""),this.isMaxLengthReached()||this.updateCaretPos(e.length)):o=t+e,o}},{key:"removeAt",value:function(t,e){if(0===this.simpleKeyboardInstance.caretPosition)return t;var n=void 0,o=void 0,i=void 0,a=/([\uD800-\uDBFF][\uDC00-\uDFFF])/g;return e&&e>=0?(o=t.substring(e-2,e),i=o.match(a),i?(n=t.substr(0,e-2)+t.substr(e),this.updateCaretPos(2,!0)):(n=t.substr(0,e-1)+t.substr(e),this.updateCaretPos(1,!0))):(o=t.slice(-2),i=o.match(a),i?(n=t.slice(0,-2),this.updateCaretPos(2,!0)):(n=t.slice(0,-1),this.updateCaretPos(1,!0))),n}},{key:"handleMaxLength",value:function(t,e,n){var o=e.maxLength,a=t[e.inputName],s=a.length===o;if(n.length<=a.length)return!1;if(Number.isInteger(o))return e.debug&&console.log("maxLength (num) reached:",s),s?(this.maxLengthReached=!0,!0):(this.maxLengthReached=!1,!1);if("object"===("undefined"===typeof o?"undefined":i(o))){var r=a.length===o[e.inputName];return e.debug&&console.log("maxLength (obj) reached:",r),r?(this.maxLengthReached=!0,!0):(this.maxLengthReached=!1,!1)}}}]),t}();e.a=s}])}); +!function(t,e){"object"===typeof exports&&"object"===typeof module?module.exports=e():"function"===typeof define&&define.amd?define([],e):"object"===typeof exports?exports.SimpleKeyboard=e():t.SimpleKeyboard=e()}(this,function(){return function(t){function e(o){if(n[o])return n[o].exports;var i=n[o]={i:o,l:!1,exports:{}};return t[o].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,o){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=n(2);e.default=o.a},function(t,e,n){"use strict";function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=n(3),s=(n.n(i),n(4)),a=n(5),r=n(6),u="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c=function t(){var e=this;o(this,t),this.handleButtonClicked=function(t){var n=e.options.debug;if("{//}"===t)return!1;"function"===typeof e.options.onKeyPress&&e.options.onKeyPress(t),e.input[e.options.inputName]||(e.input[e.options.inputName]="");var o=e.utilities.getUpdatedInput(t,e.input[e.options.inputName],e.options,e.caretPosition);if(e.input[e.options.inputName]!==o){if(e.options.maxLength&&e.utilities.handleMaxLength(e.input,e.options,o))return!1;e.input[e.options.inputName]=o,n&&console.log("Input changed:",e.input),e.options.syncInstanceInputs&&e.syncInstanceInputs(e.input),"function"===typeof e.options.onChange&&e.options.onChange(e.input[e.options.inputName])}n&&console.log("Key pressed:",t)},this.syncInstanceInputs=function(){e.dispatch(function(t){t.replaceInput(e.input)})},this.clearInput=function(t){t=t||e.options.inputName,e.input[e.options.inputName]="",e.options.syncInstanceInputs&&e.syncInstanceInputs(e.input)},this.getInput=function(t){return t=t||e.options.inputName,e.options.syncInstanceInputs&&e.syncInstanceInputs(e.input),e.input[e.options.inputName]},this.setInput=function(t,n){n=n||e.options.inputName,e.input[n]=t,e.options.syncInstanceInputs&&e.syncInstanceInputs(e.input)},this.replaceInput=function(t){e.input=t},this.setOptions=function(t){t=t||{},e.options=Object.assign(e.options,t),e.render()},this.clear=function(){e.keyboardDOM.innerHTML="",e.keyboardDOM.className=e.keyboardDOMClass,e.buttonElements={}},this.dispatch=function(t){if(!window.SimpleKeyboardInstances)throw console.warn("SimpleKeyboardInstances is not defined. Dispatch cannot be called."),new Error("INSTANCES_VAR_ERROR");return Object.keys(window.SimpleKeyboardInstances).forEach(function(e){t(window.SimpleKeyboardInstances[e],e)})},this.addButtonTheme=function(t,n){if(!n||!t)return!1;t.split(" ").forEach(function(o){n.split(" ").forEach(function(n){e.options.buttonTheme||(e.options.buttonTheme=[]);var i=!1;e.options.buttonTheme.map(function(t){if(t.class.split(" ").includes(n)){i=!0;var e=t.buttons.split(" ");e.includes(o)||(i=!0,e.push(o),t.buttons=e.join(" "))}return t}),i||e.options.buttonTheme.push({class:n,buttons:t})})}),e.render()},this.removeButtonTheme=function(t,n){if(!t&&!n)return e.options.buttonTheme=[],e.render(),!1;if(t&&Array.isArray(e.options.buttonTheme)&&e.options.buttonTheme.length){t.split(" ").forEach(function(t,o){e.options.buttonTheme.map(function(o,i){if(n&&n.includes(o.class)||!n){var s=o.buttons.split(" ").filter(function(e){return e!==t});s.length?o.buttons=s.join(" "):(e.options.buttonTheme.splice(i,1),o=null)}return o})}),e.render()}},this.getButtonElement=function(t){var n=void 0,o=e.buttonElements[t];return o&&(n=o.length>1?o:o[0]),n},this.handleCaret=function(){e.options.debug&&console.log("Caret handling started"),document.addEventListener("keyup",e.caretEventHandler),document.addEventListener("mouseup",e.caretEventHandler),document.addEventListener("touchend",e.caretEventHandler)},this.caretEventHandler=function(t){var n=t.target.tagName.toLowerCase();"textarea"!==n&&"input"!==n||(e.caretPosition=t.target.selectionStart,e.options.debug&&console.log("Caret at: ",t.target.selectionStart,t.target.tagName.toLowerCase()))},this.onInit=function(){e.options.debug&&console.log("Initialized"),e.handleCaret(),"function"===typeof e.options.onInit&&e.options.onInit()},this.onRender=function(){"function"===typeof e.options.onRender&&e.options.onRender()},this.render=function(){e.clear();var t=e.options.layout?"hg-layout-custom":"hg-layout-"+e.options.layoutName,n=e.options.layout||a.a.getDefaultLayout(),o={};Array.isArray(e.options.buttonTheme)&&e.options.buttonTheme.forEach(function(t){if(t.buttons&&t.class){var n=void 0;"string"===typeof t.buttons&&(n=t.buttons.split(" ")),n&&n.forEach(function(n){var i=o[n];i?e.utilities.countInArray(i.split(" "),t.class)||(o[n]=i+" "+t.class):o[n]=t.class})}else console.warn('buttonTheme row is missing the "buttons" or the "class". Please check the documentation.')}),e.keyboardDOM.className+=" "+e.options.theme+" "+t,n[e.options.layoutName].forEach(function(t,n){var i=t.split(" "),s=document.createElement("div");s.className+="hg-row",i.forEach(function(t,i){var a=e.utilities.getButtonClass(t),r=o[t],u=e.utilities.getButtonDisplayName(t,e.options.display,e.options.mergeDisplay),c=document.createElement("div");c.className+="hg-button "+a+(r?" "+r:""),c.onclick=function(){return e.handleButtonClicked(t)},c.setAttribute("data-skBtn",t);var p=e.options.layoutName+"-r"+n+"b"+i;c.setAttribute("data-skBtnUID",p),c.setAttribute("data-displayLabel",u);var l=document.createElement("span");l.innerHTML=u,c.appendChild(l),e.buttonElements[t]||(e.buttonElements[t]=[]),e.buttonElements[t].push(c),s.appendChild(c)}),e.keyboardDOM.appendChild(s)}),e.onRender(),e.initialized||(e.initialized=!0,e.onInit())};var n="string"===typeof(arguments.length<=0?void 0:arguments[0])?arguments.length<=0?void 0:arguments[0]:".simple-keyboard",i="object"===u(arguments.length<=0?void 0:arguments[0])?arguments.length<=0?void 0:arguments[0]:arguments.length<=1?void 0:arguments[1];if(i||(i={}),this.utilities=new r.a(this),this.keyboardDOM=document.querySelector(n),this.options=i,this.options.layoutName=this.options.layoutName||"default",this.options.theme=this.options.theme||"hg-theme-default",this.options.inputName=this.options.inputName||"default",this.input={},this.input[this.options.inputName]="",this.keyboardDOMClass=n.split(".").join(""),this.timers={},this.buttonElements={},!this.keyboardDOM)throw console.warn('"'+n+'" was not found in the DOM.'),new Error("KEYBOARD_DOM_ERROR");this.render(),window.SimpleKeyboardInstances||(window.SimpleKeyboardInstances={}),window.SimpleKeyboardInstances[this.utilities.camelCase(this.keyboardDOMClass)]=this,this.physicalKeyboardInterface=new s.a(this)};e.a=c},function(t,e){},function(t,e,n){"use strict";function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function t(e){var n=this;o(this,t),this.initKeyboardListener=function(){document.addEventListener("keydown",function(t){if(n.simpleKeyboardInstance.options.physicalKeyboardHighlight){var e=n.getSimpleKeyboardLayoutKey(t);n.simpleKeyboardInstance.dispatch(function(t){var o=t.getButtonElement(e)||t.getButtonElement("{"+e+"}");o&&(o.style.backgroundColor=n.simpleKeyboardInstance.options.physicalKeyboardHighlightBgColor||"#9ab4d0",o.style.color=n.simpleKeyboardInstance.options.physicalKeyboardHighlightTextColor||"white")})}}),document.addEventListener("keyup",function(t){if(n.simpleKeyboardInstance.options.physicalKeyboardHighlight){var e=n.getSimpleKeyboardLayoutKey(t);n.simpleKeyboardInstance.dispatch(function(t){var n=t.getButtonElement(e)||t.getButtonElement("{"+e+"}");n&&n.removeAttribute("style")})}})},this.getSimpleKeyboardLayoutKey=function(t){n.simpleKeyboardInstance.options.debug&&console.log(t);var e=void 0;return e=t.code.includes("Numpad")||t.code.includes("Shift")||t.code.includes("Space")||t.code.includes("Backspace")||t.code.includes("Control")||t.code.includes("Alt")||t.code.includes("Meta")?t.code:t.key,(e!==e.toUpperCase()||"F"===t.code[0]&&Number.isInteger(Number(t.code[1]))&&t.code.length<=3)&&(e=e.toLowerCase()),e},this.simpleKeyboardInstance=e,this.initKeyboardListener()};e.a=i},function(t,e,n){"use strict";function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function t(){o(this,t)};i.getDefaultLayout=function(){return{default:["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} q w e r t y u i o p [ ] \\","{lock} a s d f g h j k l ; ' {enter}","{shift} z x c v b n m , . / {shift}",".com @ {space}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} Q W E R T Y U I O P { } |",'{lock} A S D F G H J K L : " {enter}',"{shift} Z X C V B N M < > ? {shift}",".com @ {space}"]}},e.a=i},function(t,e,n){"use strict";function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s=function(){function t(t,e){for(var n=0;n0?s=n.removeAt(s,i):"{space}"===t?s=n.addStringAt(s," ",i):"{tab}"!==t||"boolean"===typeof o.tabCharOnTab&&!1===o.tabCharOnTab?"{enter}"!==t&&"{numpadenter}"!==t||!o.newLineOnEnter?t.includes("numpad")&&Number.isInteger(Number(t[t.length-2]))?s=n.addStringAt(s,t[t.length-2],i):"{numpaddivide}"===t?s=n.addStringAt(s,"/",i):"{numpadmultiply}"===t?s=n.addStringAt(s,"*",i):"{numpadsubtract}"===t?s=n.addStringAt(s,"-",i):"{numpadadd}"===t?s=n.addStringAt(s,"+",i):"{numpaddecimal}"===t?s=n.addStringAt(s,".",i):"{"===t||"}"===t?s=n.addStringAt(s,t,i):t.includes("{")||t.includes("}")||(s=n.addStringAt(s,t,i)):s=n.addStringAt(s,"\n",i):s=n.addStringAt(s,"\t",i),s},this.updateCaretPos=function(t,e){e?n.simpleKeyboardInstance.caretPosition>0&&(n.simpleKeyboardInstance.caretPosition=n.simpleKeyboardInstance.caretPosition-t):n.simpleKeyboardInstance.caretPosition=n.simpleKeyboardInstance.caretPosition+t},this.isMaxLengthReached=function(){return Boolean(n.maxLengthReached)},this.camelCase=function(t){return t.toLowerCase().trim().split(/[.\-_\s]/g).reduce(function(t,e){return t+e[0].toUpperCase()+e.slice(1)})},this.countInArray=function(t,e){return t.reduce(function(t,n){return t+(n===e)},0)},this.simpleKeyboardInstance=e}return s(t,[{key:"getDefaultDiplay",value:function(){return{"{bksp}":"backspace","{backspace}":"backspace","{enter}":"< enter","{shift}":"shift","{shiftleft}":"shift","{shiftright}":"shift","{alt}":"alt","{s}":"shift","{tab}":"tab","{lock}":"caps","{capslock}":"caps","{accept}":"Submit","{space}":" ","{//}":" ","{esc}":"esc","{escape}":"esc","{f1}":"f1","{f2}":"f2","{f3}":"f3","{f4}":"f4","{f5}":"f5","{f6}":"f6","{f7}":"f7","{f8}":"f8","{f9}":"f9","{f10}":"f10","{f11}":"f11","{f12}":"f12","{numpaddivide}":"/","{numlock}":"lock","{arrowup}":"\u2191","{arrowleft}":"\u2190","{arrowdown}":"\u2193","{arrowright}":"\u2192","{prtscr}":"print","{scrolllock}":"scroll","{pause}":"pause","{insert}":"ins","{home}":"home","{pageup}":"up","{delete}":"del","{end}":"end","{pagedown}":"down","{numpadmultiply}":"*","{numpadsubtract}":"-","{numpadadd}":"+","{numpadenter}":"enter","{period}":".","{numpaddecimal}":".","{numpad0}":"0","{numpad1}":"1","{numpad2}":"2","{numpad3}":"3","{numpad4}":"4","{numpad5}":"5","{numpad6}":"6","{numpad7}":"7","{numpad8}":"8","{numpad9}":"9"}}},{key:"addStringAt",value:function(t,e,n){var o=void 0;return this.simpleKeyboardInstance.options.debug&&console.log("Caret at:",n),n||0===n?(o=[t.slice(0,n),e,t.slice(n)].join(""),this.isMaxLengthReached()||this.updateCaretPos(e.length)):o=t+e,o}},{key:"removeAt",value:function(t,e){if(0===this.simpleKeyboardInstance.caretPosition)return t;var n=void 0,o=void 0,i=void 0,s=/([\uD800-\uDBFF][\uDC00-\uDFFF])/g;return e&&e>=0?(o=t.substring(e-2,e),i=o.match(s),i?(n=t.substr(0,e-2)+t.substr(e),this.updateCaretPos(2,!0)):(n=t.substr(0,e-1)+t.substr(e),this.updateCaretPos(1,!0))):(o=t.slice(-2),i=o.match(s),i?(n=t.slice(0,-2),this.updateCaretPos(2,!0)):(n=t.slice(0,-1),this.updateCaretPos(1,!0))),n}},{key:"handleMaxLength",value:function(t,e,n){var o=e.maxLength,s=t[e.inputName],a=s.length===o;if(n.length<=s.length)return!1;if(Number.isInteger(o))return e.debug&&console.log("maxLength (num) reached:",a),a?(this.maxLengthReached=!0,!0):(this.maxLengthReached=!1,!1);if("object"===("undefined"===typeof o?"undefined":i(o))){var r=s.length===o[e.inputName];return e.debug&&console.log("maxLength (obj) reached:",r),r?(this.maxLengthReached=!0,!0):(this.maxLengthReached=!1,!1)}}}]),t}();e.a=a}])}); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/index.js.map b/build/index.js.map index 0a51d5f1..ad9e59bb 100644 --- a/build/index.js.map +++ b/build/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///index.js","webpack:///webpack/bootstrap bf71d4a66ad12001e38f","webpack:///./src/lib/index.js","webpack:///./src/lib/components/Keyboard.js","webpack:///./src/lib/services/PhysicalKeyboard.js","webpack:///./src/lib/services/KeyboardLayout.js","webpack:///./src/lib/services/Utilities.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","value","__WEBPACK_IMPORTED_MODULE_0__components_Keyboard__","_classCallCheck","instance","Constructor","TypeError","__WEBPACK_IMPORTED_MODULE_0__Keyboard_css__","__WEBPACK_IMPORTED_MODULE_1__services_PhysicalKeyboard__","__WEBPACK_IMPORTED_MODULE_2__services_KeyboardLayout__","__WEBPACK_IMPORTED_MODULE_3__services_Utilities__","_typeof","Symbol","iterator","obj","constructor","SimpleKeyboard","_this","handleButtonClicked","button","debug","options","onKeyPress","input","inputName","updatedInput","utilities","getUpdatedInput","caretPosition","maxLength","handleMaxLength","console","log","syncInstanceInputs","onChange","dispatch","section","replaceInput","clearInput","getInput","setInput","inputObj","setOptions","option","assign","render","clear","keyboardDOM","innerHTML","className","keyboardDOMClass","buttonElements","callback","window","keys","forEach","key","error","addButtonTheme","buttons","split","classNameItem","buttonTheme","classNameFound","map","class","includes","buttonThemeArray","push","join","removeButtonTheme","Array","isArray","length","buttonArray","index","filteredButtonArray","filter","item","splice","getButtonElement","output","buttonArr","handleCaret","handler","event","targetTagName","target","tagName","toLowerCase","selectionStart","document","addEventListener","onInit","onRender","layoutClass","layout","layoutName","getLayout","buttonThemesParsed","themeObj","themeButtons","themeButton","themeParsed","warn","theme","row","rIndex","rowArray","rowDOM","createElement","bIndex","fctBtnClass","getButtonClass","buttonThemeClass","buttonDisplayName","getButtonDisplayName","display","mergeDisplay","buttonDOM","onclick","setAttribute","buttonUID","buttonSpanDOM","appendChild","initialized","keyboardDOMQuery","arguments","undefined","querySelector","timers","camelCase","physicalKeyboardInterface","PhysicalKeyboard","simpleKeyboardInstance","initKeyboardListener","physicalKeyboardHighlight","buttonPressed","getSimpleKeyboardLayoutKey","style","backgroundColor","physicalKeyboardHighlightBgColor","color","physicalKeyboardHighlightTextColor","removeAttribute","code","toUpperCase","Number","isInteger","KeyboardLayout","default","shift","_createClass","defineProperties","props","descriptor","writable","protoProps","staticProps","Utilities","buttonTypeClass","buttonWithoutBraces","replace","normalizeString","getDefaultDiplay","caretPos","removeAt","addStringAt","tabCharOnTab","newLineOnEnter","updateCaretPos","minus","isMaxLengthReached","Boolean","maxLengthReached","string","trim","reduce","word","slice","{bksp}","{backspace}","{enter}","{shift}","{shiftleft}","{shiftright}","{alt}","{s}","{tab}","{lock}","{capslock}","{accept}","{space}","{//}","{esc}","{escape}","{f1}","{f2}","{f3}","{f4}","{f5}","{f6}","{f7}","{f8}","{f9}","{f10}","{f11}","{f12}","{numpaddivide}","{numlock}","{arrowup}","{arrowleft}","{arrowdown}","{arrowright}","{prtscr}","{scrolllock}","{pause}","{insert}","{home}","{pageup}","{delete}","{end}","{pagedown}","{numpadmultiply}","{numpadsubtract}","{numpadadd}","{numpadenter}","{period}","{numpaddecimal}","{numpad0}","{numpad1}","{numpad2}","{numpad3}","{numpad4}","{numpad5}","{numpad6}","{numpad7}","{numpad8}","{numpad9}","source","position","prevTwoChars","emojiMatched","emojiMatchedReg","substring","match","substr","currentInput","condition"],"mappings":";;;;;;;;;;;CAAA,SAAAA,EAAAC,GACA,iBAAAC,UAAA,iBAAAC,QACAA,OAAAD,QAAAD,IACA,mBAAAG,gBAAAC,IACAD,UAAAH,GACA,iBAAAC,SACAA,QAAA,eAAAD,IAEAD,EAAA,eAAAC,KACCK,KAAA,WACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAP,OAGA,IAAAC,GAAAO,EAAAD,IACAE,EAAAF,EACAG,GAAA,EACAV,WAUA,OANAK,GAAAE,GAAAI,KAAAV,EAAAD,QAAAC,IAAAD,QAAAM,GAGAL,EAAAS,GAAA,EAGAT,EAAAD,QAvBA,GAAAQ,KA4DA,OAhCAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,SAAAd,EAAAe,EAAAC,GACAV,EAAAW,EAAAjB,EAAAe,IACAG,OAAAC,eAAAnB,EAAAe,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAV,EAAAiB,EAAA,SAAAtB,GACA,GAAAe,GAAAf,KAAAuB,WACA,WAA2B,MAAAvB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAK,GAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAGtDpB,EAAAuB,EAAA,GAGAvB,IAAAwB,EAAA,KDgBM,SAAU7B,EAAQD,EAASM,GAEjCL,EAAOD,QAAUM,EAAoB,IAK/B,SAAUL,EAAQ8B,EAAqBzB,GAE7C,YACAY,QAAOC,eAAeY,EAAqB,cAAgBC,OAAO,GAC7C,IAAIC,GAAqD3B,EAAoB,EEvFlGyB,GAAA,QAAeE,EAAf,GF4FM,SAAUhC,EAAQ8B,EAAqBzB,GAE7C,YAMyO,SAAS4B,GAAgBC,EAASC,GAAa,KAAKD,YAAoBC,IAAc,KAAM,IAAIC,WAAU,qCAL9T,GAAIC,GAA8ChC,EAAoB,GAElEiC,GADsDjC,EAAoBiB,EAAEe,GACjBhC,EAAoB,IAC/EkC,EAAyDlC,EAAoB,GAC7EmC,EAAoDnC,EAAoB,GAC7FoC,EAAwB,mBAATC,SAA8C,iBAAlBA,QAAOC,SAAoB,SAASC,GAAK,aAAcA,IAAM,SAASA,GAAK,MAAOA,IAAqB,mBAATF,SAAqBE,EAAIC,cAAcH,QAAQE,IAAMF,OAAOhB,UAAU,eAAgBkB,IG9F7NE,EACJ,QAAAA,KAAsB,GAAAC,GAAA5C,IAAA8B,GAAA9B,KAAA2C,GAAA3C,KAiDtB6C,oBAAsB,SAACC,GACrB,GAAIC,GAAQH,EAAKI,QAAQD,KAKzB,IAAc,SAAXD,EACD,OAAO,CAK6B,oBAA5BF,GAAKI,QAAQC,YACrBL,EAAKI,QAAQC,WAAWH,GAEtBF,EAAKM,MAAMN,EAAKI,QAAQG,aAC1BP,EAAKM,MAAMN,EAAKI,QAAQG,WAAa,GAEvC,IAAIC,GAAeR,EAAKS,UAAUC,gBAAgBR,EAAQF,EAAKM,MAAMN,EAAKI,QAAQG,WAAYP,EAAKI,QAASJ,EAAKW,cAEjH,IAAGX,EAAKM,MAAMN,EAAKI,QAAQG,aAAeC,EAAa,CAKrD,GAAGR,EAAKI,QAAQQ,WAAaZ,EAAKS,UAAUI,gBAAgBb,EAAKM,MAAON,EAAKI,QAASI,GACpF,OAAO,CAGTR,GAAKM,MAAMN,EAAKI,QAAQG,WAAaC,EAElCL,GACDW,QAAQC,IAAI,iBAAkBf,EAAKM,OAKlCN,EAAKI,QAAQY,oBACdhB,EAAKgB,mBAAmBhB,EAAKM,OAKK,mBAA1BN,GAAKI,QAAQa,UACrBjB,EAAKI,QAAQa,SAASjB,EAAKM,MAAMN,EAAKI,QAAQG,YAG/CJ,GACDW,QAAQC,IAAI,eAAgBb,IAjGV9C,KAqGtB4D,mBAAqB,WACnBhB,EAAKkB,SAAS,SAACC,GACbA,EAAQC,aAAapB,EAAKM,UAvGRlD,KA2GtBiE,WAAa,SAACd,GACZA,EAAYA,GAAaP,EAAKI,QAAQG,UACtCP,EAAKM,MAAMN,EAAKI,QAAQG,WAAa,GAKlCP,EAAKI,QAAQY,oBACdhB,EAAKgB,mBAAmBhB,EAAKM,QAnHXlD,KAsHtBkE,SAAW,SAACf,GASV,MARAA,GAAYA,GAAaP,EAAKI,QAAQG,UAKnCP,EAAKI,QAAQY,oBACdhB,EAAKgB,mBAAmBhB,EAAKM,OAExBN,EAAKM,MAAMN,EAAKI,QAAQG,YA/HXnD,KAkItBmE,SAAW,SAACjB,EAAOC,GACjBA,EAAYA,GAAaP,EAAKI,QAAQG,UACtCP,EAAKM,MAAMC,GAAaD,EAKrBN,EAAKI,QAAQY,oBACdhB,EAAKgB,mBAAmBhB,EAAKM,QA1IXlD,KA6ItBgE,aAAe,SAACI,GACdxB,EAAKM,MAAQkB,GA9IOpE,KAiJtBqE,WAAa,SAAAC,GACXA,EAASA,MACT1B,EAAKI,QAAUlC,OAAOyD,OAAO3B,EAAKI,QAASsB,GAC3C1B,EAAK4B,UApJexE,KAuJtByE,MAAQ,WACN7B,EAAK8B,YAAYC,UAAY,GAC7B/B,EAAK8B,YAAYE,UAAYhC,EAAKiC,iBAClCjC,EAAKkC,mBA1Je9E,KA6JtB8D,SAAW,SAACiB,GACV,MAAIC,QAAA,wBAKGlE,OAAOmE,KAAKD,OAAA,yBAAmCE,QAAQ,SAACC,GAC7DJ,EAASC,OAAA,wBAAkCG,GAAMA,MALjDzB,QAAQ0B,MAAM,uEACP,IAhKWpF,KAwKtBqF,eAAiB,SAACC,EAASV,GACzB,IAAIA,IAAcU,EAChB,OAAO,CAETA,GAAQC,MAAM,KAAKL,QAAQ,SAAApC,GACzB8B,EAAUW,MAAM,KAAKL,QAAQ,SAAAM,GACvB5C,EAAKI,QAAQyC,cACf7C,EAAKI,QAAQyC,eAEf,IAAIC,IAAiB,CAKrB9C,GAAKI,QAAQyC,YAAYE,IAAI,SAAAF,GAE3B,GAAGA,EAAYG,MAAML,MAAM,KAAKM,SAASL,GAAe,CACtDE,GAAiB,CAEjB,IAAII,GAAmBL,EAAYH,QAAQC,MAAM,IAC7CO,GAAiBD,SAAS/C,KAC5B4C,GAAiB,EACjBI,EAAiBC,KAAKjD,GACtB2C,EAAYH,QAAUQ,EAAiBE,KAAK,MAGhD,MAAOP,KAMLC,GACF9C,EAAKI,QAAQyC,YAAYM,MACvBH,MAAOJ,EACPF,QAASA,QAOjB1C,EAAK4B,UAlNexE,KAqNtBiG,kBAAoB,SAACX,EAASV,GAI5B,IAAIU,IAAYV,EAGd,MAFAhC,GAAKI,QAAQyC,eACb7C,EAAK4B,UACE,CAMT,IAAGc,GAAWY,MAAMC,QAAQvD,EAAKI,QAAQyC,cAAgB7C,EAAKI,QAAQyC,YAAYW,OAAO,CACvF,GAAIC,GAAcf,EAAQC,MAAM,IAChCc,GAAYnB,QAAQ,SAACpC,EAAQqC,GAC3BvC,EAAKI,QAAQyC,YAAYE,IAAI,SAACF,EAAaa,GAMzC,GACG1B,GAAaA,EAAUiB,SAASJ,EAAYG,SAC5ChB,EACF,CACC,GAAI2B,SAEDF,GAAYR,SAAS/C,KACtByD,EAAsBd,EAAYH,QAAQC,MAAM,KAAKiB,OAAO,SAAAC,GAAA,MAAQA,KAAS3D,KAM5EyD,EAAoBH,OACrBX,EAAYH,QAAUiB,EAAoBP,KAAK,MAE/CpD,EAAKI,QAAQyC,YAAYiB,OAAOJ,EAAO,GACvCb,EAAc,MAKlB,MAAOA,OAIX7C,EAAK4B,WArQaxE,KAyQtB2G,iBAAmB,SAAC7D,GAClB,GAAI8D,UAEAC,EAAYjE,EAAKkC,eAAehC,EASpC,OARG+D,KAECD,EADCC,EAAUT,OAAS,EACXS,EAEAA,EAAU,IAIhBD,GArRa5G,KAwRtB8G,YAAc,WACTlE,EAAKI,QAAQD,OACdW,QAAQC,IAAI,yBAGd,IAAIoD,GAAU,SAACC,GACb,GAAIC,GAAgBD,EAAME,OAAOC,QAAQC,aAGrB,cAAlBH,GACkB,UAAlBA,IAEArE,EAAKW,cAAgByD,EAAME,OAAOG,eAE/BzE,EAAKI,QAAQD,OACdW,QAAQC,IAAI,aAAcqD,EAAME,OAAOG,eAAgBL,EAAME,OAAOC,QAAQC,gBAKlFE,UAASC,iBAAiB,QAASR,GACnCO,SAASC,iBAAiB,UAAWR,GACrCO,SAASC,iBAAiB,WAAYR,IA9SlB/G,KAiTtBwH,OAAS,WACJ5E,EAAKI,QAAQD,OACdW,QAAQC,IAAI,eAMdf,EAAKkE,cAE6B,mBAAxBlE,GAAKI,QAAQwE,QACrB5E,EAAKI,QAAQwE,UA5TKxH,KA+TtByH,SAAW,WAC2B,mBAA1B7E,GAAKI,QAAQyE,UACrB7E,EAAKI,QAAQyE,YAjUKzH,KAoUtBwE,OAAS,WAIP5B,EAAK6B,OAEL,IAAIiD,GAAc9E,EAAKI,QAAQ2E,OAAS,mBAAtB,aAAwD/E,EAAKI,QAAQ4E,WACnFD,EAAS/E,EAAKI,QAAQ2E,QAAUvF,EAAA,EAAeyF,UAAUjF,EAAKI,QAAQ4E,YAKtEE,IACD5B,OAAMC,QAAQvD,EAAKI,QAAQyC,cAC5B7C,EAAKI,QAAQyC,YAAYP,QAAQ,SAAA6C,GAC/B,GAAGA,EAASzC,SAAWyC,EAASnC,MAAM,CACpC,GAAIoC,GAAeD,EAASzC,QAAQC,MAAM,IAEvCW,OAAMC,QAAQ6B,IACfA,EAAa9C,QAAQ,SAAA+C,GACnB,GAAIC,GAAcJ,EAAmBG,EAInCH,GAAmBG,GADlBC,EACoCA,EAArC,IAAoDH,EAASnC,MAE3BmC,EAASnC,YAIjDlC,SAAQyE,KAAR,8FAQNvF,EAAK8B,YAAYE,WAAjB,IAAkChC,EAAKI,QAAQoF,MAA/C,IAAwDV,EAKxDC,EAAO/E,EAAKI,QAAQ4E,YAAY1C,QAAQ,SAACmD,EAAKC,GAC5C,GAAIC,GAAWF,EAAI9C,MAAM,KAKrBiD,EAASlB,SAASmB,cAAc,MACpCD,GAAO5D,WAAa,SAKpB2D,EAASrD,QAAQ,SAACpC,EAAQ4F,GACxB,GAAIC,GAAc/F,EAAKS,UAAUuF,eAAe9F,GAC5C+F,EAAmBf,EAAmBhF,GACtCgG,EAAoBlG,EAAKS,UAAU0F,qBAAqBjG,EAAQF,EAAKI,QAAQgG,QAASpG,EAAKI,QAAQiG,cAKnGC,EAAY5B,SAASmB,cAAc,MACvCS,GAAUtE,WAAV,aAAoC+D,GAAcE,EAAmB,IAAIA,EAAmB,IAC5FK,EAAUC,QAAU,iBAAMvG,GAAKC,oBAAoBC,IAKnDoG,EAAUE,aAAa,aAActG,EAMrC,IAAIuG,GAAezG,EAAKI,QAAQ4E,WAA5B,KAA2CU,EAA3C,IAAqDI,CACzDQ,GAAUE,aAAa,gBAAiBC,EAKxC,IAAIC,GAAgBhC,SAASmB,cAAc,OAC3Ca,GAAc3E,UAAYmE,EAC1BI,EAAUK,YAAYD,GAKlB1G,EAAKkC,eAAehC,KACtBF,EAAKkC,eAAehC,OAEtBF,EAAKkC,eAAehC,GAAQiD,KAAKmD,GAKjCV,EAAOe,YAAYL,KAOrBtG,EAAK8B,YAAY6E,YAAYf,KAM/B5F,EAAK6E,WAED7E,EAAK4G,cACP5G,EAAK4G,aAAc,EAKnB5G,EAAK4E,UAzbP,IAAIiC,GAAwC,kBAArBC,UAAAtD,QAAA,MAAAuD,GAAAD,UAAA,IAAAA,UAAAtD,QAAA,MAAAuD,GAAAD,UAAA,GAA4C,mBAC/D1G,EAA+B,WAArBV,EAAAoH,UAAAtD,QAAA,MAAAuD,GAAAD,UAAA,IAAAA,UAAAtD,QAAA,MAAAuD,GAAAD,UAAA,GAAAA,UAAAtD,QAAA,MAAAuD,GAAAD,UAAA,EAEV1G,KACFA,MAKFhD,KAAKqD,UAAY,GAAIhB,GAAA,EAAUrC,MAK/BA,KAAK0E,YAAc4C,SAASsC,cAAcH,GAC1CzJ,KAAKgD,QAAUA,EACfhD,KAAKgD,QAAQ4E,WAAa5H,KAAKgD,QAAQ4E,YAAc,UACrD5H,KAAKgD,QAAQoF,MAAQpI,KAAKgD,QAAQoF,OAAS,mBAC3CpI,KAAKgD,QAAQG,UAAYnD,KAAKgD,QAAQG,WAAa,UACnDnD,KAAKkD,SACLlD,KAAKkD,MAAMlD,KAAKgD,QAAQG,WAAa,GACrCnD,KAAK6E,iBAAmB4E,EAAiBlE,MAAM,KAAKS,KAAK,IACzDhG,KAAK6J,UACL7J,KAAK8E,kBAKF9E,KAAK0E,YACN1E,KAAKwE,SAELd,QAAQ0B,MAAR,IAAkBqE,EAAlB,+BAMEzE,OAAA,0BACFA,OAAA,4BAEFA,OAAA,wBAAkChF,KAAKqD,UAAUyG,UAAU9J,KAAK6E,mBAAqB7E,KAKrFA,KAAK+J,0BAA4B,GAAI5H,GAAA,EAAiBnC,MAiZ1D2B,GAAA,KHnRM,SAAU9B,EAAQD,KAMlB,SAAUC,EAAQ8B,EAAqBzB,GAE7C,YACA,SAAS4B,GAAgBC,EAASC,GAAa,KAAKD,YAAoBC,IAAc,KAAM,IAAIC,WAAU,qCAAuC,GI7L3I+H,GACJ,QAAAA,GAAYC,GAAuB,GAAArH,GAAA5C,IAGjC,IAHiC8B,EAAA9B,KAAAgK,GAAAhK,KAWnCkK,qBAAuB,WAErB5C,SAASC,iBAAiB,UAAW,SAACP,GACpC,GAAGpE,EAAKqH,uBAAuBjH,QAAQmH,0BAA0B,CAC/D,GAAIC,GAAgBxH,EAAKyH,2BAA2BrD,EAEpDpE,GAAKqH,uBAAuBnG,SAAS,SAAA/B,GACnC,GAAImH,GAAYnH,EAAS4E,iBAAiByD,IAAkBrI,EAAS4E,iBAAT,IAA8ByD,EAA9B,IAEzDlB,KACDA,EAAUoB,MAAMC,gBAAkB3H,EAAKqH,uBAAuBjH,QAAQwH,kCAAoC,UAC1GtB,EAAUoB,MAAMG,MAAQ7H,EAAKqH,uBAAuBjH,QAAQ0H,oCAAsC,cAO1GpD,SAASC,iBAAiB,QAAS,SAACP,GAClC,GAAGpE,EAAKqH,uBAAuBjH,QAAQmH,0BAA0B,CAC/D,GAAIC,GAAgBxH,EAAKyH,2BAA2BrD,EAEpDpE,GAAKqH,uBAAuBnG,SAAS,SAAA/B,GACnC,GAAImH,GAAYnH,EAAS4E,iBAAiByD,IAAkBrI,EAAS4E,iBAAT,IAA8ByD,EAA9B,IAEzDlB,IACDA,EAAUyB,gBAAgB,eArCD3K,KA4CnCqK,2BAA6B,SAACrD,GACzBpE,EAAKqH,uBAAuBjH,QAAQD,OACrCW,QAAQC,IAAIqD,EAGd,IAAIJ,SA0BJ,OAfEA,GARAI,EAAM4D,KAAK/E,SAAS,WACpBmB,EAAM4D,KAAK/E,SAAS,UACpBmB,EAAM4D,KAAK/E,SAAS,UACpBmB,EAAM4D,KAAK/E,SAAS,cACpBmB,EAAM4D,KAAK/E,SAAS,YACpBmB,EAAM4D,KAAK/E,SAAS,QACpBmB,EAAM4D,KAAK/E,SAAS,QAEXmB,EAAM4D,KAEN5D,EAAM7B,KAOfyB,IAAWA,EAAOiE,eACC,MAAlB7D,EAAM4D,KAAK,IAAcE,OAAOC,UAAUD,OAAO9D,EAAM4D,KAAK,MAAQ5D,EAAM4D,KAAKxE,QAAU,KAE1FQ,EAASA,EAAOQ,eAGXR,GA1EP5G,KAAKiK,uBAAyBA,EAE1BjF,OAAA,mCAGF,OAAO,CAFPA,QAAA,oCAA+C,EAIjDhF,KAAKkK,uBAuETvI,GAAA,KJqHM,SAAU9B,EAAQ8B,EAAqBzB,GAE7C,YACA,SAAS4B,GAAgBC,EAASC,GAAa,KAAKD,YAAoBC,IAAc,KAAM,IAAIC,WAAU,qCAAuC,GKxM3I+I,GLwM8J,QAASA,KAAiBlJ,EAAgB9B,KAAKgL,GKxM7MA,GAEGnD,UAAY,SAAAF,GACjB,MAAc,WAAXA,GAECsD,SACE,mCACA,mCACA,uCACA,sCACA,kBAEFC,OACE,mCACA,kCACA,uCACA,sCACA,mBAGe,YAAXvD,GAENsD,SACE,QACA,QACA,QACA,kBAIGD,EAAenD,UAAU,WAMtClG,EAAA,KLwKM,SAAU9B,EAAQ8B,EAAqBzB,GAE7C,YACuuB,SAAS4B,GAAgBC,EAASC,GAAa,KAAKD,YAAoBC,IAAc,KAAM,IAAIC,WAAU,qCAAj1B,GAAIK,GAAwB,mBAATC,SAA8C,iBAAlBA,QAAOC,SAAoB,SAASC,GAAK,aAAcA,IAAM,SAASA,GAAK,MAAOA,IAAqB,mBAATF,SAAqBE,EAAIC,cAAcH,QAAQE,IAAMF,OAAOhB,UAAU,eAAgBkB,IAAU0I,EAAa,WAAW,QAASC,GAAiBlE,EAAOmE,GAAO,IAAI,GAAIhL,GAAE,EAAEA,EAAEgL,EAAMjF,OAAO/F,IAAI,CAAC,GAAIiL,GAAWD,EAAMhL,EAAGiL,GAAWrK,WAAWqK,EAAWrK,aAAY,EAAMqK,EAAWtK,cAAa,EAAQ,SAAUsK,KAAWA,EAAWC,UAAS,GAAKzK,OAAOC,eAAemG,EAAOoE,EAAWnG,IAAImG,IAAc,MAAO,UAAStJ,EAAYwJ,EAAWC,GAAuI,MAAvHD,IAAWJ,EAAiBpJ,EAAYT,UAAUiK,GAAeC,GAAYL,EAAiBpJ,EAAYyJ,GAAoBzJ,MM/M/sB0J,EN+Mg4B,WM9Mp4B,QAAAA,GAAYzB,GAAuB,GAAArH,GAAA5C,IAAA8B,GAAA9B,KAAA0L,GAAA1L,KA+CnC4I,eAAiB,SAAA9F,GACf,GAAI6I,GAAmB7I,EAAO+C,SAAS,MAAQ/C,EAAO+C,SAAS,MAAmB,SAAX/C,EAAqB,cAAgB,cACxG8I,EAAsB9I,EAAO+I,QAAQ,IAAK,IAAIA,QAAQ,IAAK,GAM/D,aAAaF,GAHS,gBAApBA,EACE/I,EAAKkJ,gBAAgBF,GADvB,cAC4DA,IArD7B5L,KA0HnC+I,qBAAuB,SAACjG,EAAQkG,EAASC,GAOvC,MALED,GADCC,EACSnI,OAAOyD,UAAW3B,EAAKmJ,mBAAoB/C,GAE3CA,GAAWpG,EAAKmJ,mBAGrB/C,EAAQlG,IAAWA,GAjIO9C,KAoInCsD,gBAAkB,SAACR,EAAQI,EAAOF,EAASgJ,GAEzC,GAAIpF,GAAS1D,CAwCb,QAtCe,WAAXJ,GAAkC,gBAAXA,IAA6B8D,EAAOR,OAAS,EACtEQ,EAAShE,EAAKqJ,SAASrF,EAAQoF,GAEZ,YAAXlJ,EACR8D,EAAShE,EAAKsJ,YAAYtF,EAAQ,IAAKoF,GAEtB,UAAXlJ,GAAwD,kBAAzBE,GAAQmJ,eAAuD,IAAzBnJ,EAAQmJ,aAG/D,YAAXrJ,GAAmC,kBAAXA,IAA+BE,EAAQoJ,eAGlEtJ,EAAO+C,SAAS,WAAaiF,OAAOC,UAAUD,OAAOhI,EAAOA,EAAOsD,OAAS,KAClFQ,EAAShE,EAAKsJ,YAAYtF,EAAQ9D,EAAOA,EAAOsD,OAAS,GAAI4F,GAE5C,mBAAXlJ,EACN8D,EAAShE,EAAKsJ,YAAYtF,EAAQ,IAAKoF,GAEtB,qBAAXlJ,EACN8D,EAAShE,EAAKsJ,YAAYtF,EAAQ,IAAKoF,GACtB,qBAAXlJ,EACN8D,EAAShE,EAAKsJ,YAAYtF,EAAQ,IAAKoF,GAEtB,gBAAXlJ,EACN8D,EAAShE,EAAKsJ,YAAYtF,EAAQ,IAAKoF,GAEtB,gBAAXlJ,EACN8D,EAAShE,EAAKsJ,YAAYtF,EAAQ,IAAKoF,GAEtB,oBAAXlJ,EACN8D,EAAShE,EAAKsJ,YAAYtF,EAAQ,IAAKoF,GAEtB,MAAXlJ,GAA6B,MAAXA,EACxB8D,EAAShE,EAAKsJ,YAAYtF,EAAQ9D,EAAQkJ,GAEnClJ,EAAO+C,SAAS,MAAS/C,EAAO+C,SAAS,OAChDe,EAAShE,EAAKsJ,YAAYtF,EAAQ9D,EAAQkJ,IA1B1CpF,EAAShE,EAAKsJ,YAAYtF,EAAQ,KAAMoF,GAHxCpF,EAAShE,EAAKsJ,YAAYtF,EAAQ,KAAMoF,GA+BnCpF,GA9K0B5G,KAiLnCqM,eAAiB,SAACjG,EAAQkG,GACrBA,EACE1J,EAAKqH,uBAAuB1G,cAAgB,IAC7CX,EAAKqH,uBAAuB1G,cAAgBX,EAAKqH,uBAAuB1G,cAAgB6C,GAE1FxD,EAAKqH,uBAAuB1G,cAAgBX,EAAKqH,uBAAuB1G,cAAgB6C,GAtLzDpG,KA0SnCuM,mBAAqB,WACnB,MAAOC,SAAQ5J,EAAK6J,mBA3SazM,KA8SnC8J,UAAY,SAAC4C,GACX,MAAOA,GAAOtF,cAAcuF,OAAOpH,MAAM,aAAaqH,OAAO,SAACF,EAAQG,GAAT,MAAkBH,GAASG,EAAK,GAAGhC,cAAgBgC,EAAKC,MAAM,MA9S3H9M,KAAKiK,uBAAyBA,ENqN6iB,MARi6FkB,GAAaO,IAAYvG,IAAI,kBAAkBvD,MAAM,SM1MnhH8K,GACd,GAAI9F,SAuCJ,OApCEA,GADY,MAAX8F,EACQ,KACQ,MAAXA,EACG,QACQ,MAAXA,EACG,MACQ,OAAXA,EACG,YACQ,MAAXA,EACG,eACQ,MAAXA,EACG,WACQ,MAAXA,EACG,YACQ,MAAXA,EACG,aACQ,MAAXA,EACG,SACQ,MAAXA,EACG,OACQ,MAAXA,EACG,QACQ,MAAXA,EACG,aACQ,MAAXA,EACG,QACQ,MAAXA,EACG,cACQ,MAAXA,EACG,eACQ,OAAXA,EACG,cACQ,SAAXA,EACG,MAEA,GAEJ9F,gBAAuBA,EAAW,MNkKgvIzB,IAAI,mBAAmBvD,MAAM,WMnJtzI,OACEmL,SAAU,YACVC,cAAe,YACfC,UAAW,UACXC,UAAW,QACXC,cAAe,QACfC,eAAgB,QAChBC,QAAS,MACTC,MAAO,QACPC,QAAS,MACTC,SAAU,OACVC,aAAc,OACdC,WAAY,SACZC,UAAW,IACXC,OAAQ,IACRC,QAAS,MACTC,WAAY,MACZC,OAAQ,KACRC,OAAQ,KACRC,OAAQ,KACRC,OAAQ,KACRC,OAAQ,KACRC,OAAQ,KACRC,OAAQ,KACRC,OAAQ,KACRC,OAAQ,KACRC,QAAS,MACTC,QAAS,MACTC,QAAS,MACTC,iBAAkB,IAClBC,YAAa,OACbC,YAAa,SACbC,cAAe,SACfC,cAAe,SACfC,eAAgB,SAChBC,WAAY,QACZC,eAAgB,SAChBC,UAAW,QACXC,WAAY,MACZC,SAAU,OACVC,WAAY,KACZC,WAAY,MACZC,QAAS,MACTC,aAAc,OACdC,mBAAoB,IACpBC,mBAAoB,IACpBC,cAAe,IACfC,gBAAiB,QACjBC,WAAY,IACZC,kBAAmB,IACnBC,YAAa,IACbC,YAAa,IACbC,YAAa,IACbC,YAAa,IACbC,YAAa,IACbC,YAAa,IACbC,YAAa,IACbC,YAAa,IACbC,YAAa,IACbC,YAAa,QNwF8yKtL,IAAI,cAAcvD,MAAM,SMpB30K8O,EAAQhE,EAAQiE,GAC1B,GAAI/J,SAoBJ,OAlBG5G,MAAKiK,uBAAuBjH,QAAQD,OACrCW,QAAQC,IAAI,YAAagN,GAGvBA,GAAyB,IAAbA,GAGd/J,GAAU8J,EAAO5D,MAAM,EAAG6D,GAAWjE,EAAQgE,EAAO5D,MAAM6D,IAAW3K,KAAK,IAKtEhG,KAAKuM,sBACPvM,KAAKqM,eAAeK,EAAOtG,SAR7BQ,EAAS8J,EAAShE,EAab9F,KNCoFzB,IAAI,WAAWvD,MAAM,SMEzG8O,EAAQC,GACf,GAAiD,IAA9C3Q,KAAKiK,uBAAuB1G,cAC7B,MAAOmN,EAGT,IAAI9J,UACAgK,SACAC,SACAC,EAAkB,mCA8BtB,OAxBGH,IAAYA,GAAY,GACzBC,EAAeF,EAAOK,UAAUJ,EAAW,EAAGA,GAC9CE,EAAeD,EAAaI,MAAMF,GAE/BD,GACDjK,EAAS8J,EAAOO,OAAO,EAAIN,EAAW,GAAMD,EAAOO,OAAON,GAC1D3Q,KAAKqM,eAAe,GAAG,KAEvBzF,EAAS8J,EAAOO,OAAO,EAAIN,EAAW,GAAMD,EAAOO,OAAON,GAC1D3Q,KAAKqM,eAAe,GAAG,MAGzBuE,EAAeF,EAAO5D,OAAO,GAC7B+D,EAAeD,EAAaI,MAAMF,GAE/BD,GACDjK,EAAS8J,EAAO5D,MAAM,GAAI,GAC1B9M,KAAKqM,eAAe,GAAG,KAEvBzF,EAAS8J,EAAO5D,MAAM,GAAI,GAC1B9M,KAAKqM,eAAe,GAAG,KAIpBzF,KNrC4iBzB,IAAI,kBAAkBvD,MAAM,SMwCjkBwC,EAAUpB,EAASI,GACjC,GAAII,GAAYR,EAAQQ,UACpB0N,EAAe9M,EAASpB,EAAQG,WAChCgO,EAAYD,EAAa9K,SAAW5C,CAGxC,IAKEJ,EAAagD,QAAU8K,EAAa9K,OAEpC,OAAO,CAGT,IAAG0E,OAAOC,UAAUvH,GAKlB,MAJGR,GAAQD,OACTW,QAAQC,IAAI,2BAA4BwN,GAGvCA,GACDnR,KAAKyM,kBAAmB,GACjB,IAEPzM,KAAKyM,kBAAmB,GACjB,EAIX,IAAwB,YAArB,oBAAOjJ,GAAP,YAAAlB,EAAOkB,IAAuB,CAC/B,GAAI2N,GAAYD,EAAa9K,SAAW5C,EAAUR,EAAQG,UAM1D,OAJGH,GAAQD,OACTW,QAAQC,IAAI,2BAA4BwN,GAGvCA,GACDnR,KAAKyM,kBAAmB,GACjB,IAEPzM,KAAKyM,kBAAmB,GACjB,QN/EukBf,IM8FtlB/J,GAAA","file":"index.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SimpleKeyboard\"] = factory();\n\telse\n\t\troot[\"SimpleKeyboard\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SimpleKeyboard\"] = factory();\n\telse\n\t\troot[\"SimpleKeyboard\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(1);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_Keyboard__ = __webpack_require__(2);\n/* harmony default export */ __webpack_exports__[\"default\"] = (__WEBPACK_IMPORTED_MODULE_0__components_Keyboard__[\"a\" /* default */]);\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Keyboard_css__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Keyboard_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__Keyboard_css__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__services_PhysicalKeyboard__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__services_KeyboardLayout__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__services_Utilities__ = __webpack_require__(6);\nvar _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}// Services\nvar SimpleKeyboard=function SimpleKeyboard(){var _this=this;_classCallCheck(this,SimpleKeyboard);this.handleButtonClicked=function(button){var debug=_this.options.debug;/**\r\n * Ignoring placeholder buttons\r\n */if(button==='{//}')return false;/**\r\n * Calling onKeyPress\r\n */if(typeof _this.options.onKeyPress===\"function\")_this.options.onKeyPress(button);if(!_this.input[_this.options.inputName])_this.input[_this.options.inputName]='';var updatedInput=_this.utilities.getUpdatedInput(button,_this.input[_this.options.inputName],_this.options,_this.caretPosition);if(_this.input[_this.options.inputName]!==updatedInput){/**\r\n * If maxLength and handleMaxLength yield true, halting\r\n */if(_this.options.maxLength&&_this.utilities.handleMaxLength(_this.input,_this.options,updatedInput)){return false;}_this.input[_this.options.inputName]=updatedInput;if(debug)console.log('Input changed:',_this.input);/**\r\n * syncInstanceInputs\r\n */if(_this.options.syncInstanceInputs)_this.syncInstanceInputs(_this.input);/**\r\n * Calling onChange\r\n */if(typeof _this.options.onChange===\"function\")_this.options.onChange(_this.input[_this.options.inputName]);}if(debug){console.log(\"Key pressed:\",button);}};this.syncInstanceInputs=function(){_this.dispatch(function(section){section.replaceInput(_this.input);});};this.clearInput=function(inputName){inputName=inputName||_this.options.inputName;_this.input[_this.options.inputName]='';/**\r\n * syncInstanceInputs\r\n */if(_this.options.syncInstanceInputs)_this.syncInstanceInputs(_this.input);};this.getInput=function(inputName){inputName=inputName||_this.options.inputName;/**\r\n * syncInstanceInputs\r\n */if(_this.options.syncInstanceInputs)_this.syncInstanceInputs(_this.input);return _this.input[_this.options.inputName];};this.setInput=function(input,inputName){inputName=inputName||_this.options.inputName;_this.input[inputName]=input;/**\r\n * syncInstanceInputs\r\n */if(_this.options.syncInstanceInputs)_this.syncInstanceInputs(_this.input);};this.replaceInput=function(inputObj){_this.input=inputObj;};this.setOptions=function(option){option=option||{};_this.options=Object.assign(_this.options,option);_this.render();};this.clear=function(){_this.keyboardDOM.innerHTML='';_this.keyboardDOM.className=_this.keyboardDOMClass;_this.buttonElements={};};this.dispatch=function(callback){if(!window['SimpleKeyboardInstances']){console.error(\"SimpleKeyboardInstances is not defined. Dispatch cannot be called.\");return false;}return Object.keys(window['SimpleKeyboardInstances']).forEach(function(key){callback(window['SimpleKeyboardInstances'][key],key);});};this.addButtonTheme=function(buttons,className){if(!className||!buttons)return false;buttons.split(\" \").forEach(function(button){className.split(\" \").forEach(function(classNameItem){if(!_this.options.buttonTheme)_this.options.buttonTheme=[];var classNameFound=false;/**\r\n * If class is already defined, we add button to class definition\r\n */_this.options.buttonTheme.map(function(buttonTheme){if(buttonTheme.class.split(\" \").includes(classNameItem)){classNameFound=true;var buttonThemeArray=buttonTheme.buttons.split(\" \");if(!buttonThemeArray.includes(button)){classNameFound=true;buttonThemeArray.push(button);buttonTheme.buttons=buttonThemeArray.join(\" \");}}return buttonTheme;});/**\r\n * If class is not defined, we create a new entry\r\n */if(!classNameFound){_this.options.buttonTheme.push({class:classNameItem,buttons:buttons});}});});_this.render();};this.removeButtonTheme=function(buttons,className){/**\r\n * When called with empty parameters, remove all button themes\r\n */if(!buttons&&!className){_this.options.buttonTheme=[];_this.render();return false;}/**\r\n * If buttons are passed and buttonTheme has items\r\n */if(buttons&&Array.isArray(_this.options.buttonTheme)&&_this.options.buttonTheme.length){var buttonArray=buttons.split(\" \");buttonArray.forEach(function(button,key){_this.options.buttonTheme.map(function(buttonTheme,index){/**\r\n * If className is set, we affect the buttons only for that class\r\n * Otherwise, we afect all classes\r\n */if(className&&className.includes(buttonTheme.class)||!className){var filteredButtonArray=void 0;if(buttonArray.includes(button)){filteredButtonArray=buttonTheme.buttons.split(\" \").filter(function(item){return item!==button;});}/**\r\n * If buttons left, return them, otherwise, remove button Theme\r\n */if(filteredButtonArray.length){buttonTheme.buttons=filteredButtonArray.join(\" \");}else{_this.options.buttonTheme.splice(index,1);buttonTheme=null;}}return buttonTheme;});});_this.render();}};this.getButtonElement=function(button){var output=void 0;var buttonArr=_this.buttonElements[button];if(buttonArr){if(buttonArr.length>1){output=buttonArr;}else{output=buttonArr[0];}}return output;};this.handleCaret=function(){if(_this.options.debug){console.log(\"Caret handling started\");}var handler=function handler(event){var targetTagName=event.target.tagName.toLowerCase();if(targetTagName===\"textarea\"||targetTagName===\"input\"){_this.caretPosition=event.target.selectionStart;if(_this.options.debug){console.log('Caret at: ',event.target.selectionStart,event.target.tagName.toLowerCase());}}};document.addEventListener(\"keyup\",handler);document.addEventListener(\"mouseup\",handler);document.addEventListener(\"touchend\",handler);};this.onInit=function(){if(_this.options.debug){console.log(\"Initialized\");}/**\r\n * Caret handling\r\n */_this.handleCaret();if(typeof _this.options.onInit===\"function\")_this.options.onInit();};this.onRender=function(){if(typeof _this.options.onRender===\"function\")_this.options.onRender();};this.render=function(){/**\r\n * Clear keyboard\r\n */_this.clear();var layoutClass=_this.options.layout?\"hg-layout-custom\":'hg-layout-'+_this.options.layoutName;var layout=_this.options.layout||__WEBPACK_IMPORTED_MODULE_2__services_KeyboardLayout__[\"a\" /* default */].getLayout(_this.options.layoutName);/**\r\n * Account for buttonTheme, if set\r\n */var buttonThemesParsed={};if(Array.isArray(_this.options.buttonTheme)){_this.options.buttonTheme.forEach(function(themeObj){if(themeObj.buttons&&themeObj.class){var themeButtons=themeObj.buttons.split(' ');if(Array.isArray(themeButtons)){themeButtons.forEach(function(themeButton){var themeParsed=buttonThemesParsed[themeButton];// If the button has already been added\nif(themeParsed)buttonThemesParsed[themeButton]=themeParsed+' '+themeObj.class;else buttonThemesParsed[themeButton]=themeObj.class;});}}else{console.warn('buttonTheme row is missing the \"buttons\" or the \"class\". Please check the documentation.');}});}/**\r\n * Adding themeClass, layoutClass to keyboardDOM\r\n */_this.keyboardDOM.className+=' '+_this.options.theme+' '+layoutClass;/**\r\n * Iterating through each row\r\n */layout[_this.options.layoutName].forEach(function(row,rIndex){var rowArray=row.split(' ');/**\r\n * Creating empty row\r\n */var rowDOM=document.createElement('div');rowDOM.className+=\"hg-row\";/**\r\n * Iterating through each button in row\r\n */rowArray.forEach(function(button,bIndex){var fctBtnClass=_this.utilities.getButtonClass(button);var buttonThemeClass=buttonThemesParsed[button];var buttonDisplayName=_this.utilities.getButtonDisplayName(button,_this.options.display,_this.options.mergeDisplay);/**\r\n * Creating button\r\n */var buttonDOM=document.createElement('div');buttonDOM.className+='hg-button '+fctBtnClass+(buttonThemeClass?\" \"+buttonThemeClass:\"\");buttonDOM.onclick=function(){return _this.handleButtonClicked(button);};/**\r\n * Adding identifier\r\n */buttonDOM.setAttribute(\"data-skBtn\",button);/**\r\n * Adding unique id\r\n * Since there's no limit on spawning same buttons, the unique id ensures you can style every button\r\n */var buttonUID=_this.options.layoutName+'-r'+rIndex+'b'+bIndex;buttonDOM.setAttribute(\"data-skBtnUID\",buttonUID);/**\r\n * Adding button label to button\r\n */var buttonSpanDOM=document.createElement('span');buttonSpanDOM.innerHTML=buttonDisplayName;buttonDOM.appendChild(buttonSpanDOM);/**\r\n * Adding to buttonElements\r\n */if(!_this.buttonElements[button])_this.buttonElements[button]=[];_this.buttonElements[button].push(buttonDOM);/**\r\n * Appending button to row\r\n */rowDOM.appendChild(buttonDOM);});/**\r\n * Appending row to keyboard\r\n */_this.keyboardDOM.appendChild(rowDOM);});/**\r\n * Calling onRender\r\n */_this.onRender();if(!_this.initialized){_this.initialized=true;/**\r\n * Calling onInit\r\n */_this.onInit();}};var keyboardDOMQuery=typeof(arguments.length<=0?undefined:arguments[0])===\"string\"?arguments.length<=0?undefined:arguments[0]:'.simple-keyboard';var options=_typeof(arguments.length<=0?undefined:arguments[0])===\"object\"?arguments.length<=0?undefined:arguments[0]:arguments.length<=1?undefined:arguments[1];if(!options)options={};/**\r\n * Initializing Utilities\r\n */this.utilities=new __WEBPACK_IMPORTED_MODULE_3__services_Utilities__[\"a\" /* default */](this);/**\r\n * Processing options\r\n */this.keyboardDOM=document.querySelector(keyboardDOMQuery);this.options=options;this.options.layoutName=this.options.layoutName||\"default\";this.options.theme=this.options.theme||\"hg-theme-default\";this.options.inputName=this.options.inputName||\"default\";this.input={};this.input[this.options.inputName]='';this.keyboardDOMClass=keyboardDOMQuery.split('.').join(\"\");this.timers={};this.buttonElements={};/**\r\n * Rendering keyboard\r\n */if(this.keyboardDOM)this.render();else console.error('\"'+keyboardDOMQuery+'\" was not found in the DOM.');/**\r\n * Saving instance\r\n * This enables multiple simple-keyboard support with easier management\r\n */if(!window['SimpleKeyboardInstances'])window['SimpleKeyboardInstances']={};window['SimpleKeyboardInstances'][this.utilities.camelCase(this.keyboardDOMClass)]=this;/**\r\n * Physical Keyboard support\r\n */this.physicalKeyboardInterface=new __WEBPACK_IMPORTED_MODULE_1__services_PhysicalKeyboard__[\"a\" /* default */](this);};/* harmony default export */ __webpack_exports__[\"a\"] = (SimpleKeyboard);\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 4 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nfunction _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var PhysicalKeyboard=function PhysicalKeyboard(simpleKeyboardInstance){var _this=this;_classCallCheck(this,PhysicalKeyboard);this.initKeyboardListener=function(){// Normal Keyboard\ndocument.addEventListener(\"keydown\",function(event){if(_this.simpleKeyboardInstance.options.physicalKeyboardHighlight){var buttonPressed=_this.getSimpleKeyboardLayoutKey(event);_this.simpleKeyboardInstance.dispatch(function(instance){var buttonDOM=instance.getButtonElement(buttonPressed)||instance.getButtonElement('{'+buttonPressed+'}');if(buttonDOM){buttonDOM.style.backgroundColor=_this.simpleKeyboardInstance.options.physicalKeyboardHighlightBgColor||\"#9ab4d0\";buttonDOM.style.color=_this.simpleKeyboardInstance.options.physicalKeyboardHighlightTextColor||\"white\";}});}});// Removing button style on keyup\ndocument.addEventListener(\"keyup\",function(event){if(_this.simpleKeyboardInstance.options.physicalKeyboardHighlight){var buttonPressed=_this.getSimpleKeyboardLayoutKey(event);_this.simpleKeyboardInstance.dispatch(function(instance){var buttonDOM=instance.getButtonElement(buttonPressed)||instance.getButtonElement('{'+buttonPressed+'}');if(buttonDOM){buttonDOM.removeAttribute(\"style\");}});}});};this.getSimpleKeyboardLayoutKey=function(event){if(_this.simpleKeyboardInstance.options.debug){console.log(event);}var output=void 0;if(event.code.includes(\"Numpad\")||event.code.includes(\"Shift\")||event.code.includes(\"Space\")||event.code.includes(\"Backspace\")||event.code.includes(\"Control\")||event.code.includes(\"Alt\")||event.code.includes(\"Meta\")){output=event.code;}else{output=event.key;}/**\r\n * If button is not uppercase, casting to lowercase\r\n */if(output!==output.toUpperCase()||event.code[0]===\"F\"&&Number.isInteger(Number(event.code[1]))&&event.code.length<=3){output=output.toLowerCase();}return output;};this.simpleKeyboardInstance=simpleKeyboardInstance;if(!window['SimpleKeyboardPhysicalKeyboardInit'])window['SimpleKeyboardPhysicalKeyboardInit']=true;else return false;this.initKeyboardListener();};/* harmony default export */ __webpack_exports__[\"a\"] = (PhysicalKeyboard);\n\n/***/ }),\n/* 5 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nfunction _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var KeyboardLayout=function KeyboardLayout(){_classCallCheck(this,KeyboardLayout);};KeyboardLayout.getLayout=function(layout){if(layout===\"qwerty\"){return{'default':['` 1 2 3 4 5 6 7 8 9 0 - = {bksp}','{tab} q w e r t y u i o p [ ] \\\\','{lock} a s d f g h j k l ; \\' {enter}','{shift} z x c v b n m , . / {shift}','.com @ {space}'],'shift':['~ ! @ # $ % ^ & * ( ) _ + {bksp}','{tab} Q W E R T Y U I O P { } |','{lock} A S D F G H J K L : \" {enter}','{shift} Z X C V B N M < > ? {shift}','.com @ {space}']};}else if(layout===\"numeric\"){return{'default':['1 2 3','4 5 6','7 8 9','{//} 0 {bksp}']};}else{return KeyboardLayout.getLayout(\"qwerty\");}};/* harmony default export */ __webpack_exports__[\"a\"] = (KeyboardLayout);\n\n/***/ }),\n/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};var _createClass=function(){function defineProperties(target,props){for(var i=0;i0){output=_this.removeAt(output,caretPos);}else if(button===\"{space}\")output=_this.addStringAt(output,\" \",caretPos);else if(button===\"{tab}\"&&!(typeof options.tabCharOnTab===\"boolean\"&&options.tabCharOnTab===false)){output=_this.addStringAt(output,\"\\t\",caretPos);}else if((button===\"{enter}\"||button===\"{numpadenter}\")&&options.newLineOnEnter)output=_this.addStringAt(output,\"\\n\",caretPos);else if(button.includes(\"numpad\")&&Number.isInteger(Number(button[button.length-2]))){output=_this.addStringAt(output,button[button.length-2],caretPos);}else if(button===\"{numpaddivide}\")output=_this.addStringAt(output,'/',caretPos);else if(button===\"{numpadmultiply}\")output=_this.addStringAt(output,'*',caretPos);else if(button===\"{numpadsubtract}\")output=_this.addStringAt(output,'-',caretPos);else if(button===\"{numpadadd}\")output=_this.addStringAt(output,'+',caretPos);else if(button===\"{numpadadd}\")output=_this.addStringAt(output,'+',caretPos);else if(button===\"{numpaddecimal}\")output=_this.addStringAt(output,'.',caretPos);else if(button===\"{\"||button===\"}\")output=_this.addStringAt(output,button,caretPos);else if(!button.includes(\"{\")&&!button.includes(\"}\"))output=_this.addStringAt(output,button,caretPos);return output;};this.updateCaretPos=function(length,minus){if(minus){if(_this.simpleKeyboardInstance.caretPosition>0)_this.simpleKeyboardInstance.caretPosition=_this.simpleKeyboardInstance.caretPosition-length;}else{_this.simpleKeyboardInstance.caretPosition=_this.simpleKeyboardInstance.caretPosition+length;}};this.isMaxLengthReached=function(){return Boolean(_this.maxLengthReached);};this.camelCase=function(string){return string.toLowerCase().trim().split(/[.\\-_\\s]/g).reduce(function(string,word){return string+word[0].toUpperCase()+word.slice(1);});};this.simpleKeyboardInstance=simpleKeyboardInstance;}_createClass(Utilities,[{key:\"normalizeString\",value:function normalizeString(string){var output=void 0;if(string===\"@\")output='at';else if(string===\",\")output='comma';else if(string===\".\")output='dot';else if(string===\"\\\\\")output='backslash';else if(string===\"/\")output='fordardslash';else if(string===\"*\")output='asterisk';else if(string===\"&\")output='ampersand';else if(string===\"$\")output='dollarsign';else if(string===\"=\")output='equals';else if(string===\"+\")output='plus';else if(string===\"-\")output='minus';else if(string===\"'\")output='apostrophe';else if(string===\";\")output='colon';else if(string===\"[\")output='openbracket';else if(string===\"]\")output='closebracket';else if(string===\"//\")output='emptybutton';else if(string===\".com\")output='com';else output='';return output?\" hg-button-\"+output:'';}},{key:\"getDefaultDiplay\",value:function getDefaultDiplay(){return{'{bksp}':'backspace','{backspace}':'backspace','{enter}':'< enter','{shift}':'shift','{shiftleft}':'shift','{shiftright}':'shift','{alt}':'alt','{s}':'shift','{tab}':'tab','{lock}':'caps','{capslock}':'caps','{accept}':'Submit','{space}':' ','{//}':' ',\"{esc}\":\"esc\",\"{escape}\":\"esc\",\"{f1}\":\"f1\",\"{f2}\":\"f2\",\"{f3}\":\"f3\",\"{f4}\":\"f4\",\"{f5}\":\"f5\",\"{f6}\":\"f6\",\"{f7}\":\"f7\",\"{f8}\":\"f8\",\"{f9}\":\"f9\",\"{f10}\":\"f10\",\"{f11}\":\"f11\",\"{f12}\":\"f12\",'{numpaddivide}':'/','{numlock}':'lock',\"{arrowup}\":\"↑\",\"{arrowleft}\":\"←\",\"{arrowdown}\":\"↓\",\"{arrowright}\":\"→\",\"{prtscr}\":\"print\",\"{scrolllock}\":\"scroll\",\"{pause}\":\"pause\",\"{insert}\":\"ins\",\"{home}\":\"home\",\"{pageup}\":\"up\",\"{delete}\":\"del\",\"{end}\":\"end\",\"{pagedown}\":\"down\",\"{numpadmultiply}\":\"*\",\"{numpadsubtract}\":\"-\",\"{numpadadd}\":\"+\",\"{numpadenter}\":\"enter\",\"{period}\":\".\",\"{numpaddecimal}\":\".\",\"{numpad0}\":\"0\",\"{numpad1}\":\"1\",\"{numpad2}\":\"2\",\"{numpad3}\":\"3\",\"{numpad4}\":\"4\",\"{numpad5}\":\"5\",\"{numpad6}\":\"6\",\"{numpad7}\":\"7\",\"{numpad8}\":\"8\",\"{numpad9}\":\"9\"};}},{key:\"addStringAt\",value:function addStringAt(source,string,position){var output=void 0;if(this.simpleKeyboardInstance.options.debug){console.log(\"Caret at:\",position);}if(!position&&position!==0){output=source+string;}else{output=[source.slice(0,position),string,source.slice(position)].join('');/**\r\n * Avoid caret position change when maxLength is set\r\n */if(!this.isMaxLengthReached()){this.updateCaretPos(string.length);}}return output;}},{key:\"removeAt\",value:function removeAt(source,position){if(this.simpleKeyboardInstance.caretPosition===0){return source;}var output=void 0;var prevTwoChars=void 0;var emojiMatched=void 0;var emojiMatchedReg=/([\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;/**\r\n * Emojis are made out of two characters, so we must take a custom approach to trim them.\r\n * For more info: https://mathiasbynens.be/notes/javascript-unicode\r\n */if(position&&position>=0){prevTwoChars=source.substring(position-2,position);emojiMatched=prevTwoChars.match(emojiMatchedReg);if(emojiMatched){output=source.substr(0,position-2)+source.substr(position);this.updateCaretPos(2,true);}else{output=source.substr(0,position-1)+source.substr(position);this.updateCaretPos(1,true);}}else{prevTwoChars=source.slice(-2);emojiMatched=prevTwoChars.match(emojiMatchedReg);if(emojiMatched){output=source.slice(0,-2);this.updateCaretPos(2,true);}else{output=source.slice(0,-1);this.updateCaretPos(1,true);}}return output;}},{key:\"handleMaxLength\",value:function handleMaxLength(inputObj,options,updatedInput){var maxLength=options.maxLength;var currentInput=inputObj[options.inputName];var condition=currentInput.length===maxLength;if(/**\r\n * If pressing this button won't add more characters\r\n * We exit out of this limiter function\r\n */updatedInput.length<=currentInput.length){return false;}if(Number.isInteger(maxLength)){if(options.debug){console.log(\"maxLength (num) reached:\",condition);}if(condition){this.maxLengthReached=true;return true;}else{this.maxLengthReached=false;return false;}}if((typeof maxLength===\"undefined\"?\"undefined\":_typeof(maxLength))===\"object\"){var _condition=currentInput.length===maxLength[options.inputName];if(options.debug){console.log(\"maxLength (obj) reached:\",_condition);}if(_condition){this.maxLengthReached=true;return true;}else{this.maxLengthReached=false;return false;}}}}]);return Utilities;}();/* harmony default export */ __webpack_exports__[\"a\"] = (Utilities);\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// index.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap bf71d4a66ad12001e38f","import SimpleKeyboard from './components/Keyboard';\r\nexport default SimpleKeyboard;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/index.js","import './Keyboard.css';\r\n\r\n// Services\r\nimport PhysicalKeyboard from '../services/PhysicalKeyboard';\r\nimport KeyboardLayout from '../services/KeyboardLayout';\r\nimport Utilities from '../services/Utilities';\r\n\r\nclass SimpleKeyboard {\r\n constructor(...params){\r\n let keyboardDOMQuery = typeof params[0] === \"string\" ? params[0] : '.simple-keyboard';\r\n let options = typeof params[0] === \"object\" ? params[0] : params[1];\r\n\r\n if(!options)\r\n options = {};\r\n\r\n /**\r\n * Initializing Utilities\r\n */\r\n this.utilities = new Utilities(this);\r\n\r\n /**\r\n * Processing options\r\n */\r\n this.keyboardDOM = document.querySelector(keyboardDOMQuery);\r\n this.options = options;\r\n this.options.layoutName = this.options.layoutName || \"default\";\r\n this.options.theme = this.options.theme || \"hg-theme-default\";\r\n this.options.inputName = this.options.inputName || \"default\";\r\n this.input = {};\r\n this.input[this.options.inputName] = '';\r\n this.keyboardDOMClass = keyboardDOMQuery.split('.').join(\"\");\r\n this.timers = {};\r\n this.buttonElements = {};\r\n\r\n /**\r\n * Rendering keyboard\r\n */\r\n if(this.keyboardDOM)\r\n this.render();\r\n else\r\n console.error(`\"${keyboardDOMQuery}\" was not found in the DOM.`);\r\n\r\n /**\r\n * Saving instance\r\n * This enables multiple simple-keyboard support with easier management\r\n */\r\n if(!window['SimpleKeyboardInstances'])\r\n window['SimpleKeyboardInstances'] = {};\r\n \r\n window['SimpleKeyboardInstances'][this.utilities.camelCase(this.keyboardDOMClass)] = this;\r\n\r\n /**\r\n * Physical Keyboard support\r\n */\r\n this.physicalKeyboardInterface = new PhysicalKeyboard(this);\r\n }\r\n\r\n handleButtonClicked = (button) => {\r\n let debug = this.options.debug;\r\n\r\n /**\r\n * Ignoring placeholder buttons\r\n */\r\n if(button === '{//}')\r\n return false;\r\n\r\n /**\r\n * Calling onKeyPress\r\n */\r\n if(typeof this.options.onKeyPress === \"function\")\r\n this.options.onKeyPress(button);\r\n \r\n if(!this.input[this.options.inputName])\r\n this.input[this.options.inputName] = '';\r\n\r\n let updatedInput = this.utilities.getUpdatedInput(button, this.input[this.options.inputName], this.options, this.caretPosition);\r\n\r\n if(this.input[this.options.inputName] !== updatedInput){\r\n\r\n /**\r\n * If maxLength and handleMaxLength yield true, halting\r\n */\r\n if(this.options.maxLength && this.utilities.handleMaxLength(this.input, this.options, updatedInput)){\r\n return false;\r\n }\r\n\r\n this.input[this.options.inputName] = updatedInput;\r\n\r\n if(debug)\r\n console.log('Input changed:', this.input);\r\n\r\n /**\r\n * syncInstanceInputs\r\n */\r\n if(this.options.syncInstanceInputs)\r\n this.syncInstanceInputs(this.input);\r\n\r\n /**\r\n * Calling onChange\r\n */\r\n if(typeof this.options.onChange === \"function\")\r\n this.options.onChange(this.input[this.options.inputName]);\r\n }\r\n \r\n if(debug){\r\n console.log(\"Key pressed:\", button);\r\n }\r\n }\r\n\r\n syncInstanceInputs = () => {\r\n this.dispatch((section) => {\r\n section.replaceInput(this.input);\r\n });\r\n }\r\n\r\n clearInput = (inputName) => {\r\n inputName = inputName || this.options.inputName;\r\n this.input[this.options.inputName] = '';\r\n\r\n /**\r\n * syncInstanceInputs\r\n */\r\n if(this.options.syncInstanceInputs)\r\n this.syncInstanceInputs(this.input);\r\n }\r\n\r\n getInput = (inputName) => {\r\n inputName = inputName || this.options.inputName;\r\n\r\n /**\r\n * syncInstanceInputs\r\n */\r\n if(this.options.syncInstanceInputs)\r\n this.syncInstanceInputs(this.input);\r\n\r\n return this.input[this.options.inputName];\r\n }\r\n\r\n setInput = (input, inputName) => {\r\n inputName = inputName || this.options.inputName;\r\n this.input[inputName] = input;\r\n\r\n /**\r\n * syncInstanceInputs\r\n */\r\n if(this.options.syncInstanceInputs)\r\n this.syncInstanceInputs(this.input);\r\n }\r\n\r\n replaceInput = (inputObj) => {\r\n this.input = inputObj;\r\n }\r\n\r\n setOptions = option => {\r\n option = option || {};\r\n this.options = Object.assign(this.options, option);\r\n this.render();\r\n }\r\n\r\n clear = () => {\r\n this.keyboardDOM.innerHTML = '';\r\n this.keyboardDOM.className = this.keyboardDOMClass;\r\n this.buttonElements = {};\r\n }\r\n\r\n dispatch = (callback) => {\r\n if(!window['SimpleKeyboardInstances']){\r\n console.error(\"SimpleKeyboardInstances is not defined. Dispatch cannot be called.\")\r\n return false;\r\n }\r\n \r\n return Object.keys(window['SimpleKeyboardInstances']).forEach((key) => {\r\n callback(window['SimpleKeyboardInstances'][key], key);\r\n })\r\n }\r\n\r\n addButtonTheme = (buttons, className) => {\r\n if(!className || !buttons)\r\n return false;\r\n\r\n buttons.split(\" \").forEach(button => {\r\n className.split(\" \").forEach(classNameItem => {\r\n if(!this.options.buttonTheme)\r\n this.options.buttonTheme = [];\r\n\r\n let classNameFound = false;\r\n \r\n /**\r\n * If class is already defined, we add button to class definition\r\n */\r\n this.options.buttonTheme.map(buttonTheme => {\r\n\r\n if(buttonTheme.class.split(\" \").includes(classNameItem)){\r\n classNameFound = true;\r\n \r\n let buttonThemeArray = buttonTheme.buttons.split(\" \");\r\n if(!buttonThemeArray.includes(button)){\r\n classNameFound = true;\r\n buttonThemeArray.push(button);\r\n buttonTheme.buttons = buttonThemeArray.join(\" \");\r\n }\r\n }\r\n return buttonTheme;\r\n });\r\n\r\n /**\r\n * If class is not defined, we create a new entry\r\n */\r\n if(!classNameFound){\r\n this.options.buttonTheme.push({\r\n class: classNameItem,\r\n buttons: buttons\r\n });\r\n }\r\n\r\n });\r\n });\r\n\r\n this.render();\r\n }\r\n\r\n removeButtonTheme = (buttons, className) => {\r\n /**\r\n * When called with empty parameters, remove all button themes\r\n */\r\n if(!buttons && !className){\r\n this.options.buttonTheme = [];\r\n this.render();\r\n return false;\r\n }\r\n\r\n /**\r\n * If buttons are passed and buttonTheme has items\r\n */\r\n if(buttons && Array.isArray(this.options.buttonTheme) && this.options.buttonTheme.length){\r\n let buttonArray = buttons.split(\" \");\r\n buttonArray.forEach((button, key) => {\r\n this.options.buttonTheme.map((buttonTheme, index) => {\r\n\r\n /**\r\n * If className is set, we affect the buttons only for that class\r\n * Otherwise, we afect all classes\r\n */\r\n if(\r\n (className && className.includes(buttonTheme.class)) ||\r\n !className\r\n ){\r\n let filteredButtonArray;\r\n\r\n if(buttonArray.includes(button)){\r\n filteredButtonArray = buttonTheme.buttons.split(\" \").filter(item => item !== button);\r\n }\r\n\r\n /**\r\n * If buttons left, return them, otherwise, remove button Theme\r\n */\r\n if(filteredButtonArray.length){\r\n buttonTheme.buttons = filteredButtonArray.join(\" \");\r\n } else {\r\n this.options.buttonTheme.splice(index, 1);\r\n buttonTheme = null;\r\n }\r\n \r\n }\r\n\r\n return buttonTheme;\r\n });\r\n });\r\n\r\n this.render();\r\n }\r\n }\r\n\r\n getButtonElement = (button) => {\r\n let output;\r\n\r\n let buttonArr = this.buttonElements[button];\r\n if(buttonArr){\r\n if(buttonArr.length > 1){\r\n output = buttonArr;\r\n } else {\r\n output = buttonArr[0];\r\n }\r\n }\r\n\r\n return output;\r\n }\r\n\r\n handleCaret = () => {\r\n if(this.options.debug){\r\n console.log(\"Caret handling started\");\r\n }\r\n\r\n let handler = (event) => {\r\n let targetTagName = event.target.tagName.toLowerCase();\r\n\r\n if(\r\n targetTagName === \"textarea\" ||\r\n targetTagName === \"input\"\r\n ){\r\n this.caretPosition = event.target.selectionStart;\r\n\r\n if(this.options.debug){\r\n console.log('Caret at: ', event.target.selectionStart, event.target.tagName.toLowerCase());\r\n } \r\n }\r\n };\r\n\r\n document.addEventListener(\"keyup\", handler);\r\n document.addEventListener(\"mouseup\", handler);\r\n document.addEventListener(\"touchend\", handler);\r\n }\r\n\r\n onInit = () => {\r\n if(this.options.debug){\r\n console.log(\"Initialized\");\r\n }\r\n\r\n /**\r\n * Caret handling\r\n */\r\n this.handleCaret();\r\n\r\n if(typeof this.options.onInit === \"function\")\r\n this.options.onInit();\r\n }\r\n\r\n onRender = () => {\r\n if(typeof this.options.onRender === \"function\")\r\n this.options.onRender();\r\n }\r\n\r\n render = () => {\r\n /**\r\n * Clear keyboard\r\n */\r\n this.clear();\r\n\r\n let layoutClass = this.options.layout ? \"hg-layout-custom\" : `hg-layout-${this.options.layoutName}`;\r\n let layout = this.options.layout || KeyboardLayout.getLayout(this.options.layoutName);\r\n\r\n /**\r\n * Account for buttonTheme, if set\r\n */\r\n let buttonThemesParsed = {};\r\n if(Array.isArray(this.options.buttonTheme)){\r\n this.options.buttonTheme.forEach(themeObj => {\r\n if(themeObj.buttons && themeObj.class){\r\n let themeButtons = themeObj.buttons.split(' ');\r\n\r\n if(Array.isArray(themeButtons)){\r\n themeButtons.forEach(themeButton => {\r\n let themeParsed = buttonThemesParsed[themeButton];\r\n\r\n // If the button has already been added\r\n if(themeParsed)\r\n buttonThemesParsed[themeButton] = `${themeParsed} ${themeObj.class}`;\r\n else\r\n buttonThemesParsed[themeButton] = themeObj.class;\r\n });\r\n }\r\n } else {\r\n console.warn(`buttonTheme row is missing the \"buttons\" or the \"class\". Please check the documentation.`)\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Adding themeClass, layoutClass to keyboardDOM\r\n */\r\n this.keyboardDOM.className += ` ${this.options.theme} ${layoutClass}`;\r\n\r\n /**\r\n * Iterating through each row\r\n */\r\n layout[this.options.layoutName].forEach((row, rIndex) => {\r\n let rowArray = row.split(' ');\r\n\r\n /**\r\n * Creating empty row\r\n */\r\n var rowDOM = document.createElement('div');\r\n rowDOM.className += \"hg-row\";\r\n\r\n /**\r\n * Iterating through each button in row\r\n */\r\n rowArray.forEach((button, bIndex) => {\r\n let fctBtnClass = this.utilities.getButtonClass(button);\r\n let buttonThemeClass = buttonThemesParsed[button];\r\n let buttonDisplayName = this.utilities.getButtonDisplayName(button, this.options.display, this.options.mergeDisplay);\r\n\r\n /**\r\n * Creating button\r\n */\r\n var buttonDOM = document.createElement('div');\r\n buttonDOM.className += `hg-button ${fctBtnClass}${buttonThemeClass ? \" \"+buttonThemeClass : \"\"}`;\r\n buttonDOM.onclick = () => this.handleButtonClicked(button);\r\n\r\n /**\r\n * Adding identifier\r\n */\r\n buttonDOM.setAttribute(\"data-skBtn\", button);\r\n\r\n /**\r\n * Adding unique id\r\n * Since there's no limit on spawning same buttons, the unique id ensures you can style every button\r\n */\r\n let buttonUID = `${this.options.layoutName}-r${rIndex}b${bIndex}`;\r\n buttonDOM.setAttribute(\"data-skBtnUID\", buttonUID);\r\n\r\n /**\r\n * Adding button label to button\r\n */\r\n var buttonSpanDOM = document.createElement('span');\r\n buttonSpanDOM.innerHTML = buttonDisplayName;\r\n buttonDOM.appendChild(buttonSpanDOM);\r\n\r\n /**\r\n * Adding to buttonElements\r\n */\r\n if(!this.buttonElements[button])\r\n this.buttonElements[button] = [];\r\n\r\n this.buttonElements[button].push(buttonDOM);\r\n\r\n /**\r\n * Appending button to row\r\n */\r\n rowDOM.appendChild(buttonDOM);\r\n\r\n });\r\n\r\n /**\r\n * Appending row to keyboard\r\n */\r\n this.keyboardDOM.appendChild(rowDOM);\r\n });\r\n\r\n /**\r\n * Calling onRender\r\n */\r\n this.onRender();\r\n\r\n if(!this.initialized){\r\n this.initialized = true;\r\n\r\n /**\r\n * Calling onInit\r\n */\r\n this.onInit();\r\n }\r\n }\r\n}\r\n\r\nexport default SimpleKeyboard;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/components/Keyboard.js","class PhysicalKeyboard {\r\n constructor(simpleKeyboardInstance){\r\n this.simpleKeyboardInstance = simpleKeyboardInstance;\r\n\r\n if(!window['SimpleKeyboardPhysicalKeyboardInit'])\r\n window['SimpleKeyboardPhysicalKeyboardInit'] = true;\r\n else\r\n return false;\r\n\r\n this.initKeyboardListener();\r\n }\r\n\r\n initKeyboardListener = () => {\r\n // Normal Keyboard\r\n document.addEventListener(\"keydown\", (event) => {\r\n if(this.simpleKeyboardInstance.options.physicalKeyboardHighlight){\r\n let buttonPressed = this.getSimpleKeyboardLayoutKey(event);\r\n\r\n this.simpleKeyboardInstance.dispatch(instance => {\r\n let buttonDOM = instance.getButtonElement(buttonPressed) || instance.getButtonElement(`{${buttonPressed}}`);\r\n\r\n if(buttonDOM){\r\n buttonDOM.style.backgroundColor = this.simpleKeyboardInstance.options.physicalKeyboardHighlightBgColor || \"#9ab4d0\";\r\n buttonDOM.style.color = this.simpleKeyboardInstance.options.physicalKeyboardHighlightTextColor || \"white\";\r\n }\r\n });\r\n }\r\n });\r\n\r\n // Removing button style on keyup\r\n document.addEventListener(\"keyup\", (event) => {\r\n if(this.simpleKeyboardInstance.options.physicalKeyboardHighlight){\r\n let buttonPressed = this.getSimpleKeyboardLayoutKey(event);\r\n\r\n this.simpleKeyboardInstance.dispatch(instance => {\r\n let buttonDOM = instance.getButtonElement(buttonPressed) || instance.getButtonElement(`{${buttonPressed}}`);\r\n\r\n if(buttonDOM){\r\n buttonDOM.removeAttribute(\"style\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n getSimpleKeyboardLayoutKey = (event) => {\r\n if(this.simpleKeyboardInstance.options.debug){\r\n console.log(event);\r\n }\r\n \r\n let output;\r\n\r\n if(\r\n event.code.includes(\"Numpad\") ||\r\n event.code.includes(\"Shift\") ||\r\n event.code.includes(\"Space\") ||\r\n event.code.includes(\"Backspace\") ||\r\n event.code.includes(\"Control\") ||\r\n event.code.includes(\"Alt\") ||\r\n event.code.includes(\"Meta\")\r\n ){\r\n output = event.code;\r\n } else {\r\n output = event.key;\r\n }\r\n\r\n /**\r\n * If button is not uppercase, casting to lowercase\r\n */\r\n if (\r\n output !== output.toUpperCase() ||\r\n (event.code[0] === \"F\" && Number.isInteger(Number(event.code[1])) && event.code.length <= 3)\r\n ) {\r\n output = output.toLowerCase();\r\n }\r\n\r\n return output;\r\n }\r\n}\r\n\r\nexport default PhysicalKeyboard;\n\n\n// WEBPACK FOOTER //\n// ./src/lib/services/PhysicalKeyboard.js","class KeyboardLayout {\r\n\r\n static getLayout = layout => {\r\n if(layout === \"qwerty\"){\r\n return {\r\n 'default': [\r\n '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',\r\n '{tab} q w e r t y u i o p [ ] \\\\',\r\n '{lock} a s d f g h j k l ; \\' {enter}',\r\n '{shift} z x c v b n m , . / {shift}',\r\n '.com @ {space}'\r\n ],\r\n 'shift': [\r\n '~ ! @ # $ % ^ & * ( ) _ + {bksp}',\r\n '{tab} Q W E R T Y U I O P { } |',\r\n '{lock} A S D F G H J K L : \" {enter}',\r\n '{shift} Z X C V B N M < > ? {shift}',\r\n '.com @ {space}'\r\n ]\r\n };\r\n } else if(layout === \"numeric\"){\r\n return {\r\n 'default': [\r\n '1 2 3',\r\n '4 5 6',\r\n '7 8 9',\r\n '{//} 0 {bksp}'\r\n ]\r\n };\r\n } else {\r\n return KeyboardLayout.getLayout(\"qwerty\");\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default KeyboardLayout;\n\n\n// WEBPACK FOOTER //\n// ./src/lib/services/KeyboardLayout.js","class Utilities {\r\n constructor(simpleKeyboardInstance){\r\n this.simpleKeyboardInstance = simpleKeyboardInstance;\r\n }\r\n\r\n normalizeString(string){\r\n let output;\r\n\r\n if(string === \"@\")\r\n output = 'at';\r\n else if(string === \",\")\r\n output = 'comma';\r\n else if(string === \".\")\r\n output = 'dot';\r\n else if(string === \"\\\\\")\r\n output = 'backslash';\r\n else if(string === \"/\")\r\n output = 'fordardslash';\r\n else if(string === \"*\")\r\n output = 'asterisk';\r\n else if(string === \"&\")\r\n output = 'ampersand';\r\n else if(string === \"$\")\r\n output = 'dollarsign';\r\n else if(string === \"=\")\r\n output = 'equals';\r\n else if(string === \"+\")\r\n output = 'plus';\r\n else if(string === \"-\")\r\n output = 'minus';\r\n else if(string === \"'\")\r\n output = 'apostrophe';\r\n else if(string === \";\")\r\n output = 'colon';\r\n else if(string === \"[\")\r\n output = 'openbracket';\r\n else if(string === \"]\")\r\n output = 'closebracket';\r\n else if(string === \"//\")\r\n output = 'emptybutton';\r\n else if(string === \".com\")\r\n output = 'com';\r\n else\r\n output = '';\r\n\r\n return output ? ` hg-button-${output}` : '';\r\n }\r\n\r\n getButtonClass = button => {\r\n let buttonTypeClass = (button.includes(\"{\") && button.includes(\"}\") && button !== '{//}') ? \"functionBtn\" : \"standardBtn\";\r\n let buttonWithoutBraces = button.replace(\"{\", \"\").replace(\"}\", \"\");\r\n\r\n let buttonNormalized =\r\n buttonTypeClass === \"standardBtn\" ?\r\n this.normalizeString(buttonWithoutBraces) : ` hg-button-${buttonWithoutBraces}`;\r\n\r\n return `hg-${buttonTypeClass}${buttonNormalized}`;\r\n }\r\n\r\n getDefaultDiplay(){\r\n return {\r\n '{bksp}': 'backspace',\r\n '{backspace}': 'backspace',\r\n '{enter}': '< enter',\r\n '{shift}': 'shift',\r\n '{shiftleft}': 'shift',\r\n '{shiftright}': 'shift',\r\n '{alt}': 'alt',\r\n '{s}': 'shift',\r\n '{tab}': 'tab',\r\n '{lock}': 'caps',\r\n '{capslock}': 'caps',\r\n '{accept}': 'Submit',\r\n '{space}': ' ',\r\n '{//}': ' ',\r\n \"{esc}\": \"esc\",\r\n \"{escape}\": \"esc\",\r\n \"{f1}\": \"f1\",\r\n \"{f2}\": \"f2\",\r\n \"{f3}\": \"f3\",\r\n \"{f4}\": \"f4\",\r\n \"{f5}\": \"f5\",\r\n \"{f6}\": \"f6\",\r\n \"{f7}\": \"f7\",\r\n \"{f8}\": \"f8\",\r\n \"{f9}\": \"f9\",\r\n \"{f10}\": \"f10\",\r\n \"{f11}\": \"f11\",\r\n \"{f12}\": \"f12\",\r\n '{numpaddivide}': '/',\r\n '{numlock}': 'lock',\r\n \"{arrowup}\": \"↑\",\r\n \"{arrowleft}\": \"←\",\r\n \"{arrowdown}\": \"↓\",\r\n \"{arrowright}\": \"→\",\r\n \"{prtscr}\": \"print\",\r\n \"{scrolllock}\": \"scroll\",\r\n \"{pause}\": \"pause\",\r\n \"{insert}\": \"ins\",\r\n \"{home}\": \"home\",\r\n \"{pageup}\": \"up\",\r\n \"{delete}\": \"del\",\r\n \"{end}\": \"end\",\r\n \"{pagedown}\": \"down\",\r\n \"{numpadmultiply}\": \"*\",\r\n \"{numpadsubtract}\": \"-\",\r\n \"{numpadadd}\": \"+\",\r\n \"{numpadenter}\": \"enter\",\r\n \"{period}\": \".\",\r\n \"{numpaddecimal}\": \".\",\r\n \"{numpad0}\": \"0\",\r\n \"{numpad1}\": \"1\",\r\n \"{numpad2}\": \"2\",\r\n \"{numpad3}\": \"3\",\r\n \"{numpad4}\": \"4\",\r\n \"{numpad5}\": \"5\",\r\n \"{numpad6}\": \"6\",\r\n \"{numpad7}\": \"7\",\r\n \"{numpad8}\": \"8\",\r\n \"{numpad9}\": \"9\",\r\n };\r\n }\r\n\r\n getButtonDisplayName = (button, display, mergeDisplay) => {\r\n if(mergeDisplay){\r\n display = Object.assign({}, this.getDefaultDiplay(), display);\r\n } else {\r\n display = display || this.getDefaultDiplay();\r\n }\r\n\r\n return display[button] || button;\r\n }\r\n\r\n getUpdatedInput = (button, input, options, caretPos) => {\r\n \r\n let output = input;\r\n\r\n if((button === \"{bksp}\" || button === \"{backspace}\") && output.length > 0){\r\n output = this.removeAt(output, caretPos);\r\n\r\n } else if(button === \"{space}\")\r\n output = this.addStringAt(output, \" \", caretPos);\r\n\r\n else if(button === \"{tab}\" && !(typeof options.tabCharOnTab === \"boolean\" && options.tabCharOnTab === false)){\r\n output = this.addStringAt(output, \"\\t\", caretPos);\r\n\r\n } else if((button === \"{enter}\" || button === \"{numpadenter}\") && options.newLineOnEnter)\r\n output = this.addStringAt(output, \"\\n\", caretPos);\r\n\r\n else if(button.includes(\"numpad\") && Number.isInteger(Number(button[button.length - 2]))){\r\n output = this.addStringAt(output, button[button.length - 2], caretPos);\r\n }\r\n else if(button === \"{numpaddivide}\")\r\n output = this.addStringAt(output, '/', caretPos);\r\n\r\n else if(button === \"{numpadmultiply}\")\r\n output = this.addStringAt(output, '*', caretPos);\r\n else if(button === \"{numpadsubtract}\")\r\n output = this.addStringAt(output, '-', caretPos);\r\n\r\n else if(button === \"{numpadadd}\")\r\n output = this.addStringAt(output, '+', caretPos);\r\n\r\n else if(button === \"{numpadadd}\")\r\n output = this.addStringAt(output, '+', caretPos);\r\n\r\n else if(button === \"{numpaddecimal}\")\r\n output = this.addStringAt(output, '.', caretPos);\r\n\r\n else if(button === \"{\" || button === \"}\")\r\n output = this.addStringAt(output, button, caretPos);\r\n\r\n else if(!button.includes(\"{\") && !button.includes(\"}\"))\r\n output = this.addStringAt(output, button, caretPos);\r\n\r\n return output;\r\n }\r\n\r\n updateCaretPos = (length, minus) => {\r\n if(minus){\r\n if(this.simpleKeyboardInstance.caretPosition > 0)\r\n this.simpleKeyboardInstance.caretPosition = this.simpleKeyboardInstance.caretPosition - length\r\n } else {\r\n this.simpleKeyboardInstance.caretPosition = this.simpleKeyboardInstance.caretPosition + length;\r\n }\r\n }\r\n\r\n addStringAt(source, string, position){\r\n let output;\r\n\r\n if(this.simpleKeyboardInstance.options.debug){\r\n console.log(\"Caret at:\", position);\r\n }\r\n\r\n if(!position && position !== 0){\r\n output = source + string;\r\n } else {\r\n output = [source.slice(0, position), string, source.slice(position)].join('');\r\n\r\n /**\r\n * Avoid caret position change when maxLength is set\r\n */\r\n if(!this.isMaxLengthReached()){\r\n this.updateCaretPos(string.length);\r\n }\r\n\r\n }\r\n\r\n return output;\r\n }\r\n\r\n removeAt(source, position){\r\n if(this.simpleKeyboardInstance.caretPosition === 0){\r\n return source;\r\n }\r\n\r\n let output;\r\n let prevTwoChars;\r\n let emojiMatched;\r\n let emojiMatchedReg = /([\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\r\n\r\n /**\r\n * Emojis are made out of two characters, so we must take a custom approach to trim them.\r\n * For more info: https://mathiasbynens.be/notes/javascript-unicode\r\n */\r\n if(position && position >= 0){\r\n prevTwoChars = source.substring(position - 2, position)\r\n emojiMatched = prevTwoChars.match(emojiMatchedReg);\r\n\r\n if(emojiMatched){\r\n output = source.substr(0, (position - 2)) + source.substr(position);\r\n this.updateCaretPos(2, true);\r\n } else {\r\n output = source.substr(0, (position - 1)) + source.substr(position);\r\n this.updateCaretPos(1, true);\r\n }\r\n } else {\r\n prevTwoChars = source.slice(-2);\r\n emojiMatched = prevTwoChars.match(emojiMatchedReg);\r\n\r\n if(emojiMatched){\r\n output = source.slice(0, -2);\r\n this.updateCaretPos(2, true);\r\n } else {\r\n output = source.slice(0, -1);\r\n this.updateCaretPos(1, true);\r\n }\r\n }\r\n\r\n return output;\r\n }\r\n\r\n handleMaxLength(inputObj, options, updatedInput){\r\n let maxLength = options.maxLength;\r\n let currentInput = inputObj[options.inputName];\r\n let condition = currentInput.length === maxLength;\r\n\r\n\r\n if(\r\n /**\r\n * If pressing this button won't add more characters\r\n * We exit out of this limiter function\r\n */\r\n updatedInput.length <= currentInput.length\r\n ){\r\n return false;\r\n }\r\n\r\n if(Number.isInteger(maxLength)){\r\n if(options.debug){\r\n console.log(\"maxLength (num) reached:\", condition);\r\n }\r\n\r\n if(condition){\r\n this.maxLengthReached = true;\r\n return true;\r\n } else {\r\n this.maxLengthReached = false;\r\n return false;\r\n }\r\n }\r\n\r\n if(typeof maxLength === \"object\"){\r\n let condition = currentInput.length === maxLength[options.inputName];\r\n\r\n if(options.debug){\r\n console.log(\"maxLength (obj) reached:\", condition);\r\n }\r\n\r\n if(condition){\r\n this.maxLengthReached = true;\r\n return true;\r\n } else {\r\n this.maxLengthReached = false;\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n isMaxLengthReached = () => {\r\n return Boolean(this.maxLengthReached);\r\n }\r\n\r\n camelCase = (string) => {\r\n return string.toLowerCase().trim().split(/[.\\-_\\s]/g).reduce((string, word) => string + word[0].toUpperCase() + word.slice(1));\r\n };\r\n\r\n}\r\n\r\nexport default Utilities;\n\n\n// WEBPACK FOOTER //\n// ./src/lib/services/Utilities.js"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///index.js","webpack:///webpack/bootstrap bc3076376fced99ac5c3","webpack:///./src/lib/index.js","webpack:///./src/lib/components/Keyboard.js","webpack:///./src/lib/services/PhysicalKeyboard.js","webpack:///./src/lib/services/KeyboardLayout.js","webpack:///./src/lib/services/Utilities.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","value","__WEBPACK_IMPORTED_MODULE_0__components_Keyboard__","_classCallCheck","instance","Constructor","TypeError","__WEBPACK_IMPORTED_MODULE_0__Keyboard_css__","__WEBPACK_IMPORTED_MODULE_1__services_PhysicalKeyboard__","__WEBPACK_IMPORTED_MODULE_2__services_KeyboardLayout__","__WEBPACK_IMPORTED_MODULE_3__services_Utilities__","_typeof","Symbol","iterator","obj","constructor","SimpleKeyboard","_this","handleButtonClicked","button","debug","options","onKeyPress","input","inputName","updatedInput","utilities","getUpdatedInput","caretPosition","maxLength","handleMaxLength","console","log","syncInstanceInputs","onChange","dispatch","section","replaceInput","clearInput","getInput","setInput","inputObj","setOptions","option","assign","render","clear","keyboardDOM","innerHTML","className","keyboardDOMClass","buttonElements","callback","window","warn","Error","keys","forEach","key","addButtonTheme","buttons","split","classNameItem","buttonTheme","classNameFound","map","class","includes","buttonThemeArray","push","join","removeButtonTheme","Array","isArray","length","index","filteredButtonArray","filter","item","splice","getButtonElement","output","buttonArr","handleCaret","document","addEventListener","caretEventHandler","event","targetTagName","target","tagName","toLowerCase","selectionStart","onInit","onRender","layoutClass","layout","layoutName","getDefaultLayout","buttonThemesParsed","themeObj","themeButtons","themeButton","themeParsed","countInArray","theme","row","rIndex","rowArray","rowDOM","createElement","bIndex","fctBtnClass","getButtonClass","buttonThemeClass","buttonDisplayName","getButtonDisplayName","display","mergeDisplay","buttonDOM","onclick","setAttribute","buttonUID","buttonSpanDOM","appendChild","initialized","keyboardDOMQuery","arguments","undefined","querySelector","timers","camelCase","physicalKeyboardInterface","PhysicalKeyboard","simpleKeyboardInstance","initKeyboardListener","physicalKeyboardHighlight","buttonPressed","getSimpleKeyboardLayoutKey","style","backgroundColor","physicalKeyboardHighlightBgColor","color","physicalKeyboardHighlightTextColor","removeAttribute","code","toUpperCase","Number","isInteger","KeyboardLayout","default","shift","_createClass","defineProperties","props","descriptor","writable","protoProps","staticProps","Utilities","buttonTypeClass","buttonWithoutBraces","replace","buttonNormalized","getDefaultDiplay","caretPos","removeAt","addStringAt","tabCharOnTab","newLineOnEnter","updateCaretPos","minus","isMaxLengthReached","Boolean","maxLengthReached","string","trim","reduce","word","slice","array","x","{bksp}","{backspace}","{enter}","{shift}","{shiftleft}","{shiftright}","{alt}","{s}","{tab}","{lock}","{capslock}","{accept}","{space}","{//}","{esc}","{escape}","{f1}","{f2}","{f3}","{f4}","{f5}","{f6}","{f7}","{f8}","{f9}","{f10}","{f11}","{f12}","{numpaddivide}","{numlock}","{arrowup}","{arrowleft}","{arrowdown}","{arrowright}","{prtscr}","{scrolllock}","{pause}","{insert}","{home}","{pageup}","{delete}","{end}","{pagedown}","{numpadmultiply}","{numpadsubtract}","{numpadadd}","{numpadenter}","{period}","{numpaddecimal}","{numpad0}","{numpad1}","{numpad2}","{numpad3}","{numpad4}","{numpad5}","{numpad6}","{numpad7}","{numpad8}","{numpad9}","source","position","prevTwoChars","emojiMatched","emojiMatchedReg","substring","match","substr","currentInput","condition"],"mappings":"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","file":"index.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SimpleKeyboard\"] = factory();\n\telse\n\t\troot[\"SimpleKeyboard\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SimpleKeyboard\"] = factory();\n\telse\n\t\troot[\"SimpleKeyboard\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(1);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_Keyboard__ = __webpack_require__(2);\n/* harmony default export */ __webpack_exports__[\"default\"] = (__WEBPACK_IMPORTED_MODULE_0__components_Keyboard__[\"a\" /* default */]);\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Keyboard_css__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Keyboard_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__Keyboard_css__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__services_PhysicalKeyboard__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__services_KeyboardLayout__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__services_Utilities__ = __webpack_require__(6);\nvar _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}// Services\nvar SimpleKeyboard=function SimpleKeyboard(){var _this=this;_classCallCheck(this,SimpleKeyboard);this.handleButtonClicked=function(button){var debug=_this.options.debug;/**\r\n * Ignoring placeholder buttons\r\n */if(button==='{//}')return false;/**\r\n * Calling onKeyPress\r\n */if(typeof _this.options.onKeyPress===\"function\")_this.options.onKeyPress(button);if(!_this.input[_this.options.inputName])_this.input[_this.options.inputName]='';var updatedInput=_this.utilities.getUpdatedInput(button,_this.input[_this.options.inputName],_this.options,_this.caretPosition);if(_this.input[_this.options.inputName]!==updatedInput){/**\r\n * If maxLength and handleMaxLength yield true, halting\r\n */if(_this.options.maxLength&&_this.utilities.handleMaxLength(_this.input,_this.options,updatedInput)){return false;}_this.input[_this.options.inputName]=updatedInput;if(debug)console.log('Input changed:',_this.input);/**\r\n * syncInstanceInputs\r\n */if(_this.options.syncInstanceInputs)_this.syncInstanceInputs(_this.input);/**\r\n * Calling onChange\r\n */if(typeof _this.options.onChange===\"function\")_this.options.onChange(_this.input[_this.options.inputName]);}if(debug){console.log(\"Key pressed:\",button);}};this.syncInstanceInputs=function(){_this.dispatch(function(section){section.replaceInput(_this.input);});};this.clearInput=function(inputName){inputName=inputName||_this.options.inputName;_this.input[_this.options.inputName]='';/**\r\n * syncInstanceInputs\r\n */if(_this.options.syncInstanceInputs)_this.syncInstanceInputs(_this.input);};this.getInput=function(inputName){inputName=inputName||_this.options.inputName;/**\r\n * syncInstanceInputs\r\n */if(_this.options.syncInstanceInputs)_this.syncInstanceInputs(_this.input);return _this.input[_this.options.inputName];};this.setInput=function(input,inputName){inputName=inputName||_this.options.inputName;_this.input[inputName]=input;/**\r\n * syncInstanceInputs\r\n */if(_this.options.syncInstanceInputs)_this.syncInstanceInputs(_this.input);};this.replaceInput=function(inputObj){_this.input=inputObj;};this.setOptions=function(option){option=option||{};_this.options=Object.assign(_this.options,option);_this.render();};this.clear=function(){_this.keyboardDOM.innerHTML='';_this.keyboardDOM.className=_this.keyboardDOMClass;_this.buttonElements={};};this.dispatch=function(callback){if(!window['SimpleKeyboardInstances']){console.warn('SimpleKeyboardInstances is not defined. Dispatch cannot be called.');throw new Error(\"INSTANCES_VAR_ERROR\");}return Object.keys(window['SimpleKeyboardInstances']).forEach(function(key){callback(window['SimpleKeyboardInstances'][key],key);});};this.addButtonTheme=function(buttons,className){if(!className||!buttons)return false;buttons.split(\" \").forEach(function(button){className.split(\" \").forEach(function(classNameItem){if(!_this.options.buttonTheme)_this.options.buttonTheme=[];var classNameFound=false;/**\r\n * If class is already defined, we add button to class definition\r\n */_this.options.buttonTheme.map(function(buttonTheme){if(buttonTheme.class.split(\" \").includes(classNameItem)){classNameFound=true;var buttonThemeArray=buttonTheme.buttons.split(\" \");if(!buttonThemeArray.includes(button)){classNameFound=true;buttonThemeArray.push(button);buttonTheme.buttons=buttonThemeArray.join(\" \");}}return buttonTheme;});/**\r\n * If class is not defined, we create a new entry\r\n */if(!classNameFound){_this.options.buttonTheme.push({class:classNameItem,buttons:buttons});}});});_this.render();};this.removeButtonTheme=function(buttons,className){/**\r\n * When called with empty parameters, remove all button themes\r\n */if(!buttons&&!className){_this.options.buttonTheme=[];_this.render();return false;}/**\r\n * If buttons are passed and buttonTheme has items\r\n */if(buttons&&Array.isArray(_this.options.buttonTheme)&&_this.options.buttonTheme.length){var buttonArray=buttons.split(\" \");buttonArray.forEach(function(button,key){_this.options.buttonTheme.map(function(buttonTheme,index){/**\r\n * If className is set, we affect the buttons only for that class\r\n * Otherwise, we afect all classes\r\n */if(className&&className.includes(buttonTheme.class)||!className){var filteredButtonArray=buttonTheme.buttons.split(\" \").filter(function(item){return item!==button;});/**\r\n * If buttons left, return them, otherwise, remove button Theme\r\n */if(filteredButtonArray.length){buttonTheme.buttons=filteredButtonArray.join(\" \");}else{_this.options.buttonTheme.splice(index,1);buttonTheme=null;}}return buttonTheme;});});_this.render();}};this.getButtonElement=function(button){var output=void 0;var buttonArr=_this.buttonElements[button];if(buttonArr){if(buttonArr.length>1){output=buttonArr;}else{output=buttonArr[0];}}return output;};this.handleCaret=function(){if(_this.options.debug){console.log(\"Caret handling started\");}document.addEventListener(\"keyup\",_this.caretEventHandler);document.addEventListener(\"mouseup\",_this.caretEventHandler);document.addEventListener(\"touchend\",_this.caretEventHandler);};this.caretEventHandler=function(event){var targetTagName=event.target.tagName.toLowerCase();if(targetTagName===\"textarea\"||targetTagName===\"input\"){_this.caretPosition=event.target.selectionStart;if(_this.options.debug){console.log('Caret at: ',event.target.selectionStart,event.target.tagName.toLowerCase());}}};this.onInit=function(){if(_this.options.debug){console.log(\"Initialized\");}/**\r\n * Caret handling\r\n */_this.handleCaret();if(typeof _this.options.onInit===\"function\")_this.options.onInit();};this.onRender=function(){if(typeof _this.options.onRender===\"function\")_this.options.onRender();};this.render=function(){/**\r\n * Clear keyboard\r\n */_this.clear();var layoutClass=_this.options.layout?\"hg-layout-custom\":'hg-layout-'+_this.options.layoutName;var layout=_this.options.layout||__WEBPACK_IMPORTED_MODULE_2__services_KeyboardLayout__[\"a\" /* default */].getDefaultLayout();/**\r\n * Account for buttonTheme, if set\r\n */var buttonThemesParsed={};if(Array.isArray(_this.options.buttonTheme)){_this.options.buttonTheme.forEach(function(themeObj){if(themeObj.buttons&&themeObj.class){var themeButtons=void 0;if(typeof themeObj.buttons===\"string\"){themeButtons=themeObj.buttons.split(' ');}if(themeButtons){themeButtons.forEach(function(themeButton){var themeParsed=buttonThemesParsed[themeButton];// If the button has already been added\nif(themeParsed){// Making sure we don't add duplicate classes, even when buttonTheme has duplicates\nif(!_this.utilities.countInArray(themeParsed.split(\" \"),themeObj.class)){buttonThemesParsed[themeButton]=themeParsed+' '+themeObj.class;}}else{buttonThemesParsed[themeButton]=themeObj.class;}});}}else{console.warn('buttonTheme row is missing the \"buttons\" or the \"class\". Please check the documentation.');}});}/**\r\n * Adding themeClass, layoutClass to keyboardDOM\r\n */_this.keyboardDOM.className+=' '+_this.options.theme+' '+layoutClass;/**\r\n * Iterating through each row\r\n */layout[_this.options.layoutName].forEach(function(row,rIndex){var rowArray=row.split(' ');/**\r\n * Creating empty row\r\n */var rowDOM=document.createElement('div');rowDOM.className+=\"hg-row\";/**\r\n * Iterating through each button in row\r\n */rowArray.forEach(function(button,bIndex){var fctBtnClass=_this.utilities.getButtonClass(button);var buttonThemeClass=buttonThemesParsed[button];var buttonDisplayName=_this.utilities.getButtonDisplayName(button,_this.options.display,_this.options.mergeDisplay);/**\r\n * Creating button\r\n */var buttonDOM=document.createElement('div');buttonDOM.className+='hg-button '+fctBtnClass+(buttonThemeClass?\" \"+buttonThemeClass:\"\");buttonDOM.onclick=function(){return _this.handleButtonClicked(button);};/**\r\n * Adding identifier\r\n */buttonDOM.setAttribute(\"data-skBtn\",button);/**\r\n * Adding unique id\r\n * Since there's no limit on spawning same buttons, the unique id ensures you can style every button\r\n */var buttonUID=_this.options.layoutName+'-r'+rIndex+'b'+bIndex;buttonDOM.setAttribute(\"data-skBtnUID\",buttonUID);/**\r\n * Adding display label\r\n */buttonDOM.setAttribute(\"data-displayLabel\",buttonDisplayName);/**\r\n * Adding button label to button\r\n */var buttonSpanDOM=document.createElement('span');buttonSpanDOM.innerHTML=buttonDisplayName;buttonDOM.appendChild(buttonSpanDOM);/**\r\n * Adding to buttonElements\r\n */if(!_this.buttonElements[button])_this.buttonElements[button]=[];_this.buttonElements[button].push(buttonDOM);/**\r\n * Appending button to row\r\n */rowDOM.appendChild(buttonDOM);});/**\r\n * Appending row to keyboard\r\n */_this.keyboardDOM.appendChild(rowDOM);});/**\r\n * Calling onRender\r\n */_this.onRender();if(!_this.initialized){_this.initialized=true;/**\r\n * Calling onInit\r\n */_this.onInit();}};var keyboardDOMQuery=typeof(arguments.length<=0?undefined:arguments[0])===\"string\"?arguments.length<=0?undefined:arguments[0]:'.simple-keyboard';var options=_typeof(arguments.length<=0?undefined:arguments[0])===\"object\"?arguments.length<=0?undefined:arguments[0]:arguments.length<=1?undefined:arguments[1];if(!options)options={};/**\r\n * Initializing Utilities\r\n */this.utilities=new __WEBPACK_IMPORTED_MODULE_3__services_Utilities__[\"a\" /* default */](this);/**\r\n * Processing options\r\n */this.keyboardDOM=document.querySelector(keyboardDOMQuery);this.options=options;this.options.layoutName=this.options.layoutName||\"default\";this.options.theme=this.options.theme||\"hg-theme-default\";this.options.inputName=this.options.inputName||\"default\";this.input={};this.input[this.options.inputName]='';this.keyboardDOMClass=keyboardDOMQuery.split('.').join(\"\");this.timers={};this.buttonElements={};/**\r\n * Rendering keyboard\r\n */if(this.keyboardDOM)this.render();else{console.warn('\"'+keyboardDOMQuery+'\" was not found in the DOM.');throw new Error(\"KEYBOARD_DOM_ERROR\");}/**\r\n * Saving instance\r\n * This enables multiple simple-keyboard support with easier management\r\n */if(!window['SimpleKeyboardInstances'])window['SimpleKeyboardInstances']={};window['SimpleKeyboardInstances'][this.utilities.camelCase(this.keyboardDOMClass)]=this;/**\r\n * Physical Keyboard support\r\n */this.physicalKeyboardInterface=new __WEBPACK_IMPORTED_MODULE_1__services_PhysicalKeyboard__[\"a\" /* default */](this);};/* harmony default export */ __webpack_exports__[\"a\"] = (SimpleKeyboard);\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 4 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nfunction _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var PhysicalKeyboard=function PhysicalKeyboard(simpleKeyboardInstance){var _this=this;_classCallCheck(this,PhysicalKeyboard);this.initKeyboardListener=function(){// Normal Keyboard\ndocument.addEventListener(\"keydown\",function(event){if(_this.simpleKeyboardInstance.options.physicalKeyboardHighlight){var buttonPressed=_this.getSimpleKeyboardLayoutKey(event);_this.simpleKeyboardInstance.dispatch(function(instance){var buttonDOM=instance.getButtonElement(buttonPressed)||instance.getButtonElement(\"{\"+buttonPressed+\"}\");if(buttonDOM){buttonDOM.style.backgroundColor=_this.simpleKeyboardInstance.options.physicalKeyboardHighlightBgColor||\"#9ab4d0\";buttonDOM.style.color=_this.simpleKeyboardInstance.options.physicalKeyboardHighlightTextColor||\"white\";}});}});// Removing button style on keyup\ndocument.addEventListener(\"keyup\",function(event){if(_this.simpleKeyboardInstance.options.physicalKeyboardHighlight){var buttonPressed=_this.getSimpleKeyboardLayoutKey(event);_this.simpleKeyboardInstance.dispatch(function(instance){var buttonDOM=instance.getButtonElement(buttonPressed)||instance.getButtonElement(\"{\"+buttonPressed+\"}\");if(buttonDOM){buttonDOM.removeAttribute(\"style\");}});}});};this.getSimpleKeyboardLayoutKey=function(event){if(_this.simpleKeyboardInstance.options.debug){console.log(event);}var output=void 0;if(event.code.includes(\"Numpad\")||event.code.includes(\"Shift\")||event.code.includes(\"Space\")||event.code.includes(\"Backspace\")||event.code.includes(\"Control\")||event.code.includes(\"Alt\")||event.code.includes(\"Meta\")){output=event.code;}else{output=event.key;}/**\r\n * If button is not uppercase, casting to lowercase\r\n */if(output!==output.toUpperCase()||event.code[0]===\"F\"&&Number.isInteger(Number(event.code[1]))&&event.code.length<=3){output=output.toLowerCase();}return output;};this.simpleKeyboardInstance=simpleKeyboardInstance;this.initKeyboardListener();};/* harmony default export */ __webpack_exports__[\"a\"] = (PhysicalKeyboard);\n\n/***/ }),\n/* 5 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nfunction _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var KeyboardLayout=function KeyboardLayout(){_classCallCheck(this,KeyboardLayout);};KeyboardLayout.getDefaultLayout=function(){return{'default':['` 1 2 3 4 5 6 7 8 9 0 - = {bksp}','{tab} q w e r t y u i o p [ ] \\\\','{lock} a s d f g h j k l ; \\' {enter}','{shift} z x c v b n m , . / {shift}','.com @ {space}'],'shift':['~ ! @ # $ % ^ & * ( ) _ + {bksp}','{tab} Q W E R T Y U I O P { } |','{lock} A S D F G H J K L : \" {enter}','{shift} Z X C V B N M < > ? {shift}','.com @ {space}']};};/* harmony default export */ __webpack_exports__[\"a\"] = (KeyboardLayout);\n\n/***/ }),\n/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};var _createClass=function(){function defineProperties(target,props){for(var i=0;i0){output=_this.removeAt(output,caretPos);}else if(button===\"{space}\")output=_this.addStringAt(output,\" \",caretPos);else if(button===\"{tab}\"&&!(typeof options.tabCharOnTab===\"boolean\"&&options.tabCharOnTab===false)){output=_this.addStringAt(output,\"\\t\",caretPos);}else if((button===\"{enter}\"||button===\"{numpadenter}\")&&options.newLineOnEnter)output=_this.addStringAt(output,\"\\n\",caretPos);else if(button.includes(\"numpad\")&&Number.isInteger(Number(button[button.length-2]))){output=_this.addStringAt(output,button[button.length-2],caretPos);}else if(button===\"{numpaddivide}\")output=_this.addStringAt(output,'/',caretPos);else if(button===\"{numpadmultiply}\")output=_this.addStringAt(output,'*',caretPos);else if(button===\"{numpadsubtract}\")output=_this.addStringAt(output,'-',caretPos);else if(button===\"{numpadadd}\")output=_this.addStringAt(output,'+',caretPos);else if(button===\"{numpaddecimal}\")output=_this.addStringAt(output,'.',caretPos);else if(button===\"{\"||button===\"}\")output=_this.addStringAt(output,button,caretPos);else if(!button.includes(\"{\")&&!button.includes(\"}\"))output=_this.addStringAt(output,button,caretPos);return output;};this.updateCaretPos=function(length,minus){if(minus){if(_this.simpleKeyboardInstance.caretPosition>0)_this.simpleKeyboardInstance.caretPosition=_this.simpleKeyboardInstance.caretPosition-length;}else{_this.simpleKeyboardInstance.caretPosition=_this.simpleKeyboardInstance.caretPosition+length;}};this.isMaxLengthReached=function(){return Boolean(_this.maxLengthReached);};this.camelCase=function(string){return string.toLowerCase().trim().split(/[.\\-_\\s]/g).reduce(function(string,word){return string+word[0].toUpperCase()+word.slice(1);});};this.countInArray=function(array,value){return array.reduce(function(n,x){return n+(x===value);},0);};this.simpleKeyboardInstance=simpleKeyboardInstance;}_createClass(Utilities,[{key:\"getDefaultDiplay\",value:function getDefaultDiplay(){return{'{bksp}':'backspace','{backspace}':'backspace','{enter}':'< enter','{shift}':'shift','{shiftleft}':'shift','{shiftright}':'shift','{alt}':'alt','{s}':'shift','{tab}':'tab','{lock}':'caps','{capslock}':'caps','{accept}':'Submit','{space}':' ','{//}':' ',\"{esc}\":\"esc\",\"{escape}\":\"esc\",\"{f1}\":\"f1\",\"{f2}\":\"f2\",\"{f3}\":\"f3\",\"{f4}\":\"f4\",\"{f5}\":\"f5\",\"{f6}\":\"f6\",\"{f7}\":\"f7\",\"{f8}\":\"f8\",\"{f9}\":\"f9\",\"{f10}\":\"f10\",\"{f11}\":\"f11\",\"{f12}\":\"f12\",'{numpaddivide}':'/','{numlock}':'lock',\"{arrowup}\":\"↑\",\"{arrowleft}\":\"←\",\"{arrowdown}\":\"↓\",\"{arrowright}\":\"→\",\"{prtscr}\":\"print\",\"{scrolllock}\":\"scroll\",\"{pause}\":\"pause\",\"{insert}\":\"ins\",\"{home}\":\"home\",\"{pageup}\":\"up\",\"{delete}\":\"del\",\"{end}\":\"end\",\"{pagedown}\":\"down\",\"{numpadmultiply}\":\"*\",\"{numpadsubtract}\":\"-\",\"{numpadadd}\":\"+\",\"{numpadenter}\":\"enter\",\"{period}\":\".\",\"{numpaddecimal}\":\".\",\"{numpad0}\":\"0\",\"{numpad1}\":\"1\",\"{numpad2}\":\"2\",\"{numpad3}\":\"3\",\"{numpad4}\":\"4\",\"{numpad5}\":\"5\",\"{numpad6}\":\"6\",\"{numpad7}\":\"7\",\"{numpad8}\":\"8\",\"{numpad9}\":\"9\"};}},{key:\"addStringAt\",value:function addStringAt(source,string,position){var output=void 0;if(this.simpleKeyboardInstance.options.debug){console.log(\"Caret at:\",position);}if(!position&&position!==0){output=source+string;}else{output=[source.slice(0,position),string,source.slice(position)].join('');/**\r\n * Avoid caret position change when maxLength is set\r\n */if(!this.isMaxLengthReached()){this.updateCaretPos(string.length);}}return output;}},{key:\"removeAt\",value:function removeAt(source,position){if(this.simpleKeyboardInstance.caretPosition===0){return source;}var output=void 0;var prevTwoChars=void 0;var emojiMatched=void 0;var emojiMatchedReg=/([\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;/**\r\n * Emojis are made out of two characters, so we must take a custom approach to trim them.\r\n * For more info: https://mathiasbynens.be/notes/javascript-unicode\r\n */if(position&&position>=0){prevTwoChars=source.substring(position-2,position);emojiMatched=prevTwoChars.match(emojiMatchedReg);if(emojiMatched){output=source.substr(0,position-2)+source.substr(position);this.updateCaretPos(2,true);}else{output=source.substr(0,position-1)+source.substr(position);this.updateCaretPos(1,true);}}else{prevTwoChars=source.slice(-2);emojiMatched=prevTwoChars.match(emojiMatchedReg);if(emojiMatched){output=source.slice(0,-2);this.updateCaretPos(2,true);}else{output=source.slice(0,-1);this.updateCaretPos(1,true);}}return output;}},{key:\"handleMaxLength\",value:function handleMaxLength(inputObj,options,updatedInput){var maxLength=options.maxLength;var currentInput=inputObj[options.inputName];var condition=currentInput.length===maxLength;if(/**\r\n * If pressing this button won't add more characters\r\n * We exit out of this limiter function\r\n */updatedInput.length<=currentInput.length){return false;}if(Number.isInteger(maxLength)){if(options.debug){console.log(\"maxLength (num) reached:\",condition);}if(condition){this.maxLengthReached=true;return true;}else{this.maxLengthReached=false;return false;}}if((typeof maxLength===\"undefined\"?\"undefined\":_typeof(maxLength))===\"object\"){var _condition=currentInput.length===maxLength[options.inputName];if(options.debug){console.log(\"maxLength (obj) reached:\",_condition);}if(_condition){this.maxLengthReached=true;return true;}else{this.maxLengthReached=false;return false;}}}}]);return Utilities;}();/* harmony default export */ __webpack_exports__[\"a\"] = (Utilities);\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// index.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap bc3076376fced99ac5c3","import SimpleKeyboard from './components/Keyboard';\r\nexport default SimpleKeyboard;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/index.js","import './Keyboard.css';\r\n\r\n// Services\r\nimport PhysicalKeyboard from '../services/PhysicalKeyboard';\r\nimport KeyboardLayout from '../services/KeyboardLayout';\r\nimport Utilities from '../services/Utilities';\r\n\r\nclass SimpleKeyboard {\r\n constructor(...params){\r\n let keyboardDOMQuery = typeof params[0] === \"string\" ? params[0] : '.simple-keyboard';\r\n let options = typeof params[0] === \"object\" ? params[0] : params[1];\r\n\r\n if(!options)\r\n options = {};\r\n\r\n /**\r\n * Initializing Utilities\r\n */\r\n this.utilities = new Utilities(this);\r\n\r\n /**\r\n * Processing options\r\n */\r\n this.keyboardDOM = document.querySelector(keyboardDOMQuery);\r\n this.options = options;\r\n this.options.layoutName = this.options.layoutName || \"default\";\r\n this.options.theme = this.options.theme || \"hg-theme-default\";\r\n this.options.inputName = this.options.inputName || \"default\";\r\n this.input = {};\r\n this.input[this.options.inputName] = '';\r\n this.keyboardDOMClass = keyboardDOMQuery.split('.').join(\"\");\r\n this.timers = {};\r\n this.buttonElements = {};\r\n\r\n /**\r\n * Rendering keyboard\r\n */\r\n if(this.keyboardDOM)\r\n this.render();\r\n else {\r\n console.warn(`\"${keyboardDOMQuery}\" was not found in the DOM.`);\r\n throw new Error(\"KEYBOARD_DOM_ERROR\");\r\n }\r\n\r\n /**\r\n * Saving instance\r\n * This enables multiple simple-keyboard support with easier management\r\n */\r\n if(!window['SimpleKeyboardInstances'])\r\n window['SimpleKeyboardInstances'] = {};\r\n \r\n window['SimpleKeyboardInstances'][this.utilities.camelCase(this.keyboardDOMClass)] = this;\r\n\r\n /**\r\n * Physical Keyboard support\r\n */\r\n this.physicalKeyboardInterface = new PhysicalKeyboard(this);\r\n }\r\n\r\n handleButtonClicked = (button) => {\r\n let debug = this.options.debug;\r\n\r\n /**\r\n * Ignoring placeholder buttons\r\n */\r\n if(button === '{//}')\r\n return false;\r\n\r\n /**\r\n * Calling onKeyPress\r\n */\r\n if(typeof this.options.onKeyPress === \"function\")\r\n this.options.onKeyPress(button);\r\n \r\n if(!this.input[this.options.inputName])\r\n this.input[this.options.inputName] = '';\r\n\r\n let updatedInput = this.utilities.getUpdatedInput(button, this.input[this.options.inputName], this.options, this.caretPosition);\r\n\r\n if(this.input[this.options.inputName] !== updatedInput){\r\n\r\n /**\r\n * If maxLength and handleMaxLength yield true, halting\r\n */\r\n if(this.options.maxLength && this.utilities.handleMaxLength(this.input, this.options, updatedInput)){\r\n return false;\r\n }\r\n\r\n this.input[this.options.inputName] = updatedInput;\r\n\r\n if(debug)\r\n console.log('Input changed:', this.input);\r\n\r\n /**\r\n * syncInstanceInputs\r\n */\r\n if(this.options.syncInstanceInputs)\r\n this.syncInstanceInputs(this.input);\r\n\r\n /**\r\n * Calling onChange\r\n */\r\n if(typeof this.options.onChange === \"function\")\r\n this.options.onChange(this.input[this.options.inputName]);\r\n }\r\n \r\n if(debug){\r\n console.log(\"Key pressed:\", button);\r\n }\r\n }\r\n\r\n syncInstanceInputs = () => {\r\n this.dispatch((section) => {\r\n section.replaceInput(this.input);\r\n });\r\n }\r\n\r\n clearInput = (inputName) => {\r\n inputName = inputName || this.options.inputName;\r\n this.input[this.options.inputName] = '';\r\n\r\n /**\r\n * syncInstanceInputs\r\n */\r\n if(this.options.syncInstanceInputs)\r\n this.syncInstanceInputs(this.input);\r\n }\r\n\r\n getInput = (inputName) => {\r\n inputName = inputName || this.options.inputName;\r\n\r\n /**\r\n * syncInstanceInputs\r\n */\r\n if(this.options.syncInstanceInputs)\r\n this.syncInstanceInputs(this.input);\r\n\r\n return this.input[this.options.inputName];\r\n }\r\n\r\n setInput = (input, inputName) => {\r\n inputName = inputName || this.options.inputName;\r\n this.input[inputName] = input;\r\n\r\n /**\r\n * syncInstanceInputs\r\n */\r\n if(this.options.syncInstanceInputs)\r\n this.syncInstanceInputs(this.input);\r\n }\r\n\r\n replaceInput = (inputObj) => {\r\n this.input = inputObj;\r\n }\r\n\r\n setOptions = option => {\r\n option = option || {};\r\n this.options = Object.assign(this.options, option);\r\n this.render();\r\n }\r\n\r\n clear = () => {\r\n this.keyboardDOM.innerHTML = '';\r\n this.keyboardDOM.className = this.keyboardDOMClass;\r\n this.buttonElements = {};\r\n }\r\n\r\n dispatch = (callback) => {\r\n if(!window['SimpleKeyboardInstances']){\r\n console.warn(`SimpleKeyboardInstances is not defined. Dispatch cannot be called.`);\r\n throw new Error(\"INSTANCES_VAR_ERROR\");\r\n }\r\n \r\n return Object.keys(window['SimpleKeyboardInstances']).forEach((key) => {\r\n callback(window['SimpleKeyboardInstances'][key], key);\r\n })\r\n }\r\n\r\n addButtonTheme = (buttons, className) => {\r\n if(!className || !buttons)\r\n return false;\r\n\r\n buttons.split(\" \").forEach(button => {\r\n className.split(\" \").forEach(classNameItem => {\r\n if(!this.options.buttonTheme)\r\n this.options.buttonTheme = [];\r\n\r\n let classNameFound = false;\r\n \r\n /**\r\n * If class is already defined, we add button to class definition\r\n */\r\n this.options.buttonTheme.map(buttonTheme => {\r\n\r\n if(buttonTheme.class.split(\" \").includes(classNameItem)){\r\n classNameFound = true;\r\n \r\n let buttonThemeArray = buttonTheme.buttons.split(\" \");\r\n if(!buttonThemeArray.includes(button)){\r\n classNameFound = true;\r\n buttonThemeArray.push(button);\r\n buttonTheme.buttons = buttonThemeArray.join(\" \");\r\n }\r\n }\r\n return buttonTheme;\r\n });\r\n\r\n /**\r\n * If class is not defined, we create a new entry\r\n */\r\n if(!classNameFound){\r\n this.options.buttonTheme.push({\r\n class: classNameItem,\r\n buttons: buttons\r\n });\r\n }\r\n\r\n });\r\n });\r\n\r\n this.render();\r\n }\r\n\r\n removeButtonTheme = (buttons, className) => {\r\n /**\r\n * When called with empty parameters, remove all button themes\r\n */\r\n if(!buttons && !className){\r\n this.options.buttonTheme = [];\r\n this.render();\r\n return false;\r\n }\r\n\r\n /**\r\n * If buttons are passed and buttonTheme has items\r\n */\r\n if(buttons && Array.isArray(this.options.buttonTheme) && this.options.buttonTheme.length){\r\n let buttonArray = buttons.split(\" \");\r\n buttonArray.forEach((button, key) => {\r\n this.options.buttonTheme.map((buttonTheme, index) => {\r\n\r\n /**\r\n * If className is set, we affect the buttons only for that class\r\n * Otherwise, we afect all classes\r\n */\r\n if(\r\n (className && className.includes(buttonTheme.class)) ||\r\n !className\r\n ){\r\n let filteredButtonArray = buttonTheme.buttons.split(\" \").filter(item => item !== button);\r\n\r\n /**\r\n * If buttons left, return them, otherwise, remove button Theme\r\n */\r\n if(filteredButtonArray.length){\r\n buttonTheme.buttons = filteredButtonArray.join(\" \");\r\n } else {\r\n this.options.buttonTheme.splice(index, 1);\r\n buttonTheme = null;\r\n }\r\n \r\n }\r\n\r\n return buttonTheme;\r\n });\r\n });\r\n\r\n this.render();\r\n }\r\n }\r\n\r\n getButtonElement = (button) => {\r\n let output;\r\n\r\n let buttonArr = this.buttonElements[button];\r\n if(buttonArr){\r\n if(buttonArr.length > 1){\r\n output = buttonArr;\r\n } else {\r\n output = buttonArr[0];\r\n }\r\n }\r\n\r\n return output;\r\n }\r\n\r\n handleCaret = () => {\r\n if(this.options.debug){\r\n console.log(\"Caret handling started\");\r\n }\r\n\r\n document.addEventListener(\"keyup\", this.caretEventHandler);\r\n document.addEventListener(\"mouseup\", this.caretEventHandler);\r\n document.addEventListener(\"touchend\", this.caretEventHandler);\r\n }\r\n\r\n caretEventHandler = (event) => {\r\n let targetTagName = event.target.tagName.toLowerCase();\r\n\r\n if(\r\n targetTagName === \"textarea\" ||\r\n targetTagName === \"input\"\r\n ){\r\n this.caretPosition = event.target.selectionStart;\r\n\r\n if(this.options.debug){\r\n console.log('Caret at: ', event.target.selectionStart, event.target.tagName.toLowerCase());\r\n } \r\n }\r\n }\r\n\r\n onInit = () => {\r\n if(this.options.debug){\r\n console.log(\"Initialized\");\r\n }\r\n\r\n /**\r\n * Caret handling\r\n */\r\n this.handleCaret();\r\n\r\n if(typeof this.options.onInit === \"function\")\r\n this.options.onInit();\r\n }\r\n\r\n onRender = () => {\r\n if(typeof this.options.onRender === \"function\")\r\n this.options.onRender();\r\n }\r\n\r\n render = () => {\r\n /**\r\n * Clear keyboard\r\n */\r\n this.clear();\r\n\r\n let layoutClass = this.options.layout ? \"hg-layout-custom\" : `hg-layout-${this.options.layoutName}`;\r\n let layout = this.options.layout || KeyboardLayout.getDefaultLayout();\r\n\r\n /**\r\n * Account for buttonTheme, if set\r\n */\r\n let buttonThemesParsed = {};\r\n if(Array.isArray(this.options.buttonTheme)){\r\n this.options.buttonTheme.forEach(themeObj => {\r\n if(themeObj.buttons && themeObj.class){\r\n let themeButtons;\r\n\r\n if(typeof themeObj.buttons === \"string\"){\r\n themeButtons = themeObj.buttons.split(' ');\r\n }\r\n\r\n if(themeButtons){\r\n themeButtons.forEach(themeButton => {\r\n let themeParsed = buttonThemesParsed[themeButton];\r\n\r\n // If the button has already been added\r\n if(themeParsed){\r\n // Making sure we don't add duplicate classes, even when buttonTheme has duplicates\r\n if(!this.utilities.countInArray(themeParsed.split(\" \"), themeObj.class)){\r\n buttonThemesParsed[themeButton] = `${themeParsed} ${themeObj.class}`;\r\n }\r\n } else {\r\n buttonThemesParsed[themeButton] = themeObj.class;\r\n }\r\n });\r\n }\r\n } else {\r\n console.warn(`buttonTheme row is missing the \"buttons\" or the \"class\". Please check the documentation.`)\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Adding themeClass, layoutClass to keyboardDOM\r\n */\r\n this.keyboardDOM.className += ` ${this.options.theme} ${layoutClass}`;\r\n\r\n /**\r\n * Iterating through each row\r\n */\r\n layout[this.options.layoutName].forEach((row, rIndex) => {\r\n let rowArray = row.split(' ');\r\n\r\n /**\r\n * Creating empty row\r\n */\r\n var rowDOM = document.createElement('div');\r\n rowDOM.className += \"hg-row\";\r\n\r\n /**\r\n * Iterating through each button in row\r\n */\r\n rowArray.forEach((button, bIndex) => {\r\n let fctBtnClass = this.utilities.getButtonClass(button);\r\n let buttonThemeClass = buttonThemesParsed[button];\r\n let buttonDisplayName = this.utilities.getButtonDisplayName(button, this.options.display, this.options.mergeDisplay);\r\n\r\n /**\r\n * Creating button\r\n */\r\n var buttonDOM = document.createElement('div');\r\n buttonDOM.className += `hg-button ${fctBtnClass}${buttonThemeClass ? \" \"+buttonThemeClass : \"\"}`;\r\n buttonDOM.onclick = () => this.handleButtonClicked(button);\r\n\r\n /**\r\n * Adding identifier\r\n */\r\n buttonDOM.setAttribute(\"data-skBtn\", button);\r\n\r\n /**\r\n * Adding unique id\r\n * Since there's no limit on spawning same buttons, the unique id ensures you can style every button\r\n */\r\n let buttonUID = `${this.options.layoutName}-r${rIndex}b${bIndex}`;\r\n buttonDOM.setAttribute(\"data-skBtnUID\", buttonUID);\r\n\r\n /**\r\n * Adding display label\r\n */\r\n buttonDOM.setAttribute(\"data-displayLabel\", buttonDisplayName);\r\n\r\n /**\r\n * Adding button label to button\r\n */\r\n var buttonSpanDOM = document.createElement('span');\r\n buttonSpanDOM.innerHTML = buttonDisplayName;\r\n buttonDOM.appendChild(buttonSpanDOM);\r\n\r\n /**\r\n * Adding to buttonElements\r\n */\r\n if(!this.buttonElements[button])\r\n this.buttonElements[button] = [];\r\n\r\n this.buttonElements[button].push(buttonDOM);\r\n\r\n /**\r\n * Appending button to row\r\n */\r\n rowDOM.appendChild(buttonDOM);\r\n\r\n });\r\n\r\n /**\r\n * Appending row to keyboard\r\n */\r\n this.keyboardDOM.appendChild(rowDOM);\r\n });\r\n\r\n /**\r\n * Calling onRender\r\n */\r\n this.onRender();\r\n\r\n if(!this.initialized){\r\n this.initialized = true;\r\n\r\n /**\r\n * Calling onInit\r\n */\r\n this.onInit();\r\n }\r\n }\r\n}\r\n\r\nexport default SimpleKeyboard;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/components/Keyboard.js","class PhysicalKeyboard {\r\n constructor(simpleKeyboardInstance){\r\n this.simpleKeyboardInstance = simpleKeyboardInstance;\r\n\r\n this.initKeyboardListener();\r\n }\r\n\r\n initKeyboardListener = () => {\r\n // Normal Keyboard\r\n document.addEventListener(\"keydown\", (event) => {\r\n if(this.simpleKeyboardInstance.options.physicalKeyboardHighlight){\r\n let buttonPressed = this.getSimpleKeyboardLayoutKey(event);\r\n\r\n this.simpleKeyboardInstance.dispatch(instance => {\r\n let buttonDOM = instance.getButtonElement(buttonPressed) || instance.getButtonElement(`{${buttonPressed}}`);\r\n\r\n if(buttonDOM){\r\n buttonDOM.style.backgroundColor = this.simpleKeyboardInstance.options.physicalKeyboardHighlightBgColor || \"#9ab4d0\";\r\n buttonDOM.style.color = this.simpleKeyboardInstance.options.physicalKeyboardHighlightTextColor || \"white\";\r\n }\r\n });\r\n }\r\n });\r\n\r\n // Removing button style on keyup\r\n document.addEventListener(\"keyup\", (event) => {\r\n if(this.simpleKeyboardInstance.options.physicalKeyboardHighlight){\r\n let buttonPressed = this.getSimpleKeyboardLayoutKey(event);\r\n\r\n this.simpleKeyboardInstance.dispatch(instance => {\r\n let buttonDOM = instance.getButtonElement(buttonPressed) || instance.getButtonElement(`{${buttonPressed}}`);\r\n\r\n if(buttonDOM){\r\n buttonDOM.removeAttribute(\"style\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n getSimpleKeyboardLayoutKey = (event) => {\r\n if(this.simpleKeyboardInstance.options.debug){\r\n console.log(event);\r\n }\r\n \r\n let output;\r\n\r\n if(\r\n event.code.includes(\"Numpad\") ||\r\n event.code.includes(\"Shift\") ||\r\n event.code.includes(\"Space\") ||\r\n event.code.includes(\"Backspace\") ||\r\n event.code.includes(\"Control\") ||\r\n event.code.includes(\"Alt\") ||\r\n event.code.includes(\"Meta\")\r\n ){\r\n output = event.code;\r\n } else {\r\n output = event.key;\r\n }\r\n\r\n /**\r\n * If button is not uppercase, casting to lowercase\r\n */\r\n if (\r\n output !== output.toUpperCase() ||\r\n (event.code[0] === \"F\" && Number.isInteger(Number(event.code[1])) && event.code.length <= 3)\r\n ) {\r\n output = output.toLowerCase();\r\n }\r\n\r\n return output;\r\n }\r\n}\r\n\r\nexport default PhysicalKeyboard;\n\n\n// WEBPACK FOOTER //\n// ./src/lib/services/PhysicalKeyboard.js","class KeyboardLayout {\r\n static getDefaultLayout = () => {\r\n return {\r\n 'default': [\r\n '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',\r\n '{tab} q w e r t y u i o p [ ] \\\\',\r\n '{lock} a s d f g h j k l ; \\' {enter}',\r\n '{shift} z x c v b n m , . / {shift}',\r\n '.com @ {space}'\r\n ],\r\n 'shift': [\r\n '~ ! @ # $ % ^ & * ( ) _ + {bksp}',\r\n '{tab} Q W E R T Y U I O P { } |',\r\n '{lock} A S D F G H J K L : \" {enter}',\r\n '{shift} Z X C V B N M < > ? {shift}',\r\n '.com @ {space}'\r\n ]\r\n } \r\n }\r\n}\r\n\r\nexport default KeyboardLayout;\n\n\n// WEBPACK FOOTER //\n// ./src/lib/services/KeyboardLayout.js","class Utilities {\r\n constructor(simpleKeyboardInstance){\r\n this.simpleKeyboardInstance = simpleKeyboardInstance;\r\n }\r\n\r\n getButtonClass = button => {\r\n let buttonTypeClass = (button.includes(\"{\") && button.includes(\"}\") && button !== '{//}') ? \"functionBtn\" : \"standardBtn\";\r\n let buttonWithoutBraces = button.replace(\"{\", \"\").replace(\"}\", \"\");\r\n let buttonNormalized = '';\r\n\r\n if(buttonTypeClass !== \"standardBtn\")\r\n buttonNormalized = ` hg-button-${buttonWithoutBraces}`;\r\n\r\n return `hg-${buttonTypeClass}${buttonNormalized}`;\r\n }\r\n\r\n getDefaultDiplay(){\r\n return {\r\n '{bksp}': 'backspace',\r\n '{backspace}': 'backspace',\r\n '{enter}': '< enter',\r\n '{shift}': 'shift',\r\n '{shiftleft}': 'shift',\r\n '{shiftright}': 'shift',\r\n '{alt}': 'alt',\r\n '{s}': 'shift',\r\n '{tab}': 'tab',\r\n '{lock}': 'caps',\r\n '{capslock}': 'caps',\r\n '{accept}': 'Submit',\r\n '{space}': ' ',\r\n '{//}': ' ',\r\n \"{esc}\": \"esc\",\r\n \"{escape}\": \"esc\",\r\n \"{f1}\": \"f1\",\r\n \"{f2}\": \"f2\",\r\n \"{f3}\": \"f3\",\r\n \"{f4}\": \"f4\",\r\n \"{f5}\": \"f5\",\r\n \"{f6}\": \"f6\",\r\n \"{f7}\": \"f7\",\r\n \"{f8}\": \"f8\",\r\n \"{f9}\": \"f9\",\r\n \"{f10}\": \"f10\",\r\n \"{f11}\": \"f11\",\r\n \"{f12}\": \"f12\",\r\n '{numpaddivide}': '/',\r\n '{numlock}': 'lock',\r\n \"{arrowup}\": \"↑\",\r\n \"{arrowleft}\": \"←\",\r\n \"{arrowdown}\": \"↓\",\r\n \"{arrowright}\": \"→\",\r\n \"{prtscr}\": \"print\",\r\n \"{scrolllock}\": \"scroll\",\r\n \"{pause}\": \"pause\",\r\n \"{insert}\": \"ins\",\r\n \"{home}\": \"home\",\r\n \"{pageup}\": \"up\",\r\n \"{delete}\": \"del\",\r\n \"{end}\": \"end\",\r\n \"{pagedown}\": \"down\",\r\n \"{numpadmultiply}\": \"*\",\r\n \"{numpadsubtract}\": \"-\",\r\n \"{numpadadd}\": \"+\",\r\n \"{numpadenter}\": \"enter\",\r\n \"{period}\": \".\",\r\n \"{numpaddecimal}\": \".\",\r\n \"{numpad0}\": \"0\",\r\n \"{numpad1}\": \"1\",\r\n \"{numpad2}\": \"2\",\r\n \"{numpad3}\": \"3\",\r\n \"{numpad4}\": \"4\",\r\n \"{numpad5}\": \"5\",\r\n \"{numpad6}\": \"6\",\r\n \"{numpad7}\": \"7\",\r\n \"{numpad8}\": \"8\",\r\n \"{numpad9}\": \"9\",\r\n };\r\n }\r\n\r\n getButtonDisplayName = (button, display, mergeDisplay) => {\r\n if(mergeDisplay){\r\n display = Object.assign({}, this.getDefaultDiplay(), display);\r\n } else {\r\n display = display || this.getDefaultDiplay();\r\n }\r\n\r\n return display[button] || button;\r\n }\r\n\r\n getUpdatedInput = (button, input, options, caretPos) => {\r\n \r\n let output = input;\r\n\r\n if((button === \"{bksp}\" || button === \"{backspace}\") && output.length > 0){\r\n output = this.removeAt(output, caretPos);\r\n\r\n } else if(button === \"{space}\")\r\n output = this.addStringAt(output, \" \", caretPos);\r\n\r\n else if(button === \"{tab}\" && !(typeof options.tabCharOnTab === \"boolean\" && options.tabCharOnTab === false)){\r\n output = this.addStringAt(output, \"\\t\", caretPos);\r\n\r\n } else if((button === \"{enter}\" || button === \"{numpadenter}\") && options.newLineOnEnter)\r\n output = this.addStringAt(output, \"\\n\", caretPos);\r\n\r\n else if(button.includes(\"numpad\") && Number.isInteger(Number(button[button.length - 2]))){\r\n output = this.addStringAt(output, button[button.length - 2], caretPos);\r\n }\r\n else if(button === \"{numpaddivide}\")\r\n output = this.addStringAt(output, '/', caretPos);\r\n\r\n else if(button === \"{numpadmultiply}\")\r\n output = this.addStringAt(output, '*', caretPos);\r\n else if(button === \"{numpadsubtract}\")\r\n output = this.addStringAt(output, '-', caretPos);\r\n\r\n else if(button === \"{numpadadd}\")\r\n output = this.addStringAt(output, '+', caretPos);\r\n\r\n else if(button === \"{numpaddecimal}\")\r\n output = this.addStringAt(output, '.', caretPos);\r\n\r\n else if(button === \"{\" || button === \"}\")\r\n output = this.addStringAt(output, button, caretPos);\r\n\r\n else if(!button.includes(\"{\") && !button.includes(\"}\"))\r\n output = this.addStringAt(output, button, caretPos);\r\n\r\n return output;\r\n }\r\n\r\n updateCaretPos = (length, minus) => {\r\n if(minus){\r\n if(this.simpleKeyboardInstance.caretPosition > 0)\r\n this.simpleKeyboardInstance.caretPosition = this.simpleKeyboardInstance.caretPosition - length\r\n } else {\r\n this.simpleKeyboardInstance.caretPosition = this.simpleKeyboardInstance.caretPosition + length;\r\n }\r\n }\r\n\r\n addStringAt(source, string, position){\r\n let output;\r\n\r\n if(this.simpleKeyboardInstance.options.debug){\r\n console.log(\"Caret at:\", position);\r\n }\r\n\r\n if(!position && position !== 0){\r\n output = source + string;\r\n } else {\r\n output = [source.slice(0, position), string, source.slice(position)].join('');\r\n\r\n /**\r\n * Avoid caret position change when maxLength is set\r\n */\r\n if(!this.isMaxLengthReached()){\r\n this.updateCaretPos(string.length);\r\n }\r\n\r\n }\r\n\r\n return output;\r\n }\r\n\r\n removeAt(source, position){\r\n if(this.simpleKeyboardInstance.caretPosition === 0){\r\n return source;\r\n }\r\n\r\n let output;\r\n let prevTwoChars;\r\n let emojiMatched;\r\n let emojiMatchedReg = /([\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\r\n\r\n /**\r\n * Emojis are made out of two characters, so we must take a custom approach to trim them.\r\n * For more info: https://mathiasbynens.be/notes/javascript-unicode\r\n */\r\n if(position && position >= 0){\r\n prevTwoChars = source.substring(position - 2, position)\r\n emojiMatched = prevTwoChars.match(emojiMatchedReg);\r\n\r\n if(emojiMatched){\r\n output = source.substr(0, (position - 2)) + source.substr(position);\r\n this.updateCaretPos(2, true);\r\n } else {\r\n output = source.substr(0, (position - 1)) + source.substr(position);\r\n this.updateCaretPos(1, true);\r\n }\r\n } else {\r\n prevTwoChars = source.slice(-2);\r\n emojiMatched = prevTwoChars.match(emojiMatchedReg);\r\n\r\n if(emojiMatched){\r\n output = source.slice(0, -2);\r\n this.updateCaretPos(2, true);\r\n } else {\r\n output = source.slice(0, -1);\r\n this.updateCaretPos(1, true);\r\n }\r\n }\r\n\r\n return output;\r\n }\r\n\r\n handleMaxLength(inputObj, options, updatedInput){\r\n let maxLength = options.maxLength;\r\n let currentInput = inputObj[options.inputName];\r\n let condition = currentInput.length === maxLength;\r\n\r\n\r\n if(\r\n /**\r\n * If pressing this button won't add more characters\r\n * We exit out of this limiter function\r\n */\r\n updatedInput.length <= currentInput.length\r\n ){\r\n return false;\r\n }\r\n\r\n if(Number.isInteger(maxLength)){\r\n if(options.debug){\r\n console.log(\"maxLength (num) reached:\", condition);\r\n }\r\n\r\n if(condition){\r\n this.maxLengthReached = true;\r\n return true;\r\n } else {\r\n this.maxLengthReached = false;\r\n return false;\r\n }\r\n }\r\n\r\n if(typeof maxLength === \"object\"){\r\n let condition = currentInput.length === maxLength[options.inputName];\r\n\r\n if(options.debug){\r\n console.log(\"maxLength (obj) reached:\", condition);\r\n }\r\n\r\n if(condition){\r\n this.maxLengthReached = true;\r\n return true;\r\n } else {\r\n this.maxLengthReached = false;\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n isMaxLengthReached = () => {\r\n return Boolean(this.maxLengthReached);\r\n }\r\n\r\n camelCase = (string) => {\r\n return string.toLowerCase().trim().split(/[.\\-_\\s]/g).reduce((string, word) => string + word[0].toUpperCase() + word.slice(1));\r\n };\r\n\r\n countInArray = (array, value) => {\r\n return array.reduce((n, x) => n + (x === value), 0);\r\n }\r\n\r\n}\r\n\r\nexport default Utilities;\n\n\n// WEBPACK FOOTER //\n// ./src/lib/services/Utilities.js"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2bb5f375..c9bf64aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,222 @@ { "name": "simple-keyboard", - "version": "2.5.9", + "version": "2.5.11", "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/generator": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.3.tgz", + "integrity": "sha512-ZoCZGcfIJFJuZBqxcY9OjC1KW2lWK64qrX1o4UYL3yshVhwKFYgzpWZ0vvtGMNJdTlvkw0W+HR1VnYN8q3QPFQ==", + "dev": true, + "requires": { + "@babel/types": "^7.1.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.10", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", + "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.3.tgz", + "integrity": "sha512-gqmspPZOMW3MIRb9HlrnbZHXI1/KHTOroBwN1NcLL6pWxzqzEKGvRTq0W/PxS45OtQGbaFikSQpkS5zbnsQm2w==", + "dev": true + }, + "@babel/template": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz", + "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.1.2", + "@babel/types": "^7.1.2" + } + }, + "@babel/traverse": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.4.tgz", + "integrity": "sha512-my9mdrAIGdDiSVBuMjpn/oXYpva0/EZwWL3sm3Wcy/AVWO2eXnsoZruOT9jOGNRXU8KbCIu5zsKnXcAJ6PcV6Q==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.1.3", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/parser": "^7.1.3", + "@babel/types": "^7.1.3", + "debug": "^3.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.10" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "globals": { + "version": "11.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz", + "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.3.tgz", + "integrity": "sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.10", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + } + } + }, + "@types/node": { + "version": "10.12.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.0.tgz", + "integrity": "sha512-3TUHC3jsBAB7qVRGxT6lWyYo2v96BMmD2PTcl47H25Lu7UXtFH/2qqmKiVrnel6Ne//0TFYf6uvNX+HW2FRkLQ==", + "dev": true + }, "abab": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", "dev": true }, + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, "accepts": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", @@ -193,12 +400,12 @@ } }, "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "dev": true, "requires": { - "default-require-extensions": "^1.0.0" + "default-require-extensions": "^2.0.0" } }, "aproba": { @@ -313,6 +520,17 @@ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, + "array.prototype.flat": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", + "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.10.0", + "function-bind": "^1.1.1" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -2175,6 +2393,54 @@ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + }, + "dependencies": { + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + } + } + }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", @@ -2425,6 +2691,12 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, + "compare-versions": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.4.0.tgz", + "integrity": "sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==", + "dev": true + }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", @@ -3065,12 +3337,20 @@ "dev": true }, "default-require-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "requires": { - "strip-bom": "^2.0.0" + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } } }, "define-properties": { @@ -3254,6 +3534,12 @@ } } }, + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", + "dev": true + }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -3506,6 +3792,100 @@ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", "dev": true }, + "enzyme": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.7.0.tgz", + "integrity": "sha512-QLWx+krGK6iDNyR1KlH5YPZqxZCQaVF6ike1eDJAOg0HvSkSCVImPsdWaNw6v+VrnK92Kg8jIOYhuOSS9sBpyg==", + "dev": true, + "requires": { + "array.prototype.flat": "^1.2.1", + "cheerio": "^1.0.0-rc.2", + "function.prototype.name": "^1.1.0", + "has": "^1.0.3", + "is-boolean-object": "^1.0.0", + "is-callable": "^1.1.4", + "is-number-object": "^1.0.3", + "is-string": "^1.0.4", + "is-subset": "^0.1.1", + "lodash.escape": "^4.0.1", + "lodash.isequal": "^4.5.0", + "object-inspect": "^1.6.0", + "object-is": "^1.0.1", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4", + "object.values": "^1.0.4", + "raf": "^3.4.0", + "rst-selector-parser": "^2.2.3", + "string.prototype.trim": "^1.1.2" + }, + "dependencies": { + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + } + } + }, + "enzyme-adapter-react-16": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.6.0.tgz", + "integrity": "sha512-ay9eGFpChyUDnjTFMMJHzrb681LF3hPWJLEA7RoLFG9jSWAdAm2V50pGmFV9dYGJgh5HfdiqM+MNvle41Yf/PA==", + "dev": true, + "requires": { + "enzyme-adapter-utils": "^1.8.0", + "function.prototype.name": "^1.1.0", + "object.assign": "^4.1.0", + "object.values": "^1.0.4", + "prop-types": "^15.6.2", + "react-is": "^16.5.2", + "react-test-renderer": "^16.0.0-0" + }, + "dependencies": { + "prop-types": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "dev": true, + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + } + } + }, + "enzyme-adapter-utils": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.8.1.tgz", + "integrity": "sha512-s3QB3xQAowaDS2sHhmEqrT13GJC4+n5bG015ZkLv60n9k5vhxxHTQRIneZmQ4hmdCZEBrvUJ89PG6fRI5OEeuQ==", + "dev": true, + "requires": { + "function.prototype.name": "^1.1.0", + "object.assign": "^4.1.0", + "prop-types": "^15.6.2" + }, + "dependencies": { + "prop-types": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "dev": true, + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + } + } + }, "errno": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz", @@ -5107,6 +5487,17 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "function.prototype.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", + "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "is-callable": "^1.1.3" + } + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -5376,6 +5767,12 @@ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -5929,6 +6326,12 @@ "binary-extensions": "^1.0.0" } }, + "is-boolean-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", + "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", + "dev": true + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -6065,6 +6468,12 @@ "kind-of": "^3.0.2" } }, + "is-number-object": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", + "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", + "dev": true + }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", @@ -6175,6 +6584,18 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-string": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", + "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", + "dev": true + }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, "is-svg": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", @@ -6251,23 +6672,214 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "istanbul-api": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.1.tgz", - "integrity": "sha512-oFCwXvd65amgaPCzqrR+a2XjanS1MvpXN6l/MlMUTv6uiA1NOgGX+I0uyq8Lg3GDxsxPsaP1049krz3hIJ5+KA==", + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "async": "^2.1.4", - "fileset": "^2.0.2", - "istanbul-lib-coverage": "^1.1.1", - "istanbul-lib-hook": "^1.1.0", - "istanbul-lib-instrument": "^1.9.1", - "istanbul-lib-report": "^1.1.2", - "istanbul-lib-source-maps": "^1.2.2", - "istanbul-reports": "^1.1.3", - "js-yaml": "^3.7.0", - "mkdirp": "^0.5.1", + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + } + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "istanbul-api": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.0.6.tgz", + "integrity": "sha512-8W5oeAGWXhtTJjAyVfvavOLVyZCTNCKsyF6GON/INKlBdO7uJ/bv3qnPj5M6ERKzmMCJS1kntnjjGuJ86fn3rQ==", + "dev": true, + "requires": { + "async": "^2.6.1", + "compare-versions": "^3.2.1", + "fileset": "^2.0.3", + "istanbul-lib-coverage": "^2.0.1", + "istanbul-lib-hook": "^2.0.1", + "istanbul-lib-instrument": "^3.0.0", + "istanbul-lib-report": "^2.0.2", + "istanbul-lib-source-maps": "^2.0.1", + "istanbul-reports": "^2.0.1", + "js-yaml": "^3.12.0", + "make-dir": "^1.3.0", "once": "^1.4.0" + }, + "dependencies": { + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.0.0.tgz", + "integrity": "sha512-eQY9vN9elYjdgN9Iv6NS/00bptm02EBBk70lRMaVjeA6QYocQgenVrSgC28TJurdnZa80AGO3ASdFN+w/njGiQ==", + "dev": true, + "requires": { + "@babel/generator": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "istanbul-lib-coverage": "^2.0.1", + "semver": "^5.5.0" + } + }, + "istanbul-lib-source-maps": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-2.0.1.tgz", + "integrity": "sha512-30l40ySg+gvBLcxTrLzR4Z2XTRj3HgRCA/p2rnbs/3OiTaoj054gAbuP5DcLOtwqmy4XW8qXBHzrmP2/bQ9i3A==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^2.0.1", + "make-dir": "^1.3.0", + "rimraf": "^2.6.2", + "source-map": "^0.6.1" + } + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + } } }, "istanbul-lib-coverage": { @@ -6277,12 +6889,12 @@ "dev": true }, "istanbul-lib-hook": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", - "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.1.tgz", + "integrity": "sha512-ufiZoiJ8CxY577JJWEeFuxXZoMqiKpq/RqZtOAYuQLvlkbJWscq9n3gc4xrCGH9n4pW0qnTxOz1oyMmVtk8E1w==", "dev": true, "requires": { - "append-transform": "^0.4.0" + "append-transform": "^1.0.0" } }, "istanbul-lib-instrument": { @@ -6309,36 +6921,50 @@ } }, "istanbul-lib-report": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz", - "integrity": "sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.2.tgz", + "integrity": "sha512-rJ8uR3peeIrwAxoDEbK4dJ7cqqtxBisZKCuwkMtMv0xYzaAnsAi3AHrHPAAtNXzG/bcCgZZ3OJVqm1DTi9ap2Q==", "dev": true, "requires": { - "istanbul-lib-coverage": "^1.1.2", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" + "istanbul-lib-coverage": "^2.0.1", + "make-dir": "^1.3.0", + "supports-color": "^5.4.0" }, "dependencies": { "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "istanbul-lib-coverage": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", - "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==", + "dev": true + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "^3.0.0" } } } @@ -6374,12 +7000,12 @@ } }, "istanbul-reports": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", - "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.0.1.tgz", + "integrity": "sha512-CT0QgMBJqs6NJLF678ZHcquUAZIoBIUNzdJrRJfpkI9OnzG6MkUfHxbJC3ln981dMswC7/B1mfX3LNkhgJxsuw==", "dev": true, "requires": { - "handlebars": "^4.0.3" + "handlebars": "^4.0.11" } }, "jest": { @@ -6397,12 +7023,83 @@ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", "dev": true }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "^1.0.0" + } + }, "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "^2.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", + "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", + "dev": true, + "requires": { + "append-transform": "^0.4.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", + "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", + "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", + "dev": true, + "requires": { + "handlebars": "^4.0.3" + } + }, "jest-cli": { "version": "20.0.4", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-20.0.4.tgz", @@ -6439,6 +7136,84 @@ "which": "^1.2.12", "worker-farm": "^1.3.1", "yargs": "^7.0.2" + }, + "dependencies": { + "istanbul-api": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz", + "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", + "dev": true, + "requires": { + "async": "^2.1.4", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.2.1", + "istanbul-lib-hook": "^1.2.2", + "istanbul-lib-instrument": "^1.10.2", + "istanbul-lib-report": "^1.1.5", + "istanbul-lib-source-maps": "^1.2.6", + "istanbul-reports": "^1.5.1", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", + "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + } + } + } + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" } } } @@ -7013,6 +7788,24 @@ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", "dev": true }, + "lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -7386,6 +8179,12 @@ "minimist": "0.0.8" } }, + "moo": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", + "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", + "dev": true + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -7495,6 +8294,19 @@ "xml-char-classes": "^1.0.0" } }, + "nearley": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.15.1.tgz", + "integrity": "sha512-8IUY/rUrKz2mIynUGh8k+tul1awMKEjeHHC5G3FHvvyAW6oq4mQfNp2c0BMea+sYZJvYcrrM6GmZVIle/GRXGw==", + "dev": true, + "requires": { + "moo": "^0.4.3", + "nomnom": "~1.6.2", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6", + "semver": "^5.4.1" + } + }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", @@ -7581,6 +8393,33 @@ "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", "dev": true }, + "nomnom": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", + "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", + "dev": true, + "requires": { + "colors": "0.5.x", + "underscore": "~1.4.4" + }, + "dependencies": { + "colors": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", + "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", @@ -7696,6 +8535,18 @@ "integrity": "sha512-smRWXzkvxw72VquyZ0wggySl7PFUtoDhvhpdwgESXxUrH7vVhhp9asfup1+rVLrhsl7L45Ee1Q/l5R2Ul4MwUg==", "dev": true }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "dev": true + }, "object-keys": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", @@ -7719,6 +8570,30 @@ } } }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", + "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.6.1", + "function-bind": "^1.1.0", + "has": "^1.0.1" + } + }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", @@ -7746,6 +8621,18 @@ } } }, + "object.values": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", + "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.6.1", + "function-bind": "^1.1.0", + "has": "^1.0.1" + } + }, "obuf": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", @@ -9629,6 +10516,22 @@ "performance-now": "^2.1.0" } }, + "railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", + "dev": true + }, + "randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dev": true, + "requires": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + } + }, "randombytes": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", @@ -9748,6 +10651,36 @@ "integrity": "sha512-XzgvowFrwDo6TWcpJ/WTiarb9UI6lhA4PMzS7n1joK3sHfBBBOQHUc0U4u57D6DWO9vHv6lVSWx2Q/Ymfyv4hw==", "dev": true }, + "react-is": { + "version": "16.5.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.5.2.tgz", + "integrity": "sha512-hSl7E6l25GTjNEZATqZIuWOgSnpXb3kD0DVCujmg46K5zLxsbiKaaT6VO9slkSBDPZfYs30lwfJwbOFOnoEnKQ==", + "dev": true + }, + "react-test-renderer": { + "version": "16.5.2", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.5.2.tgz", + "integrity": "sha512-AGbJYbCVx1J6jdUgI4s0hNp+9LxlgzKvXl0ROA3DHTrtjAr00Po1RhDZ/eAq2VC/ww8AHgpDXULh5V2rhEqqJg==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "react-is": "^16.5.2", + "schedule": "^0.5.0" + }, + "dependencies": { + "prop-types": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "dev": true, + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + } + } + }, "read-all-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", @@ -10196,6 +11129,16 @@ "inherits": "^2.0.1" } }, + "rst-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", + "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", + "dev": true, + "requires": { + "lodash.flattendeep": "^4.4.0", + "nearley": "^2.7.10" + } + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -10297,6 +11240,15 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, + "schedule": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/schedule/-/schedule-0.5.0.tgz", + "integrity": "sha512-HUcJicG5Ou8xfR//c2rPT0lPIRR09vVvN81T9fqfVgBmhERUbDEQoYKjpBxbueJnCPpSu2ujXzOnRQt6x9o/jw==", + "dev": true, + "requires": { + "object-assign": "^4.1.1" + } + }, "schema-utils": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", @@ -10932,6 +11884,17 @@ } } }, + "string.prototype.trim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.0", + "function-bind": "^1.0.2" + } + }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", @@ -11361,6 +12324,12 @@ } } }, + "underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=", + "dev": true + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", diff --git a/package.json b/package.json index 1983aaa7..7db60857 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "simple-keyboard", - "version": "2.5.11", + "version": "2.6.0", "description": "On-screen Javascript Virtual Keyboard", "main": "build/index.js", "scripts": { @@ -48,6 +48,8 @@ "copy-webpack-plugin": "^4.3.1", "css-loader": "0.28.7", "dotenv": "4.0.0", + "enzyme": "^3.7.0", + "enzyme-adapter-react-16": "^1.6.0", "eslint": "4.10.0", "eslint-config-react-app": "^2.0.1", "eslint-loader": "1.9.0", @@ -59,6 +61,9 @@ "file-loader": "1.1.5", "fs-extra": "3.0.1", "html-webpack-plugin": "2.29.0", + "istanbul": "^0.4.5", + "istanbul-api": "^2.0.6", + "istanbul-reports": "^2.0.1", "jest": "20.0.4", "object-assign": "4.1.1", "postcss-flexbugs-fixes": "3.2.0", @@ -79,7 +84,8 @@ }, "jest": { "collectCoverageFrom": [ - "src/**/*.{js,jsx,mjs}" + "src/**/*.{js,jsx,mjs}", + "!**/tests/**" ], "setupFiles": [ "/config/polyfills.js"