diff --git a/.editorconfig b/.editorconfig index 2e9ea972..dad3b573 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,3 +1,4 @@ [*.{js, ts}] indent_style = space -indent_size = 2 \ No newline at end of file +indent_size = 2 +end_of_line = lf diff --git a/.eslintrc.js b/.eslintrc.js index 218ed932..3f8ef4d6 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,11 +2,10 @@ module.exports = { env: { node: true }, - parser: '@typescript-eslint/parser', + parser: "@typescript-eslint/parser", extends: [ "eslint:recommended", "plugin:prettier/recommended", - "plugin:jest/recommended", "plugin:@typescript-eslint/recommended", "plugin:@typescript-eslint/eslint-recommended" ], diff --git a/lib/core/QROptions.d.ts b/lib/core/QROptions.d.ts index 23e73631..5f443393 100644 --- a/lib/core/QROptions.d.ts +++ b/lib/core/QROptions.d.ts @@ -25,6 +25,7 @@ export interface RequiredOptions extends Options { color: string; gradient?: Gradient; }; + useLegacyDotRotation: boolean; } declare const defaultOptions: RequiredOptions; export default defaultOptions; diff --git a/lib/qr-code-styling.js b/lib/qr-code-styling.js index 28df9493..cdb77719 100644 --- a/lib/qr-code-styling.js +++ b/lib/qr-code-styling.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.QRCodeStyling=e():t.QRCodeStyling=e()}(self,(()=>(()=>{var t={192:(t,e)=>{var r,n,o=function(){var t=function(t,e){var r=t,n=a[e],o=null,i=0,c=null,v=[],w={},_=function(t,e){o=function(t){for(var e=new Array(t),r=0;r=7&&M(t),null==c&&(c=P(r,n,v)),C(c,e)},m=function(t,e){for(var r=-1;r<=7;r+=1)if(!(t+r<=-1||i<=t+r))for(var n=-1;n<=7;n+=1)e+n<=-1||i<=e+n||(o[t+r][e+n]=0<=r&&r<=6&&(0==n||6==n)||0<=n&&n<=6&&(0==r||6==r)||2<=r&&r<=4&&2<=n&&n<=4)},b=function(){for(var t=8;t>n&1);o[Math.floor(n/3)][n%3+i-8-3]=a}for(n=0;n<18;n+=1)a=!t&&1==(e>>n&1),o[n%3+i-8-3][Math.floor(n/3)]=a},S=function(t,e){for(var r=n<<3|e,a=s.getBCHTypeInfo(r),c=0;c<15;c+=1){var u=!t&&1==(a>>c&1);c<6?o[c][8]=u:c<8?o[c+1][8]=u:o[i-15+c][8]=u}for(c=0;c<15;c+=1)u=!t&&1==(a>>c&1),c<8?o[8][i-c-1]=u:c<9?o[8][15-c-1+1]=u:o[8][15-c-1]=u;o[i-8][8]=!t},C=function(t,e){for(var r=-1,n=i-1,a=7,c=0,u=s.getMaskFunction(e),h=i-1;h>0;h-=2)for(6==h&&(h-=1);;){for(var l=0;l<2;l+=1)if(null==o[n][h-l]){var d=!1;c>>a&1)),u(n,h-l)&&(d=!d),o[n][h-l]=d,-1==(a-=1)&&(c+=1,a=7)}if((n+=r)<0||i<=n){n-=r,r=-r;break}}},P=function(t,e,r){for(var n=h.getRSBlocks(t,e),o=l(),i=0;i8*c)throw"code length overflow. ("+o.getLengthInBits()+">"+8*c+")";for(o.getLengthInBits()+4<=8*c&&o.put(0,4);o.getLengthInBits()%8!=0;)o.putBit(!1);for(;!(o.getLengthInBits()>=8*c||(o.put(236,8),o.getLengthInBits()>=8*c));)o.put(17,8);return function(t,e){for(var r=0,n=0,o=0,i=new Array(e.length),a=new Array(e.length),c=0;c=0?p.getAt(g):0}}var v=0;for(d=0;dn)&&(t=n,e=r)}return e}())},w.createTableTag=function(t,e){t=t||2;var r="";r+='',r+="";for(var n=0;n";for(var o=0;o';r+=""}return(r+="")+"
"},w.createSvgTag=function(t,e,r,n){var o={};"object"==typeof arguments[0]&&(t=(o=arguments[0]).cellSize,e=o.margin,r=o.alt,n=o.title),t=t||2,e=void 0===e?4*t:e,(r="string"==typeof r?{text:r}:r||{}).text=r.text||null,r.id=r.text?r.id||"qrcode-description":null,(n="string"==typeof n?{text:n}:n||{}).text=n.text||null,n.id=n.text?n.id||"qrcode-title":null;var i,a,s,c,u=w.getModuleCount()*t+2*e,h="";for(c="l"+t+",0 0,"+t+" -"+t+",0 0,-"+t+"z ",h+=''+O(n.text)+"":"",h+=r.text?''+O(r.text)+"":"",h+='',h+='"},w.createDataURL=function(t,e){t=t||2,e=void 0===e?4*t:e;var r=w.getModuleCount()*t+2*e,n=e,o=r-e;return y(r,r,(function(e,r){if(n<=e&&e"};var O=function(t){for(var e="",r=0;r":e+=">";break;case"&":e+="&";break;case'"':e+=""";break;default:e+=n}}return e};return w.createASCII=function(t,e){if((t=t||1)<2)return function(t){t=void 0===t?2:t;var e,r,n,o,i,a=1*w.getModuleCount()+2*t,s=t,c=a-t,u={"██":"█","█ ":"▀"," █":"▄"," ":" "},h={"██":"▀","█ ":"▀"," █":" "," ":" "},l="";for(e=0;e=c?h[i]:u[i];l+="\n"}return a%2&&t>0?l.substring(0,l.length-a-1)+Array(a+1).join("▀"):l.substring(0,l.length-1)}(e);t-=1,e=void 0===e?2*t:e;var r,n,o,i,a=w.getModuleCount()*t+2*e,s=e,c=a-e,u=Array(t+1).join("██"),h=Array(t+1).join(" "),l="",d="";for(r=0;r>>8),e.push(255&a)):e.push(n)}}return e}};var e,r,n,o,i,a={L:1,M:0,Q:3,H:2},s=(e=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],r=1335,n=7973,i=function(t){for(var e=0;0!=t;)e+=1,t>>>=1;return e},(o={}).getBCHTypeInfo=function(t){for(var e=t<<10;i(e)-i(r)>=0;)e^=r<=0;)e^=n<5&&(r+=3+i-5)}for(n=0;n=256;)e-=255;return t[e]}}}();function u(t,e){if(void 0===t.length)throw t.length+"/"+e;var r=function(){for(var r=0;r>>7-e%8&1)},put:function(t,e){for(var n=0;n>>e-n-1&1))},getLengthInBits:function(){return e},putBit:function(r){var n=Math.floor(e/8);t.length<=n&&t.push(0),r&&(t[n]|=128>>>e%8),e+=1}};return r},d=function(t){var e=t,r={getMode:function(){return 1},getLength:function(t){return e.length},write:function(t){for(var r=e,o=0;o+2>>8&255)+(255&o),t.put(o,13),r+=2}if(r>>8)},writeBytes:function(t,r,n){r=r||0,n=n||t.length;for(var o=0;o0&&(e+=","),e+=t[r];return e+"]"}};return e},w=function(t){var e=t,r=0,n=0,o=0,i={read:function(){for(;o<8;){if(r>=e.length){if(0==o)return-1;throw"unexpected end of file./"+o}var t=e.charAt(r);if(r+=1,"="==t)return o=0,-1;t.match(/^\s$/)||(n=n<<6|a(t.charCodeAt(0)),o+=6)}var i=n>>>o-8&255;return o-=8,i}},a=function(t){if(65<=t&&t<=90)return t-65;if(97<=t&&t<=122)return t-97+26;if(48<=t&&t<=57)return t-48+52;if(43==t)return 62;if(47==t)return 63;throw"c:"+t};return i},y=function(t,e,r){for(var n=function(t,e){var r=t,n=e,o=new Array(t*e),i={setPixel:function(t,e,n){o[e*r+t]=n},write:function(t){t.writeString("GIF87a"),t.writeShort(r),t.writeShort(n),t.writeByte(128),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(255),t.writeByte(255),t.writeByte(255),t.writeString(","),t.writeShort(0),t.writeShort(0),t.writeShort(r),t.writeShort(n),t.writeByte(0);var e=a(2);t.writeByte(2);for(var o=0;e.length-o>255;)t.writeByte(255),t.writeBytes(e,o,255),o+=255;t.writeByte(e.length-o),t.writeBytes(e,o,e.length-o),t.writeByte(0),t.writeString(";")}},a=function(t){for(var e=1<>>e!=0)throw"length over";for(;u+e>=8;)c.writeByte(255&(t<>>=8-u,h=0,u=0;h|=t<0&&c.writeByte(h)}});d.write(e,n);var f=0,p=String.fromCharCode(o[f]);for(f+=1;f=6;)i(t>>>e-6),e-=6},o.flush=function(){if(e>0&&(i(t<<6-e),t=0,e=0),r%3!=0)for(var o=3-r%3,a=0;a>6,128|63&n):n<55296||n>=57344?e.push(224|n>>12,128|n>>6&63,128|63&n):(r++,n=65536+((1023&n)<<10|1023&t.charCodeAt(r)),e.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n))}return e}(t)},void 0===(n="function"==typeof(r=function(){return o})?r.apply(e,[]):r)||(t.exports=n)}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n={};return(()=>{"use strict";r.d(n,{default:()=>et});var t=function(){return t=Object.assign||function(t){for(var e,r=1,n=arguments.length;rn||o&&o2||a&&s||c&&u)this._basicSquare({x:e,y:r,size:n,context:o,rotation:0});else{if(2===h){var l=0;return a&&c?l=Math.PI/2:c&&s?l=Math.PI:s&&u&&(l=-Math.PI/2),void this._basicCornerRounded({x:e,y:r,size:n,context:o,rotation:l})}if(1===h)return l=0,c?l=Math.PI/2:s?l=Math.PI:u&&(l=-Math.PI/2),void this._basicSideRounded({x:e,y:r,size:n,context:o,rotation:l})}else this._basicDot({x:e,y:r,size:n,context:o,rotation:0})},t.prototype._drawExtraRounded=function(t){var e=t.x,r=t.y,n=t.size,o=t.context,i=t.getNeighbor,a=i?+i(-1,0):0,s=i?+i(1,0):0,c=i?+i(0,-1):0,u=i?+i(0,1):0,h=a+s+c+u;if(0!==h)if(h>2||a&&s||c&&u)this._basicSquare({x:e,y:r,size:n,context:o,rotation:0});else{if(2===h){var l=0;return a&&c?l=Math.PI/2:c&&s?l=Math.PI:s&&u&&(l=-Math.PI/2),void this._basicCornerExtraRounded({x:e,y:r,size:n,context:o,rotation:l})}if(1===h)return l=0,c?l=Math.PI/2:s?l=Math.PI:u&&(l=-Math.PI/2),void this._basicSideRounded({x:e,y:r,size:n,context:o,rotation:l})}else this._basicDot({x:e,y:r,size:n,context:o,rotation:0})},t.prototype._drawClassy=function(t){var e=t.x,r=t.y,n=t.size,o=t.context,i=t.getNeighbor,a=i?+i(-1,0):0,s=i?+i(1,0):0,c=i?+i(0,-1):0,u=i?+i(0,1):0;0!==a+s+c+u?a||c?s||u?this._basicSquare({x:e,y:r,size:n,context:o,rotation:0}):this._basicCornerRounded({x:e,y:r,size:n,context:o,rotation:Math.PI/2}):this._basicCornerRounded({x:e,y:r,size:n,context:o,rotation:-Math.PI/2}):this._basicCornersRounded({x:e,y:r,size:n,context:o,rotation:Math.PI/2})},t.prototype._drawClassyRounded=function(t){var e=t.x,r=t.y,n=t.size,o=t.context,i=t.getNeighbor,a=i?+i(-1,0):0,s=i?+i(1,0):0,c=i?+i(0,-1):0,u=i?+i(0,1):0;0!==a+s+c+u?a||c?s||u?this._basicSquare({x:e,y:r,size:n,context:o,rotation:0}):this._basicCornerExtraRounded({x:e,y:r,size:n,context:o,rotation:Math.PI/2}):this._basicCornerExtraRounded({x:e,y:r,size:n,context:o,rotation:-Math.PI/2}):this._basicCornersRounded({x:e,y:r,size:n,context:o,rotation:Math.PI/2})},t}();const v=g,w="square",y="extra-rounded";var _=function(){return _=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=(e-o.hideXDots)/2&&t<(e+o.hideXDots)/2&&r>=(e-o.hideYDots)/2&&r<(e+o.hideYDots)/2||(null===(n=O[t])||void 0===n?void 0:n[r])||(null===(i=O[t-e+7])||void 0===i?void 0:i[r])||(null===(a=O[t])||void 0===a?void 0:a[r-e+7])||(null===(s=D[t])||void 0===s?void 0:s[r])||(null===(c=D[t-e+7])||void 0===c?void 0:c[r])||(null===(u=D[t])||void 0===u?void 0:u[r-e+7]))})),this.drawCorners(),this._options.image&&this.drawImage({width:o.width,height:o.height,count:e,dotSize:n}),[2]}}))},new((n=void 0)||(n=Promise))((function(t,i){function a(t){try{c(o.next(t))}catch(t){i(t)}}function s(t){try{c(o.throw(t))}catch(t){i(t)}}function c(e){var r;e.done?t(e.value):(r=e.value,r instanceof n?r:new n((function(t){t(r)}))).then(a,s)}c((o=o.apply(e,r||[])).next())}));var e,r,n,o},t.prototype.drawBackground=function(){var t=this.context,e=this._options;if(t){if(e.backgroundOptions.gradient){var r=e.backgroundOptions.gradient,n=this._createGradient({context:t,options:r,additionalRotation:0,x:0,y:0,size:this._canvas.width>this._canvas.height?this._canvas.width:this._canvas.height});r.colorStops.forEach((function(t){var e=t.offset,r=t.color;n.addColorStop(e,r)})),t.fillStyle=n}else e.backgroundOptions.color&&(t.fillStyle=e.backgroundOptions.color);t.fillRect(0,0,this._canvas.width,this._canvas.height)}},t.prototype.drawDots=function(t){var e=this;if(!this._qr)throw"QR code is not defined";var r=this.context;if(!r)throw"QR code is not defined";var n=this._options,o=this._qr.getModuleCount();if(o>n.width||o>n.height)throw"The canvas is too small.";var i=Math.min(n.width,n.height)-2*n.margin,a=Math.floor(i/o),s=Math.floor((n.width-o*a)/2),c=Math.floor((n.height-o*a)/2),u=new v({context:r,type:n.dotsOptions.type});r.beginPath();for(var h=function(r){for(var n=function(n){return t&&!t(r,n)?"continue":l._qr.isDark(r,n)?void u.draw(c+n*a,s+r*a,a,(function(i,a){return!(r+i<0||n+a<0||r+i>=o||n+a>=o)&&!(t&&!t(r+i,n+a))&&!!e._qr&&e._qr.isDark(r+i,n+a)})):"continue"},i=0;i=0&&u<=.25*Math.PI||u>1.75*Math.PI&&u<=2*Math.PI?(h-=s/2,l-=s/2*Math.tan(c),d+=s/2,f+=s/2*Math.tan(c)):u>.25*Math.PI&&u<=.75*Math.PI?(l-=s/2,h-=s/2/Math.tan(c),f+=s/2,d+=s/2/Math.tan(c)):u>.75*Math.PI&&u<=1.25*Math.PI?(h+=s/2,l+=s/2*Math.tan(c),d-=s/2,f-=s/2*Math.tan(c)):u>1.25*Math.PI&&u<=1.75*Math.PI&&(l+=s/2,h+=s/2/Math.tan(c),f-=s/2,d-=s/2/Math.tan(c)),e=r.createLinearGradient(Math.round(h),Math.round(l),Math.round(d),Math.round(f))}return e},t}();var A=function(){return A=Object.assign||function(t){for(var e,r=1,n=arguments.length;r2||i&&a||s&&c)this._basicSquare({x:e,y:r,size:n,rotation:0});else{if(2===u){var h=0;return i&&s?h=Math.PI/2:s&&a?h=Math.PI:a&&c&&(h=-Math.PI/2),void this._basicCornerRounded({x:e,y:r,size:n,rotation:h})}if(1===u)return h=0,s?h=Math.PI/2:a?h=Math.PI:c&&(h=-Math.PI/2),void this._basicSideRounded({x:e,y:r,size:n,rotation:h})}else this._basicDot({x:e,y:r,size:n,rotation:0})},t.prototype._drawExtraRounded=function(t){var e=t.x,r=t.y,n=t.size,o=t.getNeighbor,i=o?+o(-1,0):0,a=o?+o(1,0):0,s=o?+o(0,-1):0,c=o?+o(0,1):0,u=i+a+s+c;if(0!==u)if(u>2||i&&a||s&&c)this._basicSquare({x:e,y:r,size:n,rotation:0});else{if(2===u){var h=0;return i&&s?h=Math.PI/2:s&&a?h=Math.PI:a&&c&&(h=-Math.PI/2),void this._basicCornerExtraRounded({x:e,y:r,size:n,rotation:h})}if(1===u)return h=0,s?h=Math.PI/2:a?h=Math.PI:c&&(h=-Math.PI/2),void this._basicSideRounded({x:e,y:r,size:n,rotation:h})}else this._basicDot({x:e,y:r,size:n,rotation:0})},t.prototype._drawClassy=function(t){var e=t.x,r=t.y,n=t.size,o=t.getNeighbor,i=o?+o(-1,0):0,a=o?+o(1,0):0,s=o?+o(0,-1):0,c=o?+o(0,1):0;0!==i+a+s+c?i||s?a||c?this._basicSquare({x:e,y:r,size:n,rotation:0}):this._basicCornerRounded({x:e,y:r,size:n,rotation:Math.PI/2}):this._basicCornerRounded({x:e,y:r,size:n,rotation:-Math.PI/2}):this._basicCornersRounded({x:e,y:r,size:n,rotation:Math.PI/2})},t.prototype._drawClassyRounded=function(t){var e=t.x,r=t.y,n=t.size,o=t.getNeighbor,i=o?+o(-1,0):0,a=o?+o(1,0):0,s=o?+o(0,-1):0,c=o?+o(0,1):0;0!==i+a+s+c?i||s?a||c?this._basicSquare({x:e,y:r,size:n,rotation:0}):this._basicCornerExtraRounded({x:e,y:r,size:n,rotation:Math.PI/2}):this._basicCornerExtraRounded({x:e,y:r,size:n,rotation:-Math.PI/2}):this._basicCornersRounded({x:e,y:r,size:n,rotation:Math.PI/2})},t}();const k=I;var q=function(){return q=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=(e-o.hideXDots)/2&&t<(e+o.hideXDots)/2&&r>=(e-o.hideYDots)/2&&r<(e+o.hideYDots)/2||(null===(n=F[t])||void 0===n?void 0:n[r])||(null===(i=F[t-e+7])||void 0===i?void 0:i[r])||(null===(a=F[t])||void 0===a?void 0:a[r-e+7])||(null===(s=Q[t])||void 0===s?void 0:s[r])||(null===(c=Q[t-e+7])||void 0===c?void 0:c[r])||(null===(u=Q[t])||void 0===u?void 0:u[r-e+7]))})),this.drawCorners(),this._options.image?[4,this.drawImage({width:o.width,height:o.height,count:e,dotSize:n})]:[3,4];case 3:f.sent(),f.label=4;case 4:return[2]}}))}))},t.prototype.drawBackground=function(){var t,e,r,n=this._element,o=this._options;if(n){var i=null===(t=o.backgroundOptions)||void 0===t?void 0:t.gradient,a=null===(e=o.backgroundOptions)||void 0===e?void 0:e.color;i?this._createColor({options:i,color:a,additionalRotation:0,x:0,y:0,height:o.height,width:o.width,name:"background-color"}):(null===(r=o.backgroundOptions)||void 0===r?void 0:r.color)&&this._createStyle({color:a,name:"background-color"})}},t.prototype.drawDots=function(t){var e,r,n,o=this;if(!this._qr)throw"QR code is not defined";var i=this._options,a=this._qr.getModuleCount();if(a>i.width||a>i.height)throw"The canvas is too small.";var s=Math.min(i.width,i.height)-2*i.margin,c=Math.floor(s/a),u=Math.floor((i.width-a*c)/2),h=Math.floor((i.height-a*c)/2),l=new k({svg:this._element,type:i.dotsOptions.type});(null===(e=i.dotsOptions)||void 0===e?void 0:e.gradient)?(this._dotsClipPath=document.createElementNS("http://www.w3.org/2000/svg","clipPath"),this._dotsClipPath.setAttribute("id","clip-path-dot-color"),this._defs.appendChild(this._dotsClipPath),this._createColor({options:null===(r=i.dotsOptions)||void 0===r?void 0:r.gradient,color:i.dotsOptions.color,additionalRotation:0,x:u,y:h,height:a*c,width:a*c,name:"dot-color"})):i.dotsOptions.color&&(this._dots=document.createElementNS("http://www.w3.org/2000/svg","g"),this._dots.setAttribute("class","dot-color"),this._element.appendChild(this._dots),this._createStyle({color:i.dotsOptions.color,name:"dot-color"}));for(var d=function(e){for(var r=function(r){return t&&!t(e,r)?"continue":(null===(n=f._qr)||void 0===n?void 0:n.isDark(e,r))?(l.draw(h+r*c,u+e*c,c,(function(n,i){return!(e+n<0||r+i<0||e+n>=a||r+i>=a)&&!(t&&!t(e+n,r+i))&&!!o._qr&&o._qr.isDark(e+n,r+i)})),void(l._element&&f._dotsClipPath?f._dotsClipPath.appendChild(l._element):l._element&&f._dots&&f._dots.appendChild(l._element))):"continue"},i=0;ia?s:a,h=document.createElementNS("http://www.w3.org/2000/svg","rect");if(h.setAttribute("x",String(o)),h.setAttribute("y",String(i)),h.setAttribute("height",String(a)),h.setAttribute("width",String(s)),h.setAttribute("clip-path","url('#clip-path-".concat(c,"')")),e){var l;if(e.type===P)(l=document.createElementNS("http://www.w3.org/2000/svg","radialGradient")).setAttribute("id",c),l.setAttribute("gradientUnits","userSpaceOnUse"),l.setAttribute("fx",String(o+s/2)),l.setAttribute("fy",String(i+a/2)),l.setAttribute("cx",String(o+s/2)),l.setAttribute("cy",String(i+a/2)),l.setAttribute("r",String(u/2));else{var d=((e.rotation||0)+n)%(2*Math.PI),f=(d+2*Math.PI)%(2*Math.PI),p=o+s/2,g=i+a/2,v=o+s/2,w=i+a/2;f>=0&&f<=.25*Math.PI||f>1.75*Math.PI&&f<=2*Math.PI?(p-=s/2,g-=a/2*Math.tan(d),v+=s/2,w+=a/2*Math.tan(d)):f>.25*Math.PI&&f<=.75*Math.PI?(g-=a/2,p-=s/2/Math.tan(d),w+=a/2,v+=s/2/Math.tan(d)):f>.75*Math.PI&&f<=1.25*Math.PI?(p+=s/2,g+=a/2*Math.tan(d),v-=s/2,w-=a/2*Math.tan(d)):f>1.25*Math.PI&&f<=1.75*Math.PI&&(g+=a/2,p+=s/2/Math.tan(d),w-=a/2,v-=s/2/Math.tan(d)),(l=document.createElementNS("http://www.w3.org/2000/svg","linearGradient")).setAttribute("id",c),l.setAttribute("gradientUnits","userSpaceOnUse"),l.setAttribute("x1",String(Math.round(p))),l.setAttribute("y1",String(Math.round(g))),l.setAttribute("x2",String(Math.round(v))),l.setAttribute("y2",String(Math.round(w)))}e.colorStops.forEach((function(t){var e=t.offset,r=t.color,n=document.createElementNS("http://www.w3.org/2000/svg","stop");n.setAttribute("offset","".concat(100*e,"%")),n.setAttribute("stop-color",r),l.appendChild(n)})),h.setAttribute("fill","url('#".concat(c,"')")),this._defs.appendChild(l)}else r&&h.setAttribute("fill",r);this._element.appendChild(h)},t.prototype._createStyle=function(t){var e=t.color,r=t.name;this._style.innerHTML+=".".concat(r,"{ fill: ").concat(e,"; }")},t}(),G="canvas";for(var U={},X=0;X<=40;X++)U[X]=X;const Y={type:G,width:300,height:300,data:"",margin:0,qrOptions:{typeNumber:U[0],mode:void 0,errorCorrectionLevel:"Q"},imageOptions:{hideBackgroundDots:!0,imageSize:.4,crossOrigin:"anonymous",margin:0},dotsOptions:{type:"square",color:"#000"},backgroundOptions:{color:"#fff"}};var $=function(){return $=Object.assign||function(t){for(var e,r=1,n=arguments.length;rMath.min(e.width,e.height)&&(e.margin=Math.min(e.width,e.height)),e.dotsOptions=$({},e.dotsOptions),e.dotsOptions.gradient&&(e.dotsOptions.gradient=W(e.dotsOptions.gradient)),e.cornersSquareOptions&&(e.cornersSquareOptions=$({},e.cornersSquareOptions),e.cornersSquareOptions.gradient&&(e.cornersSquareOptions.gradient=W(e.cornersSquareOptions.gradient))),e.cornersDotOptions&&(e.cornersDotOptions=$({},e.cornersDotOptions),e.cornersDotOptions.gradient&&(e.cornersDotOptions.gradient=W(e.cornersDotOptions.gradient))),e.backgroundOptions&&(e.backgroundOptions=$({},e.backgroundOptions),e.backgroundOptions.gradient&&(e.backgroundOptions.gradient=W(e.backgroundOptions.gradient))),e}var J=r(192),K=r.n(J),V=function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function a(t){try{c(n.next(t))}catch(t){i(t)}}function s(t){try{c(n.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,s)}c((n=n.apply(t,e||[])).next())}))},tt=function(t,e){var r,n,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,n=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]\r\n'+n],{type:"image/svg+xml"})]):[2,new Promise((function(r){return e.getCanvas().toBlob(r,"image/".concat(t),1)}))]}}))}))},t.prototype.download=function(t){return V(this,void 0,void 0,(function(){var e,r,n,o,i;return tt(this,(function(s){switch(s.label){case 0:if(!this._qr)throw"QR code is empty";return e="png",r="qr","string"==typeof t?(e=t,console.warn("Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument")):"object"==typeof t&&null!==t&&(t.name&&(r=t.name),t.extension&&(e=t.extension)),[4,this._getQRStylingElement(e)];case 1:return n=s.sent(),"svg"===e.toLowerCase()?(o=new XMLSerializer,i='\r\n'+(i=o.serializeToString(n.getElement())),a("data:image/svg+xml;charset=utf-8,"+encodeURIComponent(i),"".concat(r,".svg"))):a(n.getCanvas().toDataURL("image/".concat(e)),"".concat(r,".").concat(e)),[2]}}))}))},t}()})(),n.default})())); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.QRCodeStyling=e():t.QRCodeStyling=e()}(self,(()=>(()=>{var t={192:(t,e)=>{var r,o,n=function(){var t=function(t,e){var r=t,o=a[e],n=null,i=0,c=null,v=[],y={},_=function(t,e){n=function(t){for(var e=new Array(t),r=0;r=7&&M(t),null==c&&(c=P(r,o,v)),C(c,e)},m=function(t,e){for(var r=-1;r<=7;r+=1)if(!(t+r<=-1||i<=t+r))for(var o=-1;o<=7;o+=1)e+o<=-1||i<=e+o||(n[t+r][e+o]=0<=r&&r<=6&&(0==o||6==o)||0<=o&&o<=6&&(0==r||6==r)||2<=r&&r<=4&&2<=o&&o<=4)},b=function(){for(var t=8;t>o&1);n[Math.floor(o/3)][o%3+i-8-3]=a}for(o=0;o<18;o+=1)a=!t&&1==(e>>o&1),n[o%3+i-8-3][Math.floor(o/3)]=a},S=function(t,e){for(var r=o<<3|e,a=s.getBCHTypeInfo(r),c=0;c<15;c+=1){var u=!t&&1==(a>>c&1);c<6?n[c][8]=u:c<8?n[c+1][8]=u:n[i-15+c][8]=u}for(c=0;c<15;c+=1)u=!t&&1==(a>>c&1),c<8?n[8][i-c-1]=u:c<9?n[8][15-c-1+1]=u:n[8][15-c-1]=u;n[i-8][8]=!t},C=function(t,e){for(var r=-1,o=i-1,a=7,c=0,u=s.getMaskFunction(e),h=i-1;h>0;h-=2)for(6==h&&(h-=1);;){for(var l=0;l<2;l+=1)if(null==n[o][h-l]){var d=!1;c>>a&1)),u(o,h-l)&&(d=!d),n[o][h-l]=d,-1==(a-=1)&&(c+=1,a=7)}if((o+=r)<0||i<=o){o-=r,r=-r;break}}},P=function(t,e,r){for(var o=h.getRSBlocks(t,e),n=l(),i=0;i8*c)throw"code length overflow. ("+n.getLengthInBits()+">"+8*c+")";for(n.getLengthInBits()+4<=8*c&&n.put(0,4);n.getLengthInBits()%8!=0;)n.putBit(!1);for(;!(n.getLengthInBits()>=8*c||(n.put(236,8),n.getLengthInBits()>=8*c));)n.put(17,8);return function(t,e){for(var r=0,o=0,n=0,i=new Array(e.length),a=new Array(e.length),c=0;c=0?p.getAt(g):0}}var v=0;for(d=0;do)&&(t=o,e=r)}return e}())},y.createTableTag=function(t,e){t=t||2;var r="";r+='',r+="";for(var o=0;o";for(var n=0;n';r+=""}return(r+="")+"
"},y.createSvgTag=function(t,e,r,o){var n={};"object"==typeof arguments[0]&&(t=(n=arguments[0]).cellSize,e=n.margin,r=n.alt,o=n.title),t=t||2,e=void 0===e?4*t:e,(r="string"==typeof r?{text:r}:r||{}).text=r.text||null,r.id=r.text?r.id||"qrcode-description":null,(o="string"==typeof o?{text:o}:o||{}).text=o.text||null,o.id=o.text?o.id||"qrcode-title":null;var i,a,s,c,u=y.getModuleCount()*t+2*e,h="";for(c="l"+t+",0 0,"+t+" -"+t+",0 0,-"+t+"z ",h+=''+O(o.text)+"":"",h+=r.text?''+O(r.text)+"":"",h+='',h+='"},y.createDataURL=function(t,e){t=t||2,e=void 0===e?4*t:e;var r=y.getModuleCount()*t+2*e,o=e,n=r-e;return w(r,r,(function(e,r){if(o<=e&&e"};var O=function(t){for(var e="",r=0;r":e+=">";break;case"&":e+="&";break;case'"':e+=""";break;default:e+=o}}return e};return y.createASCII=function(t,e){if((t=t||1)<2)return function(t){t=void 0===t?2:t;var e,r,o,n,i,a=1*y.getModuleCount()+2*t,s=t,c=a-t,u={"██":"█","█ ":"▀"," █":"▄"," ":" "},h={"██":"▀","█ ":"▀"," █":" "," ":" "},l="";for(e=0;e=c?h[i]:u[i];l+="\n"}return a%2&&t>0?l.substring(0,l.length-a-1)+Array(a+1).join("▀"):l.substring(0,l.length-1)}(e);t-=1,e=void 0===e?2*t:e;var r,o,n,i,a=y.getModuleCount()*t+2*e,s=e,c=a-e,u=Array(t+1).join("██"),h=Array(t+1).join(" "),l="",d="";for(r=0;r>>8),e.push(255&a)):e.push(o)}}return e}};var e,r,o,n,i,a={L:1,M:0,Q:3,H:2},s=(e=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],r=1335,o=7973,i=function(t){for(var e=0;0!=t;)e+=1,t>>>=1;return e},(n={}).getBCHTypeInfo=function(t){for(var e=t<<10;i(e)-i(r)>=0;)e^=r<=0;)e^=o<5&&(r+=3+i-5)}for(o=0;o=256;)e-=255;return t[e]}}}();function u(t,e){if(void 0===t.length)throw t.length+"/"+e;var r=function(){for(var r=0;r>>7-e%8&1)},put:function(t,e){for(var o=0;o>>e-o-1&1))},getLengthInBits:function(){return e},putBit:function(r){var o=Math.floor(e/8);t.length<=o&&t.push(0),r&&(t[o]|=128>>>e%8),e+=1}};return r},d=function(t){var e=t,r={getMode:function(){return 1},getLength:function(t){return e.length},write:function(t){for(var r=e,n=0;n+2>>8&255)+(255&n),t.put(n,13),r+=2}if(r>>8)},writeBytes:function(t,r,o){r=r||0,o=o||t.length;for(var n=0;n0&&(e+=","),e+=t[r];return e+"]"}};return e},y=function(t){var e=t,r=0,o=0,n=0,i={read:function(){for(;n<8;){if(r>=e.length){if(0==n)return-1;throw"unexpected end of file./"+n}var t=e.charAt(r);if(r+=1,"="==t)return n=0,-1;t.match(/^\s$/)||(o=o<<6|a(t.charCodeAt(0)),n+=6)}var i=o>>>n-8&255;return n-=8,i}},a=function(t){if(65<=t&&t<=90)return t-65;if(97<=t&&t<=122)return t-97+26;if(48<=t&&t<=57)return t-48+52;if(43==t)return 62;if(47==t)return 63;throw"c:"+t};return i},w=function(t,e,r){for(var o=function(t,e){var r=t,o=e,n=new Array(t*e),i={setPixel:function(t,e,o){n[e*r+t]=o},write:function(t){t.writeString("GIF87a"),t.writeShort(r),t.writeShort(o),t.writeByte(128),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(255),t.writeByte(255),t.writeByte(255),t.writeString(","),t.writeShort(0),t.writeShort(0),t.writeShort(r),t.writeShort(o),t.writeByte(0);var e=a(2);t.writeByte(2);for(var n=0;e.length-n>255;)t.writeByte(255),t.writeBytes(e,n,255),n+=255;t.writeByte(e.length-n),t.writeBytes(e,n,e.length-n),t.writeByte(0),t.writeString(";")}},a=function(t){for(var e=1<>>e!=0)throw"length over";for(;u+e>=8;)c.writeByte(255&(t<>>=8-u,h=0,u=0;h|=t<0&&c.writeByte(h)}});d.write(e,o);var f=0,p=String.fromCharCode(n[f]);for(f+=1;f=6;)i(t>>>e-6),e-=6},n.flush=function(){if(e>0&&(i(t<<6-e),t=0,e=0),r%3!=0)for(var n=3-r%3,a=0;a>6,128|63&o):o<55296||o>=57344?e.push(224|o>>12,128|o>>6&63,128|63&o):(r++,o=65536+((1023&o)<<10|1023&t.charCodeAt(r)),e.push(240|o>>18,128|o>>12&63,128|o>>6&63,128|63&o))}return e}(t)},void 0===(o="function"==typeof(r=function(){return n})?r.apply(e,[]):r)||(t.exports=o)}},e={};function r(o){var n=e[o];if(void 0!==n)return n.exports;var i=e[o]={exports:{}};return t[o](i,i.exports,r),i.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var o in e)r.o(e,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var o={};return(()=>{"use strict";r.d(o,{default:()=>et});var t=function(){return t=Object.assign||function(t){for(var e,r=1,o=arguments.length;ro||n&&n2||a&&s||c&&u)this._basicSquare({x:e,y:r,size:o,context:n,rotation:0});else{if(2===h){var l=0;return a&&c?l=Math.PI/2:c&&s?l=Math.PI:s&&u&&(l=-Math.PI/2),void this._basicCornerRounded({x:e,y:r,size:o,context:n,rotation:l})}if(1===h)return l=0,c?l=Math.PI/2:s?l=Math.PI:u&&(l=-Math.PI/2),void this._basicSideRounded({x:e,y:r,size:o,context:n,rotation:l})}else this._basicDot({x:e,y:r,size:o,context:n,rotation:0})},t.prototype._drawExtraRounded=function(t){var e=t.x,r=t.y,o=t.size,n=t.context,i=t.getNeighbor,a=i?+i(-1,0):0,s=i?+i(1,0):0,c=i?+i(0,-1):0,u=i?+i(0,1):0,h=a+s+c+u;if(0!==h)if(h>2||a&&s||c&&u)this._basicSquare({x:e,y:r,size:o,context:n,rotation:0});else{if(2===h){var l=0;return a&&c?l=Math.PI/2:c&&s?l=Math.PI:s&&u&&(l=-Math.PI/2),void this._basicCornerExtraRounded({x:e,y:r,size:o,context:n,rotation:l})}if(1===h)return l=0,c?l=Math.PI/2:s?l=Math.PI:u&&(l=-Math.PI/2),void this._basicSideRounded({x:e,y:r,size:o,context:n,rotation:l})}else this._basicDot({x:e,y:r,size:o,context:n,rotation:0})},t.prototype._drawClassy=function(t){var e=t.x,r=t.y,o=t.size,n=t.context,i=t.getNeighbor,a=i?+i(-1,0):0,s=i?+i(1,0):0,c=i?+i(0,-1):0,u=i?+i(0,1):0;0!==a+s+c+u?a||c?s||u?this._basicSquare({x:e,y:r,size:o,context:n,rotation:0}):this._basicCornerRounded({x:e,y:r,size:o,context:n,rotation:Math.PI/2}):this._basicCornerRounded({x:e,y:r,size:o,context:n,rotation:-Math.PI/2}):this._basicCornersRounded({x:e,y:r,size:o,context:n,rotation:Math.PI/2})},t.prototype._drawClassyRounded=function(t){var e=t.x,r=t.y,o=t.size,n=t.context,i=t.getNeighbor,a=i?+i(-1,0):0,s=i?+i(1,0):0,c=i?+i(0,-1):0,u=i?+i(0,1):0;0!==a+s+c+u?a||c?s||u?this._basicSquare({x:e,y:r,size:o,context:n,rotation:0}):this._basicCornerExtraRounded({x:e,y:r,size:o,context:n,rotation:Math.PI/2}):this._basicCornerExtraRounded({x:e,y:r,size:o,context:n,rotation:-Math.PI/2}):this._basicCornersRounded({x:e,y:r,size:o,context:n,rotation:Math.PI/2})},t}();const v=g,y="square",w="extra-rounded";var _=function(){return _=Object.assign||function(t){for(var e,r=1,o=arguments.length;r0&&n[n.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!n||i[1]>n[0]&&i[1]=(e-n.hideXDots)/2&&t<(e+n.hideXDots)/2&&r>=(e-n.hideYDots)/2&&r<(e+n.hideYDots)/2||(null===(o=O[t])||void 0===o?void 0:o[r])||(null===(i=O[t-e+7])||void 0===i?void 0:i[r])||(null===(a=O[t])||void 0===a?void 0:a[r-e+7])||(null===(s=D[t])||void 0===s?void 0:s[r])||(null===(c=D[t-e+7])||void 0===c?void 0:c[r])||(null===(u=D[t])||void 0===u?void 0:u[r-e+7]))})),this.drawCorners(),this._options.image&&this.drawImage({width:n.width,height:n.height,count:e,dotSize:o}),[2]}}))},new((o=void 0)||(o=Promise))((function(t,i){function a(t){try{c(n.next(t))}catch(t){i(t)}}function s(t){try{c(n.throw(t))}catch(t){i(t)}}function c(e){var r;e.done?t(e.value):(r=e.value,r instanceof o?r:new o((function(t){t(r)}))).then(a,s)}c((n=n.apply(e,r||[])).next())}));var e,r,o,n},t.prototype.drawBackground=function(){var t=this.context,e=this._options;if(t){if(e.backgroundOptions.gradient){var r=e.backgroundOptions.gradient,o=this._createGradient({context:t,options:r,additionalRotation:0,x:0,y:0,size:this._canvas.width>this._canvas.height?this._canvas.width:this._canvas.height});r.colorStops.forEach((function(t){var e=t.offset,r=t.color;o.addColorStop(e,r)})),t.fillStyle=o}else e.backgroundOptions.color&&(t.fillStyle=e.backgroundOptions.color);t.fillRect(0,0,this._canvas.width,this._canvas.height)}},t.prototype.drawDots=function(t){var e=this;if(!this._qr)throw"QR code is not defined";var r=this.context;if(!r)throw"QR code is not defined";var o=this._options,n=this._qr.getModuleCount();if(n>o.width||n>o.height)throw"The canvas is too small.";var i=Math.min(o.width,o.height)-2*o.margin,a=Math.floor(i/n),s=Math.floor((o.width-n*a)/2),c=Math.floor((o.height-n*a)/2),u=new v({context:r,type:o.dotsOptions.type});r.beginPath();for(var h=function(r){for(var o=function(o){if(t&&!t(r,o))return"continue";if(!l._qr.isDark(r,o))return"continue";var i=l._options.useLegacyDotRotation?s+r*a:c+o*a,h=l._options.useLegacyDotRotation?c+o*a:s+r*a;u.draw(i,h,a,(function(i,a){return e._options.useLegacyDotRotation?!(r+i<0||o+a<0||r+i>=n||o+a>=n)&&!(t&&!t(r+i,o+a))&&!!e._qr&&e._qr.isDark(r+i,o+a):!(o+i<0||r+a<0||o+i>=n||r+a>=n)&&!(t&&!t(o+i,r+a))&&!!e._qr&&e._qr.isDark(r+a,o+i)}))},i=0;i=0&&u<=.25*Math.PI||u>1.75*Math.PI&&u<=2*Math.PI?(h-=s/2,l-=s/2*Math.tan(c),d+=s/2,f+=s/2*Math.tan(c)):u>.25*Math.PI&&u<=.75*Math.PI?(l-=s/2,h-=s/2/Math.tan(c),f+=s/2,d+=s/2/Math.tan(c)):u>.75*Math.PI&&u<=1.25*Math.PI?(h+=s/2,l+=s/2*Math.tan(c),d-=s/2,f-=s/2*Math.tan(c)):u>1.25*Math.PI&&u<=1.75*Math.PI&&(l+=s/2,h+=s/2/Math.tan(c),f-=s/2,d-=s/2/Math.tan(c)),e=r.createLinearGradient(Math.round(h),Math.round(l),Math.round(d),Math.round(f))}return e},t}();var A=function(){return A=Object.assign||function(t){for(var e,r=1,o=arguments.length;r2||i&&a||s&&c)this._basicSquare({x:e,y:r,size:o,rotation:0});else{if(2===u){var h=0;return i&&s?h=Math.PI/2:s&&a?h=Math.PI:a&&c&&(h=-Math.PI/2),void this._basicCornerRounded({x:e,y:r,size:o,rotation:h})}if(1===u)return h=0,s?h=Math.PI/2:a?h=Math.PI:c&&(h=-Math.PI/2),void this._basicSideRounded({x:e,y:r,size:o,rotation:h})}else this._basicDot({x:e,y:r,size:o,rotation:0})},t.prototype._drawExtraRounded=function(t){var e=t.x,r=t.y,o=t.size,n=t.getNeighbor,i=n?+n(-1,0):0,a=n?+n(1,0):0,s=n?+n(0,-1):0,c=n?+n(0,1):0,u=i+a+s+c;if(0!==u)if(u>2||i&&a||s&&c)this._basicSquare({x:e,y:r,size:o,rotation:0});else{if(2===u){var h=0;return i&&s?h=Math.PI/2:s&&a?h=Math.PI:a&&c&&(h=-Math.PI/2),void this._basicCornerExtraRounded({x:e,y:r,size:o,rotation:h})}if(1===u)return h=0,s?h=Math.PI/2:a?h=Math.PI:c&&(h=-Math.PI/2),void this._basicSideRounded({x:e,y:r,size:o,rotation:h})}else this._basicDot({x:e,y:r,size:o,rotation:0})},t.prototype._drawClassy=function(t){var e=t.x,r=t.y,o=t.size,n=t.getNeighbor,i=n?+n(-1,0):0,a=n?+n(1,0):0,s=n?+n(0,-1):0,c=n?+n(0,1):0;0!==i+a+s+c?i||s?a||c?this._basicSquare({x:e,y:r,size:o,rotation:0}):this._basicCornerRounded({x:e,y:r,size:o,rotation:Math.PI/2}):this._basicCornerRounded({x:e,y:r,size:o,rotation:-Math.PI/2}):this._basicCornersRounded({x:e,y:r,size:o,rotation:Math.PI/2})},t.prototype._drawClassyRounded=function(t){var e=t.x,r=t.y,o=t.size,n=t.getNeighbor,i=n?+n(-1,0):0,a=n?+n(1,0):0,s=n?+n(0,-1):0,c=n?+n(0,1):0;0!==i+a+s+c?i||s?a||c?this._basicSquare({x:e,y:r,size:o,rotation:0}):this._basicCornerExtraRounded({x:e,y:r,size:o,rotation:Math.PI/2}):this._basicCornerExtraRounded({x:e,y:r,size:o,rotation:-Math.PI/2}):this._basicCornersRounded({x:e,y:r,size:o,rotation:Math.PI/2})},t}();const k=I;var q=function(){return q=Object.assign||function(t){for(var e,r=1,o=arguments.length;r0&&n[n.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!n||i[1]>n[0]&&i[1]=(e-n.hideXDots)/2&&t<(e+n.hideXDots)/2&&r>=(e-n.hideYDots)/2&&r<(e+n.hideYDots)/2||(null===(o=F[t])||void 0===o?void 0:o[r])||(null===(i=F[t-e+7])||void 0===i?void 0:i[r])||(null===(a=F[t])||void 0===a?void 0:a[r-e+7])||(null===(s=Q[t])||void 0===s?void 0:s[r])||(null===(c=Q[t-e+7])||void 0===c?void 0:c[r])||(null===(u=Q[t])||void 0===u?void 0:u[r-e+7]))})),this.drawCorners(),this._options.image?[4,this.drawImage({width:n.width,height:n.height,count:e,dotSize:o})]:[3,4];case 3:f.sent(),f.label=4;case 4:return[2]}}))}))},t.prototype.drawBackground=function(){var t,e,r,o=this._element,n=this._options;if(o){var i=null===(t=n.backgroundOptions)||void 0===t?void 0:t.gradient,a=null===(e=n.backgroundOptions)||void 0===e?void 0:e.color;i?this._createColor({options:i,color:a,additionalRotation:0,x:0,y:0,height:n.height,width:n.width,name:"background-color"}):(null===(r=n.backgroundOptions)||void 0===r?void 0:r.color)&&this._createStyle({color:a,name:"background-color"})}},t.prototype.drawDots=function(t){var e,r,o,n=this;if(!this._qr)throw"QR code is not defined";var i=this._options,a=this._qr.getModuleCount();if(a>i.width||a>i.height)throw"The canvas is too small.";var s=Math.min(i.width,i.height)-2*i.margin,c=Math.floor(s/a),u=Math.floor((i.width-a*c)/2),h=Math.floor((i.height-a*c)/2),l=new k({svg:this._element,type:i.dotsOptions.type});(null===(e=i.dotsOptions)||void 0===e?void 0:e.gradient)?(this._dotsClipPath=document.createElementNS("http://www.w3.org/2000/svg","clipPath"),this._dotsClipPath.setAttribute("id","clip-path-dot-color"),this._defs.appendChild(this._dotsClipPath),this._createColor({options:null===(r=i.dotsOptions)||void 0===r?void 0:r.gradient,color:i.dotsOptions.color,additionalRotation:0,x:u,y:h,height:a*c,width:a*c,name:"dot-color"})):i.dotsOptions.color&&(this._dots=document.createElementNS("http://www.w3.org/2000/svg","g"),this._dots.setAttribute("class","dot-color"),this._element.appendChild(this._dots),this._createStyle({color:i.dotsOptions.color,name:"dot-color"}));for(var d=function(e){for(var r=function(r){if(t&&!t(e,r))return"continue";if(!(null===(o=f._qr)||void 0===o?void 0:o.isDark(e,r)))return"continue";var i=f._options.useLegacyDotRotation?u+e*c:h+r*c,s=f._options.useLegacyDotRotation?h+r*c:u+e*c;l.draw(i,s,c,(function(o,i){return n._options.useLegacyDotRotation?!(e+o<0||r+i<0||e+o>=a||r+i>=a)&&!(t&&!t(e+o,r+i))&&!!n._qr&&n._qr.isDark(e+o,r+i):!(r+o<0||e+i<0||r+o>=a||e+i>=a)&&!(t&&!t(r+o,e+i))&&!!n._qr&&n._qr.isDark(e+i,r+o)})),l._element&&f._dotsClipPath?f._dotsClipPath.appendChild(l._element):l._element&&f._dots&&f._dots.appendChild(l._element)},i=0;ia?s:a,h=document.createElementNS("http://www.w3.org/2000/svg","rect");if(h.setAttribute("x",String(n)),h.setAttribute("y",String(i)),h.setAttribute("height",String(a)),h.setAttribute("width",String(s)),h.setAttribute("clip-path","url('#clip-path-".concat(c,"')")),e){var l;if(e.type===P)(l=document.createElementNS("http://www.w3.org/2000/svg","radialGradient")).setAttribute("id",c),l.setAttribute("gradientUnits","userSpaceOnUse"),l.setAttribute("fx",String(n+s/2)),l.setAttribute("fy",String(i+a/2)),l.setAttribute("cx",String(n+s/2)),l.setAttribute("cy",String(i+a/2)),l.setAttribute("r",String(u/2));else{var d=((e.rotation||0)+o)%(2*Math.PI),f=(d+2*Math.PI)%(2*Math.PI),p=n+s/2,g=i+a/2,v=n+s/2,y=i+a/2;f>=0&&f<=.25*Math.PI||f>1.75*Math.PI&&f<=2*Math.PI?(p-=s/2,g-=a/2*Math.tan(d),v+=s/2,y+=a/2*Math.tan(d)):f>.25*Math.PI&&f<=.75*Math.PI?(g-=a/2,p-=s/2/Math.tan(d),y+=a/2,v+=s/2/Math.tan(d)):f>.75*Math.PI&&f<=1.25*Math.PI?(p+=s/2,g+=a/2*Math.tan(d),v-=s/2,y-=a/2*Math.tan(d)):f>1.25*Math.PI&&f<=1.75*Math.PI&&(g+=a/2,p+=s/2/Math.tan(d),y-=a/2,v-=s/2/Math.tan(d)),(l=document.createElementNS("http://www.w3.org/2000/svg","linearGradient")).setAttribute("id",c),l.setAttribute("gradientUnits","userSpaceOnUse"),l.setAttribute("x1",String(Math.round(p))),l.setAttribute("y1",String(Math.round(g))),l.setAttribute("x2",String(Math.round(v))),l.setAttribute("y2",String(Math.round(y)))}e.colorStops.forEach((function(t){var e=t.offset,r=t.color,o=document.createElementNS("http://www.w3.org/2000/svg","stop");o.setAttribute("offset","".concat(100*e,"%")),o.setAttribute("stop-color",r),l.appendChild(o)})),h.setAttribute("fill","url('#".concat(c,"')")),this._defs.appendChild(l)}else r&&h.setAttribute("fill",r);this._element.appendChild(h)},t.prototype._createStyle=function(t){var e=t.color,r=t.name;this._style.innerHTML+=".".concat(r,"{ fill: ").concat(e,"; }")},t}(),G="canvas";for(var U={},X=0;X<=40;X++)U[X]=X;const Y={type:G,width:300,height:300,data:"",margin:0,qrOptions:{typeNumber:U[0],mode:void 0,errorCorrectionLevel:"Q"},imageOptions:{hideBackgroundDots:!0,imageSize:.4,crossOrigin:"anonymous",margin:0},dotsOptions:{type:"square",color:"#000"},backgroundOptions:{color:"#fff"},useLegacyDotRotation:!1};var $=function(){return $=Object.assign||function(t){for(var e,r=1,o=arguments.length;rMath.min(e.width,e.height)&&(e.margin=Math.min(e.width,e.height)),e.dotsOptions=$({},e.dotsOptions),e.dotsOptions.gradient&&(e.dotsOptions.gradient=W(e.dotsOptions.gradient)),e.cornersSquareOptions&&(e.cornersSquareOptions=$({},e.cornersSquareOptions),e.cornersSquareOptions.gradient&&(e.cornersSquareOptions.gradient=W(e.cornersSquareOptions.gradient))),e.cornersDotOptions&&(e.cornersDotOptions=$({},e.cornersDotOptions),e.cornersDotOptions.gradient&&(e.cornersDotOptions.gradient=W(e.cornersDotOptions.gradient))),e.backgroundOptions&&(e.backgroundOptions=$({},e.backgroundOptions),e.backgroundOptions.gradient&&(e.backgroundOptions.gradient=W(e.backgroundOptions.gradient))),e}var J=r(192),K=r.n(J),V=function(t,e,r,o){return new(r||(r=Promise))((function(n,i){function a(t){try{c(o.next(t))}catch(t){i(t)}}function s(t){try{c(o.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?n(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,s)}c((o=o.apply(t,e||[])).next())}))},tt=function(t,e){var r,o,n,i,a={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,o&&(n=2&i[0]?o.return:i[0]?o.throw||((n=o.return)&&n.call(o),0):o.next)&&!(n=n.call(o,i[1])).done)return n;switch(o=0,n&&(i=[2&i[0],n.value]),i[0]){case 0:case 1:n=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,o=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((n=(n=a.trys).length>0&&n[n.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!n||i[1]>n[0]&&i[1]\r\n'+o],{type:"image/svg+xml"})]):[2,new Promise((function(r){return e.getCanvas().toBlob(r,"image/".concat(t),1)}))]}}))}))},t.prototype.download=function(t){return V(this,void 0,void 0,(function(){var e,r,o,n,i;return tt(this,(function(s){switch(s.label){case 0:if(!this._qr)throw"QR code is empty";return e="png",r="qr","string"==typeof t?(e=t,console.warn("Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument")):"object"==typeof t&&null!==t&&(t.name&&(r=t.name),t.extension&&(e=t.extension)),[4,this._getQRStylingElement(e)];case 1:return o=s.sent(),"svg"===e.toLowerCase()?(n=new XMLSerializer,i='\r\n'+(i=n.serializeToString(o.getElement())),a("data:image/svg+xml;charset=utf-8,"+encodeURIComponent(i),"".concat(r,".svg"))):a(o.getCanvas().toDataURL("image/".concat(e)),"".concat(r,".").concat(e)),[2]}}))}))},t}()})(),o.default})())); //# sourceMappingURL=qr-code-styling.js.map \ No newline at end of file diff --git a/lib/qr-code-styling.js.map b/lib/qr-code-styling.js.map index 98c5fadc..7982d997 100644 --- a/lib/qr-code-styling.js.map +++ b/lib/qr-code-styling.js.map @@ -1 +1 @@ -{"version":3,"file":"qr-code-styling.js","mappings":"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AAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAGpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAA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","sources":["webpack://QRCodeStyling/webpack/universalModuleDefinition","webpack://QRCodeStyling/./node_modules/qrcode-generator/qrcode.js","webpack://QRCodeStyling/webpack/bootstrap","webpack://QRCodeStyling/webpack/runtime/compat get default export","webpack://QRCodeStyling/webpack/runtime/define property getters","webpack://QRCodeStyling/webpack/runtime/hasOwnProperty shorthand","webpack://QRCodeStyling/./src/tools/merge.ts","webpack://QRCodeStyling/./src/tools/downloadURI.ts","webpack://QRCodeStyling/./src/tools/calculateImageSize.ts","webpack://QRCodeStyling/./src/constants/errorCorrectionPercents.ts","webpack://QRCodeStyling/./src/constants/dotTypes.ts","webpack://QRCodeStyling/./src/figures/dot/canvas/QRDot.ts","webpack://QRCodeStyling/./src/constants/cornerSquareTypes.ts","webpack://QRCodeStyling/./src/figures/cornerSquare/canvas/QRCornerSquare.ts","webpack://QRCodeStyling/./src/constants/cornerDotTypes.ts","webpack://QRCodeStyling/./src/figures/cornerDot/canvas/QRCornerDot.ts","webpack://QRCodeStyling/./src/constants/gradientTypes.ts","webpack://QRCodeStyling/./src/core/QRCanvas.ts","webpack://QRCodeStyling/./src/figures/dot/svg/QRDot.ts","webpack://QRCodeStyling/./src/figures/cornerSquare/svg/QRCornerSquare.ts","webpack://QRCodeStyling/./src/figures/cornerDot/svg/QRCornerDot.ts","webpack://QRCodeStyling/./src/core/QRSVG.ts","webpack://QRCodeStyling/./src/constants/drawTypes.ts","webpack://QRCodeStyling/./src/constants/qrTypes.ts","webpack://QRCodeStyling/./src/core/QROptions.ts","webpack://QRCodeStyling/./src/constants/errorCorrectionLevels.ts","webpack://QRCodeStyling/./src/tools/sanitizeOptions.ts","webpack://QRCodeStyling/./src/index.ts","webpack://QRCodeStyling/./src/core/QRCodeStyling.ts","webpack://QRCodeStyling/./src/tools/getMode.ts","webpack://QRCodeStyling/./src/constants/modes.ts"],"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[\"QRCodeStyling\"] = factory();\n\telse\n\t\troot[\"QRCodeStyling\"] = factory();\n})(self, () => {\nreturn ","//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\nvar qrcode = function() {\n\n //---------------------------------------------------------------------\n // qrcode\n //---------------------------------------------------------------------\n\n /**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\n var qrcode = function(typeNumber, errorCorrectionLevel) {\n\n var PAD0 = 0xEC;\n var PAD1 = 0x11;\n\n var _typeNumber = typeNumber;\n var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n var _modules = null;\n var _moduleCount = 0;\n var _dataCache = null;\n var _dataList = [];\n\n var _this = {};\n\n var makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n var modules = new Array(moduleCount);\n for (var row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (var col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n var setupPositionProbePattern = function(row, col) {\n\n for (var r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (var c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n var getBestMaskPattern = function() {\n\n var minLostPoint = 0;\n var pattern = 0;\n\n for (var i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n var lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n var setupTimingPattern = function() {\n\n for (var r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (var c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n var setupPositionAdjustPattern = function() {\n\n var pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (var i = 0; i < pos.length; i += 1) {\n\n for (var j = 0; j < pos.length; j += 1) {\n\n var row = pos[i];\n var col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (var r = -2; r <= 2; r += 1) {\n\n for (var c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n var setupTypeNumber = function(test) {\n\n var bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n var setupTypeInfo = function(test, maskPattern) {\n\n var data = (_errorCorrectionLevel << 3) | maskPattern;\n var bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n var mapData = function(data, maskPattern) {\n\n var inc = -1;\n var row = _moduleCount - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n var maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (var col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (var c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n var mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n var createBytes = function(buffer, rsBlocks) {\n\n var offset = 0;\n\n var maxDcCount = 0;\n var maxEcCount = 0;\n\n var dcdata = new Array(rsBlocks.length);\n var ecdata = new Array(rsBlocks.length);\n\n for (var r = 0; r < rsBlocks.length; r += 1) {\n\n var dcCount = rsBlocks[r].dataCount;\n var ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (var i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n var modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (var i = 0; i < ecdata[r].length; i += 1) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n var totalCodeCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n var data = new Array(totalCodeCount);\n var index = 0;\n\n for (var i = 0; i < maxDcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n\n for (var i = 0; i < maxEcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n\n return data;\n };\n\n var createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < dataList.length; i += 1) {\n var data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n var newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n var typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < _dataList.length; i++) {\n var data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var qrHtml = '';\n\n qrHtml += '' +\n escapeXml(title.text) + '' : '';\n qrSvg += (alt.text) ? '' +\n escapeXml(alt.text) + '' : '';\n qrSvg += '';\n qrSvg += '': escaped += '>'; break;\n case '&': escaped += '&'; break;\n case '\"': escaped += '"'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n var _createHalfASCII = function(margin) {\n var cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r1, r2, p;\n\n var blocks = {\n '██': '█',\n '█ ': '▀',\n ' █': '▄',\n ' ': ' '\n };\n\n var blocksLastLineNoMargin = {\n '██': '▀',\n '█ ': '▀',\n ' █': ' ',\n ' ': ' '\n };\n\n var ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '█';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '█';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r, p;\n\n var white = Array(cellSize+1).join('██');\n var black = Array(cellSize+1).join(' ');\n\n var ascii = '';\n var line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n var length = _this.getModuleCount();\n for (var row = 0; row < length; row++) {\n for (var col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrcode.stringToBytes\n //---------------------------------------------------------------------\n\n qrcode.stringToBytesFuncs = {\n 'default' : function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n\n qrcode.stringToBytes = qrcode.stringToBytesFuncs['default'];\n\n //---------------------------------------------------------------------\n // qrcode.createStringToBytes\n //---------------------------------------------------------------------\n\n /**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\n qrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n var unicodeMap = function() {\n\n var bin = base64DecodeInputStream(unicodeData);\n var read = function() {\n var b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n var count = 0;\n var unicodeMap = {};\n while (true) {\n var b0 = bin.read();\n if (b0 == -1) break;\n var b1 = read();\n var b2 = read();\n var b3 = read();\n var k = String.fromCharCode( (b0 << 8) | b1);\n var v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n var unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n var b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n };\n\n //---------------------------------------------------------------------\n // QRMode\n //---------------------------------------------------------------------\n\n var QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n };\n\n //---------------------------------------------------------------------\n // QRErrorCorrectionLevel\n //---------------------------------------------------------------------\n\n var QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n };\n\n //---------------------------------------------------------------------\n // QRMaskPattern\n //---------------------------------------------------------------------\n\n var QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n };\n\n //---------------------------------------------------------------------\n // QRUtil\n //---------------------------------------------------------------------\n\n var QRUtil = function() {\n\n var PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n var _this = {};\n\n var getBCHDigit = function(data) {\n var digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n var d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n var d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n var a = qrPolynomial([1], 0);\n for (var i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n var moduleCount = qrcode.getModuleCount();\n\n var lostPoint = 0;\n\n // LEVEL1\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount; col += 1) {\n\n var sameCount = 0;\n var dark = qrcode.isDark(row, col);\n\n for (var r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (var c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (var row = 0; row < moduleCount - 1; row += 1) {\n for (var col = 0; col < moduleCount - 1; col += 1) {\n var count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount - 6; col += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row, col + 1)\n && qrcode.isDark(row, col + 2)\n && qrcode.isDark(row, col + 3)\n && qrcode.isDark(row, col + 4)\n && !qrcode.isDark(row, col + 5)\n && qrcode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount - 6; row += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row + 1, col)\n && qrcode.isDark(row + 2, col)\n && qrcode.isDark(row + 3, col)\n && qrcode.isDark(row + 4, col)\n && !qrcode.isDark(row + 5, col)\n && qrcode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n\n var darkCount = 0;\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // QRMath\n //---------------------------------------------------------------------\n\n var QRMath = function() {\n\n var EXP_TABLE = new Array(256);\n var LOG_TABLE = new Array(256);\n\n // initialize tables\n for (var i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (var i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (var i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n var _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrPolynomial\n //---------------------------------------------------------------------\n\n function qrPolynomial(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n var _num = function() {\n var offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n var _num = new Array(num.length - offset + shift);\n for (var i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n var _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n var num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (var i = 0; i < _this.getLength(); i += 1) {\n for (var j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n }\n }\n\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n var num = new Array(_this.getLength() );\n for (var i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (var i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // QRRSBlock\n //---------------------------------------------------------------------\n\n var QRRSBlock = function() {\n\n var RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n\n var qrRSBlock = function(totalCount, dataCount) {\n var _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n var _this = {};\n\n var getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n var length = rsBlock.length / 3;\n\n var list = [];\n\n for (var i = 0; i < length; i += 1) {\n\n var count = rsBlock[i * 3 + 0];\n var totalCount = rsBlock[i * 3 + 1];\n var dataCount = rsBlock[i * 3 + 2];\n\n for (var j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrBitBuffer\n //---------------------------------------------------------------------\n\n var qrBitBuffer = function() {\n\n var _buffer = [];\n var _length = 0;\n\n var _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n var bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (var i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n var bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrNumber\n //---------------------------------------------------------------------\n\n var qrNumber = function(data) {\n\n var _mode = QRMode.MODE_NUMBER;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var data = _data;\n\n var i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n var strToNum = function(s) {\n var num = 0;\n for (var i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n var chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrAlphaNum\n //---------------------------------------------------------------------\n\n var qrAlphaNum = function(data) {\n\n var _mode = QRMode.MODE_ALPHA_NUM;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var s = _data;\n\n var i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n var getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case ' ' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qr8BitByte\n //---------------------------------------------------------------------\n\n var qr8BitByte = function(data) {\n\n var _mode = QRMode.MODE_8BIT_BYTE;\n var _data = data;\n var _bytes = qrcode.stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (var i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrKanji\n //---------------------------------------------------------------------\n\n var qrKanji = function(data) {\n\n var _mode = QRMode.MODE_KANJI;\n var _data = data;\n\n var stringToBytes = qrcode.stringToBytesFuncs['SJIS'];\n if (!stringToBytes) {\n throw 'sjis not supported.';\n }\n !function(c, code) {\n // self test for sjis support.\n var test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n var _bytes = stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n var data = _bytes;\n\n var i = 0;\n\n while (i + 1 < data.length) {\n\n var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n };\n\n //=====================================================================\n // GIF Support etc.\n //\n\n //---------------------------------------------------------------------\n // byteArrayOutputStream\n //---------------------------------------------------------------------\n\n var byteArrayOutputStream = function() {\n\n var _bytes = [];\n\n var _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (var i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (var i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n var s = '';\n s += '[';\n for (var i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64EncodeOutputStream\n //---------------------------------------------------------------------\n\n var base64EncodeOutputStream = function() {\n\n var _buffer = 0;\n var _buflen = 0;\n var _length = 0;\n var _base64 = '';\n\n var _this = {};\n\n var writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n var encode = function(n) {\n if (n < 0) {\n // error.\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n }\n throw 'n:' + n;\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n var padlen = 3 - _length % 3;\n for (var i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64DecodeInputStream\n //---------------------------------------------------------------------\n\n var base64DecodeInputStream = function(str) {\n\n var _str = str;\n var _pos = 0;\n var _buffer = 0;\n var _buflen = 0;\n\n var _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n var c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n var n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n var decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // gifImage (B/W)\n //---------------------------------------------------------------------\n\n var gifImage = function(width, height) {\n\n var _width = width;\n var _height = height;\n var _data = new Array(width * height);\n\n var _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n var lzwMinCodeSize = 2;\n var raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n var offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n var bitOutputStream = function(out) {\n\n var _out = out;\n var _bitLength = 0;\n var _bitBuffer = 0;\n\n var _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n var getLZWRaster = function(lzwMinCodeSize) {\n\n var clearCode = 1 << lzwMinCodeSize;\n var endCode = (1 << lzwMinCodeSize) + 1;\n var bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n var table = lzwTable();\n\n for (var i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n var byteOut = byteArrayOutputStream();\n var bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n var dataIndex = 0;\n\n var s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n var c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n var lzwTable = function() {\n\n var _map = {};\n var _size = 0;\n\n var _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n };\n\n var createDataURL = function(width, height, getPixel) {\n var gif = gifImage(width, height);\n for (var y = 0; y < height; y += 1) {\n for (var x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n var b = byteArrayOutputStream();\n gif.write(b);\n\n var base64 = base64EncodeOutputStream();\n var bytes = b.toByteArray();\n for (var i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n };\n\n //---------------------------------------------------------------------\n // returns qrcode function.\n\n return qrcode;\n}();\n\n// multibyte support\n!function() {\n\n qrcode.stringToBytesFuncs['UTF-8'] = function(s) {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n var utf8 = [];\n for (var i=0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n if (charcode < 0x80) utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6),\n 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n // surrogate pair\n else {\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff)<<10)\n | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >>18),\n 0x80 | ((charcode>>12) & 0x3f),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n };\n\n}();\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n }\n}(function () {\n return qrcode;\n}));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import { UnknownObject } from \"../types\";\r\n\r\nconst isObject = (obj: Record): boolean => !!obj && typeof obj === \"object\" && !Array.isArray(obj);\r\n\r\nexport default function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\r\n if (!sources.length) return target;\r\n const source = sources.shift();\r\n if (source === undefined || !isObject(target) || !isObject(source)) return target;\r\n target = { ...target };\r\n Object.keys(source).forEach((key: string): void => {\r\n const targetValue = target[key];\r\n const sourceValue = source[key];\r\n\r\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\r\n target[key] = sourceValue;\r\n } else if (isObject(targetValue) && isObject(sourceValue)) {\r\n target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue);\r\n } else {\r\n target[key] = sourceValue;\r\n }\r\n });\r\n\r\n return mergeDeep(target, ...sources);\r\n}\r\n","export default function downloadURI(uri: string, name: string): void {\r\n const link = document.createElement(\"a\");\r\n link.download = name;\r\n link.href = uri;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n}\r\n","interface ImageSizeOptions {\r\n originalHeight: number;\r\n originalWidth: number;\r\n maxHiddenDots: number;\r\n maxHiddenAxisDots?: number;\r\n dotSize: number;\r\n}\r\n\r\ninterface ImageSizeResult {\r\n height: number;\r\n width: number;\r\n hideYDots: number;\r\n hideXDots: number;\r\n}\r\n\r\nexport default function calculateImageSize({\r\n originalHeight,\r\n originalWidth,\r\n maxHiddenDots,\r\n maxHiddenAxisDots,\r\n dotSize\r\n}: ImageSizeOptions): ImageSizeResult {\r\n const hideDots = { x: 0, y: 0 };\r\n const imageSize = { x: 0, y: 0 };\r\n\r\n if (originalHeight <= 0 || originalWidth <= 0 || maxHiddenDots <= 0 || dotSize <= 0) {\r\n return {\r\n height: 0,\r\n width: 0,\r\n hideYDots: 0,\r\n hideXDots: 0\r\n };\r\n }\r\n\r\n const k = originalHeight / originalWidth;\r\n\r\n //Getting the maximum possible axis hidden dots\r\n hideDots.x = Math.floor(Math.sqrt(maxHiddenDots / k));\r\n //The count of hidden dot's can't be less than 1\r\n if (hideDots.x <= 0) hideDots.x = 1;\r\n //Check the limit of the maximum allowed axis hidden dots\r\n if (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.x) hideDots.x = maxHiddenAxisDots;\r\n //The count of dots should be odd\r\n if (hideDots.x % 2 === 0) hideDots.x--;\r\n imageSize.x = hideDots.x * dotSize;\r\n //Calculate opposite axis hidden dots based on axis value.\r\n //The value will be odd.\r\n //We use ceil to prevent dots covering by the image.\r\n hideDots.y = 1 + 2 * Math.ceil((hideDots.x * k - 1) / 2);\r\n imageSize.y = Math.round(imageSize.x * k);\r\n //If the result dots count is bigger than max - then decrease size and calculate again\r\n if (hideDots.y * hideDots.x > maxHiddenDots || (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.y)) {\r\n if (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.y) {\r\n hideDots.y = maxHiddenAxisDots;\r\n if (hideDots.y % 2 === 0) hideDots.x--;\r\n } else {\r\n hideDots.y -= 2;\r\n }\r\n imageSize.y = hideDots.y * dotSize;\r\n hideDots.x = 1 + 2 * Math.ceil((hideDots.y / k - 1) / 2);\r\n imageSize.x = Math.round(imageSize.y / k);\r\n }\r\n\r\n return {\r\n height: imageSize.y,\r\n width: imageSize.x,\r\n hideYDots: hideDots.x,\r\n hideXDots: hideDots.y\r\n };\r\n}\r\n","interface ErrorCorrectionPercents {\r\n [key: string]: number;\r\n}\r\n\r\nexport default {\r\n L: 0.07,\r\n M: 0.15,\r\n Q: 0.25,\r\n H: 0.3\r\n} as ErrorCorrectionPercents;\r\n","import { DotTypes } from \"../types\";\r\n\r\nexport default {\r\n dots: \"dots\",\r\n rounded: \"rounded\",\r\n classy: \"classy\",\r\n classyRounded: \"classy-rounded\",\r\n square: \"square\",\r\n extraRounded: \"extra-rounded\"\r\n} as DotTypes;\r\n","import dotTypes from \"../../../constants/dotTypes\";\r\nimport {\r\n DotType,\r\n GetNeighbor,\r\n RotateFigureArgsCanvas,\r\n BasicFigureDrawArgsCanvas,\r\n DrawArgsCanvas\r\n} from \"../../../types\";\r\n\r\nexport default class QRDot {\r\n _context: CanvasRenderingContext2D;\r\n _type: DotType;\r\n\r\n constructor({ context, type }: { context: CanvasRenderingContext2D; type: DotType }) {\r\n this._context = context;\r\n this._type = type;\r\n }\r\n\r\n draw(x: number, y: number, size: number, getNeighbor: GetNeighbor): void {\r\n const context = this._context;\r\n const type = this._type;\r\n let drawFunction;\r\n\r\n switch (type) {\r\n case dotTypes.dots:\r\n drawFunction = this._drawDot;\r\n break;\r\n case dotTypes.classy:\r\n drawFunction = this._drawClassy;\r\n break;\r\n case dotTypes.classyRounded:\r\n drawFunction = this._drawClassyRounded;\r\n break;\r\n case dotTypes.rounded:\r\n drawFunction = this._drawRounded;\r\n break;\r\n case dotTypes.extraRounded:\r\n drawFunction = this._drawExtraRounded;\r\n break;\r\n case dotTypes.square:\r\n default:\r\n drawFunction = this._drawSquare;\r\n }\r\n\r\n drawFunction.call(this, { x, y, size, context, getNeighbor });\r\n }\r\n\r\n _rotateFigure({ x, y, size, context, rotation = 0, draw }: RotateFigureArgsCanvas): void {\r\n const cx = x + size / 2;\r\n const cy = y + size / 2;\r\n\r\n context.translate(cx, cy);\r\n rotation && context.rotate(rotation);\r\n draw();\r\n context.closePath();\r\n rotation && context.rotate(-rotation);\r\n context.translate(-cx, -cy);\r\n }\r\n\r\n _basicDot(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.arc(0, 0, size / 2, 0, Math.PI * 2);\r\n }\r\n });\r\n }\r\n\r\n _basicSquare(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.rect(-size / 2, -size / 2, size, size);\r\n }\r\n });\r\n }\r\n\r\n //if rotation === 0 - right side is rounded\r\n _basicSideRounded(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.arc(0, 0, size / 2, -Math.PI / 2, Math.PI / 2);\r\n context.lineTo(-size / 2, size / 2);\r\n context.lineTo(-size / 2, -size / 2);\r\n context.lineTo(0, -size / 2);\r\n }\r\n });\r\n }\r\n\r\n //if rotation === 0 - top right corner is rounded\r\n _basicCornerRounded(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.arc(0, 0, size / 2, -Math.PI / 2, 0);\r\n context.lineTo(size / 2, size / 2);\r\n context.lineTo(-size / 2, size / 2);\r\n context.lineTo(-size / 2, -size / 2);\r\n context.lineTo(0, -size / 2);\r\n }\r\n });\r\n }\r\n\r\n //if rotation === 0 - top right corner is rounded\r\n _basicCornerExtraRounded(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.arc(-size / 2, size / 2, size, -Math.PI / 2, 0);\r\n context.lineTo(-size / 2, size / 2);\r\n context.lineTo(-size / 2, -size / 2);\r\n }\r\n });\r\n }\r\n\r\n _basicCornersRounded(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.arc(0, 0, size / 2, -Math.PI / 2, 0);\r\n context.lineTo(size / 2, size / 2);\r\n context.lineTo(0, size / 2);\r\n context.arc(0, 0, size / 2, Math.PI / 2, Math.PI);\r\n context.lineTo(-size / 2, -size / 2);\r\n context.lineTo(0, -size / 2);\r\n }\r\n });\r\n }\r\n\r\n _basicCornersExtraRounded(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.arc(-size / 2, size / 2, size, -Math.PI / 2, 0);\r\n context.arc(size / 2, -size / 2, size, Math.PI / 2, Math.PI);\r\n }\r\n });\r\n }\r\n\r\n _drawDot({ x, y, size, context }: DrawArgsCanvas): void {\r\n this._basicDot({ x, y, size, context, rotation: 0 });\r\n }\r\n\r\n _drawSquare({ x, y, size, context }: DrawArgsCanvas): void {\r\n this._basicSquare({ x, y, size, context, rotation: 0 });\r\n }\r\n\r\n _drawRounded({ x, y, size, context, getNeighbor }: DrawArgsCanvas): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n if (neighborsCount === 0) {\r\n this._basicDot({ x, y, size, context, rotation: 0 });\r\n return;\r\n }\r\n\r\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n this._basicSquare({ x, y, size, context, rotation: 0 });\r\n return;\r\n }\r\n\r\n if (neighborsCount === 2) {\r\n let rotation = 0;\r\n\r\n if (leftNeighbor && topNeighbor) {\r\n rotation = Math.PI / 2;\r\n } else if (topNeighbor && rightNeighbor) {\r\n rotation = Math.PI;\r\n } else if (rightNeighbor && bottomNeighbor) {\r\n rotation = -Math.PI / 2;\r\n }\r\n\r\n this._basicCornerRounded({ x, y, size, context, rotation });\r\n return;\r\n }\r\n\r\n if (neighborsCount === 1) {\r\n let rotation = 0;\r\n\r\n if (topNeighbor) {\r\n rotation = Math.PI / 2;\r\n } else if (rightNeighbor) {\r\n rotation = Math.PI;\r\n } else if (bottomNeighbor) {\r\n rotation = -Math.PI / 2;\r\n }\r\n\r\n this._basicSideRounded({ x, y, size, context, rotation });\r\n return;\r\n }\r\n }\r\n\r\n _drawExtraRounded({ x, y, size, context, getNeighbor }: DrawArgsCanvas): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n if (neighborsCount === 0) {\r\n this._basicDot({ x, y, size, context, rotation: 0 });\r\n return;\r\n }\r\n\r\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n this._basicSquare({ x, y, size, context, rotation: 0 });\r\n return;\r\n }\r\n\r\n if (neighborsCount === 2) {\r\n let rotation = 0;\r\n\r\n if (leftNeighbor && topNeighbor) {\r\n rotation = Math.PI / 2;\r\n } else if (topNeighbor && rightNeighbor) {\r\n rotation = Math.PI;\r\n } else if (rightNeighbor && bottomNeighbor) {\r\n rotation = -Math.PI / 2;\r\n }\r\n\r\n this._basicCornerExtraRounded({ x, y, size, context, rotation });\r\n return;\r\n }\r\n\r\n if (neighborsCount === 1) {\r\n let rotation = 0;\r\n\r\n if (topNeighbor) {\r\n rotation = Math.PI / 2;\r\n } else if (rightNeighbor) {\r\n rotation = Math.PI;\r\n } else if (bottomNeighbor) {\r\n rotation = -Math.PI / 2;\r\n }\r\n\r\n this._basicSideRounded({ x, y, size, context, rotation });\r\n return;\r\n }\r\n }\r\n\r\n _drawClassy({ x, y, size, context, getNeighbor }: DrawArgsCanvas): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n if (neighborsCount === 0) {\r\n this._basicCornersRounded({ x, y, size, context, rotation: Math.PI / 2 });\r\n return;\r\n }\r\n\r\n if (!leftNeighbor && !topNeighbor) {\r\n this._basicCornerRounded({ x, y, size, context, rotation: -Math.PI / 2 });\r\n return;\r\n }\r\n\r\n if (!rightNeighbor && !bottomNeighbor) {\r\n this._basicCornerRounded({ x, y, size, context, rotation: Math.PI / 2 });\r\n return;\r\n }\r\n\r\n this._basicSquare({ x, y, size, context, rotation: 0 });\r\n }\r\n\r\n _drawClassyRounded({ x, y, size, context, getNeighbor }: DrawArgsCanvas): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n if (neighborsCount === 0) {\r\n this._basicCornersRounded({ x, y, size, context, rotation: Math.PI / 2 });\r\n return;\r\n }\r\n\r\n if (!leftNeighbor && !topNeighbor) {\r\n this._basicCornerExtraRounded({ x, y, size, context, rotation: -Math.PI / 2 });\r\n return;\r\n }\r\n\r\n if (!rightNeighbor && !bottomNeighbor) {\r\n this._basicCornerExtraRounded({ x, y, size, context, rotation: Math.PI / 2 });\r\n return;\r\n }\r\n\r\n this._basicSquare({ x, y, size, context, rotation: 0 });\r\n }\r\n}\r\n","import { CornerSquareTypes } from \"../types\";\r\n\r\nexport default {\r\n dot: \"dot\",\r\n square: \"square\",\r\n extraRounded: \"extra-rounded\"\r\n} as CornerSquareTypes;\r\n","import cornerSquareTypes from \"../../../constants/cornerSquareTypes\";\r\nimport { CornerSquareType, RotateFigureArgsCanvas, BasicFigureDrawArgsCanvas, DrawArgsCanvas } from \"../../../types\";\r\n\r\nexport default class QRCornerSquare {\r\n _context: CanvasRenderingContext2D;\r\n _type: CornerSquareType;\r\n\r\n constructor({ context, type }: { context: CanvasRenderingContext2D; type: CornerSquareType }) {\r\n this._context = context;\r\n this._type = type;\r\n }\r\n\r\n draw(x: number, y: number, size: number, rotation: number): void {\r\n const context = this._context;\r\n const type = this._type;\r\n let drawFunction;\r\n\r\n switch (type) {\r\n case cornerSquareTypes.square:\r\n drawFunction = this._drawSquare;\r\n break;\r\n case cornerSquareTypes.extraRounded:\r\n drawFunction = this._drawExtraRounded;\r\n break;\r\n case cornerSquareTypes.dot:\r\n default:\r\n drawFunction = this._drawDot;\r\n }\r\n\r\n drawFunction.call(this, { x, y, size, context, rotation });\r\n }\r\n\r\n _rotateFigure({ x, y, size, context, rotation = 0, draw }: RotateFigureArgsCanvas): void {\r\n const cx = x + size / 2;\r\n const cy = y + size / 2;\r\n\r\n context.translate(cx, cy);\r\n rotation && context.rotate(rotation);\r\n draw();\r\n context.closePath();\r\n rotation && context.rotate(-rotation);\r\n context.translate(-cx, -cy);\r\n }\r\n\r\n _basicDot(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n const dotSize = size / 7;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.arc(0, 0, size / 2, 0, Math.PI * 2);\r\n context.arc(0, 0, size / 2 - dotSize, 0, Math.PI * 2);\r\n }\r\n });\r\n }\r\n\r\n _basicSquare(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n const dotSize = size / 7;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.rect(-size / 2, -size / 2, size, size);\r\n context.rect(-size / 2 + dotSize, -size / 2 + dotSize, size - 2 * dotSize, size - 2 * dotSize);\r\n }\r\n });\r\n }\r\n\r\n _basicExtraRounded(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n const dotSize = size / 7;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.arc(-dotSize, -dotSize, 2.5 * dotSize, Math.PI, -Math.PI / 2);\r\n context.lineTo(dotSize, -3.5 * dotSize);\r\n context.arc(dotSize, -dotSize, 2.5 * dotSize, -Math.PI / 2, 0);\r\n context.lineTo(3.5 * dotSize, -dotSize);\r\n context.arc(dotSize, dotSize, 2.5 * dotSize, 0, Math.PI / 2);\r\n context.lineTo(-dotSize, 3.5 * dotSize);\r\n context.arc(-dotSize, dotSize, 2.5 * dotSize, Math.PI / 2, Math.PI);\r\n context.lineTo(-3.5 * dotSize, -dotSize);\r\n\r\n context.arc(-dotSize, -dotSize, 1.5 * dotSize, Math.PI, -Math.PI / 2);\r\n context.lineTo(dotSize, -2.5 * dotSize);\r\n context.arc(dotSize, -dotSize, 1.5 * dotSize, -Math.PI / 2, 0);\r\n context.lineTo(2.5 * dotSize, -dotSize);\r\n context.arc(dotSize, dotSize, 1.5 * dotSize, 0, Math.PI / 2);\r\n context.lineTo(-dotSize, 2.5 * dotSize);\r\n context.arc(-dotSize, dotSize, 1.5 * dotSize, Math.PI / 2, Math.PI);\r\n context.lineTo(-2.5 * dotSize, -dotSize);\r\n }\r\n });\r\n }\r\n\r\n _drawDot({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n this._basicDot({ x, y, size, context, rotation });\r\n }\r\n\r\n _drawSquare({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n this._basicSquare({ x, y, size, context, rotation });\r\n }\r\n\r\n _drawExtraRounded({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n this._basicExtraRounded({ x, y, size, context, rotation });\r\n }\r\n}\r\n","import { CornerDotTypes } from \"../types\";\r\n\r\nexport default {\r\n dot: \"dot\",\r\n square: \"square\"\r\n} as CornerDotTypes;\r\n","import cornerDotTypes from \"../../../constants/cornerDotTypes\";\r\nimport { CornerDotType, RotateFigureArgsCanvas, BasicFigureDrawArgsCanvas, DrawArgsCanvas } from \"../../../types\";\r\n\r\nexport default class QRCornerDot {\r\n _context: CanvasRenderingContext2D;\r\n _type: CornerDotType;\r\n\r\n constructor({ context, type }: { context: CanvasRenderingContext2D; type: CornerDotType }) {\r\n this._context = context;\r\n this._type = type;\r\n }\r\n\r\n draw(x: number, y: number, size: number, rotation: number): void {\r\n const context = this._context;\r\n const type = this._type;\r\n let drawFunction;\r\n\r\n switch (type) {\r\n case cornerDotTypes.square:\r\n drawFunction = this._drawSquare;\r\n break;\r\n case cornerDotTypes.dot:\r\n default:\r\n drawFunction = this._drawDot;\r\n }\r\n\r\n drawFunction.call(this, { x, y, size, context, rotation });\r\n }\r\n\r\n _rotateFigure({ x, y, size, context, rotation = 0, draw }: RotateFigureArgsCanvas): void {\r\n const cx = x + size / 2;\r\n const cy = y + size / 2;\r\n\r\n context.translate(cx, cy);\r\n rotation && context.rotate(rotation);\r\n draw();\r\n context.closePath();\r\n rotation && context.rotate(-rotation);\r\n context.translate(-cx, -cy);\r\n }\r\n\r\n _basicDot(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.arc(0, 0, size / 2, 0, Math.PI * 2);\r\n }\r\n });\r\n }\r\n\r\n _basicSquare(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.rect(-size / 2, -size / 2, size, size);\r\n }\r\n });\r\n }\r\n\r\n _drawDot({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n this._basicDot({ x, y, size, context, rotation });\r\n }\r\n\r\n _drawSquare({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n this._basicSquare({ x, y, size, context, rotation });\r\n }\r\n}\r\n","import { GradientTypes } from \"../types\";\r\n\r\nexport default {\r\n radial: \"radial\",\r\n linear: \"linear\"\r\n} as GradientTypes;\r\n","import calculateImageSize from \"../tools/calculateImageSize\";\r\nimport errorCorrectionPercents from \"../constants/errorCorrectionPercents\";\r\nimport QRDot from \"../figures/dot/canvas/QRDot\";\r\nimport QRCornerSquare from \"../figures/cornerSquare/canvas/QRCornerSquare\";\r\nimport QRCornerDot from \"../figures/cornerDot/canvas/QRCornerDot\";\r\nimport { RequiredOptions } from \"./QROptions\";\r\nimport gradientTypes from \"../constants/gradientTypes\";\r\nimport { QRCode, Gradient, FilterFunction } from \"../types\";\r\n\r\nconst squareMask = [\r\n [1, 1, 1, 1, 1, 1, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 1, 1, 1, 1, 1, 1]\r\n];\r\n\r\nconst dotMask = [\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0]\r\n];\r\n\r\nexport default class QRCanvas {\r\n _canvas: HTMLCanvasElement;\r\n _options: RequiredOptions;\r\n _qr?: QRCode;\r\n _image?: HTMLImageElement;\r\n\r\n //TODO don't pass all options to this class\r\n constructor(options: RequiredOptions) {\r\n this._canvas = document.createElement(\"canvas\");\r\n this._canvas.width = options.width;\r\n this._canvas.height = options.height;\r\n this._options = options;\r\n }\r\n\r\n get context(): CanvasRenderingContext2D | null {\r\n return this._canvas.getContext(\"2d\");\r\n }\r\n\r\n get width(): number {\r\n return this._canvas.width;\r\n }\r\n\r\n get height(): number {\r\n return this._canvas.height;\r\n }\r\n\r\n getCanvas(): HTMLCanvasElement {\r\n return this._canvas;\r\n }\r\n\r\n clear(): void {\r\n const canvasContext = this.context;\r\n\r\n if (canvasContext) {\r\n canvasContext.clearRect(0, 0, this._canvas.width, this._canvas.height);\r\n }\r\n }\r\n\r\n async drawQR(qr: QRCode): Promise {\r\n const count = qr.getModuleCount();\r\n const minSize = Math.min(this._options.width, this._options.height) - this._options.margin * 2;\r\n const dotSize = Math.floor(minSize / count);\r\n let drawImageSize = {\r\n hideXDots: 0,\r\n hideYDots: 0,\r\n width: 0,\r\n height: 0\r\n };\r\n\r\n this._qr = qr;\r\n\r\n if (this._options.image) {\r\n await this.loadImage();\r\n if (!this._image) return;\r\n const { imageOptions, qrOptions } = this._options;\r\n const coverLevel = imageOptions.imageSize * errorCorrectionPercents[qrOptions.errorCorrectionLevel];\r\n const maxHiddenDots = Math.floor(coverLevel * count * count);\r\n\r\n drawImageSize = calculateImageSize({\r\n originalWidth: this._image.width,\r\n originalHeight: this._image.height,\r\n maxHiddenDots,\r\n maxHiddenAxisDots: count - 14,\r\n dotSize\r\n });\r\n }\r\n\r\n this.clear();\r\n this.drawBackground();\r\n this.drawDots((i: number, j: number): boolean => {\r\n if (this._options.imageOptions.hideBackgroundDots) {\r\n if (\r\n i >= (count - drawImageSize.hideXDots) / 2 &&\r\n i < (count + drawImageSize.hideXDots) / 2 &&\r\n j >= (count - drawImageSize.hideYDots) / 2 &&\r\n j < (count + drawImageSize.hideYDots) / 2\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) {\r\n return false;\r\n }\r\n\r\n if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) {\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n this.drawCorners();\r\n\r\n if (this._options.image) {\r\n this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\r\n }\r\n }\r\n\r\n drawBackground(): void {\r\n const canvasContext = this.context;\r\n const options = this._options;\r\n\r\n if (canvasContext) {\r\n if (options.backgroundOptions.gradient) {\r\n const gradientOptions = options.backgroundOptions.gradient;\r\n const gradient = this._createGradient({\r\n context: canvasContext,\r\n options: gradientOptions,\r\n additionalRotation: 0,\r\n x: 0,\r\n y: 0,\r\n size: this._canvas.width > this._canvas.height ? this._canvas.width : this._canvas.height\r\n });\r\n\r\n gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n gradient.addColorStop(offset, color);\r\n });\r\n\r\n canvasContext.fillStyle = gradient;\r\n } else if (options.backgroundOptions.color) {\r\n canvasContext.fillStyle = options.backgroundOptions.color;\r\n }\r\n canvasContext.fillRect(0, 0, this._canvas.width, this._canvas.height);\r\n }\r\n }\r\n\r\n drawDots(filter?: FilterFunction): void {\r\n if (!this._qr) {\r\n throw \"QR code is not defined\";\r\n }\r\n\r\n const canvasContext = this.context;\r\n\r\n if (!canvasContext) {\r\n throw \"QR code is not defined\";\r\n }\r\n\r\n const options = this._options;\r\n const count = this._qr.getModuleCount();\r\n\r\n if (count > options.width || count > options.height) {\r\n throw \"The canvas is too small.\";\r\n }\r\n\r\n const minSize = Math.min(options.width, options.height) - options.margin * 2;\r\n const dotSize = Math.floor(minSize / count);\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type });\r\n\r\n canvasContext.beginPath();\r\n\r\n for (let i = 0; i < count; i++) {\r\n for (let j = 0; j < count; j++) {\r\n if (filter && !filter(i, j)) {\r\n continue;\r\n }\r\n if (!this._qr.isDark(i, j)) {\r\n continue;\r\n }\r\n dot.draw(\r\n yBeginning + j * dotSize,\r\n xBeginning + i * dotSize,\r\n dotSize,\r\n (xOffset: number, yOffset: number): boolean => {\r\n if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false;\r\n if (filter && !filter(i + xOffset, j + yOffset)) return false;\r\n return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset);\r\n }\r\n );\r\n }\r\n }\r\n\r\n if (options.dotsOptions.gradient) {\r\n const gradientOptions = options.dotsOptions.gradient;\r\n const gradient = this._createGradient({\r\n context: canvasContext,\r\n options: gradientOptions,\r\n additionalRotation: 0,\r\n x: xBeginning,\r\n y: yBeginning,\r\n size: count * dotSize\r\n });\r\n\r\n gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n gradient.addColorStop(offset, color);\r\n });\r\n\r\n canvasContext.fillStyle = canvasContext.strokeStyle = gradient;\r\n } else if (options.dotsOptions.color) {\r\n canvasContext.fillStyle = canvasContext.strokeStyle = options.dotsOptions.color;\r\n }\r\n\r\n canvasContext.fill(\"evenodd\");\r\n }\r\n\r\n drawCorners(filter?: FilterFunction): void {\r\n if (!this._qr) {\r\n throw \"QR code is not defined\";\r\n }\r\n\r\n const canvasContext = this.context;\r\n\r\n if (!canvasContext) {\r\n throw \"QR code is not defined\";\r\n }\r\n\r\n const options = this._options;\r\n\r\n const count = this._qr.getModuleCount();\r\n const minSize = Math.min(options.width, options.height) - options.margin * 2;\r\n const dotSize = Math.floor(minSize / count);\r\n const cornersSquareSize = dotSize * 7;\r\n const cornersDotSize = dotSize * 3;\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n\r\n [\r\n [0, 0, 0],\r\n [1, 0, Math.PI / 2],\r\n [0, 1, -Math.PI / 2]\r\n ].forEach(([column, row, rotation]) => {\r\n if (filter && !filter(column, row)) {\r\n return;\r\n }\r\n\r\n const x = xBeginning + column * dotSize * (count - 7);\r\n const y = yBeginning + row * dotSize * (count - 7);\r\n\r\n if (options.cornersSquareOptions?.type) {\r\n const cornersSquare = new QRCornerSquare({ context: canvasContext, type: options.cornersSquareOptions?.type });\r\n\r\n canvasContext.beginPath();\r\n cornersSquare.draw(x, y, cornersSquareSize, rotation);\r\n } else {\r\n const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type });\r\n\r\n canvasContext.beginPath();\r\n\r\n for (let i = 0; i < squareMask.length; i++) {\r\n for (let j = 0; j < squareMask[i].length; j++) {\r\n if (!squareMask[i]?.[j]) {\r\n continue;\r\n }\r\n\r\n dot.draw(\r\n x + i * dotSize,\r\n y + j * dotSize,\r\n dotSize,\r\n (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (options.cornersSquareOptions?.gradient) {\r\n const gradientOptions = options.cornersSquareOptions.gradient;\r\n const gradient = this._createGradient({\r\n context: canvasContext,\r\n options: gradientOptions,\r\n additionalRotation: rotation,\r\n x,\r\n y,\r\n size: cornersSquareSize\r\n });\r\n\r\n gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n gradient.addColorStop(offset, color);\r\n });\r\n\r\n canvasContext.fillStyle = canvasContext.strokeStyle = gradient;\r\n } else if (options.cornersSquareOptions?.color) {\r\n canvasContext.fillStyle = canvasContext.strokeStyle = options.cornersSquareOptions.color;\r\n }\r\n\r\n canvasContext.fill(\"evenodd\");\r\n\r\n if (options.cornersDotOptions?.type) {\r\n const cornersDot = new QRCornerDot({ context: canvasContext, type: options.cornersDotOptions?.type });\r\n\r\n canvasContext.beginPath();\r\n cornersDot.draw(x + dotSize * 2, y + dotSize * 2, cornersDotSize, rotation);\r\n } else {\r\n const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type });\r\n\r\n canvasContext.beginPath();\r\n\r\n for (let i = 0; i < dotMask.length; i++) {\r\n for (let j = 0; j < dotMask[i].length; j++) {\r\n if (!dotMask[i]?.[j]) {\r\n continue;\r\n }\r\n\r\n dot.draw(\r\n x + i * dotSize,\r\n y + j * dotSize,\r\n dotSize,\r\n (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (options.cornersDotOptions?.gradient) {\r\n const gradientOptions = options.cornersDotOptions.gradient;\r\n const gradient = this._createGradient({\r\n context: canvasContext,\r\n options: gradientOptions,\r\n additionalRotation: rotation,\r\n x: x + dotSize * 2,\r\n y: y + dotSize * 2,\r\n size: cornersDotSize\r\n });\r\n\r\n gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n gradient.addColorStop(offset, color);\r\n });\r\n\r\n canvasContext.fillStyle = canvasContext.strokeStyle = gradient;\r\n } else if (options.cornersDotOptions?.color) {\r\n canvasContext.fillStyle = canvasContext.strokeStyle = options.cornersDotOptions.color;\r\n }\r\n\r\n canvasContext.fill(\"evenodd\");\r\n });\r\n }\r\n\r\n loadImage(): Promise {\r\n return new Promise((resolve, reject) => {\r\n const options = this._options;\r\n const image = new Image();\r\n\r\n if (!options.image) {\r\n return reject(\"Image is not defined\");\r\n }\r\n\r\n if (typeof options.imageOptions.crossOrigin === \"string\") {\r\n image.crossOrigin = options.imageOptions.crossOrigin;\r\n }\r\n\r\n this._image = image;\r\n image.onload = (): void => {\r\n resolve();\r\n };\r\n image.src = options.image;\r\n });\r\n }\r\n\r\n drawImage({\r\n width,\r\n height,\r\n count,\r\n dotSize\r\n }: {\r\n width: number;\r\n height: number;\r\n count: number;\r\n dotSize: number;\r\n }): void {\r\n const canvasContext = this.context;\r\n\r\n if (!canvasContext) {\r\n throw \"canvasContext is not defined\";\r\n }\r\n\r\n if (!this._image) {\r\n throw \"image is not defined\";\r\n }\r\n\r\n const options = this._options;\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n const dx = xBeginning + options.imageOptions.margin + (count * dotSize - width) / 2;\r\n const dy = yBeginning + options.imageOptions.margin + (count * dotSize - height) / 2;\r\n const dw = width - options.imageOptions.margin * 2;\r\n const dh = height - options.imageOptions.margin * 2;\r\n\r\n canvasContext.drawImage(this._image, dx, dy, dw < 0 ? 0 : dw, dh < 0 ? 0 : dh);\r\n }\r\n\r\n _createGradient({\r\n context,\r\n options,\r\n additionalRotation,\r\n x,\r\n y,\r\n size\r\n }: {\r\n context: CanvasRenderingContext2D;\r\n options: Gradient;\r\n additionalRotation: number;\r\n x: number;\r\n y: number;\r\n size: number;\r\n }): CanvasGradient {\r\n let gradient;\r\n\r\n if (options.type === gradientTypes.radial) {\r\n gradient = context.createRadialGradient(x + size / 2, y + size / 2, 0, x + size / 2, y + size / 2, size / 2);\r\n } else {\r\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\r\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\r\n let x0 = x + size / 2;\r\n let y0 = y + size / 2;\r\n let x1 = x + size / 2;\r\n let y1 = y + size / 2;\r\n\r\n if (\r\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\r\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\r\n ) {\r\n x0 = x0 - size / 2;\r\n y0 = y0 - (size / 2) * Math.tan(rotation);\r\n x1 = x1 + size / 2;\r\n y1 = y1 + (size / 2) * Math.tan(rotation);\r\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\r\n y0 = y0 - size / 2;\r\n x0 = x0 - size / 2 / Math.tan(rotation);\r\n y1 = y1 + size / 2;\r\n x1 = x1 + size / 2 / Math.tan(rotation);\r\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\r\n x0 = x0 + size / 2;\r\n y0 = y0 + (size / 2) * Math.tan(rotation);\r\n x1 = x1 - size / 2;\r\n y1 = y1 - (size / 2) * Math.tan(rotation);\r\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\r\n y0 = y0 + size / 2;\r\n x0 = x0 + size / 2 / Math.tan(rotation);\r\n y1 = y1 - size / 2;\r\n x1 = x1 - size / 2 / Math.tan(rotation);\r\n }\r\n\r\n gradient = context.createLinearGradient(Math.round(x0), Math.round(y0), Math.round(x1), Math.round(y1));\r\n }\r\n\r\n return gradient;\r\n }\r\n}\r\n","import dotTypes from \"../../../constants/dotTypes\";\r\nimport { DotType, GetNeighbor, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../../types\";\r\n\r\nexport default class QRDot {\r\n _element?: SVGElement;\r\n _svg: SVGElement;\r\n _type: DotType;\r\n\r\n constructor({ svg, type }: { svg: SVGElement; type: DotType }) {\r\n this._svg = svg;\r\n this._type = type;\r\n }\r\n\r\n draw(x: number, y: number, size: number, getNeighbor: GetNeighbor): void {\r\n const type = this._type;\r\n let drawFunction;\r\n\r\n switch (type) {\r\n case dotTypes.dots:\r\n drawFunction = this._drawDot;\r\n break;\r\n case dotTypes.classy:\r\n drawFunction = this._drawClassy;\r\n break;\r\n case dotTypes.classyRounded:\r\n drawFunction = this._drawClassyRounded;\r\n break;\r\n case dotTypes.rounded:\r\n drawFunction = this._drawRounded;\r\n break;\r\n case dotTypes.extraRounded:\r\n drawFunction = this._drawExtraRounded;\r\n break;\r\n case dotTypes.square:\r\n default:\r\n drawFunction = this._drawSquare;\r\n }\r\n\r\n drawFunction.call(this, { x, y, size, getNeighbor });\r\n }\r\n\r\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n const cx = x + size / 2;\r\n const cy = y + size / 2;\r\n\r\n draw();\r\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\r\n }\r\n\r\n _basicDot(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._element.setAttribute(\"cx\", String(x + size / 2));\r\n this._element.setAttribute(\"cy\", String(y + size / 2));\r\n this._element.setAttribute(\"r\", String(size / 2));\r\n }\r\n });\r\n }\r\n\r\n _basicSquare(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n this._element.setAttribute(\"x\", String(x));\r\n this._element.setAttribute(\"y\", String(y));\r\n this._element.setAttribute(\"width\", String(size));\r\n this._element.setAttribute(\"height\", String(size));\r\n }\r\n });\r\n }\r\n\r\n //if rotation === 0 - right side is rounded\r\n _basicSideRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x} ${y}` + //go to top left position\r\n `v ${size}` + //draw line to left bottom corner\r\n `h ${size / 2}` + //draw line to left bottom corner + half of size right\r\n `a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}` // draw rounded corner\r\n );\r\n }\r\n });\r\n }\r\n\r\n //if rotation === 0 - top right corner is rounded\r\n _basicCornerRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x} ${y}` + //go to top left position\r\n `v ${size}` + //draw line to left bottom corner\r\n `h ${size}` + //draw line to right bottom corner\r\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\r\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded corner\r\n );\r\n }\r\n });\r\n }\r\n\r\n //if rotation === 0 - top right corner is rounded\r\n _basicCornerExtraRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x} ${y}` + //go to top left position\r\n `v ${size}` + //draw line to left bottom corner\r\n `h ${size}` + //draw line to right bottom corner\r\n `a ${size} ${size}, 0, 0, 0, ${-size} ${-size}` // draw rounded top right corner\r\n );\r\n }\r\n });\r\n }\r\n\r\n //if rotation === 0 - left bottom and right top corners are rounded\r\n _basicCornersRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x} ${y}` + //go to left top position\r\n `v ${size / 2}` + //draw line to left top corner + half of size bottom\r\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}` + // draw rounded left bottom corner\r\n `h ${size / 2}` + //draw line to right bottom corner\r\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\r\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded right top corner\r\n );\r\n }\r\n });\r\n }\r\n\r\n _drawDot({ x, y, size }: DrawArgs): void {\r\n this._basicDot({ x, y, size, rotation: 0 });\r\n }\r\n\r\n _drawSquare({ x, y, size }: DrawArgs): void {\r\n this._basicSquare({ x, y, size, rotation: 0 });\r\n }\r\n\r\n _drawRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n if (neighborsCount === 0) {\r\n this._basicDot({ x, y, size, rotation: 0 });\r\n return;\r\n }\r\n\r\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n this._basicSquare({ x, y, size, rotation: 0 });\r\n return;\r\n }\r\n\r\n if (neighborsCount === 2) {\r\n let rotation = 0;\r\n\r\n if (leftNeighbor && topNeighbor) {\r\n rotation = Math.PI / 2;\r\n } else if (topNeighbor && rightNeighbor) {\r\n rotation = Math.PI;\r\n } else if (rightNeighbor && bottomNeighbor) {\r\n rotation = -Math.PI / 2;\r\n }\r\n\r\n this._basicCornerRounded({ x, y, size, rotation });\r\n return;\r\n }\r\n\r\n if (neighborsCount === 1) {\r\n let rotation = 0;\r\n\r\n if (topNeighbor) {\r\n rotation = Math.PI / 2;\r\n } else if (rightNeighbor) {\r\n rotation = Math.PI;\r\n } else if (bottomNeighbor) {\r\n rotation = -Math.PI / 2;\r\n }\r\n\r\n this._basicSideRounded({ x, y, size, rotation });\r\n return;\r\n }\r\n }\r\n\r\n _drawExtraRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n if (neighborsCount === 0) {\r\n this._basicDot({ x, y, size, rotation: 0 });\r\n return;\r\n }\r\n\r\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n this._basicSquare({ x, y, size, rotation: 0 });\r\n return;\r\n }\r\n\r\n if (neighborsCount === 2) {\r\n let rotation = 0;\r\n\r\n if (leftNeighbor && topNeighbor) {\r\n rotation = Math.PI / 2;\r\n } else if (topNeighbor && rightNeighbor) {\r\n rotation = Math.PI;\r\n } else if (rightNeighbor && bottomNeighbor) {\r\n rotation = -Math.PI / 2;\r\n }\r\n\r\n this._basicCornerExtraRounded({ x, y, size, rotation });\r\n return;\r\n }\r\n\r\n if (neighborsCount === 1) {\r\n let rotation = 0;\r\n\r\n if (topNeighbor) {\r\n rotation = Math.PI / 2;\r\n } else if (rightNeighbor) {\r\n rotation = Math.PI;\r\n } else if (bottomNeighbor) {\r\n rotation = -Math.PI / 2;\r\n }\r\n\r\n this._basicSideRounded({ x, y, size, rotation });\r\n return;\r\n }\r\n }\r\n\r\n _drawClassy({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n if (neighborsCount === 0) {\r\n this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\r\n return;\r\n }\r\n\r\n if (!leftNeighbor && !topNeighbor) {\r\n this._basicCornerRounded({ x, y, size, rotation: -Math.PI / 2 });\r\n return;\r\n }\r\n\r\n if (!rightNeighbor && !bottomNeighbor) {\r\n this._basicCornerRounded({ x, y, size, rotation: Math.PI / 2 });\r\n return;\r\n }\r\n\r\n this._basicSquare({ x, y, size, rotation: 0 });\r\n }\r\n\r\n _drawClassyRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n if (neighborsCount === 0) {\r\n this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\r\n return;\r\n }\r\n\r\n if (!leftNeighbor && !topNeighbor) {\r\n this._basicCornerExtraRounded({ x, y, size, rotation: -Math.PI / 2 });\r\n return;\r\n }\r\n\r\n if (!rightNeighbor && !bottomNeighbor) {\r\n this._basicCornerExtraRounded({ x, y, size, rotation: Math.PI / 2 });\r\n return;\r\n }\r\n\r\n this._basicSquare({ x, y, size, rotation: 0 });\r\n }\r\n}\r\n","import cornerSquareTypes from \"../../../constants/cornerSquareTypes\";\r\nimport { CornerSquareType, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../../types\";\r\n\r\nexport default class QRCornerSquare {\r\n _element?: SVGElement;\r\n _svg: SVGElement;\r\n _type: CornerSquareType;\r\n\r\n constructor({ svg, type }: { svg: SVGElement; type: CornerSquareType }) {\r\n this._svg = svg;\r\n this._type = type;\r\n }\r\n\r\n draw(x: number, y: number, size: number, rotation: number): void {\r\n const type = this._type;\r\n let drawFunction;\r\n\r\n switch (type) {\r\n case cornerSquareTypes.square:\r\n drawFunction = this._drawSquare;\r\n break;\r\n case cornerSquareTypes.extraRounded:\r\n drawFunction = this._drawExtraRounded;\r\n break;\r\n case cornerSquareTypes.dot:\r\n default:\r\n drawFunction = this._drawDot;\r\n }\r\n\r\n drawFunction.call(this, { x, y, size, rotation });\r\n }\r\n\r\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n const cx = x + size / 2;\r\n const cy = y + size / 2;\r\n\r\n draw();\r\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\r\n }\r\n\r\n _basicDot(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n const dotSize = size / 7;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x + size / 2} ${y}` + // M cx, y // Move to top of ring\r\n `a ${size / 2} ${size / 2} 0 1 0 0.1 0` + // a outerRadius, outerRadius, 0, 1, 0, 1, 0 // Draw outer arc, but don't close it\r\n `z` + // Z // Close the outer shape\r\n `m 0 ${dotSize}` + // m -1 outerRadius-innerRadius // Move to top point of inner radius\r\n `a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0` + // a innerRadius, innerRadius, 0, 1, 1, -1, 0 // Draw inner arc, but don't close it\r\n `Z` // Z // Close the inner ring. Actually will still work without, but inner ring will have one unit missing in stroke\r\n );\r\n }\r\n });\r\n }\r\n\r\n _basicSquare(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n const dotSize = size / 7;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x} ${y}` +\r\n `v ${size}` +\r\n `h ${size}` +\r\n `v ${-size}` +\r\n `z` +\r\n `M ${x + dotSize} ${y + dotSize}` +\r\n `h ${size - 2 * dotSize}` +\r\n `v ${size - 2 * dotSize}` +\r\n `h ${-size + 2 * dotSize}` +\r\n `z`\r\n );\r\n }\r\n });\r\n }\r\n\r\n _basicExtraRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n const dotSize = size / 7;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x} ${y + 2.5 * dotSize}` +\r\n `v ${2 * dotSize}` +\r\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\r\n `h ${2 * dotSize}` +\r\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}` +\r\n `v ${-2 * dotSize}` +\r\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\r\n `h ${-2 * dotSize}` +\r\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}` +\r\n `M ${x + 2.5 * dotSize} ${y + dotSize}` +\r\n `h ${2 * dotSize}` +\r\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\r\n `v ${2 * dotSize}` +\r\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}` +\r\n `h ${-2 * dotSize}` +\r\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\r\n `v ${-2 * dotSize}` +\r\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}`\r\n );\r\n }\r\n });\r\n }\r\n\r\n _drawDot({ x, y, size, rotation }: DrawArgs): void {\r\n this._basicDot({ x, y, size, rotation });\r\n }\r\n\r\n _drawSquare({ x, y, size, rotation }: DrawArgs): void {\r\n this._basicSquare({ x, y, size, rotation });\r\n }\r\n\r\n _drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\r\n this._basicExtraRounded({ x, y, size, rotation });\r\n }\r\n}\r\n","import cornerDotTypes from \"../../../constants/cornerDotTypes\";\r\nimport { CornerDotType, RotateFigureArgs, BasicFigureDrawArgs, DrawArgs } from \"../../../types\";\r\n\r\nexport default class QRCornerDot {\r\n _element?: SVGElement;\r\n _svg: SVGElement;\r\n _type: CornerDotType;\r\n\r\n constructor({ svg, type }: { svg: SVGElement; type: CornerDotType }) {\r\n this._svg = svg;\r\n this._type = type;\r\n }\r\n\r\n draw(x: number, y: number, size: number, rotation: number): void {\r\n const type = this._type;\r\n let drawFunction;\r\n\r\n switch (type) {\r\n case cornerDotTypes.square:\r\n drawFunction = this._drawSquare;\r\n break;\r\n case cornerDotTypes.dot:\r\n default:\r\n drawFunction = this._drawDot;\r\n }\r\n\r\n drawFunction.call(this, { x, y, size, rotation });\r\n }\r\n\r\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n const cx = x + size / 2;\r\n const cy = y + size / 2;\r\n\r\n draw();\r\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\r\n }\r\n\r\n _basicDot(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._element.setAttribute(\"cx\", String(x + size / 2));\r\n this._element.setAttribute(\"cy\", String(y + size / 2));\r\n this._element.setAttribute(\"r\", String(size / 2));\r\n }\r\n });\r\n }\r\n\r\n _basicSquare(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n this._element.setAttribute(\"x\", String(x));\r\n this._element.setAttribute(\"y\", String(y));\r\n this._element.setAttribute(\"width\", String(size));\r\n this._element.setAttribute(\"height\", String(size));\r\n }\r\n });\r\n }\r\n\r\n _drawDot({ x, y, size, rotation }: DrawArgs): void {\r\n this._basicDot({ x, y, size, rotation });\r\n }\r\n\r\n _drawSquare({ x, y, size, rotation }: DrawArgs): void {\r\n this._basicSquare({ x, y, size, rotation });\r\n }\r\n}\r\n","import calculateImageSize from \"../tools/calculateImageSize\";\r\nimport errorCorrectionPercents from \"../constants/errorCorrectionPercents\";\r\nimport QRDot from \"../figures/dot/svg/QRDot\";\r\nimport QRCornerSquare from \"../figures/cornerSquare/svg/QRCornerSquare\";\r\nimport QRCornerDot from \"../figures/cornerDot/svg/QRCornerDot\";\r\nimport { RequiredOptions } from \"./QROptions\";\r\nimport gradientTypes from \"../constants/gradientTypes\";\r\nimport { QRCode, FilterFunction, Gradient } from \"../types\";\r\n\r\nconst squareMask = [\r\n [1, 1, 1, 1, 1, 1, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 1, 1, 1, 1, 1, 1]\r\n];\r\n\r\nconst dotMask = [\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0]\r\n];\r\n\r\nexport default class QRSVG {\r\n _element: SVGElement;\r\n _style: SVGStyleElement;\r\n _defs: SVGElement;\r\n _dotsClipPath?: SVGElement;\r\n _cornersSquareClipPath?: SVGElement;\r\n _cornersDotClipPath?: SVGElement;\r\n _dots?: SVGElement;\r\n _cornerSquares?: SVGElement;\r\n _corners?: SVGElement;\r\n _cornerDots?: SVGElement;\r\n _options: RequiredOptions;\r\n _qr?: QRCode;\r\n _image?: HTMLImageElement;\r\n\r\n //TODO don't pass all options to this class\r\n constructor(options: RequiredOptions) {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n this._element.setAttribute(\"width\", String(options.width));\r\n this._element.setAttribute(\"height\", String(options.height));\r\n this._element.setAttribute(\"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\r\n this._defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\r\n this._style = document.createElementNS(\"http://www.w3.org/2000/svg\", \"style\");\r\n\r\n this._options = options;\r\n }\r\n\r\n get width(): number {\r\n return this._options.width;\r\n }\r\n\r\n get height(): number {\r\n return this._options.height;\r\n }\r\n\r\n getElement(): SVGElement {\r\n return this._element;\r\n }\r\n\r\n clear(): void {\r\n const oldElement = this._element;\r\n this._element = oldElement.cloneNode(false) as SVGElement;\r\n oldElement?.parentNode?.replaceChild(this._element, oldElement);\r\n this._defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\r\n this._style = document.createElementNS(\"http://www.w3.org/2000/svg\", \"style\");\r\n this._element.appendChild(this._style);\r\n this._element.appendChild(this._defs);\r\n }\r\n\r\n async drawQR(qr: QRCode): Promise {\r\n const count = qr.getModuleCount();\r\n const minSize = Math.min(this._options.width, this._options.height) - this._options.margin * 2;\r\n const dotSize = Math.floor(minSize / count);\r\n let drawImageSize = {\r\n hideXDots: 0,\r\n hideYDots: 0,\r\n width: 0,\r\n height: 0\r\n };\r\n\r\n this._qr = qr;\r\n\r\n if (this._options.image) {\r\n //We need it to get image size\r\n await this.loadImage();\r\n if (!this._image) return;\r\n const { imageOptions, qrOptions } = this._options;\r\n const coverLevel = imageOptions.imageSize * errorCorrectionPercents[qrOptions.errorCorrectionLevel];\r\n const maxHiddenDots = Math.floor(coverLevel * count * count);\r\n\r\n drawImageSize = calculateImageSize({\r\n originalWidth: this._image.width,\r\n originalHeight: this._image.height,\r\n maxHiddenDots,\r\n maxHiddenAxisDots: count - 14,\r\n dotSize\r\n });\r\n }\r\n\r\n this._element.appendChild(this._style);\r\n this._element.appendChild(this._defs);\r\n\r\n this.clear();\r\n this.drawBackground();\r\n this.drawDots((i: number, j: number): boolean => {\r\n if (this._options.imageOptions.hideBackgroundDots) {\r\n if (\r\n i >= (count - drawImageSize.hideXDots) / 2 &&\r\n i < (count + drawImageSize.hideXDots) / 2 &&\r\n j >= (count - drawImageSize.hideYDots) / 2 &&\r\n j < (count + drawImageSize.hideYDots) / 2\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) {\r\n return false;\r\n }\r\n\r\n if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) {\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n this.drawCorners();\r\n\r\n if (this._options.image) {\r\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\r\n }\r\n }\r\n\r\n drawBackground(): void {\r\n const element = this._element;\r\n const options = this._options;\r\n\r\n if (element) {\r\n const gradientOptions = options.backgroundOptions?.gradient;\r\n const color = options.backgroundOptions?.color;\r\n\r\n if (gradientOptions) {\r\n this._createColor({\r\n options: gradientOptions,\r\n color: color,\r\n additionalRotation: 0,\r\n x: 0,\r\n y: 0,\r\n height: options.height,\r\n width: options.width,\r\n name: \"background-color\"\r\n });\r\n } else if (options.backgroundOptions?.color) {\r\n this._createStyle({\r\n color: color,\r\n name: \"background-color\"\r\n });\r\n }\r\n }\r\n }\r\n\r\n drawDots(filter?: FilterFunction): void {\r\n if (!this._qr) {\r\n throw \"QR code is not defined\";\r\n }\r\n\r\n const options = this._options;\r\n const count = this._qr.getModuleCount();\r\n\r\n if (count > options.width || count > options.height) {\r\n throw \"The canvas is too small.\";\r\n }\r\n\r\n const minSize = Math.min(options.width, options.height) - options.margin * 2;\r\n const dotSize = Math.floor(minSize / count);\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type });\r\n\r\n if (options.dotsOptions?.gradient) {\r\n this._dotsClipPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\r\n this._dotsClipPath.setAttribute(\"id\", \"clip-path-dot-color\");\r\n this._defs.appendChild(this._dotsClipPath);\r\n this._createColor({\r\n options: options.dotsOptions?.gradient,\r\n color: options.dotsOptions.color,\r\n additionalRotation: 0,\r\n x: xBeginning,\r\n y: yBeginning,\r\n height: count * dotSize,\r\n width: count * dotSize,\r\n name: \"dot-color\"\r\n });\r\n } else if (options.dotsOptions.color) {\r\n this._dots = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\r\n this._dots.setAttribute(\"class\", \"dot-color\");\r\n this._element.appendChild(this._dots);\r\n this._createStyle({\r\n color: options.dotsOptions.color,\r\n name: \"dot-color\"\r\n });\r\n }\r\n\r\n for (let i = 0; i < count; i++) {\r\n for (let j = 0; j < count; j++) {\r\n if (filter && !filter(i, j)) {\r\n continue;\r\n }\r\n if (!this._qr?.isDark(i, j)) {\r\n continue;\r\n }\r\n\r\n dot.draw(\r\n yBeginning + j * dotSize,\r\n xBeginning + i * dotSize,\r\n dotSize,\r\n (xOffset: number, yOffset: number): boolean => {\r\n if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false;\r\n if (filter && !filter(i + xOffset, j + yOffset)) return false;\r\n return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset);\r\n }\r\n );\r\n\r\n if (dot._element && this._dotsClipPath) {\r\n this._dotsClipPath.appendChild(dot._element);\r\n } else if (dot._element && this._dots) {\r\n this._dots.appendChild(dot._element);\r\n }\r\n }\r\n }\r\n }\r\n\r\n drawCorners(): void {\r\n if (!this._qr) {\r\n throw \"QR code is not defined\";\r\n }\r\n\r\n const element = this._element;\r\n const options = this._options;\r\n\r\n if (!element) {\r\n throw \"Element code is not defined\";\r\n }\r\n\r\n const count = this._qr.getModuleCount();\r\n const minSize = Math.min(options.width, options.height) - options.margin * 2;\r\n const dotSize = Math.floor(minSize / count);\r\n const cornersSquareSize = dotSize * 7;\r\n const cornersDotSize = dotSize * 3;\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n\r\n [\r\n [0, 0, 0],\r\n [1, 0, Math.PI / 2],\r\n [0, 1, -Math.PI / 2]\r\n ].forEach(([column, row, rotation]) => {\r\n const x = xBeginning + column * dotSize * (count - 7);\r\n const y = yBeginning + row * dotSize * (count - 7);\r\n let cornersSquareClipPath = this._dotsClipPath;\r\n let cornersDotClipPath = this._dotsClipPath;\r\n\r\n if (options.cornersSquareOptions?.gradient) {\r\n cornersSquareClipPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\r\n cornersSquareClipPath.setAttribute(\"id\", `clip-path-corners-square-color-${column}-${row}`);\r\n this._defs.appendChild(cornersSquareClipPath);\r\n this._cornersSquareClipPath = this._cornersDotClipPath = cornersDotClipPath = cornersSquareClipPath;\r\n\r\n this._createColor({\r\n options: options.cornersSquareOptions?.gradient,\r\n color: options.cornersSquareOptions?.color,\r\n additionalRotation: rotation,\r\n x,\r\n y,\r\n height: cornersSquareSize,\r\n width: cornersSquareSize,\r\n name: `corners-square-color-${column}-${row}`\r\n });\r\n } else {\r\n this._cornerSquares = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\r\n this._cornerSquares.setAttribute(\"class\", `corners-square-color-${column}-${row}`);\r\n this._element.appendChild(this._cornerSquares);\r\n this._createStyle({\r\n color: options.cornersSquareOptions?.color,\r\n name: `corners-square-color-${column}-${row}`\r\n });\r\n }\r\n\r\n if (options.cornersSquareOptions?.type) {\r\n const cornersSquare = new QRCornerSquare({ svg: this._element, type: options.cornersSquareOptions.type });\r\n\r\n cornersSquare.draw(x, y, cornersSquareSize, rotation);\r\n\r\n if (options.cornersSquareOptions?.gradient && cornersSquare._element && cornersSquareClipPath) {\r\n cornersSquareClipPath.appendChild(cornersSquare._element);\r\n } else if (cornersSquare._element && this._cornerSquares) {\r\n this._cornerSquares.appendChild(cornersSquare._element);\r\n }\r\n } else {\r\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type });\r\n\r\n for (let i = 0; i < squareMask.length; i++) {\r\n for (let j = 0; j < squareMask[i].length; j++) {\r\n if (!squareMask[i]?.[j]) {\r\n continue;\r\n }\r\n\r\n dot.draw(\r\n x + i * dotSize,\r\n y + j * dotSize,\r\n dotSize,\r\n (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\r\n );\r\n\r\n if (dot._element && this._cornersSquareClipPath) {\r\n this._cornersSquareClipPath.appendChild(dot._element);\r\n } else if (dot._element && this._cornerSquares) {\r\n this._cornerSquares.appendChild(dot._element);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (options.cornersDotOptions?.gradient) {\r\n cornersDotClipPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\r\n cornersDotClipPath.setAttribute(\"id\", `clip-path-corners-dot-color-${column}-${row}`);\r\n this._defs.appendChild(cornersDotClipPath);\r\n this._cornersDotClipPath = cornersDotClipPath;\r\n\r\n this._createColor({\r\n options: options.cornersDotOptions?.gradient,\r\n color: options.cornersDotOptions?.color,\r\n additionalRotation: rotation,\r\n x: x + dotSize * 2,\r\n y: y + dotSize * 2,\r\n height: cornersDotSize,\r\n width: cornersDotSize,\r\n name: `corners-dot-color-${column}-${row}`\r\n });\r\n } else {\r\n this._cornerDots = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\r\n this._cornerDots.setAttribute(\"class\", `corners-dot-color-${column}-${row}`);\r\n this._element.appendChild(this._cornerDots);\r\n this._createStyle({\r\n color: options.cornersDotOptions?.color,\r\n name: `corners-dot-color-${column}-${row}`\r\n });\r\n }\r\n\r\n if (options.cornersDotOptions?.type) {\r\n const cornersDot = new QRCornerDot({ svg: this._element, type: options.cornersDotOptions.type });\r\n\r\n cornersDot.draw(x + dotSize * 2, y + dotSize * 2, cornersDotSize, rotation);\r\n\r\n if (options.cornersDotOptions?.gradient && cornersDot._element && cornersDotClipPath) {\r\n cornersDotClipPath.appendChild(cornersDot._element);\r\n } else if (cornersDot._element && this._cornerDots) {\r\n this._cornerDots.appendChild(cornersDot._element);\r\n }\r\n } else {\r\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type });\r\n\r\n for (let i = 0; i < dotMask.length; i++) {\r\n for (let j = 0; j < dotMask[i].length; j++) {\r\n if (!dotMask[i]?.[j]) {\r\n continue;\r\n }\r\n\r\n dot.draw(\r\n x + i * dotSize,\r\n y + j * dotSize,\r\n dotSize,\r\n (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\r\n );\r\n\r\n if (dot._element && this._cornersDotClipPath) {\r\n this._cornersDotClipPath.appendChild(dot._element);\r\n } else if (dot._element && this._cornerDots) {\r\n this._cornerDots.appendChild(dot._element);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n loadImage(): Promise {\r\n return new Promise((resolve, reject) => {\r\n const options = this._options;\r\n const image = new Image();\r\n\r\n if (!options.image) {\r\n return reject(\"Image is not defined\");\r\n }\r\n\r\n if (typeof options.imageOptions.crossOrigin === \"string\") {\r\n image.crossOrigin = options.imageOptions.crossOrigin;\r\n }\r\n\r\n this._image = image;\r\n image.onload = (): void => {\r\n resolve();\r\n };\r\n image.src = options.image;\r\n });\r\n }\r\n\r\n async drawImage({\r\n width,\r\n height,\r\n count,\r\n dotSize\r\n }: {\r\n width: number;\r\n height: number;\r\n count: number;\r\n dotSize: number;\r\n }): Promise {\r\n const options = this._options;\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n const dx = xBeginning + options.imageOptions.margin + (count * dotSize - width) / 2;\r\n const dy = yBeginning + options.imageOptions.margin + (count * dotSize - height) / 2;\r\n const dw = width - options.imageOptions.margin * 2;\r\n const dh = height - options.imageOptions.margin * 2;\r\n\r\n const image = document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\r\n\r\n const base64Image = await this._getBase64Image(options.image || \"\");\r\n\r\n image.setAttribute(\"href\", base64Image);\r\n image.setAttribute(\"xlink:href\", base64Image);\r\n image.setAttribute(\"x\", String(dx));\r\n image.setAttribute(\"y\", String(dy));\r\n image.setAttribute(\"width\", `${dw}px`);\r\n image.setAttribute(\"height\", `${dh}px`);\r\n\r\n this._element.appendChild(image);\r\n }\r\n\r\n async _getImageBlob(url: string): Promise {\r\n const resp = await fetch(url);\r\n return resp.blob();\r\n }\r\n\r\n // convert a blob to base64\r\n _blobToBase64(blob: Blob): Promise {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = function () {\r\n const dataUrl = reader.result;\r\n resolve(dataUrl as string);\r\n };\r\n reader.readAsDataURL(blob);\r\n });\r\n }\r\n\r\n async _getBase64Image(url: string): Promise {\r\n if (url === \"\") {\r\n return new Promise((resolve) => {\r\n resolve(\"\");\r\n });\r\n }\r\n\r\n const blob = await this._getImageBlob(url);\r\n const base64 = await this._blobToBase64(blob);\r\n return base64;\r\n }\r\n\r\n _createColor({\r\n options,\r\n color,\r\n additionalRotation,\r\n x,\r\n y,\r\n height,\r\n width,\r\n name\r\n }: {\r\n options?: Gradient;\r\n color?: string;\r\n additionalRotation: number;\r\n x: number;\r\n y: number;\r\n height: number;\r\n width: number;\r\n name: string;\r\n }): void {\r\n const size = width > height ? width : height;\r\n const rect = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n rect.setAttribute(\"x\", String(x));\r\n rect.setAttribute(\"y\", String(y));\r\n rect.setAttribute(\"height\", String(height));\r\n rect.setAttribute(\"width\", String(width));\r\n rect.setAttribute(\"clip-path\", `url('#clip-path-${name}')`);\r\n\r\n if (options) {\r\n let gradient: SVGElement;\r\n if (options.type === gradientTypes.radial) {\r\n gradient = document.createElementNS(\"http://www.w3.org/2000/svg\", \"radialGradient\");\r\n gradient.setAttribute(\"id\", name);\r\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\r\n gradient.setAttribute(\"fx\", String(x + width / 2));\r\n gradient.setAttribute(\"fy\", String(y + height / 2));\r\n gradient.setAttribute(\"cx\", String(x + width / 2));\r\n gradient.setAttribute(\"cy\", String(y + height / 2));\r\n gradient.setAttribute(\"r\", String(size / 2));\r\n } else {\r\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\r\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\r\n let x0 = x + width / 2;\r\n let y0 = y + height / 2;\r\n let x1 = x + width / 2;\r\n let y1 = y + height / 2;\r\n\r\n if (\r\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\r\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\r\n ) {\r\n x0 = x0 - width / 2;\r\n y0 = y0 - (height / 2) * Math.tan(rotation);\r\n x1 = x1 + width / 2;\r\n y1 = y1 + (height / 2) * Math.tan(rotation);\r\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\r\n y0 = y0 - height / 2;\r\n x0 = x0 - width / 2 / Math.tan(rotation);\r\n y1 = y1 + height / 2;\r\n x1 = x1 + width / 2 / Math.tan(rotation);\r\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\r\n x0 = x0 + width / 2;\r\n y0 = y0 + (height / 2) * Math.tan(rotation);\r\n x1 = x1 - width / 2;\r\n y1 = y1 - (height / 2) * Math.tan(rotation);\r\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\r\n y0 = y0 + height / 2;\r\n x0 = x0 + width / 2 / Math.tan(rotation);\r\n y1 = y1 - height / 2;\r\n x1 = x1 - width / 2 / Math.tan(rotation);\r\n }\r\n\r\n gradient = document.createElementNS(\"http://www.w3.org/2000/svg\", \"linearGradient\");\r\n gradient.setAttribute(\"id\", name);\r\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\r\n gradient.setAttribute(\"x1\", String(Math.round(x0)));\r\n gradient.setAttribute(\"y1\", String(Math.round(y0)));\r\n gradient.setAttribute(\"x2\", String(Math.round(x1)));\r\n gradient.setAttribute(\"y2\", String(Math.round(y1)));\r\n }\r\n\r\n options.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n const stop = document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\r\n stop.setAttribute(\"offset\", `${100 * offset}%`);\r\n stop.setAttribute(\"stop-color\", color);\r\n gradient.appendChild(stop);\r\n });\r\n\r\n rect.setAttribute(\"fill\", `url('#${name}')`);\r\n this._defs.appendChild(gradient);\r\n } else if (color) {\r\n rect.setAttribute(\"fill\", color);\r\n }\r\n\r\n this._element.appendChild(rect);\r\n }\r\n\r\n _createStyle({ color, name }: { color?: string; name: string }): void {\r\n this._style.innerHTML += `.${name}{ fill: ${color}; }`;\r\n }\r\n}\r\n","import { DrawTypes } from \"../types\";\r\n\r\nexport default {\r\n canvas: \"canvas\",\r\n svg: \"svg\"\r\n} as DrawTypes;\r\n","import { TypeNumber } from \"../types\";\r\n\r\ninterface TypesMap {\r\n [key: number]: TypeNumber;\r\n}\r\n\r\nconst qrTypes: TypesMap = {};\r\n\r\nfor (let type = 0; type <= 40; type++) {\r\n qrTypes[type] = type as TypeNumber;\r\n}\r\n\r\n// 0 types is autodetect\r\n\r\n// types = {\r\n// 0: 0,\r\n// 1: 1,\r\n// ...\r\n// 40: 40\r\n// }\r\n\r\nexport default qrTypes;\r\n","import qrTypes from \"../constants/qrTypes\";\r\nimport drawTypes from \"../constants/drawTypes\";\r\nimport errorCorrectionLevels from \"../constants/errorCorrectionLevels\";\r\nimport { DotType, Options, TypeNumber, ErrorCorrectionLevel, Mode, DrawType, Gradient } from \"../types\";\r\n\r\nexport interface RequiredOptions extends Options {\r\n type: DrawType;\r\n width: number;\r\n height: number;\r\n margin: number;\r\n data: string;\r\n qrOptions: {\r\n typeNumber: TypeNumber;\r\n mode?: Mode;\r\n errorCorrectionLevel: ErrorCorrectionLevel;\r\n };\r\n imageOptions: {\r\n hideBackgroundDots: boolean;\r\n imageSize: number;\r\n crossOrigin?: string;\r\n margin: number;\r\n };\r\n dotsOptions: {\r\n type: DotType;\r\n color: string;\r\n gradient?: Gradient;\r\n };\r\n backgroundOptions: {\r\n color: string;\r\n gradient?: Gradient;\r\n };\r\n}\r\n\r\nconst defaultOptions: RequiredOptions = {\r\n type: drawTypes.canvas,\r\n width: 300,\r\n height: 300,\r\n data: \"\",\r\n margin: 0,\r\n qrOptions: {\r\n typeNumber: qrTypes[0],\r\n mode: undefined,\r\n errorCorrectionLevel: errorCorrectionLevels.Q\r\n },\r\n imageOptions: {\r\n hideBackgroundDots: true,\r\n imageSize: 0.4,\r\n crossOrigin: \"anonymous\",\r\n margin: 0\r\n },\r\n dotsOptions: {\r\n type: \"square\",\r\n color: \"#000\"\r\n },\r\n backgroundOptions: {\r\n color: \"#fff\"\r\n }\r\n};\r\n\r\nexport default defaultOptions;\r\n","import { ErrorCorrectionLevel } from \"../types\";\r\n\r\ninterface ErrorCorrectionLevels {\r\n [key: string]: ErrorCorrectionLevel;\r\n}\r\n\r\nexport default {\r\n L: \"L\",\r\n M: \"M\",\r\n Q: \"Q\",\r\n H: \"H\"\r\n} as ErrorCorrectionLevels;\r\n","import { RequiredOptions } from \"../core/QROptions\";\r\nimport { Gradient } from \"../types\";\r\n\r\nfunction sanitizeGradient(gradient: Gradient): Gradient {\r\n const newGradient = { ...gradient };\r\n\r\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\r\n throw \"Field 'colorStops' is required in gradient\";\r\n }\r\n\r\n if (newGradient.rotation) {\r\n newGradient.rotation = Number(newGradient.rotation);\r\n } else {\r\n newGradient.rotation = 0;\r\n }\r\n\r\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number; color: string }) => ({\r\n ...colorStop,\r\n offset: Number(colorStop.offset)\r\n }));\r\n\r\n return newGradient;\r\n}\r\n\r\nexport default function sanitizeOptions(options: RequiredOptions): RequiredOptions {\r\n const newOptions = { ...options };\r\n\r\n newOptions.width = Number(newOptions.width);\r\n newOptions.height = Number(newOptions.height);\r\n newOptions.margin = Number(newOptions.margin);\r\n newOptions.imageOptions = {\r\n ...newOptions.imageOptions,\r\n hideBackgroundDots: Boolean(newOptions.imageOptions.hideBackgroundDots),\r\n imageSize: Number(newOptions.imageOptions.imageSize),\r\n margin: Number(newOptions.imageOptions.margin)\r\n };\r\n\r\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\r\n newOptions.margin = Math.min(newOptions.width, newOptions.height);\r\n }\r\n\r\n newOptions.dotsOptions = {\r\n ...newOptions.dotsOptions\r\n };\r\n if (newOptions.dotsOptions.gradient) {\r\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient);\r\n }\r\n\r\n if (newOptions.cornersSquareOptions) {\r\n newOptions.cornersSquareOptions = {\r\n ...newOptions.cornersSquareOptions\r\n };\r\n if (newOptions.cornersSquareOptions.gradient) {\r\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient);\r\n }\r\n }\r\n\r\n if (newOptions.cornersDotOptions) {\r\n newOptions.cornersDotOptions = {\r\n ...newOptions.cornersDotOptions\r\n };\r\n if (newOptions.cornersDotOptions.gradient) {\r\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient);\r\n }\r\n }\r\n\r\n if (newOptions.backgroundOptions) {\r\n newOptions.backgroundOptions = {\r\n ...newOptions.backgroundOptions\r\n };\r\n if (newOptions.backgroundOptions.gradient) {\r\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient);\r\n }\r\n }\r\n\r\n return newOptions;\r\n}\r\n","import QRCodeStyling from \"./core/QRCodeStyling\";\r\nimport dotTypes from \"./constants/dotTypes\";\r\nimport cornerDotTypes from \"./constants/cornerDotTypes\";\r\nimport cornerSquareTypes from \"./constants/cornerSquareTypes\";\r\nimport errorCorrectionLevels from \"./constants/errorCorrectionLevels\";\r\nimport errorCorrectionPercents from \"./constants/errorCorrectionPercents\";\r\nimport modes from \"./constants/modes\";\r\nimport qrTypes from \"./constants/qrTypes\";\r\nimport drawTypes from \"./constants/drawTypes\";\r\n\r\nexport * from \"./types\";\r\n\r\nexport {\r\n dotTypes,\r\n cornerDotTypes,\r\n cornerSquareTypes,\r\n errorCorrectionLevels,\r\n errorCorrectionPercents,\r\n modes,\r\n qrTypes,\r\n drawTypes\r\n};\r\n\r\nexport default QRCodeStyling;\r\n","import getMode from \"../tools/getMode\";\r\nimport mergeDeep from \"../tools/merge\";\r\nimport downloadURI from \"../tools/downloadURI\";\r\nimport QRCanvas from \"./QRCanvas\";\r\nimport QRSVG from \"./QRSVG\";\r\nimport drawTypes from \"../constants/drawTypes\";\r\n\r\nimport defaultOptions, { RequiredOptions } from \"./QROptions\";\r\nimport sanitizeOptions from \"../tools/sanitizeOptions\";\r\nimport { Extension, QRCode, Options, DownloadOptions } from \"../types\";\r\nimport qrcode from \"qrcode-generator\";\r\n\r\nexport default class QRCodeStyling {\r\n _options: RequiredOptions;\r\n _container?: HTMLElement;\r\n _canvas?: QRCanvas;\r\n _svg?: QRSVG;\r\n _qr?: QRCode;\r\n _canvasDrawingPromise?: Promise;\r\n _svgDrawingPromise?: Promise;\r\n\r\n constructor(options?: Partial) {\r\n this._options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as RequiredOptions) : defaultOptions;\r\n this.update();\r\n }\r\n\r\n static _clearContainer(container?: HTMLElement): void {\r\n if (container) {\r\n container.innerHTML = \"\";\r\n }\r\n }\r\n\r\n async _getQRStylingElement(extension: Extension = \"png\"): Promise {\r\n if (!this._qr) throw \"QR code is empty\";\r\n\r\n if (extension.toLowerCase() === \"svg\") {\r\n let promise, svg: QRSVG;\r\n\r\n if (this._svg && this._svgDrawingPromise) {\r\n svg = this._svg;\r\n promise = this._svgDrawingPromise;\r\n } else {\r\n svg = new QRSVG(this._options);\r\n promise = svg.drawQR(this._qr);\r\n }\r\n\r\n await promise;\r\n\r\n return svg;\r\n } else {\r\n let promise, canvas: QRCanvas;\r\n\r\n if (this._canvas && this._canvasDrawingPromise) {\r\n canvas = this._canvas;\r\n promise = this._canvasDrawingPromise;\r\n } else {\r\n canvas = new QRCanvas(this._options);\r\n promise = canvas.drawQR(this._qr);\r\n }\r\n\r\n await promise;\r\n\r\n return canvas;\r\n }\r\n }\r\n\r\n update(options?: Partial): void {\r\n QRCodeStyling._clearContainer(this._container);\r\n this._options = options ? sanitizeOptions(mergeDeep(this._options, options) as RequiredOptions) : this._options;\r\n\r\n if (!this._options.data) {\r\n return;\r\n }\r\n\r\n this._qr = qrcode(this._options.qrOptions.typeNumber, this._options.qrOptions.errorCorrectionLevel);\r\n this._qr.addData(this._options.data, this._options.qrOptions.mode || getMode(this._options.data));\r\n this._qr.make();\r\n\r\n if (this._options.type === drawTypes.canvas) {\r\n this._canvas = new QRCanvas(this._options);\r\n this._canvasDrawingPromise = this._canvas.drawQR(this._qr);\r\n this._svgDrawingPromise = undefined;\r\n this._svg = undefined;\r\n } else {\r\n this._svg = new QRSVG(this._options);\r\n this._svgDrawingPromise = this._svg.drawQR(this._qr);\r\n this._canvasDrawingPromise = undefined;\r\n this._canvas = undefined;\r\n }\r\n\r\n this.append(this._container);\r\n }\r\n\r\n append(container?: HTMLElement): void {\r\n if (!container) {\r\n return;\r\n }\r\n\r\n if (typeof container.appendChild !== \"function\") {\r\n throw \"Container should be a single DOM node\";\r\n }\r\n\r\n if (this._options.type === drawTypes.canvas) {\r\n if (this._canvas) {\r\n container.appendChild(this._canvas.getCanvas());\r\n }\r\n } else {\r\n if (this._svg) {\r\n container.appendChild(this._svg.getElement());\r\n }\r\n }\r\n\r\n this._container = container;\r\n }\r\n\r\n async getRawData(extension: Extension = \"png\"): Promise {\r\n if (!this._qr) throw \"QR code is empty\";\r\n const element = await this._getQRStylingElement(extension);\r\n\r\n if (extension.toLowerCase() === \"svg\") {\r\n const serializer = new XMLSerializer();\r\n const source = serializer.serializeToString(((element as unknown) as QRSVG).getElement());\r\n\r\n return new Blob(['\\r\\n' + source], { type: \"image/svg+xml\" });\r\n } else {\r\n return new Promise((resolve) =>\r\n ((element as unknown) as QRCanvas).getCanvas().toBlob(resolve, `image/${extension}`, 1)\r\n );\r\n }\r\n }\r\n\r\n async download(downloadOptions?: Partial | string): Promise {\r\n if (!this._qr) throw \"QR code is empty\";\r\n let extension = \"png\" as Extension;\r\n let name = \"qr\";\r\n\r\n //TODO remove deprecated code in the v2\r\n if (typeof downloadOptions === \"string\") {\r\n extension = downloadOptions as Extension;\r\n console.warn(\r\n \"Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument\"\r\n );\r\n } else if (typeof downloadOptions === \"object\" && downloadOptions !== null) {\r\n if (downloadOptions.name) {\r\n name = downloadOptions.name;\r\n }\r\n if (downloadOptions.extension) {\r\n extension = downloadOptions.extension;\r\n }\r\n }\r\n\r\n const element = await this._getQRStylingElement(extension);\r\n\r\n if (extension.toLowerCase() === \"svg\") {\r\n const serializer = new XMLSerializer();\r\n let source = serializer.serializeToString(((element as unknown) as QRSVG).getElement());\r\n\r\n source = '\\r\\n' + source;\r\n const url = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(source);\r\n downloadURI(url, `${name}.svg`);\r\n } else {\r\n const url = ((element as unknown) as QRCanvas).getCanvas().toDataURL(`image/${extension}`);\r\n downloadURI(url, `${name}.${extension}`);\r\n }\r\n }\r\n}\r\n","import modes from \"../constants/modes\";\r\nimport { Mode } from \"../types\";\r\n\r\nexport default function getMode(data: string): Mode {\r\n switch (true) {\r\n case /^[0-9]*$/.test(data):\r\n return modes.numeric;\r\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\r\n return modes.alphanumeric;\r\n default:\r\n return modes.byte;\r\n }\r\n}\r\n","import { Mode } from \"../types\";\r\n\r\ninterface Modes {\r\n [key: string]: Mode;\r\n}\r\n\r\nexport default {\r\n numeric: \"Numeric\",\r\n alphanumeric: \"Alphanumeric\",\r\n byte: \"Byte\",\r\n kanji: \"Kanji\"\r\n} as Modes;\r\n"],"names":["root","factory","exports","module","define","amd","self","qrcode","typeNumber","errorCorrectionLevel","_typeNumber","_errorCorrectionLevel","QRErrorCorrectionLevel","_modules","_moduleCount","_dataCache","_dataList","_this","makeImpl","test","maskPattern","moduleCount","modules","Array","row","col","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","c","pos","QRUtil","getPatternPosition","i","length","j","bits","getBCHTypeNumber","mod","Math","floor","data","getBCHTypeInfo","inc","bitIndex","byteIndex","maskFunc","getMaskFunction","dark","dataList","rsBlocks","QRRSBlock","getRSBlocks","buffer","qrBitBuffer","put","getMode","getLength","getLengthInBits","write","totalDataCount","dataCount","putBit","offset","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","totalCount","max","getBuffer","rsPoly","getErrorCorrectPolynomial","modPoly","qrPolynomial","modIndex","getAt","totalCodeCount","index","createBytes","addData","mode","newData","qrNumber","qrAlphaNum","qr8BitByte","qrKanji","push","isDark","getModuleCount","make","minLostPoint","pattern","lostPoint","getLostPoint","getBestMaskPattern","createTableTag","cellSize","margin","qrHtml","createSvgTag","alt","title","opts","arguments","text","id","mr","rect","size","qrSvg","scalable","escapeXml","join","trim","createDataURL","min","x","y","createImgTag","img","s","escaped","charAt","createASCII","r1","r2","p","blocks","blocksLastLineNoMargin","ascii","substring","_createHalfASCII","white","black","line","renderTo2dContext","context","fillStyle","fillRect","stringToBytes","stringToBytesFuncs","bytes","charCodeAt","createStringToBytes","unicodeData","numChars","unicodeMap","bin","base64DecodeInputStream","read","b","count","b0","b1","v","String","fromCharCode","unknownChar","PATTERN_POSITION_TABLE","G15","G18","getBCHDigit","L","M","Q","H","digit","d","errorCorrectLength","a","multiply","QRMath","gexp","type","sameCount","darkCount","abs","EXP_TABLE","LOG_TABLE","n","num","shift","_num","e","glog","ratio","RS_BLOCK_TABLE","qrRSBlock","rsBlock","getRsBlockTable","list","_buffer","_length","bufIndex","bit","_data","strToNum","chatToNum","getCode","_bytes","code","byteArrayOutputStream","writeByte","off","len","str","_str","_pos","_buflen","match","decode","width","height","getPixel","gif","_width","_height","pixel","out","writeString","writeShort","raster","getLZWRaster","writeBytes","lzwMinCodeSize","clearCode","endCode","bitLength","table","lzwTable","add","_out","_bitLength","_bitBuffer","byteOut","bitOut","dataIndex","contains","indexOf","flush","toByteArray","_map","_size","key","gifImage","setPixel","base64","_base64","writeEncoded","encode","padlen","toString","base64EncodeOutputStream","utf8","charcode","toUTF8Array","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","isObject","isArray","mergeDeep","target","sources","source","keys","forEach","targetValue","sourceValue","assign","downloadURI","uri","name","link","document","createElement","download","href","body","appendChild","click","removeChild","calculateImageSize","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dotSize","hideDots","imageSize","hideYDots","hideXDots","k","sqrt","ceil","round","this","_context","_type","draw","getNeighbor","drawFunction","dotTypes","_drawDot","_drawClassy","_drawClassyRounded","_drawRounded","_drawExtraRounded","_drawSquare","_rotateFigure","rotation","cx","cy","translate","rotate","closePath","_basicDot","args","arc","PI","_basicSquare","_basicSideRounded","lineTo","_basicCornerRounded","_basicCornerExtraRounded","_basicCornersRounded","_basicCornersExtraRounded","leftNeighbor","rightNeighbor","topNeighbor","bottomNeighbor","neighborsCount","cornerSquareTypes","_basicExtraRounded","cornerDotTypes","squareMask","dotMask","options","_canvas","_options","getContext","getCanvas","clear","canvasContext","clearRect","drawQR","qr","minSize","drawImageSize","_qr","image","loadImage","_image","imageOptions","qrOptions","coverLevel","errorCorrectionPercents","drawBackground","drawDots","hideBackgroundDots","drawCorners","drawImage","backgroundOptions","gradient","gradientOptions","_createGradient","additionalRotation","colorStops","color","addColorStop","filter","xBeginning","yBeginning","dot","dotsOptions","beginPath","xOffset","yOffset","strokeStyle","fill","cornersSquareSize","cornersDotSize","column","cornersSquareOptions","cornersSquare","cornersDotOptions","cornersDot","Promise","resolve","reject","Image","crossOrigin","onload","src","dx","dy","dw","dh","gradientTypes","createRadialGradient","positiveRotation","x0","y0","x1","y1","tan","createLinearGradient","svg","_svg","_element","setAttribute","createElementNS","_defs","_style","getElement","oldElement","cloneNode","parentNode","replaceChild","element","_createColor","_createStyle","_dotsClipPath","_dots","cornersSquareClipPath","cornersDotClipPath","_cornersSquareClipPath","_cornersDotClipPath","_cornerSquares","_cornerDots","_getBase64Image","base64Image","_getImageBlob","url","fetch","blob","_blobToBase64","reader","FileReader","dataUrl","result","readAsDataURL","stop","innerHTML","qrTypes","drawTypes","sanitizeGradient","newGradient","Number","map","colorStop","sanitizeOptions","newOptions","Boolean","update","_clearContainer","container","_getQRStylingElement","extension","toLowerCase","promise","_svgDrawingPromise","canvas","_canvasDrawingPromise","QRCodeStyling","_container","append","getRawData","serializer","XMLSerializer","serializeToString","Blob","toBlob","downloadOptions","console","warn","encodeURIComponent","toDataURL"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"qr-code-styling.js","mappings":"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AAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAGpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAA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","sources":["webpack://QRCodeStyling/webpack/universalModuleDefinition","webpack://QRCodeStyling/./node_modules/qrcode-generator/qrcode.js","webpack://QRCodeStyling/webpack/bootstrap","webpack://QRCodeStyling/webpack/runtime/compat get default export","webpack://QRCodeStyling/webpack/runtime/define property getters","webpack://QRCodeStyling/webpack/runtime/hasOwnProperty shorthand","webpack://QRCodeStyling/./src/tools/merge.ts","webpack://QRCodeStyling/./src/tools/downloadURI.ts","webpack://QRCodeStyling/./src/tools/calculateImageSize.ts","webpack://QRCodeStyling/./src/constants/errorCorrectionPercents.ts","webpack://QRCodeStyling/./src/constants/dotTypes.ts","webpack://QRCodeStyling/./src/figures/dot/canvas/QRDot.ts","webpack://QRCodeStyling/./src/constants/cornerSquareTypes.ts","webpack://QRCodeStyling/./src/figures/cornerSquare/canvas/QRCornerSquare.ts","webpack://QRCodeStyling/./src/constants/cornerDotTypes.ts","webpack://QRCodeStyling/./src/figures/cornerDot/canvas/QRCornerDot.ts","webpack://QRCodeStyling/./src/constants/gradientTypes.ts","webpack://QRCodeStyling/./src/core/QRCanvas.ts","webpack://QRCodeStyling/./src/figures/dot/svg/QRDot.ts","webpack://QRCodeStyling/./src/figures/cornerSquare/svg/QRCornerSquare.ts","webpack://QRCodeStyling/./src/figures/cornerDot/svg/QRCornerDot.ts","webpack://QRCodeStyling/./src/core/QRSVG.ts","webpack://QRCodeStyling/./src/constants/drawTypes.ts","webpack://QRCodeStyling/./src/constants/qrTypes.ts","webpack://QRCodeStyling/./src/core/QROptions.ts","webpack://QRCodeStyling/./src/constants/errorCorrectionLevels.ts","webpack://QRCodeStyling/./src/tools/sanitizeOptions.ts","webpack://QRCodeStyling/./src/index.ts","webpack://QRCodeStyling/./src/core/QRCodeStyling.ts","webpack://QRCodeStyling/./src/tools/getMode.ts","webpack://QRCodeStyling/./src/constants/modes.ts"],"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[\"QRCodeStyling\"] = factory();\n\telse\n\t\troot[\"QRCodeStyling\"] = factory();\n})(self, () => {\nreturn ","//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\nvar qrcode = function() {\n\n //---------------------------------------------------------------------\n // qrcode\n //---------------------------------------------------------------------\n\n /**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\n var qrcode = function(typeNumber, errorCorrectionLevel) {\n\n var PAD0 = 0xEC;\n var PAD1 = 0x11;\n\n var _typeNumber = typeNumber;\n var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n var _modules = null;\n var _moduleCount = 0;\n var _dataCache = null;\n var _dataList = [];\n\n var _this = {};\n\n var makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n var modules = new Array(moduleCount);\n for (var row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (var col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n var setupPositionProbePattern = function(row, col) {\n\n for (var r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (var c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n var getBestMaskPattern = function() {\n\n var minLostPoint = 0;\n var pattern = 0;\n\n for (var i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n var lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n var setupTimingPattern = function() {\n\n for (var r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (var c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n var setupPositionAdjustPattern = function() {\n\n var pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (var i = 0; i < pos.length; i += 1) {\n\n for (var j = 0; j < pos.length; j += 1) {\n\n var row = pos[i];\n var col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (var r = -2; r <= 2; r += 1) {\n\n for (var c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n var setupTypeNumber = function(test) {\n\n var bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n var setupTypeInfo = function(test, maskPattern) {\n\n var data = (_errorCorrectionLevel << 3) | maskPattern;\n var bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n var mapData = function(data, maskPattern) {\n\n var inc = -1;\n var row = _moduleCount - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n var maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (var col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (var c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n var mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n var createBytes = function(buffer, rsBlocks) {\n\n var offset = 0;\n\n var maxDcCount = 0;\n var maxEcCount = 0;\n\n var dcdata = new Array(rsBlocks.length);\n var ecdata = new Array(rsBlocks.length);\n\n for (var r = 0; r < rsBlocks.length; r += 1) {\n\n var dcCount = rsBlocks[r].dataCount;\n var ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (var i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n var modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (var i = 0; i < ecdata[r].length; i += 1) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n var totalCodeCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n var data = new Array(totalCodeCount);\n var index = 0;\n\n for (var i = 0; i < maxDcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n\n for (var i = 0; i < maxEcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n\n return data;\n };\n\n var createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < dataList.length; i += 1) {\n var data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n var newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n var typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < _dataList.length; i++) {\n var data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var qrHtml = '';\n\n qrHtml += '
' +\n escapeXml(title.text) + '' : '';\n qrSvg += (alt.text) ? '' +\n escapeXml(alt.text) + '' : '';\n qrSvg += '';\n qrSvg += '': escaped += '>'; break;\n case '&': escaped += '&'; break;\n case '\"': escaped += '"'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n var _createHalfASCII = function(margin) {\n var cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r1, r2, p;\n\n var blocks = {\n '██': '█',\n '█ ': '▀',\n ' █': '▄',\n ' ': ' '\n };\n\n var blocksLastLineNoMargin = {\n '██': '▀',\n '█ ': '▀',\n ' █': ' ',\n ' ': ' '\n };\n\n var ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '█';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '█';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r, p;\n\n var white = Array(cellSize+1).join('██');\n var black = Array(cellSize+1).join(' ');\n\n var ascii = '';\n var line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n var length = _this.getModuleCount();\n for (var row = 0; row < length; row++) {\n for (var col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrcode.stringToBytes\n //---------------------------------------------------------------------\n\n qrcode.stringToBytesFuncs = {\n 'default' : function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n\n qrcode.stringToBytes = qrcode.stringToBytesFuncs['default'];\n\n //---------------------------------------------------------------------\n // qrcode.createStringToBytes\n //---------------------------------------------------------------------\n\n /**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\n qrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n var unicodeMap = function() {\n\n var bin = base64DecodeInputStream(unicodeData);\n var read = function() {\n var b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n var count = 0;\n var unicodeMap = {};\n while (true) {\n var b0 = bin.read();\n if (b0 == -1) break;\n var b1 = read();\n var b2 = read();\n var b3 = read();\n var k = String.fromCharCode( (b0 << 8) | b1);\n var v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n var unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n var b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n };\n\n //---------------------------------------------------------------------\n // QRMode\n //---------------------------------------------------------------------\n\n var QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n };\n\n //---------------------------------------------------------------------\n // QRErrorCorrectionLevel\n //---------------------------------------------------------------------\n\n var QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n };\n\n //---------------------------------------------------------------------\n // QRMaskPattern\n //---------------------------------------------------------------------\n\n var QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n };\n\n //---------------------------------------------------------------------\n // QRUtil\n //---------------------------------------------------------------------\n\n var QRUtil = function() {\n\n var PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n var _this = {};\n\n var getBCHDigit = function(data) {\n var digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n var d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n var d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n var a = qrPolynomial([1], 0);\n for (var i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n var moduleCount = qrcode.getModuleCount();\n\n var lostPoint = 0;\n\n // LEVEL1\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount; col += 1) {\n\n var sameCount = 0;\n var dark = qrcode.isDark(row, col);\n\n for (var r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (var c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (var row = 0; row < moduleCount - 1; row += 1) {\n for (var col = 0; col < moduleCount - 1; col += 1) {\n var count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount - 6; col += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row, col + 1)\n && qrcode.isDark(row, col + 2)\n && qrcode.isDark(row, col + 3)\n && qrcode.isDark(row, col + 4)\n && !qrcode.isDark(row, col + 5)\n && qrcode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount - 6; row += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row + 1, col)\n && qrcode.isDark(row + 2, col)\n && qrcode.isDark(row + 3, col)\n && qrcode.isDark(row + 4, col)\n && !qrcode.isDark(row + 5, col)\n && qrcode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n\n var darkCount = 0;\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // QRMath\n //---------------------------------------------------------------------\n\n var QRMath = function() {\n\n var EXP_TABLE = new Array(256);\n var LOG_TABLE = new Array(256);\n\n // initialize tables\n for (var i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (var i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (var i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n var _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrPolynomial\n //---------------------------------------------------------------------\n\n function qrPolynomial(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n var _num = function() {\n var offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n var _num = new Array(num.length - offset + shift);\n for (var i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n var _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n var num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (var i = 0; i < _this.getLength(); i += 1) {\n for (var j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n }\n }\n\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n var num = new Array(_this.getLength() );\n for (var i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (var i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // QRRSBlock\n //---------------------------------------------------------------------\n\n var QRRSBlock = function() {\n\n var RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n\n var qrRSBlock = function(totalCount, dataCount) {\n var _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n var _this = {};\n\n var getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n var length = rsBlock.length / 3;\n\n var list = [];\n\n for (var i = 0; i < length; i += 1) {\n\n var count = rsBlock[i * 3 + 0];\n var totalCount = rsBlock[i * 3 + 1];\n var dataCount = rsBlock[i * 3 + 2];\n\n for (var j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrBitBuffer\n //---------------------------------------------------------------------\n\n var qrBitBuffer = function() {\n\n var _buffer = [];\n var _length = 0;\n\n var _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n var bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (var i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n var bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrNumber\n //---------------------------------------------------------------------\n\n var qrNumber = function(data) {\n\n var _mode = QRMode.MODE_NUMBER;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var data = _data;\n\n var i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n var strToNum = function(s) {\n var num = 0;\n for (var i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n var chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrAlphaNum\n //---------------------------------------------------------------------\n\n var qrAlphaNum = function(data) {\n\n var _mode = QRMode.MODE_ALPHA_NUM;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var s = _data;\n\n var i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n var getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case ' ' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qr8BitByte\n //---------------------------------------------------------------------\n\n var qr8BitByte = function(data) {\n\n var _mode = QRMode.MODE_8BIT_BYTE;\n var _data = data;\n var _bytes = qrcode.stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (var i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrKanji\n //---------------------------------------------------------------------\n\n var qrKanji = function(data) {\n\n var _mode = QRMode.MODE_KANJI;\n var _data = data;\n\n var stringToBytes = qrcode.stringToBytesFuncs['SJIS'];\n if (!stringToBytes) {\n throw 'sjis not supported.';\n }\n !function(c, code) {\n // self test for sjis support.\n var test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n var _bytes = stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n var data = _bytes;\n\n var i = 0;\n\n while (i + 1 < data.length) {\n\n var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n };\n\n //=====================================================================\n // GIF Support etc.\n //\n\n //---------------------------------------------------------------------\n // byteArrayOutputStream\n //---------------------------------------------------------------------\n\n var byteArrayOutputStream = function() {\n\n var _bytes = [];\n\n var _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (var i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (var i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n var s = '';\n s += '[';\n for (var i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64EncodeOutputStream\n //---------------------------------------------------------------------\n\n var base64EncodeOutputStream = function() {\n\n var _buffer = 0;\n var _buflen = 0;\n var _length = 0;\n var _base64 = '';\n\n var _this = {};\n\n var writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n var encode = function(n) {\n if (n < 0) {\n // error.\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n }\n throw 'n:' + n;\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n var padlen = 3 - _length % 3;\n for (var i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64DecodeInputStream\n //---------------------------------------------------------------------\n\n var base64DecodeInputStream = function(str) {\n\n var _str = str;\n var _pos = 0;\n var _buffer = 0;\n var _buflen = 0;\n\n var _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n var c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n var n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n var decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // gifImage (B/W)\n //---------------------------------------------------------------------\n\n var gifImage = function(width, height) {\n\n var _width = width;\n var _height = height;\n var _data = new Array(width * height);\n\n var _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n var lzwMinCodeSize = 2;\n var raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n var offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n var bitOutputStream = function(out) {\n\n var _out = out;\n var _bitLength = 0;\n var _bitBuffer = 0;\n\n var _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n var getLZWRaster = function(lzwMinCodeSize) {\n\n var clearCode = 1 << lzwMinCodeSize;\n var endCode = (1 << lzwMinCodeSize) + 1;\n var bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n var table = lzwTable();\n\n for (var i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n var byteOut = byteArrayOutputStream();\n var bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n var dataIndex = 0;\n\n var s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n var c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n var lzwTable = function() {\n\n var _map = {};\n var _size = 0;\n\n var _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n };\n\n var createDataURL = function(width, height, getPixel) {\n var gif = gifImage(width, height);\n for (var y = 0; y < height; y += 1) {\n for (var x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n var b = byteArrayOutputStream();\n gif.write(b);\n\n var base64 = base64EncodeOutputStream();\n var bytes = b.toByteArray();\n for (var i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n };\n\n //---------------------------------------------------------------------\n // returns qrcode function.\n\n return qrcode;\n}();\n\n// multibyte support\n!function() {\n\n qrcode.stringToBytesFuncs['UTF-8'] = function(s) {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n var utf8 = [];\n for (var i=0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n if (charcode < 0x80) utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6),\n 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n // surrogate pair\n else {\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff)<<10)\n | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >>18),\n 0x80 | ((charcode>>12) & 0x3f),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n };\n\n}();\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n }\n}(function () {\n return qrcode;\n}));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import { UnknownObject } from \"../types\";\r\n\r\nconst isObject = (obj: Record): boolean => !!obj && typeof obj === \"object\" && !Array.isArray(obj);\r\n\r\nexport default function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\r\n if (!sources.length) return target;\r\n const source = sources.shift();\r\n if (source === undefined || !isObject(target) || !isObject(source)) return target;\r\n target = { ...target };\r\n Object.keys(source).forEach((key: string): void => {\r\n const targetValue = target[key];\r\n const sourceValue = source[key];\r\n\r\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\r\n target[key] = sourceValue;\r\n } else if (isObject(targetValue) && isObject(sourceValue)) {\r\n target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue);\r\n } else {\r\n target[key] = sourceValue;\r\n }\r\n });\r\n\r\n return mergeDeep(target, ...sources);\r\n}\r\n","export default function downloadURI(uri: string, name: string): void {\r\n const link = document.createElement(\"a\");\r\n link.download = name;\r\n link.href = uri;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n}\r\n","interface ImageSizeOptions {\r\n originalHeight: number;\r\n originalWidth: number;\r\n maxHiddenDots: number;\r\n maxHiddenAxisDots?: number;\r\n dotSize: number;\r\n}\r\n\r\ninterface ImageSizeResult {\r\n height: number;\r\n width: number;\r\n hideYDots: number;\r\n hideXDots: number;\r\n}\r\n\r\nexport default function calculateImageSize({\r\n originalHeight,\r\n originalWidth,\r\n maxHiddenDots,\r\n maxHiddenAxisDots,\r\n dotSize\r\n}: ImageSizeOptions): ImageSizeResult {\r\n const hideDots = { x: 0, y: 0 };\r\n const imageSize = { x: 0, y: 0 };\r\n\r\n if (originalHeight <= 0 || originalWidth <= 0 || maxHiddenDots <= 0 || dotSize <= 0) {\r\n return {\r\n height: 0,\r\n width: 0,\r\n hideYDots: 0,\r\n hideXDots: 0\r\n };\r\n }\r\n\r\n const k = originalHeight / originalWidth;\r\n\r\n //Getting the maximum possible axis hidden dots\r\n hideDots.x = Math.floor(Math.sqrt(maxHiddenDots / k));\r\n //The count of hidden dot's can't be less than 1\r\n if (hideDots.x <= 0) hideDots.x = 1;\r\n //Check the limit of the maximum allowed axis hidden dots\r\n if (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.x) hideDots.x = maxHiddenAxisDots;\r\n //The count of dots should be odd\r\n if (hideDots.x % 2 === 0) hideDots.x--;\r\n imageSize.x = hideDots.x * dotSize;\r\n //Calculate opposite axis hidden dots based on axis value.\r\n //The value will be odd.\r\n //We use ceil to prevent dots covering by the image.\r\n hideDots.y = 1 + 2 * Math.ceil((hideDots.x * k - 1) / 2);\r\n imageSize.y = Math.round(imageSize.x * k);\r\n //If the result dots count is bigger than max - then decrease size and calculate again\r\n if (hideDots.y * hideDots.x > maxHiddenDots || (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.y)) {\r\n if (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.y) {\r\n hideDots.y = maxHiddenAxisDots;\r\n if (hideDots.y % 2 === 0) hideDots.x--;\r\n } else {\r\n hideDots.y -= 2;\r\n }\r\n imageSize.y = hideDots.y * dotSize;\r\n hideDots.x = 1 + 2 * Math.ceil((hideDots.y / k - 1) / 2);\r\n imageSize.x = Math.round(imageSize.y / k);\r\n }\r\n\r\n return {\r\n height: imageSize.y,\r\n width: imageSize.x,\r\n hideYDots: hideDots.x,\r\n hideXDots: hideDots.y\r\n };\r\n}\r\n","interface ErrorCorrectionPercents {\r\n [key: string]: number;\r\n}\r\n\r\nexport default {\r\n L: 0.07,\r\n M: 0.15,\r\n Q: 0.25,\r\n H: 0.3\r\n} as ErrorCorrectionPercents;\r\n","import { DotTypes } from \"../types\";\r\n\r\nexport default {\r\n dots: \"dots\",\r\n rounded: \"rounded\",\r\n classy: \"classy\",\r\n classyRounded: \"classy-rounded\",\r\n square: \"square\",\r\n extraRounded: \"extra-rounded\"\r\n} as DotTypes;\r\n","import dotTypes from \"../../../constants/dotTypes\";\nimport {\n DotType,\n GetNeighbor,\n RotateFigureArgsCanvas,\n BasicFigureDrawArgsCanvas,\n DrawArgsCanvas\n} from \"../../../types\";\n\nexport default class QRDot {\n _context: CanvasRenderingContext2D;\n _type: DotType;\n\n constructor({ context, type }: { context: CanvasRenderingContext2D; type: DotType }) {\n this._context = context;\n this._type = type;\n }\n\n draw(x: number, y: number, size: number, getNeighbor: GetNeighbor): void {\n const context = this._context;\n const type = this._type;\n let drawFunction;\n\n switch (type) {\n case dotTypes.dots:\n drawFunction = this._drawDot;\n break;\n case dotTypes.classy:\n drawFunction = this._drawClassy;\n break;\n case dotTypes.classyRounded:\n drawFunction = this._drawClassyRounded;\n break;\n case dotTypes.rounded:\n drawFunction = this._drawRounded;\n break;\n case dotTypes.extraRounded:\n drawFunction = this._drawExtraRounded;\n break;\n case dotTypes.square:\n default:\n drawFunction = this._drawSquare;\n }\n\n drawFunction.call(this, { x, y, size, context, getNeighbor });\n }\n\n _rotateFigure({ x, y, size, context, rotation = 0, draw }: RotateFigureArgsCanvas): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n context.translate(cx, cy);\n rotation && context.rotate(rotation);\n draw();\n context.closePath();\n rotation && context.rotate(-rotation);\n context.translate(-cx, -cy);\n }\n\n _basicDot(args: BasicFigureDrawArgsCanvas): void {\n const { size, context } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n context.arc(0, 0, size / 2, 0, Math.PI * 2);\n }\n });\n }\n\n _basicSquare(args: BasicFigureDrawArgsCanvas): void {\n const { size, context } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n context.rect(-size / 2, -size / 2, size, size);\n }\n });\n }\n\n //if rotation === 0 - right side is rounded\n _basicSideRounded(args: BasicFigureDrawArgsCanvas): void {\n const { size, context } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n context.arc(0, 0, size / 2, -Math.PI / 2, Math.PI / 2);\n context.lineTo(-size / 2, size / 2);\n context.lineTo(-size / 2, -size / 2);\n context.lineTo(0, -size / 2);\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n _basicCornerRounded(args: BasicFigureDrawArgsCanvas): void {\n const { size, context } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n context.arc(0, 0, size / 2, -Math.PI / 2, 0);\n context.lineTo(size / 2, size / 2);\n context.lineTo(-size / 2, size / 2);\n context.lineTo(-size / 2, -size / 2);\n context.lineTo(0, -size / 2);\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n _basicCornerExtraRounded(args: BasicFigureDrawArgsCanvas): void {\n const { size, context } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n context.arc(-size / 2, size / 2, size, -Math.PI / 2, 0);\n context.lineTo(-size / 2, size / 2);\n context.lineTo(-size / 2, -size / 2);\n }\n });\n }\n\n _basicCornersRounded(args: BasicFigureDrawArgsCanvas): void {\n const { size, context } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n context.arc(0, 0, size / 2, -Math.PI / 2, 0);\n context.lineTo(size / 2, size / 2);\n context.lineTo(0, size / 2);\n context.arc(0, 0, size / 2, Math.PI / 2, Math.PI);\n context.lineTo(-size / 2, -size / 2);\n context.lineTo(0, -size / 2);\n }\n });\n }\n\n _basicCornersExtraRounded(args: BasicFigureDrawArgsCanvas): void {\n const { size, context } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n context.arc(-size / 2, size / 2, size, -Math.PI / 2, 0);\n context.arc(size / 2, -size / 2, size, Math.PI / 2, Math.PI);\n }\n });\n }\n\n _drawDot({ x, y, size, context }: DrawArgsCanvas): void {\n this._basicDot({ x, y, size, context, rotation: 0 });\n }\n\n _drawSquare({ x, y, size, context }: DrawArgsCanvas): void {\n this._basicSquare({ x, y, size, context, rotation: 0 });\n }\n\n _drawRounded({ x, y, size, context, getNeighbor }: DrawArgsCanvas): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicDot({ x, y, size, context, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this._basicSquare({ x, y, size, context, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicCornerRounded({ x, y, size, context, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicSideRounded({ x, y, size, context, rotation });\n return;\n }\n }\n\n _drawExtraRounded({ x, y, size, context, getNeighbor }: DrawArgsCanvas): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicDot({ x, y, size, context, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this._basicSquare({ x, y, size, context, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicCornerExtraRounded({ x, y, size, context, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicSideRounded({ x, y, size, context, rotation });\n return;\n }\n }\n\n _drawClassy({ x, y, size, context, getNeighbor }: DrawArgsCanvas): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicCornersRounded({ x, y, size, context, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this._basicCornerRounded({ x, y, size, context, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this._basicCornerRounded({ x, y, size, context, rotation: Math.PI / 2 });\n return;\n }\n\n this._basicSquare({ x, y, size, context, rotation: 0 });\n }\n\n _drawClassyRounded({ x, y, size, context, getNeighbor }: DrawArgsCanvas): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicCornersRounded({ x, y, size, context, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this._basicCornerExtraRounded({ x, y, size, context, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this._basicCornerExtraRounded({ x, y, size, context, rotation: Math.PI / 2 });\n return;\n }\n\n this._basicSquare({ x, y, size, context, rotation: 0 });\n }\n}\n","import { CornerSquareTypes } from \"../types\";\r\n\r\nexport default {\r\n dot: \"dot\",\r\n square: \"square\",\r\n extraRounded: \"extra-rounded\"\r\n} as CornerSquareTypes;\r\n","import cornerSquareTypes from \"../../../constants/cornerSquareTypes\";\r\nimport { CornerSquareType, RotateFigureArgsCanvas, BasicFigureDrawArgsCanvas, DrawArgsCanvas } from \"../../../types\";\r\n\r\nexport default class QRCornerSquare {\r\n _context: CanvasRenderingContext2D;\r\n _type: CornerSquareType;\r\n\r\n constructor({ context, type }: { context: CanvasRenderingContext2D; type: CornerSquareType }) {\r\n this._context = context;\r\n this._type = type;\r\n }\r\n\r\n draw(x: number, y: number, size: number, rotation: number): void {\r\n const context = this._context;\r\n const type = this._type;\r\n let drawFunction;\r\n\r\n switch (type) {\r\n case cornerSquareTypes.square:\r\n drawFunction = this._drawSquare;\r\n break;\r\n case cornerSquareTypes.extraRounded:\r\n drawFunction = this._drawExtraRounded;\r\n break;\r\n case cornerSquareTypes.dot:\r\n default:\r\n drawFunction = this._drawDot;\r\n }\r\n\r\n drawFunction.call(this, { x, y, size, context, rotation });\r\n }\r\n\r\n _rotateFigure({ x, y, size, context, rotation = 0, draw }: RotateFigureArgsCanvas): void {\r\n const cx = x + size / 2;\r\n const cy = y + size / 2;\r\n\r\n context.translate(cx, cy);\r\n rotation && context.rotate(rotation);\r\n draw();\r\n context.closePath();\r\n rotation && context.rotate(-rotation);\r\n context.translate(-cx, -cy);\r\n }\r\n\r\n _basicDot(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n const dotSize = size / 7;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.arc(0, 0, size / 2, 0, Math.PI * 2);\r\n context.arc(0, 0, size / 2 - dotSize, 0, Math.PI * 2);\r\n }\r\n });\r\n }\r\n\r\n _basicSquare(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n const dotSize = size / 7;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.rect(-size / 2, -size / 2, size, size);\r\n context.rect(-size / 2 + dotSize, -size / 2 + dotSize, size - 2 * dotSize, size - 2 * dotSize);\r\n }\r\n });\r\n }\r\n\r\n _basicExtraRounded(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n const dotSize = size / 7;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.arc(-dotSize, -dotSize, 2.5 * dotSize, Math.PI, -Math.PI / 2);\r\n context.lineTo(dotSize, -3.5 * dotSize);\r\n context.arc(dotSize, -dotSize, 2.5 * dotSize, -Math.PI / 2, 0);\r\n context.lineTo(3.5 * dotSize, -dotSize);\r\n context.arc(dotSize, dotSize, 2.5 * dotSize, 0, Math.PI / 2);\r\n context.lineTo(-dotSize, 3.5 * dotSize);\r\n context.arc(-dotSize, dotSize, 2.5 * dotSize, Math.PI / 2, Math.PI);\r\n context.lineTo(-3.5 * dotSize, -dotSize);\r\n\r\n context.arc(-dotSize, -dotSize, 1.5 * dotSize, Math.PI, -Math.PI / 2);\r\n context.lineTo(dotSize, -2.5 * dotSize);\r\n context.arc(dotSize, -dotSize, 1.5 * dotSize, -Math.PI / 2, 0);\r\n context.lineTo(2.5 * dotSize, -dotSize);\r\n context.arc(dotSize, dotSize, 1.5 * dotSize, 0, Math.PI / 2);\r\n context.lineTo(-dotSize, 2.5 * dotSize);\r\n context.arc(-dotSize, dotSize, 1.5 * dotSize, Math.PI / 2, Math.PI);\r\n context.lineTo(-2.5 * dotSize, -dotSize);\r\n }\r\n });\r\n }\r\n\r\n _drawDot({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n this._basicDot({ x, y, size, context, rotation });\r\n }\r\n\r\n _drawSquare({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n this._basicSquare({ x, y, size, context, rotation });\r\n }\r\n\r\n _drawExtraRounded({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n this._basicExtraRounded({ x, y, size, context, rotation });\r\n }\r\n}\r\n","import { CornerDotTypes } from \"../types\";\r\n\r\nexport default {\r\n dot: \"dot\",\r\n square: \"square\"\r\n} as CornerDotTypes;\r\n","import cornerDotTypes from \"../../../constants/cornerDotTypes\";\r\nimport { CornerDotType, RotateFigureArgsCanvas, BasicFigureDrawArgsCanvas, DrawArgsCanvas } from \"../../../types\";\r\n\r\nexport default class QRCornerDot {\r\n _context: CanvasRenderingContext2D;\r\n _type: CornerDotType;\r\n\r\n constructor({ context, type }: { context: CanvasRenderingContext2D; type: CornerDotType }) {\r\n this._context = context;\r\n this._type = type;\r\n }\r\n\r\n draw(x: number, y: number, size: number, rotation: number): void {\r\n const context = this._context;\r\n const type = this._type;\r\n let drawFunction;\r\n\r\n switch (type) {\r\n case cornerDotTypes.square:\r\n drawFunction = this._drawSquare;\r\n break;\r\n case cornerDotTypes.dot:\r\n default:\r\n drawFunction = this._drawDot;\r\n }\r\n\r\n drawFunction.call(this, { x, y, size, context, rotation });\r\n }\r\n\r\n _rotateFigure({ x, y, size, context, rotation = 0, draw }: RotateFigureArgsCanvas): void {\r\n const cx = x + size / 2;\r\n const cy = y + size / 2;\r\n\r\n context.translate(cx, cy);\r\n rotation && context.rotate(rotation);\r\n draw();\r\n context.closePath();\r\n rotation && context.rotate(-rotation);\r\n context.translate(-cx, -cy);\r\n }\r\n\r\n _basicDot(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.arc(0, 0, size / 2, 0, Math.PI * 2);\r\n }\r\n });\r\n }\r\n\r\n _basicSquare(args: BasicFigureDrawArgsCanvas): void {\r\n const { size, context } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n context.rect(-size / 2, -size / 2, size, size);\r\n }\r\n });\r\n }\r\n\r\n _drawDot({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n this._basicDot({ x, y, size, context, rotation });\r\n }\r\n\r\n _drawSquare({ x, y, size, context, rotation }: DrawArgsCanvas): void {\r\n this._basicSquare({ x, y, size, context, rotation });\r\n }\r\n}\r\n","import { GradientTypes } from \"../types\";\r\n\r\nexport default {\r\n radial: \"radial\",\r\n linear: \"linear\"\r\n} as GradientTypes;\r\n","import calculateImageSize from \"../tools/calculateImageSize\";\r\nimport errorCorrectionPercents from \"../constants/errorCorrectionPercents\";\r\nimport QRDot from \"../figures/dot/canvas/QRDot\";\r\nimport QRCornerSquare from \"../figures/cornerSquare/canvas/QRCornerSquare\";\r\nimport QRCornerDot from \"../figures/cornerDot/canvas/QRCornerDot\";\r\nimport { RequiredOptions } from \"./QROptions\";\r\nimport gradientTypes from \"../constants/gradientTypes\";\r\nimport { QRCode, Gradient, FilterFunction } from \"../types\";\r\n\r\nconst squareMask = [\r\n [1, 1, 1, 1, 1, 1, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 1, 1, 1, 1, 1, 1]\r\n];\r\n\r\nconst dotMask = [\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0]\r\n];\r\n\r\nexport default class QRCanvas {\r\n _canvas: HTMLCanvasElement;\r\n _options: RequiredOptions;\r\n _qr?: QRCode;\r\n _image?: HTMLImageElement;\r\n\r\n //TODO don't pass all options to this class\r\n constructor(options: RequiredOptions) {\r\n this._canvas = document.createElement(\"canvas\");\r\n this._canvas.width = options.width;\r\n this._canvas.height = options.height;\r\n this._options = options;\r\n }\r\n\r\n get context(): CanvasRenderingContext2D | null {\r\n return this._canvas.getContext(\"2d\");\r\n }\r\n\r\n get width(): number {\r\n return this._canvas.width;\r\n }\r\n\r\n get height(): number {\r\n return this._canvas.height;\r\n }\r\n\r\n getCanvas(): HTMLCanvasElement {\r\n return this._canvas;\r\n }\r\n\r\n clear(): void {\r\n const canvasContext = this.context;\r\n\r\n if (canvasContext) {\r\n canvasContext.clearRect(0, 0, this._canvas.width, this._canvas.height);\r\n }\r\n }\r\n\r\n async drawQR(qr: QRCode): Promise {\r\n const count = qr.getModuleCount();\r\n const minSize = Math.min(this._options.width, this._options.height) - this._options.margin * 2;\r\n const dotSize = Math.floor(minSize / count);\r\n let drawImageSize = {\r\n hideXDots: 0,\r\n hideYDots: 0,\r\n width: 0,\r\n height: 0\r\n };\r\n\r\n this._qr = qr;\r\n\r\n if (this._options.image) {\r\n await this.loadImage();\r\n if (!this._image) return;\r\n const { imageOptions, qrOptions } = this._options;\r\n const coverLevel = imageOptions.imageSize * errorCorrectionPercents[qrOptions.errorCorrectionLevel];\r\n const maxHiddenDots = Math.floor(coverLevel * count * count);\r\n\r\n drawImageSize = calculateImageSize({\r\n originalWidth: this._image.width,\r\n originalHeight: this._image.height,\r\n maxHiddenDots,\r\n maxHiddenAxisDots: count - 14,\r\n dotSize\r\n });\r\n }\r\n\r\n this.clear();\r\n this.drawBackground();\r\n\r\n //Draw the dots with the given filter function\r\n this.drawDots((i: number, j: number): boolean => {\r\n if (this._options.imageOptions.hideBackgroundDots) {\r\n if (\r\n i >= (count - drawImageSize.hideXDots) / 2 &&\r\n i < (count + drawImageSize.hideXDots) / 2 &&\r\n j >= (count - drawImageSize.hideYDots) / 2 &&\r\n j < (count + drawImageSize.hideYDots) / 2\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) {\r\n return false;\r\n }\r\n\r\n if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) {\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n this.drawCorners();\r\n\r\n if (this._options.image) {\r\n this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\r\n }\r\n }\r\n\r\n drawBackground(): void {\r\n const canvasContext = this.context;\r\n const options = this._options;\r\n\r\n if (canvasContext) {\r\n if (options.backgroundOptions.gradient) {\r\n const gradientOptions = options.backgroundOptions.gradient;\r\n const gradient = this._createGradient({\r\n context: canvasContext,\r\n options: gradientOptions,\r\n additionalRotation: 0,\r\n x: 0,\r\n y: 0,\r\n size: this._canvas.width > this._canvas.height ? this._canvas.width : this._canvas.height\r\n });\r\n\r\n gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n gradient.addColorStop(offset, color);\r\n });\r\n\r\n canvasContext.fillStyle = gradient;\r\n } else if (options.backgroundOptions.color) {\r\n canvasContext.fillStyle = options.backgroundOptions.color;\r\n }\r\n canvasContext.fillRect(0, 0, this._canvas.width, this._canvas.height);\r\n }\r\n }\r\n\r\n drawDots(filter?: FilterFunction): void {\r\n if (!this._qr) {\r\n throw \"QR code is not defined\";\r\n }\r\n\r\n const canvasContext = this.context;\r\n\r\n if (!canvasContext) {\r\n throw \"QR code is not defined\";\r\n }\r\n\r\n const options = this._options;\r\n const count = this._qr.getModuleCount();\r\n\r\n if (count > options.width || count > options.height) {\r\n throw \"The canvas is too small.\";\r\n }\r\n\r\n const minSize = Math.min(options.width, options.height) - options.margin * 2;\r\n const dotSize = Math.floor(minSize / count);\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type });\r\n\r\n canvasContext.beginPath();\r\n\r\n for (let i = 0; i < count; i++) {\r\n for (let j = 0; j < count; j++) {\r\n if (filter && !filter(i, j)) {\r\n continue;\r\n }\r\n if (!this._qr.isDark(i, j)) {\r\n continue;\r\n }\r\n\r\n const x = this._options.useLegacyDotRotation ? xBeginning + i * dotSize : yBeginning + j * dotSize;\r\n const y = this._options.useLegacyDotRotation ? yBeginning + j * dotSize : xBeginning + i * dotSize;\r\n\r\n dot.draw(\r\n x,\r\n y,\r\n dotSize,\r\n //Get neighbor function\r\n (xOffset: number, yOffset: number): boolean => {\r\n //Out of bounds check\r\n\r\n if (this._options.useLegacyDotRotation) {\r\n if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false;\r\n if (filter && !filter(i + xOffset, j + yOffset)) return false;\r\n return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset);\r\n } else {\r\n if (j + xOffset < 0 || i + yOffset < 0 || j + xOffset >= count || i + yOffset >= count) return false;\r\n if (filter && !filter(j + xOffset, i + yOffset)) return false;\r\n return !!this._qr && this._qr.isDark(i + yOffset, j + xOffset);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n if (options.dotsOptions.gradient) {\r\n const gradientOptions = options.dotsOptions.gradient;\r\n const gradient = this._createGradient({\r\n context: canvasContext,\r\n options: gradientOptions,\r\n additionalRotation: 0,\r\n x: xBeginning,\r\n y: yBeginning,\r\n size: count * dotSize\r\n });\r\n\r\n gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n gradient.addColorStop(offset, color);\r\n });\r\n\r\n canvasContext.fillStyle = canvasContext.strokeStyle = gradient;\r\n } else if (options.dotsOptions.color) {\r\n canvasContext.fillStyle = canvasContext.strokeStyle = options.dotsOptions.color;\r\n }\r\n\r\n canvasContext.fill(\"evenodd\");\r\n }\r\n\r\n drawCorners(filter?: FilterFunction): void {\r\n if (!this._qr) {\r\n throw \"QR code is not defined\";\r\n }\r\n\r\n const canvasContext = this.context;\r\n\r\n if (!canvasContext) {\r\n throw \"QR code is not defined\";\r\n }\r\n\r\n const options = this._options;\r\n\r\n const count = this._qr.getModuleCount();\r\n const minSize = Math.min(options.width, options.height) - options.margin * 2;\r\n const dotSize = Math.floor(minSize / count);\r\n const cornersSquareSize = dotSize * 7;\r\n const cornersDotSize = dotSize * 3;\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n\r\n [\r\n [0, 0, 0],\r\n [1, 0, Math.PI / 2],\r\n [0, 1, -Math.PI / 2]\r\n ].forEach(([column, row, rotation]) => {\r\n if (filter && !filter(column, row)) {\r\n return;\r\n }\r\n\r\n const x = xBeginning + column * dotSize * (count - 7);\r\n const y = yBeginning + row * dotSize * (count - 7);\r\n\r\n if (options.cornersSquareOptions?.type) {\r\n const cornersSquare = new QRCornerSquare({ context: canvasContext, type: options.cornersSquareOptions?.type });\r\n\r\n canvasContext.beginPath();\r\n cornersSquare.draw(x, y, cornersSquareSize, rotation);\r\n } else {\r\n const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type });\r\n\r\n canvasContext.beginPath();\r\n\r\n for (let i = 0; i < squareMask.length; i++) {\r\n for (let j = 0; j < squareMask[i].length; j++) {\r\n if (!squareMask[i]?.[j]) {\r\n continue;\r\n }\r\n\r\n dot.draw(\r\n x + i * dotSize,\r\n y + j * dotSize,\r\n dotSize,\r\n (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (options.cornersSquareOptions?.gradient) {\r\n const gradientOptions = options.cornersSquareOptions.gradient;\r\n const gradient = this._createGradient({\r\n context: canvasContext,\r\n options: gradientOptions,\r\n additionalRotation: rotation,\r\n x,\r\n y,\r\n size: cornersSquareSize\r\n });\r\n\r\n gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n gradient.addColorStop(offset, color);\r\n });\r\n\r\n canvasContext.fillStyle = canvasContext.strokeStyle = gradient;\r\n } else if (options.cornersSquareOptions?.color) {\r\n canvasContext.fillStyle = canvasContext.strokeStyle = options.cornersSquareOptions.color;\r\n }\r\n\r\n canvasContext.fill(\"evenodd\");\r\n\r\n if (options.cornersDotOptions?.type) {\r\n const cornersDot = new QRCornerDot({ context: canvasContext, type: options.cornersDotOptions?.type });\r\n\r\n canvasContext.beginPath();\r\n cornersDot.draw(x + dotSize * 2, y + dotSize * 2, cornersDotSize, rotation);\r\n } else {\r\n const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type });\r\n\r\n canvasContext.beginPath();\r\n\r\n for (let i = 0; i < dotMask.length; i++) {\r\n for (let j = 0; j < dotMask[i].length; j++) {\r\n if (!dotMask[i]?.[j]) {\r\n continue;\r\n }\r\n\r\n dot.draw(\r\n x + i * dotSize,\r\n y + j * dotSize,\r\n dotSize,\r\n (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (options.cornersDotOptions?.gradient) {\r\n const gradientOptions = options.cornersDotOptions.gradient;\r\n const gradient = this._createGradient({\r\n context: canvasContext,\r\n options: gradientOptions,\r\n additionalRotation: rotation,\r\n x: x + dotSize * 2,\r\n y: y + dotSize * 2,\r\n size: cornersDotSize\r\n });\r\n\r\n gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n gradient.addColorStop(offset, color);\r\n });\r\n\r\n canvasContext.fillStyle = canvasContext.strokeStyle = gradient;\r\n } else if (options.cornersDotOptions?.color) {\r\n canvasContext.fillStyle = canvasContext.strokeStyle = options.cornersDotOptions.color;\r\n }\r\n\r\n canvasContext.fill(\"evenodd\");\r\n });\r\n }\r\n\r\n loadImage(): Promise {\r\n return new Promise((resolve, reject) => {\r\n const options = this._options;\r\n const image = new Image();\r\n\r\n if (!options.image) {\r\n return reject(\"Image is not defined\");\r\n }\r\n\r\n if (typeof options.imageOptions.crossOrigin === \"string\") {\r\n image.crossOrigin = options.imageOptions.crossOrigin;\r\n }\r\n\r\n this._image = image;\r\n image.onload = (): void => {\r\n resolve();\r\n };\r\n image.src = options.image;\r\n });\r\n }\r\n\r\n drawImage({\r\n width,\r\n height,\r\n count,\r\n dotSize\r\n }: {\r\n width: number;\r\n height: number;\r\n count: number;\r\n dotSize: number;\r\n }): void {\r\n const canvasContext = this.context;\r\n\r\n if (!canvasContext) {\r\n throw \"canvasContext is not defined\";\r\n }\r\n\r\n if (!this._image) {\r\n throw \"image is not defined\";\r\n }\r\n\r\n const options = this._options;\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n const dx = xBeginning + options.imageOptions.margin + (count * dotSize - width) / 2;\r\n const dy = yBeginning + options.imageOptions.margin + (count * dotSize - height) / 2;\r\n const dw = width - options.imageOptions.margin * 2;\r\n const dh = height - options.imageOptions.margin * 2;\r\n\r\n canvasContext.drawImage(this._image, dx, dy, dw < 0 ? 0 : dw, dh < 0 ? 0 : dh);\r\n }\r\n\r\n _createGradient({\r\n context,\r\n options,\r\n additionalRotation,\r\n x,\r\n y,\r\n size\r\n }: {\r\n context: CanvasRenderingContext2D;\r\n options: Gradient;\r\n additionalRotation: number;\r\n x: number;\r\n y: number;\r\n size: number;\r\n }): CanvasGradient {\r\n let gradient;\r\n\r\n if (options.type === gradientTypes.radial) {\r\n gradient = context.createRadialGradient(x + size / 2, y + size / 2, 0, x + size / 2, y + size / 2, size / 2);\r\n } else {\r\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\r\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\r\n let x0 = x + size / 2;\r\n let y0 = y + size / 2;\r\n let x1 = x + size / 2;\r\n let y1 = y + size / 2;\r\n\r\n if (\r\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\r\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\r\n ) {\r\n x0 = x0 - size / 2;\r\n y0 = y0 - (size / 2) * Math.tan(rotation);\r\n x1 = x1 + size / 2;\r\n y1 = y1 + (size / 2) * Math.tan(rotation);\r\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\r\n y0 = y0 - size / 2;\r\n x0 = x0 - size / 2 / Math.tan(rotation);\r\n y1 = y1 + size / 2;\r\n x1 = x1 + size / 2 / Math.tan(rotation);\r\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\r\n x0 = x0 + size / 2;\r\n y0 = y0 + (size / 2) * Math.tan(rotation);\r\n x1 = x1 - size / 2;\r\n y1 = y1 - (size / 2) * Math.tan(rotation);\r\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\r\n y0 = y0 + size / 2;\r\n x0 = x0 + size / 2 / Math.tan(rotation);\r\n y1 = y1 - size / 2;\r\n x1 = x1 - size / 2 / Math.tan(rotation);\r\n }\r\n\r\n gradient = context.createLinearGradient(Math.round(x0), Math.round(y0), Math.round(x1), Math.round(y1));\r\n }\r\n\r\n return gradient;\r\n }\r\n}\r\n","import dotTypes from \"../../../constants/dotTypes\";\r\nimport { DotType, GetNeighbor, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../../types\";\r\n\r\nexport default class QRDot {\r\n _element?: SVGElement;\r\n _svg: SVGElement;\r\n _type: DotType;\r\n\r\n constructor({ svg, type }: { svg: SVGElement; type: DotType }) {\r\n this._svg = svg;\r\n this._type = type;\r\n }\r\n\r\n draw(x: number, y: number, size: number, getNeighbor: GetNeighbor): void {\r\n const type = this._type;\r\n let drawFunction;\r\n\r\n switch (type) {\r\n case dotTypes.dots:\r\n drawFunction = this._drawDot;\r\n break;\r\n case dotTypes.classy:\r\n drawFunction = this._drawClassy;\r\n break;\r\n case dotTypes.classyRounded:\r\n drawFunction = this._drawClassyRounded;\r\n break;\r\n case dotTypes.rounded:\r\n drawFunction = this._drawRounded;\r\n break;\r\n case dotTypes.extraRounded:\r\n drawFunction = this._drawExtraRounded;\r\n break;\r\n case dotTypes.square:\r\n default:\r\n drawFunction = this._drawSquare;\r\n }\r\n\r\n drawFunction.call(this, { x, y, size, getNeighbor });\r\n }\r\n\r\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n const cx = x + size / 2;\r\n const cy = y + size / 2;\r\n\r\n draw();\r\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\r\n }\r\n\r\n _basicDot(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._element.setAttribute(\"cx\", String(x + size / 2));\r\n this._element.setAttribute(\"cy\", String(y + size / 2));\r\n this._element.setAttribute(\"r\", String(size / 2));\r\n }\r\n });\r\n }\r\n\r\n _basicSquare(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n this._element.setAttribute(\"x\", String(x));\r\n this._element.setAttribute(\"y\", String(y));\r\n this._element.setAttribute(\"width\", String(size));\r\n this._element.setAttribute(\"height\", String(size));\r\n }\r\n });\r\n }\r\n\r\n //if rotation === 0 - right side is rounded\r\n _basicSideRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x} ${y}` + //go to top left position\r\n `v ${size}` + //draw line to left bottom corner\r\n `h ${size / 2}` + //draw line to left bottom corner + half of size right\r\n `a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}` // draw rounded corner\r\n );\r\n }\r\n });\r\n }\r\n\r\n //if rotation === 0 - top right corner is rounded\r\n _basicCornerRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x} ${y}` + //go to top left position\r\n `v ${size}` + //draw line to left bottom corner\r\n `h ${size}` + //draw line to right bottom corner\r\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\r\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded corner\r\n );\r\n }\r\n });\r\n }\r\n\r\n //if rotation === 0 - top right corner is rounded\r\n _basicCornerExtraRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x} ${y}` + //go to top left position\r\n `v ${size}` + //draw line to left bottom corner\r\n `h ${size}` + //draw line to right bottom corner\r\n `a ${size} ${size}, 0, 0, 0, ${-size} ${-size}` // draw rounded top right corner\r\n );\r\n }\r\n });\r\n }\r\n\r\n //if rotation === 0 - left bottom and right top corners are rounded\r\n _basicCornersRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x} ${y}` + //go to left top position\r\n `v ${size / 2}` + //draw line to left top corner + half of size bottom\r\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}` + // draw rounded left bottom corner\r\n `h ${size / 2}` + //draw line to right bottom corner\r\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\r\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded right top corner\r\n );\r\n }\r\n });\r\n }\r\n\r\n _drawDot({ x, y, size }: DrawArgs): void {\r\n this._basicDot({ x, y, size, rotation: 0 });\r\n }\r\n\r\n _drawSquare({ x, y, size }: DrawArgs): void {\r\n this._basicSquare({ x, y, size, rotation: 0 });\r\n }\r\n\r\n _drawRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n if (neighborsCount === 0) {\r\n this._basicDot({ x, y, size, rotation: 0 });\r\n return;\r\n }\r\n\r\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n this._basicSquare({ x, y, size, rotation: 0 });\r\n return;\r\n }\r\n\r\n if (neighborsCount === 2) {\r\n let rotation = 0;\r\n\r\n if (leftNeighbor && topNeighbor) {\r\n rotation = Math.PI / 2;\r\n } else if (topNeighbor && rightNeighbor) {\r\n rotation = Math.PI;\r\n } else if (rightNeighbor && bottomNeighbor) {\r\n rotation = -Math.PI / 2;\r\n }\r\n\r\n this._basicCornerRounded({ x, y, size, rotation });\r\n return;\r\n }\r\n\r\n if (neighborsCount === 1) {\r\n let rotation = 0;\r\n\r\n if (topNeighbor) {\r\n rotation = Math.PI / 2;\r\n } else if (rightNeighbor) {\r\n rotation = Math.PI;\r\n } else if (bottomNeighbor) {\r\n rotation = -Math.PI / 2;\r\n }\r\n\r\n this._basicSideRounded({ x, y, size, rotation });\r\n return;\r\n }\r\n }\r\n\r\n _drawExtraRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n if (neighborsCount === 0) {\r\n this._basicDot({ x, y, size, rotation: 0 });\r\n return;\r\n }\r\n\r\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n this._basicSquare({ x, y, size, rotation: 0 });\r\n return;\r\n }\r\n\r\n if (neighborsCount === 2) {\r\n let rotation = 0;\r\n\r\n if (leftNeighbor && topNeighbor) {\r\n rotation = Math.PI / 2;\r\n } else if (topNeighbor && rightNeighbor) {\r\n rotation = Math.PI;\r\n } else if (rightNeighbor && bottomNeighbor) {\r\n rotation = -Math.PI / 2;\r\n }\r\n\r\n this._basicCornerExtraRounded({ x, y, size, rotation });\r\n return;\r\n }\r\n\r\n if (neighborsCount === 1) {\r\n let rotation = 0;\r\n\r\n if (topNeighbor) {\r\n rotation = Math.PI / 2;\r\n } else if (rightNeighbor) {\r\n rotation = Math.PI;\r\n } else if (bottomNeighbor) {\r\n rotation = -Math.PI / 2;\r\n }\r\n\r\n this._basicSideRounded({ x, y, size, rotation });\r\n return;\r\n }\r\n }\r\n\r\n _drawClassy({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n if (neighborsCount === 0) {\r\n this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\r\n return;\r\n }\r\n\r\n if (!leftNeighbor && !topNeighbor) {\r\n this._basicCornerRounded({ x, y, size, rotation: -Math.PI / 2 });\r\n return;\r\n }\r\n\r\n if (!rightNeighbor && !bottomNeighbor) {\r\n this._basicCornerRounded({ x, y, size, rotation: Math.PI / 2 });\r\n return;\r\n }\r\n\r\n this._basicSquare({ x, y, size, rotation: 0 });\r\n }\r\n\r\n _drawClassyRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\r\n\r\n if (neighborsCount === 0) {\r\n this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\r\n return;\r\n }\r\n\r\n if (!leftNeighbor && !topNeighbor) {\r\n this._basicCornerExtraRounded({ x, y, size, rotation: -Math.PI / 2 });\r\n return;\r\n }\r\n\r\n if (!rightNeighbor && !bottomNeighbor) {\r\n this._basicCornerExtraRounded({ x, y, size, rotation: Math.PI / 2 });\r\n return;\r\n }\r\n\r\n this._basicSquare({ x, y, size, rotation: 0 });\r\n }\r\n}\r\n","import cornerSquareTypes from \"../../../constants/cornerSquareTypes\";\r\nimport { CornerSquareType, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../../types\";\r\n\r\nexport default class QRCornerSquare {\r\n _element?: SVGElement;\r\n _svg: SVGElement;\r\n _type: CornerSquareType;\r\n\r\n constructor({ svg, type }: { svg: SVGElement; type: CornerSquareType }) {\r\n this._svg = svg;\r\n this._type = type;\r\n }\r\n\r\n draw(x: number, y: number, size: number, rotation: number): void {\r\n const type = this._type;\r\n let drawFunction;\r\n\r\n switch (type) {\r\n case cornerSquareTypes.square:\r\n drawFunction = this._drawSquare;\r\n break;\r\n case cornerSquareTypes.extraRounded:\r\n drawFunction = this._drawExtraRounded;\r\n break;\r\n case cornerSquareTypes.dot:\r\n default:\r\n drawFunction = this._drawDot;\r\n }\r\n\r\n drawFunction.call(this, { x, y, size, rotation });\r\n }\r\n\r\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n const cx = x + size / 2;\r\n const cy = y + size / 2;\r\n\r\n draw();\r\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\r\n }\r\n\r\n _basicDot(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n const dotSize = size / 7;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x + size / 2} ${y}` + // M cx, y // Move to top of ring\r\n `a ${size / 2} ${size / 2} 0 1 0 0.1 0` + // a outerRadius, outerRadius, 0, 1, 0, 1, 0 // Draw outer arc, but don't close it\r\n `z` + // Z // Close the outer shape\r\n `m 0 ${dotSize}` + // m -1 outerRadius-innerRadius // Move to top point of inner radius\r\n `a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0` + // a innerRadius, innerRadius, 0, 1, 1, -1, 0 // Draw inner arc, but don't close it\r\n `Z` // Z // Close the inner ring. Actually will still work without, but inner ring will have one unit missing in stroke\r\n );\r\n }\r\n });\r\n }\r\n\r\n _basicSquare(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n const dotSize = size / 7;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x} ${y}` +\r\n `v ${size}` +\r\n `h ${size}` +\r\n `v ${-size}` +\r\n `z` +\r\n `M ${x + dotSize} ${y + dotSize}` +\r\n `h ${size - 2 * dotSize}` +\r\n `v ${size - 2 * dotSize}` +\r\n `h ${-size + 2 * dotSize}` +\r\n `z`\r\n );\r\n }\r\n });\r\n }\r\n\r\n _basicExtraRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n const dotSize = size / 7;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\r\n this._element.setAttribute(\r\n \"d\",\r\n `M ${x} ${y + 2.5 * dotSize}` +\r\n `v ${2 * dotSize}` +\r\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\r\n `h ${2 * dotSize}` +\r\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}` +\r\n `v ${-2 * dotSize}` +\r\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\r\n `h ${-2 * dotSize}` +\r\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}` +\r\n `M ${x + 2.5 * dotSize} ${y + dotSize}` +\r\n `h ${2 * dotSize}` +\r\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\r\n `v ${2 * dotSize}` +\r\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}` +\r\n `h ${-2 * dotSize}` +\r\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\r\n `v ${-2 * dotSize}` +\r\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}`\r\n );\r\n }\r\n });\r\n }\r\n\r\n _drawDot({ x, y, size, rotation }: DrawArgs): void {\r\n this._basicDot({ x, y, size, rotation });\r\n }\r\n\r\n _drawSquare({ x, y, size, rotation }: DrawArgs): void {\r\n this._basicSquare({ x, y, size, rotation });\r\n }\r\n\r\n _drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\r\n this._basicExtraRounded({ x, y, size, rotation });\r\n }\r\n}\r\n","import cornerDotTypes from \"../../../constants/cornerDotTypes\";\r\nimport { CornerDotType, RotateFigureArgs, BasicFigureDrawArgs, DrawArgs } from \"../../../types\";\r\n\r\nexport default class QRCornerDot {\r\n _element?: SVGElement;\r\n _svg: SVGElement;\r\n _type: CornerDotType;\r\n\r\n constructor({ svg, type }: { svg: SVGElement; type: CornerDotType }) {\r\n this._svg = svg;\r\n this._type = type;\r\n }\r\n\r\n draw(x: number, y: number, size: number, rotation: number): void {\r\n const type = this._type;\r\n let drawFunction;\r\n\r\n switch (type) {\r\n case cornerDotTypes.square:\r\n drawFunction = this._drawSquare;\r\n break;\r\n case cornerDotTypes.dot:\r\n default:\r\n drawFunction = this._drawDot;\r\n }\r\n\r\n drawFunction.call(this, { x, y, size, rotation });\r\n }\r\n\r\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n const cx = x + size / 2;\r\n const cy = y + size / 2;\r\n\r\n draw();\r\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\r\n }\r\n\r\n _basicDot(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._element.setAttribute(\"cx\", String(x + size / 2));\r\n this._element.setAttribute(\"cy\", String(y + size / 2));\r\n this._element.setAttribute(\"r\", String(size / 2));\r\n }\r\n });\r\n }\r\n\r\n _basicSquare(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args;\r\n\r\n this._rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n this._element.setAttribute(\"x\", String(x));\r\n this._element.setAttribute(\"y\", String(y));\r\n this._element.setAttribute(\"width\", String(size));\r\n this._element.setAttribute(\"height\", String(size));\r\n }\r\n });\r\n }\r\n\r\n _drawDot({ x, y, size, rotation }: DrawArgs): void {\r\n this._basicDot({ x, y, size, rotation });\r\n }\r\n\r\n _drawSquare({ x, y, size, rotation }: DrawArgs): void {\r\n this._basicSquare({ x, y, size, rotation });\r\n }\r\n}\r\n","import calculateImageSize from \"../tools/calculateImageSize\";\r\nimport errorCorrectionPercents from \"../constants/errorCorrectionPercents\";\r\nimport QRDot from \"../figures/dot/svg/QRDot\";\r\nimport QRCornerSquare from \"../figures/cornerSquare/svg/QRCornerSquare\";\r\nimport QRCornerDot from \"../figures/cornerDot/svg/QRCornerDot\";\r\nimport { RequiredOptions } from \"./QROptions\";\r\nimport gradientTypes from \"../constants/gradientTypes\";\r\nimport { QRCode, FilterFunction, Gradient } from \"../types\";\r\n\r\nconst squareMask = [\r\n [1, 1, 1, 1, 1, 1, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 1, 1, 1, 1, 1, 1]\r\n];\r\n\r\nconst dotMask = [\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0]\r\n];\r\n\r\nexport default class QRSVG {\r\n _element: SVGElement;\r\n _style: SVGStyleElement;\r\n _defs: SVGElement;\r\n _dotsClipPath?: SVGElement;\r\n _cornersSquareClipPath?: SVGElement;\r\n _cornersDotClipPath?: SVGElement;\r\n _dots?: SVGElement;\r\n _cornerSquares?: SVGElement;\r\n _corners?: SVGElement;\r\n _cornerDots?: SVGElement;\r\n _options: RequiredOptions;\r\n _qr?: QRCode;\r\n _image?: HTMLImageElement;\r\n\r\n //TODO don't pass all options to this class\r\n constructor(options: RequiredOptions) {\r\n this._element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n this._element.setAttribute(\"width\", String(options.width));\r\n this._element.setAttribute(\"height\", String(options.height));\r\n this._element.setAttribute(\"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\r\n this._defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\r\n this._style = document.createElementNS(\"http://www.w3.org/2000/svg\", \"style\");\r\n\r\n this._options = options;\r\n }\r\n\r\n get width(): number {\r\n return this._options.width;\r\n }\r\n\r\n get height(): number {\r\n return this._options.height;\r\n }\r\n\r\n getElement(): SVGElement {\r\n return this._element;\r\n }\r\n\r\n clear(): void {\r\n const oldElement = this._element;\r\n this._element = oldElement.cloneNode(false) as SVGElement;\r\n oldElement?.parentNode?.replaceChild(this._element, oldElement);\r\n this._defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\r\n this._style = document.createElementNS(\"http://www.w3.org/2000/svg\", \"style\");\r\n this._element.appendChild(this._style);\r\n this._element.appendChild(this._defs);\r\n }\r\n\r\n async drawQR(qr: QRCode): Promise {\r\n const count = qr.getModuleCount();\r\n const minSize = Math.min(this._options.width, this._options.height) - this._options.margin * 2;\r\n const dotSize = Math.floor(minSize / count);\r\n let drawImageSize = {\r\n hideXDots: 0,\r\n hideYDots: 0,\r\n width: 0,\r\n height: 0\r\n };\r\n\r\n this._qr = qr;\r\n\r\n if (this._options.image) {\r\n //We need it to get image size\r\n await this.loadImage();\r\n if (!this._image) return;\r\n const { imageOptions, qrOptions } = this._options;\r\n const coverLevel = imageOptions.imageSize * errorCorrectionPercents[qrOptions.errorCorrectionLevel];\r\n const maxHiddenDots = Math.floor(coverLevel * count * count);\r\n\r\n drawImageSize = calculateImageSize({\r\n originalWidth: this._image.width,\r\n originalHeight: this._image.height,\r\n maxHiddenDots,\r\n maxHiddenAxisDots: count - 14,\r\n dotSize\r\n });\r\n }\r\n\r\n this._element.appendChild(this._style);\r\n this._element.appendChild(this._defs);\r\n\r\n this.clear();\r\n this.drawBackground();\r\n this.drawDots((i: number, j: number): boolean => {\r\n if (this._options.imageOptions.hideBackgroundDots) {\r\n if (\r\n i >= (count - drawImageSize.hideXDots) / 2 &&\r\n i < (count + drawImageSize.hideXDots) / 2 &&\r\n j >= (count - drawImageSize.hideYDots) / 2 &&\r\n j < (count + drawImageSize.hideYDots) / 2\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) {\r\n return false;\r\n }\r\n\r\n if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) {\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n this.drawCorners();\r\n\r\n if (this._options.image) {\r\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\r\n }\r\n }\r\n\r\n drawBackground(): void {\r\n const element = this._element;\r\n const options = this._options;\r\n\r\n if (element) {\r\n const gradientOptions = options.backgroundOptions?.gradient;\r\n const color = options.backgroundOptions?.color;\r\n\r\n if (gradientOptions) {\r\n this._createColor({\r\n options: gradientOptions,\r\n color: color,\r\n additionalRotation: 0,\r\n x: 0,\r\n y: 0,\r\n height: options.height,\r\n width: options.width,\r\n name: \"background-color\"\r\n });\r\n } else if (options.backgroundOptions?.color) {\r\n this._createStyle({\r\n color: color,\r\n name: \"background-color\"\r\n });\r\n }\r\n }\r\n }\r\n\r\n drawDots(filter?: FilterFunction): void {\r\n if (!this._qr) {\r\n throw \"QR code is not defined\";\r\n }\r\n\r\n const options = this._options;\r\n const count = this._qr.getModuleCount();\r\n\r\n if (count > options.width || count > options.height) {\r\n throw \"The canvas is too small.\";\r\n }\r\n\r\n const minSize = Math.min(options.width, options.height) - options.margin * 2;\r\n const dotSize = Math.floor(minSize / count);\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type });\r\n\r\n if (options.dotsOptions?.gradient) {\r\n this._dotsClipPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\r\n this._dotsClipPath.setAttribute(\"id\", \"clip-path-dot-color\");\r\n this._defs.appendChild(this._dotsClipPath);\r\n this._createColor({\r\n options: options.dotsOptions?.gradient,\r\n color: options.dotsOptions.color,\r\n additionalRotation: 0,\r\n x: xBeginning,\r\n y: yBeginning,\r\n height: count * dotSize,\r\n width: count * dotSize,\r\n name: \"dot-color\"\r\n });\r\n } else if (options.dotsOptions.color) {\r\n this._dots = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\r\n this._dots.setAttribute(\"class\", \"dot-color\");\r\n this._element.appendChild(this._dots);\r\n this._createStyle({\r\n color: options.dotsOptions.color,\r\n name: \"dot-color\"\r\n });\r\n }\r\n\r\n for (let i = 0; i < count; i++) {\r\n for (let j = 0; j < count; j++) {\r\n if (filter && !filter(i, j)) {\r\n continue;\r\n }\r\n if (!this._qr?.isDark(i, j)) {\r\n continue;\r\n }\r\n\r\n const x = this._options.useLegacyDotRotation ? xBeginning + i * dotSize : yBeginning + j * dotSize;\r\n const y = this._options.useLegacyDotRotation ? yBeginning + j * dotSize : xBeginning + i * dotSize;\r\n\r\n dot.draw(x, y, dotSize, (xOffset: number, yOffset: number): boolean => {\r\n if (this._options.useLegacyDotRotation) {\r\n if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false;\r\n if (filter && !filter(i + xOffset, j + yOffset)) return false;\r\n return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset);\r\n } else {\r\n if (j + xOffset < 0 || i + yOffset < 0 || j + xOffset >= count || i + yOffset >= count) return false;\r\n if (filter && !filter(j + xOffset, i + yOffset)) return false;\r\n return !!this._qr && this._qr.isDark(i + yOffset, j + xOffset);\r\n }\r\n });\r\n\r\n if (dot._element && this._dotsClipPath) {\r\n this._dotsClipPath.appendChild(dot._element);\r\n } else if (dot._element && this._dots) {\r\n this._dots.appendChild(dot._element);\r\n }\r\n }\r\n }\r\n }\r\n\r\n drawCorners(): void {\r\n if (!this._qr) {\r\n throw \"QR code is not defined\";\r\n }\r\n\r\n const element = this._element;\r\n const options = this._options;\r\n\r\n if (!element) {\r\n throw \"Element code is not defined\";\r\n }\r\n\r\n const count = this._qr.getModuleCount();\r\n const minSize = Math.min(options.width, options.height) - options.margin * 2;\r\n const dotSize = Math.floor(minSize / count);\r\n const cornersSquareSize = dotSize * 7;\r\n const cornersDotSize = dotSize * 3;\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n\r\n [\r\n [0, 0, 0],\r\n [1, 0, Math.PI / 2],\r\n [0, 1, -Math.PI / 2]\r\n ].forEach(([column, row, rotation]) => {\r\n const x = xBeginning + column * dotSize * (count - 7);\r\n const y = yBeginning + row * dotSize * (count - 7);\r\n let cornersSquareClipPath = this._dotsClipPath;\r\n let cornersDotClipPath = this._dotsClipPath;\r\n\r\n if (options.cornersSquareOptions?.gradient) {\r\n cornersSquareClipPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\r\n cornersSquareClipPath.setAttribute(\"id\", `clip-path-corners-square-color-${column}-${row}`);\r\n this._defs.appendChild(cornersSquareClipPath);\r\n this._cornersSquareClipPath = this._cornersDotClipPath = cornersDotClipPath = cornersSquareClipPath;\r\n\r\n this._createColor({\r\n options: options.cornersSquareOptions?.gradient,\r\n color: options.cornersSquareOptions?.color,\r\n additionalRotation: rotation,\r\n x,\r\n y,\r\n height: cornersSquareSize,\r\n width: cornersSquareSize,\r\n name: `corners-square-color-${column}-${row}`\r\n });\r\n } else {\r\n this._cornerSquares = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\r\n this._cornerSquares.setAttribute(\"class\", `corners-square-color-${column}-${row}`);\r\n this._element.appendChild(this._cornerSquares);\r\n this._createStyle({\r\n color: options.cornersSquareOptions?.color,\r\n name: `corners-square-color-${column}-${row}`\r\n });\r\n }\r\n\r\n if (options.cornersSquareOptions?.type) {\r\n const cornersSquare = new QRCornerSquare({ svg: this._element, type: options.cornersSquareOptions.type });\r\n\r\n cornersSquare.draw(x, y, cornersSquareSize, rotation);\r\n\r\n if (options.cornersSquareOptions?.gradient && cornersSquare._element && cornersSquareClipPath) {\r\n cornersSquareClipPath.appendChild(cornersSquare._element);\r\n } else if (cornersSquare._element && this._cornerSquares) {\r\n this._cornerSquares.appendChild(cornersSquare._element);\r\n }\r\n } else {\r\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type });\r\n\r\n for (let i = 0; i < squareMask.length; i++) {\r\n for (let j = 0; j < squareMask[i].length; j++) {\r\n if (!squareMask[i]?.[j]) {\r\n continue;\r\n }\r\n\r\n dot.draw(\r\n x + i * dotSize,\r\n y + j * dotSize,\r\n dotSize,\r\n (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\r\n );\r\n\r\n if (dot._element && this._cornersSquareClipPath) {\r\n this._cornersSquareClipPath.appendChild(dot._element);\r\n } else if (dot._element && this._cornerSquares) {\r\n this._cornerSquares.appendChild(dot._element);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (options.cornersDotOptions?.gradient) {\r\n cornersDotClipPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\r\n cornersDotClipPath.setAttribute(\"id\", `clip-path-corners-dot-color-${column}-${row}`);\r\n this._defs.appendChild(cornersDotClipPath);\r\n this._cornersDotClipPath = cornersDotClipPath;\r\n\r\n this._createColor({\r\n options: options.cornersDotOptions?.gradient,\r\n color: options.cornersDotOptions?.color,\r\n additionalRotation: rotation,\r\n x: x + dotSize * 2,\r\n y: y + dotSize * 2,\r\n height: cornersDotSize,\r\n width: cornersDotSize,\r\n name: `corners-dot-color-${column}-${row}`\r\n });\r\n } else {\r\n this._cornerDots = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\r\n this._cornerDots.setAttribute(\"class\", `corners-dot-color-${column}-${row}`);\r\n this._element.appendChild(this._cornerDots);\r\n this._createStyle({\r\n color: options.cornersDotOptions?.color,\r\n name: `corners-dot-color-${column}-${row}`\r\n });\r\n }\r\n\r\n if (options.cornersDotOptions?.type) {\r\n const cornersDot = new QRCornerDot({ svg: this._element, type: options.cornersDotOptions.type });\r\n\r\n cornersDot.draw(x + dotSize * 2, y + dotSize * 2, cornersDotSize, rotation);\r\n\r\n if (options.cornersDotOptions?.gradient && cornersDot._element && cornersDotClipPath) {\r\n cornersDotClipPath.appendChild(cornersDot._element);\r\n } else if (cornersDot._element && this._cornerDots) {\r\n this._cornerDots.appendChild(cornersDot._element);\r\n }\r\n } else {\r\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type });\r\n\r\n for (let i = 0; i < dotMask.length; i++) {\r\n for (let j = 0; j < dotMask[i].length; j++) {\r\n if (!dotMask[i]?.[j]) {\r\n continue;\r\n }\r\n\r\n dot.draw(\r\n x + i * dotSize,\r\n y + j * dotSize,\r\n dotSize,\r\n (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\r\n );\r\n\r\n if (dot._element && this._cornersDotClipPath) {\r\n this._cornersDotClipPath.appendChild(dot._element);\r\n } else if (dot._element && this._cornerDots) {\r\n this._cornerDots.appendChild(dot._element);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n loadImage(): Promise {\r\n return new Promise((resolve, reject) => {\r\n const options = this._options;\r\n const image = new Image();\r\n\r\n if (!options.image) {\r\n return reject(\"Image is not defined\");\r\n }\r\n\r\n if (typeof options.imageOptions.crossOrigin === \"string\") {\r\n image.crossOrigin = options.imageOptions.crossOrigin;\r\n }\r\n\r\n this._image = image;\r\n image.onload = (): void => {\r\n resolve();\r\n };\r\n image.src = options.image;\r\n });\r\n }\r\n\r\n async drawImage({\r\n width,\r\n height,\r\n count,\r\n dotSize\r\n }: {\r\n width: number;\r\n height: number;\r\n count: number;\r\n dotSize: number;\r\n }): Promise {\r\n const options = this._options;\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n const dx = xBeginning + options.imageOptions.margin + (count * dotSize - width) / 2;\r\n const dy = yBeginning + options.imageOptions.margin + (count * dotSize - height) / 2;\r\n const dw = width - options.imageOptions.margin * 2;\r\n const dh = height - options.imageOptions.margin * 2;\r\n\r\n const image = document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\r\n\r\n const base64Image = await this._getBase64Image(options.image || \"\");\r\n\r\n image.setAttribute(\"href\", base64Image);\r\n image.setAttribute(\"xlink:href\", base64Image);\r\n image.setAttribute(\"x\", String(dx));\r\n image.setAttribute(\"y\", String(dy));\r\n image.setAttribute(\"width\", `${dw}px`);\r\n image.setAttribute(\"height\", `${dh}px`);\r\n\r\n this._element.appendChild(image);\r\n }\r\n\r\n async _getImageBlob(url: string): Promise {\r\n const resp = await fetch(url);\r\n return resp.blob();\r\n }\r\n\r\n // convert a blob to base64\r\n _blobToBase64(blob: Blob): Promise {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = function () {\r\n const dataUrl = reader.result;\r\n resolve(dataUrl as string);\r\n };\r\n reader.readAsDataURL(blob);\r\n });\r\n }\r\n\r\n async _getBase64Image(url: string): Promise {\r\n if (url === \"\") {\r\n return new Promise((resolve) => {\r\n resolve(\"\");\r\n });\r\n }\r\n\r\n const blob = await this._getImageBlob(url);\r\n const base64 = await this._blobToBase64(blob);\r\n return base64;\r\n }\r\n\r\n _createColor({\r\n options,\r\n color,\r\n additionalRotation,\r\n x,\r\n y,\r\n height,\r\n width,\r\n name\r\n }: {\r\n options?: Gradient;\r\n color?: string;\r\n additionalRotation: number;\r\n x: number;\r\n y: number;\r\n height: number;\r\n width: number;\r\n name: string;\r\n }): void {\r\n const size = width > height ? width : height;\r\n const rect = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n rect.setAttribute(\"x\", String(x));\r\n rect.setAttribute(\"y\", String(y));\r\n rect.setAttribute(\"height\", String(height));\r\n rect.setAttribute(\"width\", String(width));\r\n rect.setAttribute(\"clip-path\", `url('#clip-path-${name}')`);\r\n\r\n if (options) {\r\n let gradient: SVGElement;\r\n if (options.type === gradientTypes.radial) {\r\n gradient = document.createElementNS(\"http://www.w3.org/2000/svg\", \"radialGradient\");\r\n gradient.setAttribute(\"id\", name);\r\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\r\n gradient.setAttribute(\"fx\", String(x + width / 2));\r\n gradient.setAttribute(\"fy\", String(y + height / 2));\r\n gradient.setAttribute(\"cx\", String(x + width / 2));\r\n gradient.setAttribute(\"cy\", String(y + height / 2));\r\n gradient.setAttribute(\"r\", String(size / 2));\r\n } else {\r\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\r\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\r\n let x0 = x + width / 2;\r\n let y0 = y + height / 2;\r\n let x1 = x + width / 2;\r\n let y1 = y + height / 2;\r\n\r\n if (\r\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\r\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\r\n ) {\r\n x0 = x0 - width / 2;\r\n y0 = y0 - (height / 2) * Math.tan(rotation);\r\n x1 = x1 + width / 2;\r\n y1 = y1 + (height / 2) * Math.tan(rotation);\r\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\r\n y0 = y0 - height / 2;\r\n x0 = x0 - width / 2 / Math.tan(rotation);\r\n y1 = y1 + height / 2;\r\n x1 = x1 + width / 2 / Math.tan(rotation);\r\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\r\n x0 = x0 + width / 2;\r\n y0 = y0 + (height / 2) * Math.tan(rotation);\r\n x1 = x1 - width / 2;\r\n y1 = y1 - (height / 2) * Math.tan(rotation);\r\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\r\n y0 = y0 + height / 2;\r\n x0 = x0 + width / 2 / Math.tan(rotation);\r\n y1 = y1 - height / 2;\r\n x1 = x1 - width / 2 / Math.tan(rotation);\r\n }\r\n\r\n gradient = document.createElementNS(\"http://www.w3.org/2000/svg\", \"linearGradient\");\r\n gradient.setAttribute(\"id\", name);\r\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\r\n gradient.setAttribute(\"x1\", String(Math.round(x0)));\r\n gradient.setAttribute(\"y1\", String(Math.round(y0)));\r\n gradient.setAttribute(\"x2\", String(Math.round(x1)));\r\n gradient.setAttribute(\"y2\", String(Math.round(y1)));\r\n }\r\n\r\n options.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\r\n const stop = document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\r\n stop.setAttribute(\"offset\", `${100 * offset}%`);\r\n stop.setAttribute(\"stop-color\", color);\r\n gradient.appendChild(stop);\r\n });\r\n\r\n rect.setAttribute(\"fill\", `url('#${name}')`);\r\n this._defs.appendChild(gradient);\r\n } else if (color) {\r\n rect.setAttribute(\"fill\", color);\r\n }\r\n\r\n this._element.appendChild(rect);\r\n }\r\n\r\n _createStyle({ color, name }: { color?: string; name: string }): void {\r\n this._style.innerHTML += `.${name}{ fill: ${color}; }`;\r\n }\r\n}\r\n","import { DrawTypes } from \"../types\";\r\n\r\nexport default {\r\n canvas: \"canvas\",\r\n svg: \"svg\"\r\n} as DrawTypes;\r\n","import { TypeNumber } from \"../types\";\r\n\r\ninterface TypesMap {\r\n [key: number]: TypeNumber;\r\n}\r\n\r\nconst qrTypes: TypesMap = {};\r\n\r\nfor (let type = 0; type <= 40; type++) {\r\n qrTypes[type] = type as TypeNumber;\r\n}\r\n\r\n// 0 types is autodetect\r\n\r\n// types = {\r\n// 0: 0,\r\n// 1: 1,\r\n// ...\r\n// 40: 40\r\n// }\r\n\r\nexport default qrTypes;\r\n","import qrTypes from \"../constants/qrTypes\";\r\nimport drawTypes from \"../constants/drawTypes\";\r\nimport errorCorrectionLevels from \"../constants/errorCorrectionLevels\";\r\nimport { DotType, Options, TypeNumber, ErrorCorrectionLevel, Mode, DrawType, Gradient } from \"../types\";\r\n\r\nexport interface RequiredOptions extends Options {\r\n type: DrawType;\r\n width: number;\r\n height: number;\r\n margin: number;\r\n data: string;\r\n qrOptions: {\r\n typeNumber: TypeNumber;\r\n mode?: Mode;\r\n errorCorrectionLevel: ErrorCorrectionLevel;\r\n };\r\n imageOptions: {\r\n hideBackgroundDots: boolean;\r\n imageSize: number;\r\n crossOrigin?: string;\r\n margin: number;\r\n };\r\n dotsOptions: {\r\n type: DotType;\r\n color: string;\r\n gradient?: Gradient;\r\n };\r\n backgroundOptions: {\r\n color: string;\r\n gradient?: Gradient;\r\n };\r\n useLegacyDotRotation: boolean;\r\n}\r\n\r\nconst defaultOptions: RequiredOptions = {\r\n type: drawTypes.canvas,\r\n width: 300,\r\n height: 300,\r\n data: \"\",\r\n margin: 0,\r\n qrOptions: {\r\n typeNumber: qrTypes[0],\r\n mode: undefined,\r\n errorCorrectionLevel: errorCorrectionLevels.Q\r\n },\r\n imageOptions: {\r\n hideBackgroundDots: true,\r\n imageSize: 0.4,\r\n crossOrigin: \"anonymous\",\r\n margin: 0\r\n },\r\n dotsOptions: {\r\n type: \"square\",\r\n color: \"#000\"\r\n },\r\n backgroundOptions: {\r\n color: \"#fff\"\r\n },\r\n useLegacyDotRotation: false\r\n};\r\n\r\nexport default defaultOptions;\r\n","import { ErrorCorrectionLevel } from \"../types\";\r\n\r\ninterface ErrorCorrectionLevels {\r\n [key: string]: ErrorCorrectionLevel;\r\n}\r\n\r\nexport default {\r\n L: \"L\",\r\n M: \"M\",\r\n Q: \"Q\",\r\n H: \"H\"\r\n} as ErrorCorrectionLevels;\r\n","import { RequiredOptions } from \"../core/QROptions\";\r\nimport { Gradient } from \"../types\";\r\n\r\nfunction sanitizeGradient(gradient: Gradient): Gradient {\r\n const newGradient = { ...gradient };\r\n\r\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\r\n throw \"Field 'colorStops' is required in gradient\";\r\n }\r\n\r\n if (newGradient.rotation) {\r\n newGradient.rotation = Number(newGradient.rotation);\r\n } else {\r\n newGradient.rotation = 0;\r\n }\r\n\r\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number; color: string }) => ({\r\n ...colorStop,\r\n offset: Number(colorStop.offset)\r\n }));\r\n\r\n return newGradient;\r\n}\r\n\r\nexport default function sanitizeOptions(options: RequiredOptions): RequiredOptions {\r\n const newOptions = { ...options };\r\n\r\n newOptions.width = Number(newOptions.width);\r\n newOptions.height = Number(newOptions.height);\r\n newOptions.margin = Number(newOptions.margin);\r\n newOptions.imageOptions = {\r\n ...newOptions.imageOptions,\r\n hideBackgroundDots: Boolean(newOptions.imageOptions.hideBackgroundDots),\r\n imageSize: Number(newOptions.imageOptions.imageSize),\r\n margin: Number(newOptions.imageOptions.margin)\r\n };\r\n\r\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\r\n newOptions.margin = Math.min(newOptions.width, newOptions.height);\r\n }\r\n\r\n newOptions.dotsOptions = {\r\n ...newOptions.dotsOptions\r\n };\r\n if (newOptions.dotsOptions.gradient) {\r\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient);\r\n }\r\n\r\n if (newOptions.cornersSquareOptions) {\r\n newOptions.cornersSquareOptions = {\r\n ...newOptions.cornersSquareOptions\r\n };\r\n if (newOptions.cornersSquareOptions.gradient) {\r\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient);\r\n }\r\n }\r\n\r\n if (newOptions.cornersDotOptions) {\r\n newOptions.cornersDotOptions = {\r\n ...newOptions.cornersDotOptions\r\n };\r\n if (newOptions.cornersDotOptions.gradient) {\r\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient);\r\n }\r\n }\r\n\r\n if (newOptions.backgroundOptions) {\r\n newOptions.backgroundOptions = {\r\n ...newOptions.backgroundOptions\r\n };\r\n if (newOptions.backgroundOptions.gradient) {\r\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient);\r\n }\r\n }\r\n\r\n return newOptions;\r\n}\r\n","import QRCodeStyling from \"./core/QRCodeStyling\";\nimport dotTypes from \"./constants/dotTypes\";\nimport cornerDotTypes from \"./constants/cornerDotTypes\";\nimport cornerSquareTypes from \"./constants/cornerSquareTypes\";\nimport errorCorrectionLevels from \"./constants/errorCorrectionLevels\";\nimport errorCorrectionPercents from \"./constants/errorCorrectionPercents\";\nimport modes from \"./constants/modes\";\nimport qrTypes from \"./constants/qrTypes\";\nimport drawTypes from \"./constants/drawTypes\";\n\nexport * from \"./types\";\n\nexport {\n dotTypes,\n cornerDotTypes,\n cornerSquareTypes,\n errorCorrectionLevels,\n errorCorrectionPercents,\n modes,\n qrTypes,\n drawTypes\n};\n\nexport default QRCodeStyling;\n","import getMode from \"../tools/getMode\";\nimport mergeDeep from \"../tools/merge\";\nimport downloadURI from \"../tools/downloadURI\";\nimport QRCanvas from \"./QRCanvas\";\nimport QRSVG from \"./QRSVG\";\nimport drawTypes from \"../constants/drawTypes\";\n\nimport defaultOptions, { RequiredOptions } from \"./QROptions\";\nimport sanitizeOptions from \"../tools/sanitizeOptions\";\nimport { Extension, QRCode, Options, DownloadOptions } from \"../types\";\nimport qrcode from \"qrcode-generator\";\n\nexport default class QRCodeStyling {\n _options: RequiredOptions;\n _container?: HTMLElement;\n _canvas?: QRCanvas;\n _svg?: QRSVG;\n _qr?: QRCode;\n _canvasDrawingPromise?: Promise;\n _svgDrawingPromise?: Promise;\n\n constructor(options?: Partial) {\n this._options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as RequiredOptions) : defaultOptions;\n this.update();\n }\n\n static _clearContainer(container?: HTMLElement): void {\n if (container) {\n container.innerHTML = \"\";\n }\n }\n\n async _getQRStylingElement(extension: Extension = \"png\"): Promise {\n if (!this._qr) throw \"QR code is empty\";\n\n if (extension.toLowerCase() === \"svg\") {\n let promise, svg: QRSVG;\n\n if (this._svg && this._svgDrawingPromise) {\n svg = this._svg;\n promise = this._svgDrawingPromise;\n } else {\n svg = new QRSVG(this._options);\n promise = svg.drawQR(this._qr);\n }\n\n await promise;\n\n return svg;\n } else {\n let promise, canvas: QRCanvas;\n\n if (this._canvas && this._canvasDrawingPromise) {\n canvas = this._canvas;\n promise = this._canvasDrawingPromise;\n } else {\n canvas = new QRCanvas(this._options);\n promise = canvas.drawQR(this._qr);\n }\n\n await promise;\n\n return canvas;\n }\n }\n\n update(options?: Partial): void {\n QRCodeStyling._clearContainer(this._container);\n this._options = options ? sanitizeOptions(mergeDeep(this._options, options) as RequiredOptions) : this._options;\n\n if (!this._options.data) {\n return;\n }\n\n this._qr = qrcode(this._options.qrOptions.typeNumber, this._options.qrOptions.errorCorrectionLevel);\n this._qr.addData(this._options.data, this._options.qrOptions.mode || getMode(this._options.data));\n this._qr.make();\n\n if (this._options.type === drawTypes.canvas) {\n this._canvas = new QRCanvas(this._options);\n this._canvasDrawingPromise = this._canvas.drawQR(this._qr);\n this._svgDrawingPromise = undefined;\n this._svg = undefined;\n } else {\n this._svg = new QRSVG(this._options);\n this._svgDrawingPromise = this._svg.drawQR(this._qr);\n this._canvasDrawingPromise = undefined;\n this._canvas = undefined;\n }\n\n this.append(this._container);\n }\n\n append(container?: HTMLElement): void {\n if (!container) {\n return;\n }\n\n if (typeof container.appendChild !== \"function\") {\n throw \"Container should be a single DOM node\";\n }\n\n if (this._options.type === drawTypes.canvas) {\n if (this._canvas) {\n container.appendChild(this._canvas.getCanvas());\n }\n } else {\n if (this._svg) {\n container.appendChild(this._svg.getElement());\n }\n }\n\n this._container = container;\n }\n\n async getRawData(extension: Extension = \"png\"): Promise {\n if (!this._qr) throw \"QR code is empty\";\n const element = await this._getQRStylingElement(extension);\n\n if (extension.toLowerCase() === \"svg\") {\n const serializer = new XMLSerializer();\n const source = serializer.serializeToString((element as unknown as QRSVG).getElement());\n\n return new Blob(['\\r\\n' + source], { type: \"image/svg+xml\" });\n } else {\n return new Promise((resolve) =>\n (element as unknown as QRCanvas).getCanvas().toBlob(resolve, `image/${extension}`, 1)\n );\n }\n }\n\n async download(downloadOptions?: Partial | string): Promise {\n if (!this._qr) throw \"QR code is empty\";\n let extension = \"png\" as Extension;\n let name = \"qr\";\n\n //TODO remove deprecated code in the v2\n if (typeof downloadOptions === \"string\") {\n extension = downloadOptions as Extension;\n console.warn(\n \"Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument\"\n );\n } else if (typeof downloadOptions === \"object\" && downloadOptions !== null) {\n if (downloadOptions.name) {\n name = downloadOptions.name;\n }\n if (downloadOptions.extension) {\n extension = downloadOptions.extension;\n }\n }\n\n const element = await this._getQRStylingElement(extension);\n\n if (extension.toLowerCase() === \"svg\") {\n const serializer = new XMLSerializer();\n let source = serializer.serializeToString((element as unknown as QRSVG).getElement());\n\n source = '\\r\\n' + source;\n const url = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(source);\n downloadURI(url, `${name}.svg`);\n } else {\n const url = (element as unknown as QRCanvas).getCanvas().toDataURL(`image/${extension}`);\n downloadURI(url, `${name}.${extension}`);\n }\n }\n}\n","import modes from \"../constants/modes\";\r\nimport { Mode } from \"../types\";\r\n\r\nexport default function getMode(data: string): Mode {\r\n switch (true) {\r\n case /^[0-9]*$/.test(data):\r\n return modes.numeric;\r\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\r\n return modes.alphanumeric;\r\n default:\r\n return modes.byte;\r\n }\r\n}\r\n","import { Mode } from \"../types\";\r\n\r\ninterface Modes {\r\n [key: string]: Mode;\r\n}\r\n\r\nexport default {\r\n numeric: \"Numeric\",\r\n alphanumeric: \"Alphanumeric\",\r\n byte: \"Byte\",\r\n kanji: \"Kanji\"\r\n} as Modes;\r\n"],"names":["root","factory","exports","module","define","amd","self","qrcode","typeNumber","errorCorrectionLevel","_typeNumber","_errorCorrectionLevel","QRErrorCorrectionLevel","_modules","_moduleCount","_dataCache","_dataList","_this","makeImpl","test","maskPattern","moduleCount","modules","Array","row","col","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","c","pos","QRUtil","getPatternPosition","i","length","j","bits","getBCHTypeNumber","mod","Math","floor","data","getBCHTypeInfo","inc","bitIndex","byteIndex","maskFunc","getMaskFunction","dark","dataList","rsBlocks","QRRSBlock","getRSBlocks","buffer","qrBitBuffer","put","getMode","getLength","getLengthInBits","write","totalDataCount","dataCount","putBit","offset","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","totalCount","max","getBuffer","rsPoly","getErrorCorrectPolynomial","modPoly","qrPolynomial","modIndex","getAt","totalCodeCount","index","createBytes","addData","mode","newData","qrNumber","qrAlphaNum","qr8BitByte","qrKanji","push","isDark","getModuleCount","make","minLostPoint","pattern","lostPoint","getLostPoint","getBestMaskPattern","createTableTag","cellSize","margin","qrHtml","createSvgTag","alt","title","opts","arguments","text","id","mr","rect","size","qrSvg","scalable","escapeXml","join","trim","createDataURL","min","x","y","createImgTag","img","s","escaped","charAt","createASCII","r1","r2","p","blocks","blocksLastLineNoMargin","ascii","substring","_createHalfASCII","white","black","line","renderTo2dContext","context","fillStyle","fillRect","stringToBytes","stringToBytesFuncs","bytes","charCodeAt","createStringToBytes","unicodeData","numChars","unicodeMap","bin","base64DecodeInputStream","read","b","count","b0","b1","v","String","fromCharCode","unknownChar","PATTERN_POSITION_TABLE","G15","G18","getBCHDigit","L","M","Q","H","digit","d","errorCorrectLength","a","multiply","QRMath","gexp","type","sameCount","darkCount","abs","EXP_TABLE","LOG_TABLE","n","num","shift","_num","e","glog","ratio","RS_BLOCK_TABLE","qrRSBlock","rsBlock","getRsBlockTable","list","_buffer","_length","bufIndex","bit","_data","strToNum","chatToNum","getCode","_bytes","code","byteArrayOutputStream","writeByte","off","len","str","_str","_pos","_buflen","match","decode","width","height","getPixel","gif","_width","_height","pixel","out","writeString","writeShort","raster","getLZWRaster","writeBytes","lzwMinCodeSize","clearCode","endCode","bitLength","table","lzwTable","add","_out","_bitLength","_bitBuffer","byteOut","bitOut","dataIndex","contains","indexOf","flush","toByteArray","_map","_size","key","gifImage","setPixel","base64","_base64","writeEncoded","encode","padlen","toString","base64EncodeOutputStream","utf8","charcode","toUTF8Array","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","isObject","isArray","mergeDeep","target","sources","source","keys","forEach","targetValue","sourceValue","assign","downloadURI","uri","name","link","document","createElement","download","href","body","appendChild","click","removeChild","calculateImageSize","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dotSize","hideDots","imageSize","hideYDots","hideXDots","k","sqrt","ceil","round","this","_context","_type","draw","getNeighbor","drawFunction","dotTypes","_drawDot","_drawClassy","_drawClassyRounded","_drawRounded","_drawExtraRounded","_drawSquare","_rotateFigure","rotation","cx","cy","translate","rotate","closePath","_basicDot","args","arc","PI","_basicSquare","_basicSideRounded","lineTo","_basicCornerRounded","_basicCornerExtraRounded","_basicCornersRounded","_basicCornersExtraRounded","leftNeighbor","rightNeighbor","topNeighbor","bottomNeighbor","neighborsCount","cornerSquareTypes","_basicExtraRounded","cornerDotTypes","squareMask","dotMask","options","_canvas","_options","getContext","getCanvas","clear","canvasContext","clearRect","drawQR","qr","minSize","drawImageSize","_qr","image","loadImage","_image","imageOptions","qrOptions","coverLevel","errorCorrectionPercents","drawBackground","drawDots","hideBackgroundDots","drawCorners","drawImage","backgroundOptions","gradient","gradientOptions","_createGradient","additionalRotation","colorStops","color","addColorStop","filter","xBeginning","yBeginning","dot","dotsOptions","beginPath","useLegacyDotRotation","xOffset","yOffset","strokeStyle","fill","cornersSquareSize","cornersDotSize","column","cornersSquareOptions","cornersSquare","cornersDotOptions","cornersDot","Promise","resolve","reject","Image","crossOrigin","onload","src","dx","dy","dw","dh","gradientTypes","createRadialGradient","positiveRotation","x0","y0","x1","y1","tan","createLinearGradient","svg","_svg","_element","setAttribute","createElementNS","_defs","_style","getElement","oldElement","cloneNode","parentNode","replaceChild","element","_createColor","_createStyle","_dotsClipPath","_dots","cornersSquareClipPath","cornersDotClipPath","_cornersSquareClipPath","_cornersDotClipPath","_cornerSquares","_cornerDots","_getBase64Image","base64Image","_getImageBlob","url","fetch","blob","_blobToBase64","reader","FileReader","dataUrl","result","readAsDataURL","stop","innerHTML","qrTypes","drawTypes","sanitizeGradient","newGradient","Number","map","colorStop","sanitizeOptions","newOptions","Boolean","update","_clearContainer","container","_getQRStylingElement","extension","toLowerCase","promise","_svgDrawingPromise","canvas","_canvasDrawingPromise","QRCodeStyling","_container","append","getRawData","serializer","XMLSerializer","serializeToString","Blob","toBlob","downloadOptions","console","warn","encodeURIComponent","toDataURL"],"sourceRoot":""} \ No newline at end of file diff --git a/src/core/QRCanvas.ts b/src/core/QRCanvas.ts index 786aa9ee..2730087b 100644 --- a/src/core/QRCanvas.ts +++ b/src/core/QRCanvas.ts @@ -96,6 +96,8 @@ export default class QRCanvas { this.clear(); this.drawBackground(); + + //Draw the dots with the given filter function this.drawDots((i: number, j: number): boolean => { if (this._options.imageOptions.hideBackgroundDots) { if ( @@ -187,14 +189,27 @@ export default class QRCanvas { if (!this._qr.isDark(i, j)) { continue; } + + const x = this._options.useLegacyDotRotation ? xBeginning + i * dotSize : yBeginning + j * dotSize; + const y = this._options.useLegacyDotRotation ? yBeginning + j * dotSize : xBeginning + i * dotSize; + dot.draw( - yBeginning + j * dotSize, - xBeginning + i * dotSize, + x, + y, dotSize, + //Get neighbor function (xOffset: number, yOffset: number): boolean => { - if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false; - if (filter && !filter(i + xOffset, j + yOffset)) return false; - return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset); + //Out of bounds check + + if (this._options.useLegacyDotRotation) { + if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false; + if (filter && !filter(i + xOffset, j + yOffset)) return false; + return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset); + } else { + if (j + xOffset < 0 || i + yOffset < 0 || j + xOffset >= count || i + yOffset >= count) return false; + if (filter && !filter(j + xOffset, i + yOffset)) return false; + return !!this._qr && this._qr.isDark(i + yOffset, j + xOffset); + } } ); } diff --git a/src/core/QRCodeStyling.ts b/src/core/QRCodeStyling.ts index 3454d09e..e78b519c 100644 --- a/src/core/QRCodeStyling.ts +++ b/src/core/QRCodeStyling.ts @@ -119,12 +119,12 @@ export default class QRCodeStyling { if (extension.toLowerCase() === "svg") { const serializer = new XMLSerializer(); - const source = serializer.serializeToString(((element as unknown) as QRSVG).getElement()); + const source = serializer.serializeToString((element as unknown as QRSVG).getElement()); return new Blob(['\r\n' + source], { type: "image/svg+xml" }); } else { return new Promise((resolve) => - ((element as unknown) as QRCanvas).getCanvas().toBlob(resolve, `image/${extension}`, 1) + (element as unknown as QRCanvas).getCanvas().toBlob(resolve, `image/${extension}`, 1) ); } } @@ -153,13 +153,13 @@ export default class QRCodeStyling { if (extension.toLowerCase() === "svg") { const serializer = new XMLSerializer(); - let source = serializer.serializeToString(((element as unknown) as QRSVG).getElement()); + let source = serializer.serializeToString((element as unknown as QRSVG).getElement()); source = '\r\n' + source; const url = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(source); downloadURI(url, `${name}.svg`); } else { - const url = ((element as unknown) as QRCanvas).getCanvas().toDataURL(`image/${extension}`); + const url = (element as unknown as QRCanvas).getCanvas().toDataURL(`image/${extension}`); downloadURI(url, `${name}.${extension}`); } } diff --git a/src/core/QROptions.ts b/src/core/QROptions.ts index 69fac09c..e69fc88a 100644 --- a/src/core/QROptions.ts +++ b/src/core/QROptions.ts @@ -29,6 +29,7 @@ export interface RequiredOptions extends Options { color: string; gradient?: Gradient; }; + useLegacyDotRotation: boolean; } const defaultOptions: RequiredOptions = { @@ -54,7 +55,8 @@ const defaultOptions: RequiredOptions = { }, backgroundOptions: { color: "#fff" - } + }, + useLegacyDotRotation: false }; export default defaultOptions; diff --git a/src/core/QRSVG.ts b/src/core/QRSVG.ts index dd572be6..60608ef0 100644 --- a/src/core/QRSVG.ts +++ b/src/core/QRSVG.ts @@ -219,16 +219,20 @@ export default class QRSVG { continue; } - dot.draw( - yBeginning + j * dotSize, - xBeginning + i * dotSize, - dotSize, - (xOffset: number, yOffset: number): boolean => { + const x = this._options.useLegacyDotRotation ? xBeginning + i * dotSize : yBeginning + j * dotSize; + const y = this._options.useLegacyDotRotation ? yBeginning + j * dotSize : xBeginning + i * dotSize; + + dot.draw(x, y, dotSize, (xOffset: number, yOffset: number): boolean => { + if (this._options.useLegacyDotRotation) { if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false; if (filter && !filter(i + xOffset, j + yOffset)) return false; return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset); + } else { + if (j + xOffset < 0 || i + yOffset < 0 || j + xOffset >= count || i + yOffset >= count) return false; + if (filter && !filter(j + xOffset, i + yOffset)) return false; + return !!this._qr && this._qr.isDark(i + yOffset, j + xOffset); } - ); + }); if (dot._element && this._dotsClipPath) { this._dotsClipPath.appendChild(dot._element); diff --git a/src/figures/dot/canvas/QRDot.test.js b/src/figures/dot/canvas/QRDot.test.js index fedcc432..f67f891e 100644 --- a/src/figures/dot/canvas/QRDot.test.js +++ b/src/figures/dot/canvas/QRDot.test.js @@ -51,7 +51,7 @@ describe("Test QRDot class", () => { [0, 0, 0, 0, 0], [1, 1, 0, 1, 1], [0, 1, 0, 1, 1], - [0, 0, 1, 0, 0], + [0, 0, 1, 0, 0] ]; const imgFile = fs.readFileSync(path.resolve(__dirname, "../../../assets/test/rounded_dots.png"), "base64"); const dot = new QRDot({ context: canvasContext, type: "rounded" }); diff --git a/src/index.html b/src/index.html index 1790c912..15b95239 100644 --- a/src/index.html +++ b/src/index.html @@ -3,15 +3,26 @@ QR Code Styling + + -
-
-