qrcode.vue 3.4.1 → 3.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/README-ja.md +184 -0
- package/README-zh_cn.md +93 -11
- package/README.md +93 -11
- package/dist/index.d.ts +179 -6
- package/dist/qrcode.vue.browser.js +1118 -1038
- package/dist/qrcode.vue.browser.min.js +4 -4
- package/dist/qrcode.vue.cjs.js +107 -27
- package/dist/qrcode.vue.esm.js +104 -28
- package/package.json +11 -21
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* qrcode.vue v3.
|
|
3
|
-
* A Vue.js component to generate QRCode.
|
|
4
|
-
* © 2017-
|
|
2
|
+
* qrcode.vue v3.5.1
|
|
3
|
+
* A Vue.js component to generate QRCode. Both support Vue 2 and Vue 3
|
|
4
|
+
* © 2017-PRESENT @scopewu(https://github.com/scopewu)
|
|
5
5
|
* MIT License.
|
|
6
6
|
*/
|
|
7
|
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("vue")):"function"==typeof define&&define.amd?define(["vue"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).QrcodeVue=e(t.Vue)}(this,(function(t){"use strict";var e,r=function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;n>r;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)};"function"==typeof SuppressedError&&SuppressedError,function(t){var e=function(){function e(t,r,n,i){if(this.version=t,this.errorCorrectionLevel=r,this.modules=[],this.isFunction=[],e.MIN_VERSION>t||t>e.MAX_VERSION)throw new RangeError("Version value out of range");if(-1>i||i>7)throw new RangeError("Mask value out of range");this.size=4*t+17;for(var a=[],s=0;this.size>s;s++)a.push(!1);for(s=0;this.size>s;s++)this.modules.push(a.slice()),this.isFunction.push(a.slice());this.drawFunctionPatterns();var u=this.addEccAndInterleave(n);if(this.drawCodewords(u),-1==i){var h=1e9;for(s=0;8>s;s++){this.applyMask(s),this.drawFormatBits(s);var f=this.getPenaltyScore();h>f&&(i=s,h=f),this.applyMask(s)}}o(i>=0&&7>=i),this.mask=i,this.applyMask(i),this.drawFormatBits(i),this.isFunction=[]}return e.encodeText=function(r,n){var o=t.QrSegment.makeSegments(r);return e.encodeSegments(o,n)},e.encodeBinary=function(r,n){var o=t.QrSegment.makeBytes(r);return e.encodeSegments([o],n)},e.encodeSegments=function(t,n,a,s,u,h){if(void 0===a&&(a=1),void 0===s&&(s=40),void 0===u&&(u=-1),void 0===h&&(h=!0),e.MIN_VERSION>a||a>s||s>e.MAX_VERSION||-1>u||u>7)throw new RangeError("Invalid value");var f,l;for(f=a;;f++){var c=8*e.getNumDataCodewords(f,n),d=i.getTotalBits(t,f);if(c>=d){l=d;break}if(f>=s)throw new RangeError("Data too long")}for(var v=0,g=[e.Ecc.MEDIUM,e.Ecc.QUARTILE,e.Ecc.HIGH];g.length>v;v++){var m=g[v];h&&l<=8*e.getNumDataCodewords(f,m)&&(n=m)}for(var p=[],E=0,M=t;M.length>E;E++){var C=M[E];r(C.mode.modeBits,4,p),r(C.numChars,C.mode.numCharCountBits(f),p);for(var w=0,R=C.getData();R.length>w;w++){p.push(R[w])}}o(p.length==l);var y=8*e.getNumDataCodewords(f,n);o(y>=p.length),r(0,Math.min(4,y-p.length),p),r(0,(8-p.length%8)%8,p),o(p.length%8==0);for(var N=236;y>p.length;N^=253)r(N,8,p);for(var A=[];p.length>8*A.length;)A.push(0);return p.forEach((function(t,e){return A[e>>>3]|=t<<7-(7&e)})),new e(f,n,A,u)},e.prototype.getModule=function(t,e){return t>=0&&this.size>t&&e>=0&&this.size>e&&this.modules[e][t]},e.prototype.getModules=function(){return this.modules},e.prototype.drawFunctionPatterns=function(){for(var t=0;this.size>t;t++)this.setFunctionModule(6,t,t%2==0),this.setFunctionModule(t,6,t%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);var e=this.getAlignmentPatternPositions(),r=e.length;for(t=0;r>t;t++)for(var n=0;r>n;n++)0==t&&0==n||0==t&&n==r-1||t==r-1&&0==n||this.drawAlignmentPattern(e[t],e[n]);this.drawFormatBits(0),this.drawVersion()},e.prototype.drawFormatBits=function(t){for(var e=this.errorCorrectionLevel.formatBits<<3|t,r=e,i=0;10>i;i++)r=r<<1^1335*(r>>>9);var a=21522^(e<<10|r);o(a>>>15==0);for(i=0;5>=i;i++)this.setFunctionModule(8,i,n(a,i));this.setFunctionModule(8,7,n(a,6)),this.setFunctionModule(8,8,n(a,7)),this.setFunctionModule(7,8,n(a,8));for(i=9;15>i;i++)this.setFunctionModule(14-i,8,n(a,i));for(i=0;8>i;i++)this.setFunctionModule(this.size-1-i,8,n(a,i));for(i=8;15>i;i++)this.setFunctionModule(8,this.size-15+i,n(a,i));this.setFunctionModule(8,this.size-8,!0)},e.prototype.drawVersion=function(){if(this.version>=7){for(var t=this.version,e=0;12>e;e++)t=t<<1^7973*(t>>>11);var r=this.version<<12|t;o(r>>>18==0);for(e=0;18>e;e++){var i=n(r,e),a=this.size-11+e%3,s=Math.floor(e/3);this.setFunctionModule(a,s,i),this.setFunctionModule(s,a,i)}}},e.prototype.drawFinderPattern=function(t,e){for(var r=-4;4>=r;r++)for(var n=-4;4>=n;n++){var o=Math.max(Math.abs(n),Math.abs(r)),i=t+n,a=e+r;i>=0&&this.size>i&&a>=0&&this.size>a&&this.setFunctionModule(i,a,2!=o&&4!=o)}},e.prototype.drawAlignmentPattern=function(t,e){for(var r=-2;2>=r;r++)for(var n=-2;2>=n;n++)this.setFunctionModule(t+n,e+r,1!=Math.max(Math.abs(n),Math.abs(r)))},e.prototype.setFunctionModule=function(t,e,r){this.modules[e][t]=r,this.isFunction[e][t]=!0},e.prototype.addEccAndInterleave=function(t){var r=this.version,n=this.errorCorrectionLevel;if(t.length!=e.getNumDataCodewords(r,n))throw new RangeError("Invalid argument");for(var i=e.NUM_ERROR_CORRECTION_BLOCKS[n.ordinal][r],a=e.ECC_CODEWORDS_PER_BLOCK[n.ordinal][r],s=Math.floor(e.getNumRawDataModules(r)/8),u=i-s%i,h=Math.floor(s/i),f=[],l=e.reedSolomonComputeDivisor(a),c=0,d=0;i>c;c++){var v=t.slice(d,d+h-a+(u>c?0:1));d+=v.length;var g=e.reedSolomonComputeRemainder(v,l);u>c&&v.push(0),f.push(v.concat(g))}var m=[],p=function(t){f.forEach((function(e,r){t==h-a&&u>r||m.push(e[t])}))};for(c=0;f[0].length>c;c++)p(c);return o(m.length==s),m},e.prototype.drawCodewords=function(t){if(t.length!=Math.floor(e.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");for(var r=0,i=this.size-1;i>=1;i-=2){6==i&&(i=5);for(var a=0;this.size>a;a++)for(var s=0;2>s;s++){var u=i-s,h=0==(i+1&2)?this.size-1-a:a;!this.isFunction[h][u]&&8*t.length>r&&(this.modules[h][u]=n(t[r>>>3],7-(7&r)),r++)}}o(r==8*t.length)},e.prototype.applyMask=function(t){if(0>t||t>7)throw new RangeError("Mask value out of range");for(var e=0;this.size>e;e++)for(var r=0;this.size>r;r++){var n=void 0;switch(t){case 0:n=(r+e)%2==0;break;case 1:n=e%2==0;break;case 2:n=r%3==0;break;case 3:n=(r+e)%3==0;break;case 4:n=(Math.floor(r/3)+Math.floor(e/2))%2==0;break;case 5:n=r*e%2+r*e%3==0;break;case 6:n=(r*e%2+r*e%3)%2==0;break;case 7:n=((r+e)%2+r*e%3)%2==0;break;default:throw Error("Unreachable")}!this.isFunction[e][r]&&n&&(this.modules[e][r]=!this.modules[e][r])}},e.prototype.getPenaltyScore=function(){for(var t=0,r=0;this.size>r;r++){for(var n=!1,i=0,a=[0,0,0,0,0,0,0],s=0;this.size>s;s++)this.modules[r][s]==n?5==++i?t+=e.PENALTY_N1:i>5&&t++:(this.finderPenaltyAddHistory(i,a),n||(t+=this.finderPenaltyCountPatterns(a)*e.PENALTY_N3),n=this.modules[r][s],i=1);t+=this.finderPenaltyTerminateAndCount(n,i,a)*e.PENALTY_N3}for(s=0;this.size>s;s++){n=!1;var u=0;for(a=[0,0,0,0,0,0,0],r=0;this.size>r;r++)this.modules[r][s]==n?5==++u?t+=e.PENALTY_N1:u>5&&t++:(this.finderPenaltyAddHistory(u,a),n||(t+=this.finderPenaltyCountPatterns(a)*e.PENALTY_N3),n=this.modules[r][s],u=1);t+=this.finderPenaltyTerminateAndCount(n,u,a)*e.PENALTY_N3}for(r=0;this.size-1>r;r++)for(s=0;this.size-1>s;s++){var h=this.modules[r][s];h==this.modules[r][s+1]&&h==this.modules[r+1][s]&&h==this.modules[r+1][s+1]&&(t+=e.PENALTY_N2)}for(var f=0,l=0,c=this.modules;c.length>l;l++){f=c[l].reduce((function(t,e){return t+(e?1:0)}),f)}var d=this.size*this.size,v=Math.ceil(Math.abs(20*f-10*d)/d)-1;return o(v>=0&&9>=v),o((t+=v*e.PENALTY_N4)>=0&&2568888>=t),t},e.prototype.getAlignmentPatternPositions=function(){if(1==this.version)return[];for(var t=Math.floor(this.version/7)+2,e=32==this.version?26:2*Math.ceil((4*this.version+4)/(2*t-2)),r=[6],n=this.size-7;t>r.length;n-=e)r.splice(1,0,n);return r},e.getNumRawDataModules=function(t){if(e.MIN_VERSION>t||t>e.MAX_VERSION)throw new RangeError("Version number out of range");var r=(16*t+128)*t+64;if(t>=2){var n=Math.floor(t/7)+2;r-=(25*n-10)*n-55,7>t||(r-=36)}return o(r>=208&&29648>=r),r},e.getNumDataCodewords=function(t,r){return Math.floor(e.getNumRawDataModules(t)/8)-e.ECC_CODEWORDS_PER_BLOCK[r.ordinal][t]*e.NUM_ERROR_CORRECTION_BLOCKS[r.ordinal][t]},e.reedSolomonComputeDivisor=function(t){if(1>t||t>255)throw new RangeError("Degree out of range");for(var r=[],n=0;t-1>n;n++)r.push(0);r.push(1);var o=1;for(n=0;t>n;n++){for(var i=0;r.length>i;i++)r[i]=e.reedSolomonMultiply(r[i],o),r.length>i+1&&(r[i]^=r[i+1]);o=e.reedSolomonMultiply(o,2)}return r},e.reedSolomonComputeRemainder=function(t,r){for(var n=r.map((function(t){return 0})),o=function(t){var o=t^n.shift();n.push(0),r.forEach((function(t,r){return n[r]^=e.reedSolomonMultiply(t,o)}))},i=0,a=t;a.length>i;i++){o(a[i])}return n},e.reedSolomonMultiply=function(t,e){if(t>>>8!=0||e>>>8!=0)throw new RangeError("Byte out of range");for(var r=0,n=7;n>=0;n--)r=r<<1^285*(r>>>7),r^=(e>>>n&1)*t;return o(r>>>8==0),r},e.prototype.finderPenaltyCountPatterns=function(t){var e=t[1];o(3*this.size>=e);var r=e>0&&t[2]==e&&t[3]==3*e&&t[4]==e&&t[5]==e;return(!r||4*e>t[0]||e>t[6]?0:1)+(!r||4*e>t[6]||e>t[0]?0:1)},e.prototype.finderPenaltyTerminateAndCount=function(t,e,r){return t&&(this.finderPenaltyAddHistory(e,r),e=0),this.finderPenaltyAddHistory(e+=this.size,r),this.finderPenaltyCountPatterns(r)},e.prototype.finderPenaltyAddHistory=function(t,e){0==e[0]&&(t+=this.size),e.pop(),e.unshift(t)},e.MIN_VERSION=1,e.MAX_VERSION=40,e.PENALTY_N1=3,e.PENALTY_N2=3,e.PENALTY_N3=40,e.PENALTY_N4=10,e.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],e.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],e}();function r(t,e,r){if(0>e||e>31||t>>>e!=0)throw new RangeError("Value out of range");for(var n=e-1;n>=0;n--)r.push(t>>>n&1)}function n(t,e){return 0!=(t>>>e&1)}function o(t){if(!t)throw Error("Assertion error")}t.QrCode=e;var i=function(){function t(t,e,r){if(this.mode=t,this.numChars=e,this.bitData=r,0>e)throw new RangeError("Invalid argument");this.bitData=r.slice()}return t.makeBytes=function(e){for(var n=[],o=0,i=e;i.length>o;o++){r(i[o],8,n)}return new t(t.Mode.BYTE,e.length,n)},t.makeNumeric=function(e){if(!t.isNumeric(e))throw new RangeError("String contains non-numeric characters");for(var n=[],o=0;e.length>o;){var i=Math.min(e.length-o,3);r(parseInt(e.substring(o,o+i),10),3*i+1,n),o+=i}return new t(t.Mode.NUMERIC,e.length,n)},t.makeAlphanumeric=function(e){if(!t.isAlphanumeric(e))throw new RangeError("String contains unencodable characters in alphanumeric mode");var n,o=[];for(n=0;e.length>=n+2;n+=2){var i=45*t.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n));r(i+=t.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n+1)),11,o)}return e.length>n&&r(t.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n)),6,o),new t(t.Mode.ALPHANUMERIC,e.length,o)},t.makeSegments=function(e){return""==e?[]:t.isNumeric(e)?[t.makeNumeric(e)]:t.isAlphanumeric(e)?[t.makeAlphanumeric(e)]:[t.makeBytes(t.toUtf8ByteArray(e))]},t.makeEci=function(e){var n=[];if(0>e)throw new RangeError("ECI assignment value out of range");if(128>e)r(e,8,n);else if(16384>e)r(2,2,n),r(e,14,n);else{if(e>=1e6)throw new RangeError("ECI assignment value out of range");r(6,3,n),r(e,21,n)}return new t(t.Mode.ECI,0,n)},t.isNumeric=function(e){return t.NUMERIC_REGEX.test(e)},t.isAlphanumeric=function(e){return t.ALPHANUMERIC_REGEX.test(e)},t.prototype.getData=function(){return this.bitData.slice()},t.getTotalBits=function(t,e){for(var r=0,n=0,o=t;o.length>n;n++){var i=o[n],a=i.mode.numCharCountBits(e);if(i.numChars>=1<<a)return 1/0;r+=4+a+i.bitData.length}return r},t.toUtf8ByteArray=function(t){t=encodeURI(t);for(var e=[],r=0;t.length>r;r++)"%"!=t.charAt(r)?e.push(t.charCodeAt(r)):(e.push(parseInt(t.substring(r+1,r+3),16)),r+=2);return e},t.NUMERIC_REGEX=/^[0-9]*$/,t.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,t.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",t}();t.QrSegment=i}(e||(e={})),function(t){var e,r;e=t.QrCode||(t.QrCode={}),r=function(){function t(t,e){this.ordinal=t,this.formatBits=e}return t.LOW=new t(0,1),t.MEDIUM=new t(1,0),t.QUARTILE=new t(2,3),t.HIGH=new t(3,2),t}(),e.Ecc=r}(e||(e={})),function(t){var e,r;e=t.QrSegment||(t.QrSegment={}),r=function(){function t(t,e){this.modeBits=t,this.numBitsCharCount=e}return t.prototype.numCharCountBits=function(t){return this.numBitsCharCount[Math.floor((t+7)/17)]},t.NUMERIC=new t(1,[10,12,14]),t.ALPHANUMERIC=new t(2,[9,11,13]),t.BYTE=new t(4,[8,16,16]),t.KANJI=new t(8,[8,10,12]),t.ECI=new t(7,[0,0,0]),t}(),e.Mode=r}(e||(e={}));var n=e,o={L:n.QrCode.Ecc.LOW,M:n.QrCode.Ecc.MEDIUM,Q:n.QrCode.Ecc.QUARTILE,H:n.QrCode.Ecc.HIGH},i=function(){try{(new Path2D).addPath(new Path2D)}catch(t){return!1}return!0}();function a(t){return t in o}function s(t,e){void 0===e&&(e=0);var r=[];return t.forEach((function(t,n){var o=null;t.forEach((function(i,a){if(!i&&null!==o)return r.push("M".concat(o+e," ").concat(n+e,"h").concat(a-o,"v1H").concat(o+e,"z")),void(o=null);if(a!==t.length-1)i&&null===o&&(o=a);else{if(!i)return;r.push(null===o?"M".concat(a+e,",").concat(n+e," h1v1H").concat(a+e,"z"):"M".concat(o+e,",").concat(n+e," h").concat(a+1-o,"v1H").concat(o+e,"z"))}}))})),r.join("")}var u={value:{type:String,required:!0,default:""},size:{type:Number,default:100},level:{type:String,default:"H",validator:function(t){return a(t)}},background:{type:String,default:"#fff"},foreground:{type:String,default:"#000"},margin:{type:Number,required:!1,default:0}},h=r(r({},u),{renderAs:{type:String,required:!1,default:"canvas",validator:function(t){return["canvas","svg"].indexOf(t)>-1}}}),f=t.defineComponent({name:"QRCodeSvg",props:u,setup:function(e){var r=t.ref(0),i=t.ref(""),a=function(){var t=e.margin,a=n.QrCode.encodeText(e.value,o[e.level]).getModules();r.value=a.length+2*t,i.value=s(a,t)};return a(),t.onUpdated(a),function(){return t.h("svg",{width:e.size,height:e.size,"shape-rendering":"crispEdges",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(r.value," ").concat(r.value)},[t.h("path",{fill:e.background,d:"M0,0 h".concat(r.value,"v").concat(r.value,"H0z")}),t.h("path",{fill:e.foreground,d:i.value})])}}}),l=t.defineComponent({name:"QRCodeCanvas",props:u,setup:function(e){var r=t.ref(null),a=function(){var t=e.value,a=e.level,u=e.size,h=e.margin,f=e.background,l=e.foreground,c=r.value;if(c){var d=c.getContext("2d");if(d){var v=n.QrCode.encodeText(t,o[a]).getModules(),g=v.length+2*h,m=window.devicePixelRatio||1,p=u/g*m;c.height=c.width=u*m,d.scale(p,p),d.fillStyle=f,d.fillRect(0,0,g,g),d.fillStyle=l,i?d.fill(new Path2D(s(v,h))):v.forEach((function(t,e){t.forEach((function(t,r){t&&d.fillRect(r+h,e+h,1,1)}))}))}}};return t.onMounted(a),t.onUpdated(a),function(){return t.h("canvas",{ref:r,style:{width:"".concat(e.size,"px"),height:"".concat(e.size,"px")}})}}});return t.defineComponent({name:"Qrcode",render:function(){var e=this.$props,r=e.renderAs,n=e.value,o=e.level,i=e.background,s=e.foreground,u=e.size>>>0,h=e.margin>>>0,c=a(o)?o:"H";return t.h("svg"===r?f:l,{value:n,size:u,margin:h,level:c,background:i,foreground:s})},props:h})}));
|
|
7
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).QrcodeVue={},t.Vue)}(this,(function(t,e){"use strict";var r,n=function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;n>r;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)};"function"==typeof SuppressedError&&SuppressedError,function(t){var e=function(){function e(t,r,n,i){if(this.version=t,this.errorCorrectionLevel=r,this.modules=[],this.isFunction=[],e.MIN_VERSION>t||t>e.MAX_VERSION)throw new RangeError("Version value out of range");if(-1>i||i>7)throw new RangeError("Mask value out of range");this.size=4*t+17;for(var a=[],s=0;this.size>s;s++)a.push(!1);for(s=0;this.size>s;s++)this.modules.push(a.slice()),this.isFunction.push(a.slice());this.drawFunctionPatterns();var u=this.addEccAndInterleave(n);if(this.drawCodewords(u),-1==i){var h=1e9;for(s=0;8>s;s++){this.applyMask(s),this.drawFormatBits(s);var l=this.getPenaltyScore();h>l&&(i=s,h=l),this.applyMask(s)}}o(i>=0&&7>=i),this.mask=i,this.applyMask(i),this.drawFormatBits(i),this.isFunction=[]}return e.encodeText=function(r,n){var o=t.QrSegment.makeSegments(r);return e.encodeSegments(o,n)},e.encodeBinary=function(r,n){var o=t.QrSegment.makeBytes(r);return e.encodeSegments([o],n)},e.encodeSegments=function(t,n,a,s,u,h){if(void 0===a&&(a=1),void 0===s&&(s=40),void 0===u&&(u=-1),void 0===h&&(h=!0),e.MIN_VERSION>a||a>s||s>e.MAX_VERSION||-1>u||u>7)throw new RangeError("Invalid value");var l,c;for(l=a;;l++){var f=8*e.getNumDataCodewords(l,n),d=i.getTotalBits(t,l);if(f>=d){c=d;break}if(l>=s)throw new RangeError("Data too long")}for(var g=0,v=[e.Ecc.MEDIUM,e.Ecc.QUARTILE,e.Ecc.HIGH];v.length>g;g++){var m=v[g];h&&c<=8*e.getNumDataCodewords(l,m)&&(n=m)}for(var p=[],E=0,w=t;w.length>E;E++){var M=w[E];r(M.mode.modeBits,4,p),r(M.numChars,M.mode.numCharCountBits(l),p);for(var C=0,y=M.getData();y.length>C;C++){p.push(y[C])}}o(p.length==c);var R=8*e.getNumDataCodewords(l,n);o(R>=p.length),r(0,Math.min(4,R-p.length),p),r(0,(8-p.length%8)%8,p),o(p.length%8==0);for(var N=236;R>p.length;N^=253)r(N,8,p);for(var A=[];p.length>8*A.length;)A.push(0);return p.forEach((function(t,e){return A[e>>>3]|=t<<7-(7&e)})),new e(l,n,A,u)},e.prototype.getModule=function(t,e){return t>=0&&this.size>t&&e>=0&&this.size>e&&this.modules[e][t]},e.prototype.getModules=function(){return this.modules},e.prototype.drawFunctionPatterns=function(){for(var t=0;this.size>t;t++)this.setFunctionModule(6,t,t%2==0),this.setFunctionModule(t,6,t%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);var e=this.getAlignmentPatternPositions(),r=e.length;for(t=0;r>t;t++)for(var n=0;r>n;n++)0==t&&0==n||0==t&&n==r-1||t==r-1&&0==n||this.drawAlignmentPattern(e[t],e[n]);this.drawFormatBits(0),this.drawVersion()},e.prototype.drawFormatBits=function(t){for(var e=this.errorCorrectionLevel.formatBits<<3|t,r=e,i=0;10>i;i++)r=r<<1^1335*(r>>>9);var a=21522^(e<<10|r);o(a>>>15==0);for(i=0;5>=i;i++)this.setFunctionModule(8,i,n(a,i));this.setFunctionModule(8,7,n(a,6)),this.setFunctionModule(8,8,n(a,7)),this.setFunctionModule(7,8,n(a,8));for(i=9;15>i;i++)this.setFunctionModule(14-i,8,n(a,i));for(i=0;8>i;i++)this.setFunctionModule(this.size-1-i,8,n(a,i));for(i=8;15>i;i++)this.setFunctionModule(8,this.size-15+i,n(a,i));this.setFunctionModule(8,this.size-8,!0)},e.prototype.drawVersion=function(){if(this.version>=7){for(var t=this.version,e=0;12>e;e++)t=t<<1^7973*(t>>>11);var r=this.version<<12|t;o(r>>>18==0);for(e=0;18>e;e++){var i=n(r,e),a=this.size-11+e%3,s=Math.floor(e/3);this.setFunctionModule(a,s,i),this.setFunctionModule(s,a,i)}}},e.prototype.drawFinderPattern=function(t,e){for(var r=-4;4>=r;r++)for(var n=-4;4>=n;n++){var o=Math.max(Math.abs(n),Math.abs(r)),i=t+n,a=e+r;i>=0&&this.size>i&&a>=0&&this.size>a&&this.setFunctionModule(i,a,2!=o&&4!=o)}},e.prototype.drawAlignmentPattern=function(t,e){for(var r=-2;2>=r;r++)for(var n=-2;2>=n;n++)this.setFunctionModule(t+n,e+r,1!=Math.max(Math.abs(n),Math.abs(r)))},e.prototype.setFunctionModule=function(t,e,r){this.modules[e][t]=r,this.isFunction[e][t]=!0},e.prototype.addEccAndInterleave=function(t){var r=this.version,n=this.errorCorrectionLevel;if(t.length!=e.getNumDataCodewords(r,n))throw new RangeError("Invalid argument");for(var i=e.NUM_ERROR_CORRECTION_BLOCKS[n.ordinal][r],a=e.ECC_CODEWORDS_PER_BLOCK[n.ordinal][r],s=Math.floor(e.getNumRawDataModules(r)/8),u=i-s%i,h=Math.floor(s/i),l=[],c=e.reedSolomonComputeDivisor(a),f=0,d=0;i>f;f++){var g=t.slice(d,d+h-a+(u>f?0:1));d+=g.length;var v=e.reedSolomonComputeRemainder(g,c);u>f&&g.push(0),l.push(g.concat(v))}var m=[],p=function(t){l.forEach((function(e,r){t==h-a&&u>r||m.push(e[t])}))};for(f=0;l[0].length>f;f++)p(f);return o(m.length==s),m},e.prototype.drawCodewords=function(t){if(t.length!=Math.floor(e.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");for(var r=0,i=this.size-1;i>=1;i-=2){6==i&&(i=5);for(var a=0;this.size>a;a++)for(var s=0;2>s;s++){var u=i-s,h=!(i+1&2)?this.size-1-a:a;!this.isFunction[h][u]&&8*t.length>r&&(this.modules[h][u]=n(t[r>>>3],7-(7&r)),r++)}}o(r==8*t.length)},e.prototype.applyMask=function(t){if(0>t||t>7)throw new RangeError("Mask value out of range");for(var e=0;this.size>e;e++)for(var r=0;this.size>r;r++){var n=void 0;switch(t){case 0:n=(r+e)%2==0;break;case 1:n=e%2==0;break;case 2:n=r%3==0;break;case 3:n=(r+e)%3==0;break;case 4:n=(Math.floor(r/3)+Math.floor(e/2))%2==0;break;case 5:n=r*e%2+r*e%3==0;break;case 6:n=(r*e%2+r*e%3)%2==0;break;case 7:n=((r+e)%2+r*e%3)%2==0;break;default:throw Error("Unreachable")}!this.isFunction[e][r]&&n&&(this.modules[e][r]=!this.modules[e][r])}},e.prototype.getPenaltyScore=function(){for(var t=0,r=0;this.size>r;r++){for(var n=!1,i=0,a=[0,0,0,0,0,0,0],s=0;this.size>s;s++)this.modules[r][s]==n?5==++i?t+=e.PENALTY_N1:i>5&&t++:(this.finderPenaltyAddHistory(i,a),n||(t+=this.finderPenaltyCountPatterns(a)*e.PENALTY_N3),n=this.modules[r][s],i=1);t+=this.finderPenaltyTerminateAndCount(n,i,a)*e.PENALTY_N3}for(s=0;this.size>s;s++){n=!1;var u=0;for(a=[0,0,0,0,0,0,0],r=0;this.size>r;r++)this.modules[r][s]==n?5==++u?t+=e.PENALTY_N1:u>5&&t++:(this.finderPenaltyAddHistory(u,a),n||(t+=this.finderPenaltyCountPatterns(a)*e.PENALTY_N3),n=this.modules[r][s],u=1);t+=this.finderPenaltyTerminateAndCount(n,u,a)*e.PENALTY_N3}for(r=0;this.size-1>r;r++)for(s=0;this.size-1>s;s++){var h=this.modules[r][s];h==this.modules[r][s+1]&&h==this.modules[r+1][s]&&h==this.modules[r+1][s+1]&&(t+=e.PENALTY_N2)}for(var l=0,c=0,f=this.modules;f.length>c;c++){l=f[c].reduce((function(t,e){return t+(e?1:0)}),l)}var d=this.size*this.size,g=Math.ceil(Math.abs(20*l-10*d)/d)-1;return o(g>=0&&9>=g),o((t+=g*e.PENALTY_N4)>=0&&2568888>=t),t},e.prototype.getAlignmentPatternPositions=function(){if(1==this.version)return[];for(var t=Math.floor(this.version/7)+2,e=2*Math.floor((8*this.version+3*t+5)/(4*t-4)),r=[6],n=this.size-7;t>r.length;n-=e)r.splice(1,0,n);return r},e.getNumRawDataModules=function(t){if(e.MIN_VERSION>t||t>e.MAX_VERSION)throw new RangeError("Version number out of range");var r=(16*t+128)*t+64;if(t>=2){var n=Math.floor(t/7)+2;r-=(25*n-10)*n-55,7>t||(r-=36)}return o(r>=208&&29648>=r),r},e.getNumDataCodewords=function(t,r){return Math.floor(e.getNumRawDataModules(t)/8)-e.ECC_CODEWORDS_PER_BLOCK[r.ordinal][t]*e.NUM_ERROR_CORRECTION_BLOCKS[r.ordinal][t]},e.reedSolomonComputeDivisor=function(t){if(1>t||t>255)throw new RangeError("Degree out of range");for(var r=[],n=0;t-1>n;n++)r.push(0);r.push(1);var o=1;for(n=0;t>n;n++){for(var i=0;r.length>i;i++)r[i]=e.reedSolomonMultiply(r[i],o),r.length>i+1&&(r[i]^=r[i+1]);o=e.reedSolomonMultiply(o,2)}return r},e.reedSolomonComputeRemainder=function(t,r){for(var n=r.map((function(t){return 0})),o=function(t){var o=t^n.shift();n.push(0),r.forEach((function(t,r){return n[r]^=e.reedSolomonMultiply(t,o)}))},i=0,a=t;a.length>i;i++){o(a[i])}return n},e.reedSolomonMultiply=function(t,e){if(t>>>8!=0||e>>>8!=0)throw new RangeError("Byte out of range");for(var r=0,n=7;n>=0;n--)r=r<<1^285*(r>>>7),r^=(e>>>n&1)*t;return o(r>>>8==0),r},e.prototype.finderPenaltyCountPatterns=function(t){var e=t[1];o(3*this.size>=e);var r=e>0&&t[2]==e&&t[3]==3*e&&t[4]==e&&t[5]==e;return(!r||4*e>t[0]||e>t[6]?0:1)+(!r||4*e>t[6]||e>t[0]?0:1)},e.prototype.finderPenaltyTerminateAndCount=function(t,e,r){return t&&(this.finderPenaltyAddHistory(e,r),e=0),this.finderPenaltyAddHistory(e+=this.size,r),this.finderPenaltyCountPatterns(r)},e.prototype.finderPenaltyAddHistory=function(t,e){0==e[0]&&(t+=this.size),e.pop(),e.unshift(t)},e.MIN_VERSION=1,e.MAX_VERSION=40,e.PENALTY_N1=3,e.PENALTY_N2=3,e.PENALTY_N3=40,e.PENALTY_N4=10,e.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],e.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],e}();function r(t,e,r){if(0>e||e>31||t>>>e!=0)throw new RangeError("Value out of range");for(var n=e-1;n>=0;n--)r.push(t>>>n&1)}function n(t,e){return!!(t>>>e&1)}function o(t){if(!t)throw Error("Assertion error")}t.QrCode=e;var i=function(){function t(t,e,r){if(this.mode=t,this.numChars=e,this.bitData=r,0>e)throw new RangeError("Invalid argument");this.bitData=r.slice()}return t.makeBytes=function(e){for(var n=[],o=0,i=e;i.length>o;o++){r(i[o],8,n)}return new t(t.Mode.BYTE,e.length,n)},t.makeNumeric=function(e){if(!t.isNumeric(e))throw new RangeError("String contains non-numeric characters");for(var n=[],o=0;e.length>o;){var i=Math.min(e.length-o,3);r(parseInt(e.substring(o,o+i),10),3*i+1,n),o+=i}return new t(t.Mode.NUMERIC,e.length,n)},t.makeAlphanumeric=function(e){if(!t.isAlphanumeric(e))throw new RangeError("String contains unencodable characters in alphanumeric mode");var n,o=[];for(n=0;e.length>=n+2;n+=2){var i=45*t.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n));r(i+=t.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n+1)),11,o)}return e.length>n&&r(t.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n)),6,o),new t(t.Mode.ALPHANUMERIC,e.length,o)},t.makeSegments=function(e){return""==e?[]:t.isNumeric(e)?[t.makeNumeric(e)]:t.isAlphanumeric(e)?[t.makeAlphanumeric(e)]:[t.makeBytes(t.toUtf8ByteArray(e))]},t.makeEci=function(e){var n=[];if(0>e)throw new RangeError("ECI assignment value out of range");if(128>e)r(e,8,n);else if(16384>e)r(2,2,n),r(e,14,n);else{if(e>=1e6)throw new RangeError("ECI assignment value out of range");r(6,3,n),r(e,21,n)}return new t(t.Mode.ECI,0,n)},t.isNumeric=function(e){return t.NUMERIC_REGEX.test(e)},t.isAlphanumeric=function(e){return t.ALPHANUMERIC_REGEX.test(e)},t.prototype.getData=function(){return this.bitData.slice()},t.getTotalBits=function(t,e){for(var r=0,n=0,o=t;o.length>n;n++){var i=o[n],a=i.mode.numCharCountBits(e);if(i.numChars>=1<<a)return 1/0;r+=4+a+i.bitData.length}return r},t.toUtf8ByteArray=function(t){t=encodeURI(t);for(var e=[],r=0;t.length>r;r++)"%"!=t.charAt(r)?e.push(t.charCodeAt(r)):(e.push(parseInt(t.substring(r+1,r+3),16)),r+=2);return e},t.NUMERIC_REGEX=/^[0-9]*$/,t.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,t.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",t}();t.QrSegment=i}(r||(r={})),function(t){var e,r;e=t.QrCode||(t.QrCode={}),r=function(){function t(t,e){this.ordinal=t,this.formatBits=e}return t.LOW=new t(0,1),t.MEDIUM=new t(1,0),t.QUARTILE=new t(2,3),t.HIGH=new t(3,2),t}(),e.Ecc=r}(r||(r={})),function(t){var e,r;e=t.QrSegment||(t.QrSegment={}),r=function(){function t(t,e){this.modeBits=t,this.numBitsCharCount=e}return t.prototype.numCharCountBits=function(t){return this.numBitsCharCount[Math.floor((t+7)/17)]},t.NUMERIC=new t(1,[10,12,14]),t.ALPHANUMERIC=new t(2,[9,11,13]),t.BYTE=new t(4,[8,16,16]),t.KANJI=new t(8,[8,10,12]),t.ECI=new t(7,[0,0,0]),t}(),e.Mode=r}(r||(r={}));var o=r,i={L:o.QrCode.Ecc.LOW,M:o.QrCode.Ecc.MEDIUM,Q:o.QrCode.Ecc.QUARTILE,H:o.QrCode.Ecc.HIGH},a=function(){try{(new Path2D).addPath(new Path2D)}catch(t){return!1}return!0}();function s(t){return t in i}function u(t,e){void 0===e&&(e=0);var r=[];return t.forEach((function(t,n){var o=null;t.forEach((function(i,a){if(!i&&null!==o)return r.push("M".concat(o+e," ").concat(n+e,"h").concat(a-o,"v1H").concat(o+e,"z")),void(o=null);if(a!==t.length-1)i&&null===o&&(o=a);else{if(!i)return;r.push(null===o?"M".concat(a+e,",").concat(n+e," h1v1H").concat(a+e,"z"):"M".concat(o+e,",").concat(n+e," h").concat(a+1-o,"v1H").concat(o+e,"z"))}}))})),r.join("")}function h(t,e,r,n){var o=n.width,i=n.height,a=n.x,s=n.y,u=t.length+2*r,h=Math.floor(.1*e),l=u/e,c=(o||h)*l,f=(i||h)*l,d=null==a?t.length/2-c/2:a*l,g=null==s?t.length/2-f/2:s*l,v=null;if(n.excavate){var m=Math.floor(d),p=Math.floor(g);v={x:m,y:p,w:Math.ceil(c+d-m),h:Math.ceil(f+g-p)}}return{x:d,y:g,h:f,w:c,excavation:v}}function l(t,e){return t.slice().map((function(t,r){return e.y>r||r>=e.y+e.h?t:t.map((function(t,r){return(e.x>r||r>=e.x+e.w)&&t}))}))}var c={value:{type:String,required:!0,default:""},size:{type:Number,default:100},level:{type:String,default:"L",validator:function(t){return s(t)}},background:{type:String,default:"#fff"},foreground:{type:String,default:"#000"},margin:{type:Number,required:!1,default:0},imageSettings:{type:Object,required:!1,default:function(){return{}}}},f=n(n({},c),{renderAs:{type:String,required:!1,default:"canvas",validator:function(t){return["canvas","svg"].indexOf(t)>-1}}}),d=e.defineComponent({name:"QRCodeSvg",props:c,setup:function(t){var r,a=e.ref(0),c=e.ref(""),f=function(){var e=t.value,n=t.level,f=t.margin>>>0,d=s(n)?n:"L",g=o.QrCode.encodeText(e,i[d]).getModules();if(a.value=g.length+2*f,t.imageSettings.src){var v=h(g,t.size,f,t.imageSettings);r={x:v.x+f,y:v.y+f,width:v.w,height:v.h},v.excavation&&(g=l(g,v.excavation))}c.value=u(g,f)};return f(),e.onUpdated(f),function(){return e.h("svg",{width:t.size,height:t.size,"shape-rendering":"crispEdges",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(a.value," ").concat(a.value)},[e.h("path",{fill:t.background,d:"M0,0 h".concat(a.value,"v").concat(a.value,"H0z")}),e.h("path",{fill:t.foreground,d:c.value}),t.imageSettings.src&&e.h("image",n({href:t.imageSettings.src},r))])}}}),g=e.defineComponent({name:"QRCodeCanvas",props:c,setup:function(t,r){var c=e.ref(null),f=e.ref(null),d=function(){var e=t.value,r=t.level,n=t.size,d=t.background,g=t.foreground,v=t.margin>>>0,m=s(r)?r:"L",p=c.value;if(p){var E=p.getContext("2d");if(E){var w=o.QrCode.encodeText(e,i[m]).getModules(),M=w.length+2*v,C=f.value,y={x:0,y:0,width:0,height:0},R=t.imageSettings.src&&null!=C&&0!==C.naturalWidth&&0!==C.naturalHeight;if(R){var N=h(w,t.size,v,t.imageSettings);y={x:N.x+v,y:N.y+v,width:N.w,height:N.h},N.excavation&&(w=l(w,N.excavation))}var A=window.devicePixelRatio||1,S=n/M*A;p.height=p.width=n*A,E.scale(S,S),E.fillStyle=d,E.fillRect(0,0,M,M),E.fillStyle=g,a?E.fill(new Path2D(u(w,v))):w.forEach((function(t,e){t.forEach((function(t,r){t&&E.fillRect(r+v,e+v,1,1)}))})),R&&E.drawImage(C,y.x,y.y,y.width,y.height)}}};e.onMounted(d),e.onUpdated(d);var g=r.attrs.style;return function(){return e.h(e.Fragment,[e.h("canvas",n(n({},r.attrs),{ref:c,style:n(n({},g),{width:"".concat(t.size,"px"),height:"".concat(t.size,"px")})})),t.imageSettings.src&&e.h("img",{ref:f,src:t.imageSettings.src,style:{display:"none"},onLoad:d})])}}}),v=e.defineComponent({name:"Qrcode",render:function(){var t=this.$props;return e.h("svg"===t.renderAs?d:g,{value:t.value,size:t.size,margin:t.margin,level:t.level,background:t.background,foreground:t.foreground,imageSettings:t.imageSettings})},props:f});t.QrcodeCanvas=g,t.QrcodeSvg=d,t.default=v,Object.defineProperty(t,"__esModule",{value:!0})}));
|
package/dist/qrcode.vue.cjs.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* qrcode.vue v3.
|
|
3
|
-
* A Vue.js component to generate QRCode.
|
|
4
|
-
* © 2017-
|
|
2
|
+
* qrcode.vue v3.5.1
|
|
3
|
+
* A Vue.js component to generate QRCode. Both support Vue 2 and Vue 3
|
|
4
|
+
* © 2017-PRESENT @scopewu(https://github.com/scopewu)
|
|
5
5
|
* MIT License.
|
|
6
6
|
*/
|
|
7
7
|
'use strict';
|
|
8
8
|
|
|
9
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
10
|
+
|
|
9
11
|
var vue = require('vue');
|
|
10
12
|
|
|
11
13
|
/******************************************************************************
|
|
@@ -525,8 +527,7 @@ var qrcodegen;
|
|
|
525
527
|
return [];
|
|
526
528
|
else {
|
|
527
529
|
var numAlign = Math.floor(this.version / 7) + 2;
|
|
528
|
-
var step = (this.version
|
|
529
|
-
Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;
|
|
530
|
+
var step = Math.floor((this.version * 8 + numAlign * 3 + 5) / (numAlign * 4 - 4)) * 2;
|
|
530
531
|
var result = [6];
|
|
531
532
|
for (var pos = this.size - 7; result.length < numAlign; pos -= step)
|
|
532
533
|
result.splice(1, 0, pos);
|
|
@@ -652,17 +653,17 @@ var qrcodegen;
|
|
|
652
653
|
QrCode.ECC_CODEWORDS_PER_BLOCK = [
|
|
653
654
|
// Version: (note that index 0 is for padding, and is set to an illegal value)
|
|
654
655
|
//0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
|
|
655
|
-
[-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],
|
|
656
|
-
[-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],
|
|
657
|
-
[-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],
|
|
656
|
+
[-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30], // Low
|
|
657
|
+
[-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28], // Medium
|
|
658
|
+
[-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30], // Quartile
|
|
658
659
|
[-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30], // High
|
|
659
660
|
];
|
|
660
661
|
QrCode.NUM_ERROR_CORRECTION_BLOCKS = [
|
|
661
662
|
// Version: (note that index 0 is for padding, and is set to an illegal value)
|
|
662
663
|
//0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
|
|
663
|
-
[-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],
|
|
664
|
-
[-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],
|
|
665
|
-
[-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],
|
|
664
|
+
[-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25], // Low
|
|
665
|
+
[-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49], // Medium
|
|
666
|
+
[-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68], // Quartile
|
|
666
667
|
[-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81], // High
|
|
667
668
|
];
|
|
668
669
|
return QrCode;
|
|
@@ -908,7 +909,7 @@ var qrcodegen;
|
|
|
908
909
|
})(qrcodegen || (qrcodegen = {}));
|
|
909
910
|
var QR = qrcodegen;
|
|
910
911
|
|
|
911
|
-
var defaultErrorCorrectLevel = '
|
|
912
|
+
var defaultErrorCorrectLevel = 'L';
|
|
912
913
|
var ErrorCorrectLevelMap = {
|
|
913
914
|
L: QR.QrCode.Ecc.LOW,
|
|
914
915
|
M: QR.QrCode.Ecc.MEDIUM,
|
|
@@ -965,6 +966,38 @@ function generatePath(modules, margin) {
|
|
|
965
966
|
});
|
|
966
967
|
return ops.join('');
|
|
967
968
|
}
|
|
969
|
+
function getImageSettings(cells, size, margin, imageSettings) {
|
|
970
|
+
var width = imageSettings.width, height = imageSettings.height, imageX = imageSettings.x, imageY = imageSettings.y;
|
|
971
|
+
var numCells = cells.length + margin * 2;
|
|
972
|
+
var defaultSize = Math.floor(size * 0.1);
|
|
973
|
+
var scale = numCells / size;
|
|
974
|
+
var w = (width || defaultSize) * scale;
|
|
975
|
+
var h = (height || defaultSize) * scale;
|
|
976
|
+
var x = imageX == null ? cells.length / 2 - w / 2 : imageX * scale;
|
|
977
|
+
var y = imageY == null ? cells.length / 2 - h / 2 : imageY * scale;
|
|
978
|
+
var excavation = null;
|
|
979
|
+
if (imageSettings.excavate) {
|
|
980
|
+
var floorX = Math.floor(x);
|
|
981
|
+
var floorY = Math.floor(y);
|
|
982
|
+
var ceilW = Math.ceil(w + x - floorX);
|
|
983
|
+
var ceilH = Math.ceil(h + y - floorY);
|
|
984
|
+
excavation = { x: floorX, y: floorY, w: ceilW, h: ceilH };
|
|
985
|
+
}
|
|
986
|
+
return { x: x, y: y, h: h, w: w, excavation: excavation };
|
|
987
|
+
}
|
|
988
|
+
function excavateModules(modules, excavation) {
|
|
989
|
+
return modules.slice().map(function (row, y) {
|
|
990
|
+
if (y < excavation.y || y >= excavation.y + excavation.h) {
|
|
991
|
+
return row;
|
|
992
|
+
}
|
|
993
|
+
return row.map(function (cell, x) {
|
|
994
|
+
if (x < excavation.x || x >= excavation.x + excavation.w) {
|
|
995
|
+
return cell;
|
|
996
|
+
}
|
|
997
|
+
return false;
|
|
998
|
+
});
|
|
999
|
+
});
|
|
1000
|
+
}
|
|
968
1001
|
var QRCodeProps = {
|
|
969
1002
|
value: {
|
|
970
1003
|
type: String,
|
|
@@ -993,6 +1026,11 @@ var QRCodeProps = {
|
|
|
993
1026
|
required: false,
|
|
994
1027
|
default: 0,
|
|
995
1028
|
},
|
|
1029
|
+
imageSettings: {
|
|
1030
|
+
type: Object,
|
|
1031
|
+
required: false,
|
|
1032
|
+
default: function () { return ({}); },
|
|
1033
|
+
},
|
|
996
1034
|
};
|
|
997
1035
|
var QRCodeVueProps = __assign(__assign({}, QRCodeProps), { renderAs: {
|
|
998
1036
|
type: String,
|
|
@@ -1000,16 +1038,31 @@ var QRCodeVueProps = __assign(__assign({}, QRCodeProps), { renderAs: {
|
|
|
1000
1038
|
default: 'canvas',
|
|
1001
1039
|
validator: function (as) { return ['canvas', 'svg'].indexOf(as) > -1; },
|
|
1002
1040
|
} });
|
|
1003
|
-
var
|
|
1041
|
+
var QrcodeSvg = vue.defineComponent({
|
|
1004
1042
|
name: 'QRCodeSvg',
|
|
1005
1043
|
props: QRCodeProps,
|
|
1006
1044
|
setup: function (props) {
|
|
1007
1045
|
var numCells = vue.ref(0);
|
|
1008
1046
|
var fgPath = vue.ref('');
|
|
1047
|
+
var imageProps;
|
|
1009
1048
|
var generate = function () {
|
|
1010
|
-
var value = props.value,
|
|
1049
|
+
var value = props.value, _level = props.level, _margin = props.margin;
|
|
1050
|
+
var margin = _margin >>> 0;
|
|
1051
|
+
var level = validErrorCorrectLevel(_level) ? _level : defaultErrorCorrectLevel;
|
|
1011
1052
|
var cells = QR.QrCode.encodeText(value, ErrorCorrectLevelMap[level]).getModules();
|
|
1012
1053
|
numCells.value = cells.length + margin * 2;
|
|
1054
|
+
if (props.imageSettings.src) {
|
|
1055
|
+
var imageSettings = getImageSettings(cells, props.size, margin, props.imageSettings);
|
|
1056
|
+
imageProps = {
|
|
1057
|
+
x: imageSettings.x + margin,
|
|
1058
|
+
y: imageSettings.y + margin,
|
|
1059
|
+
width: imageSettings.w,
|
|
1060
|
+
height: imageSettings.h,
|
|
1061
|
+
};
|
|
1062
|
+
if (imageSettings.excavation) {
|
|
1063
|
+
cells = excavateModules(cells, imageSettings.excavation);
|
|
1064
|
+
}
|
|
1065
|
+
}
|
|
1013
1066
|
// Drawing strategy: instead of a rect per module, we're going to create a
|
|
1014
1067
|
// single path for the dark modules and layer that on top of a light rect,
|
|
1015
1068
|
// for a total of 2 DOM nodes. We pay a bit more in string concat but that's
|
|
@@ -1032,16 +1085,20 @@ var QRCodeSvg = vue.defineComponent({
|
|
|
1032
1085
|
d: "M0,0 h".concat(numCells.value, "v").concat(numCells.value, "H0z"),
|
|
1033
1086
|
}),
|
|
1034
1087
|
vue.h('path', { fill: props.foreground, d: fgPath.value }),
|
|
1088
|
+
props.imageSettings.src && vue.h('image', __assign({ href: props.imageSettings.src }, imageProps)),
|
|
1035
1089
|
]); };
|
|
1036
1090
|
},
|
|
1037
1091
|
});
|
|
1038
|
-
var
|
|
1092
|
+
var QrcodeCanvas = vue.defineComponent({
|
|
1039
1093
|
name: 'QRCodeCanvas',
|
|
1040
1094
|
props: QRCodeProps,
|
|
1041
|
-
setup: function (props) {
|
|
1095
|
+
setup: function (props, ctx) {
|
|
1042
1096
|
var canvasEl = vue.ref(null);
|
|
1097
|
+
var imageRef = vue.ref(null);
|
|
1043
1098
|
var generate = function () {
|
|
1044
|
-
var value = props.value,
|
|
1099
|
+
var value = props.value, _level = props.level, size = props.size, _margin = props.margin, background = props.background, foreground = props.foreground;
|
|
1100
|
+
var margin = _margin >>> 0;
|
|
1101
|
+
var level = validErrorCorrectLevel(_level) ? _level : defaultErrorCorrectLevel;
|
|
1045
1102
|
var canvas = canvasEl.value;
|
|
1046
1103
|
if (!canvas) {
|
|
1047
1104
|
return;
|
|
@@ -1052,6 +1109,21 @@ var QRCodeCanvas = vue.defineComponent({
|
|
|
1052
1109
|
}
|
|
1053
1110
|
var cells = QR.QrCode.encodeText(value, ErrorCorrectLevelMap[level]).getModules();
|
|
1054
1111
|
var numCells = cells.length + margin * 2;
|
|
1112
|
+
var image = imageRef.value;
|
|
1113
|
+
var imageProps = { x: 0, y: 0, width: 0, height: 0 };
|
|
1114
|
+
var showImage = props.imageSettings.src && image != null && image.naturalWidth !== 0 && image.naturalHeight !== 0;
|
|
1115
|
+
if (showImage) {
|
|
1116
|
+
var imageSettings = getImageSettings(cells, props.size, margin, props.imageSettings);
|
|
1117
|
+
imageProps = {
|
|
1118
|
+
x: imageSettings.x + margin,
|
|
1119
|
+
y: imageSettings.y + margin,
|
|
1120
|
+
width: imageSettings.w,
|
|
1121
|
+
height: imageSettings.h,
|
|
1122
|
+
};
|
|
1123
|
+
if (imageSettings.excavation) {
|
|
1124
|
+
cells = excavateModules(cells, imageSettings.excavation);
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1055
1127
|
var devicePixelRatio = window.devicePixelRatio || 1;
|
|
1056
1128
|
var scale = (size / numCells) * devicePixelRatio;
|
|
1057
1129
|
canvas.height = canvas.width = size * devicePixelRatio;
|
|
@@ -1071,25 +1143,33 @@ var QRCodeCanvas = vue.defineComponent({
|
|
|
1071
1143
|
});
|
|
1072
1144
|
});
|
|
1073
1145
|
}
|
|
1146
|
+
if (showImage) {
|
|
1147
|
+
ctx.drawImage(image, imageProps.x, imageProps.y, imageProps.width, imageProps.height);
|
|
1148
|
+
}
|
|
1074
1149
|
};
|
|
1075
1150
|
vue.onMounted(generate);
|
|
1076
1151
|
vue.onUpdated(generate);
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
style: { width: "".concat(props.size, "px"), height: "".concat(props.size, "px") },
|
|
1080
|
-
|
|
1152
|
+
var style = ctx.attrs.style;
|
|
1153
|
+
return function () { return vue.h(vue.Fragment, [
|
|
1154
|
+
vue.h('canvas', __assign(__assign({}, ctx.attrs), { ref: canvasEl, style: __assign(__assign({}, style), { width: "".concat(props.size, "px"), height: "".concat(props.size, "px") }) })),
|
|
1155
|
+
props.imageSettings.src && vue.h('img', {
|
|
1156
|
+
ref: imageRef,
|
|
1157
|
+
src: props.imageSettings.src,
|
|
1158
|
+
style: { display: 'none' },
|
|
1159
|
+
onLoad: generate,
|
|
1160
|
+
})
|
|
1161
|
+
]); };
|
|
1081
1162
|
},
|
|
1082
1163
|
});
|
|
1083
1164
|
var QrcodeVue = vue.defineComponent({
|
|
1084
1165
|
name: 'Qrcode',
|
|
1085
1166
|
render: function () {
|
|
1086
|
-
var _a = this.$props, renderAs = _a.renderAs, value = _a.value,
|
|
1087
|
-
|
|
1088
|
-
var margin = _margin >>> 0;
|
|
1089
|
-
var level = validErrorCorrectLevel(_level) ? _level : defaultErrorCorrectLevel;
|
|
1090
|
-
return vue.h(renderAs === 'svg' ? QRCodeSvg : QRCodeCanvas, { value: value, size: size, margin: margin, level: level, background: background, foreground: foreground });
|
|
1167
|
+
var _a = this.$props, renderAs = _a.renderAs, value = _a.value, size = _a.size, margin = _a.margin, level = _a.level, background = _a.background, foreground = _a.foreground, imageSettings = _a.imageSettings;
|
|
1168
|
+
return vue.h(renderAs === 'svg' ? QrcodeSvg : QrcodeCanvas, { value: value, size: size, margin: margin, level: level, background: background, foreground: foreground, imageSettings: imageSettings });
|
|
1091
1169
|
},
|
|
1092
1170
|
props: QRCodeVueProps,
|
|
1093
1171
|
});
|
|
1094
1172
|
|
|
1095
|
-
|
|
1173
|
+
exports.QrcodeCanvas = QrcodeCanvas;
|
|
1174
|
+
exports.QrcodeSvg = QrcodeSvg;
|
|
1175
|
+
exports.default = QrcodeVue;
|
package/dist/qrcode.vue.esm.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* qrcode.vue v3.
|
|
3
|
-
* A Vue.js component to generate QRCode.
|
|
4
|
-
* © 2017-
|
|
2
|
+
* qrcode.vue v3.5.1
|
|
3
|
+
* A Vue.js component to generate QRCode. Both support Vue 2 and Vue 3
|
|
4
|
+
* © 2017-PRESENT @scopewu(https://github.com/scopewu)
|
|
5
5
|
* MIT License.
|
|
6
6
|
*/
|
|
7
|
-
import { defineComponent, ref, onUpdated, h, onMounted } from 'vue';
|
|
7
|
+
import { defineComponent, ref, onUpdated, h, onMounted, Fragment } from 'vue';
|
|
8
8
|
|
|
9
9
|
/******************************************************************************
|
|
10
10
|
Copyright (c) Microsoft Corporation.
|
|
@@ -523,8 +523,7 @@ var qrcodegen;
|
|
|
523
523
|
return [];
|
|
524
524
|
else {
|
|
525
525
|
var numAlign = Math.floor(this.version / 7) + 2;
|
|
526
|
-
var step = (this.version
|
|
527
|
-
Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;
|
|
526
|
+
var step = Math.floor((this.version * 8 + numAlign * 3 + 5) / (numAlign * 4 - 4)) * 2;
|
|
528
527
|
var result = [6];
|
|
529
528
|
for (var pos = this.size - 7; result.length < numAlign; pos -= step)
|
|
530
529
|
result.splice(1, 0, pos);
|
|
@@ -650,17 +649,17 @@ var qrcodegen;
|
|
|
650
649
|
QrCode.ECC_CODEWORDS_PER_BLOCK = [
|
|
651
650
|
// Version: (note that index 0 is for padding, and is set to an illegal value)
|
|
652
651
|
//0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
|
|
653
|
-
[-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],
|
|
654
|
-
[-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],
|
|
655
|
-
[-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],
|
|
652
|
+
[-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30], // Low
|
|
653
|
+
[-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28], // Medium
|
|
654
|
+
[-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30], // Quartile
|
|
656
655
|
[-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30], // High
|
|
657
656
|
];
|
|
658
657
|
QrCode.NUM_ERROR_CORRECTION_BLOCKS = [
|
|
659
658
|
// Version: (note that index 0 is for padding, and is set to an illegal value)
|
|
660
659
|
//0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
|
|
661
|
-
[-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],
|
|
662
|
-
[-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],
|
|
663
|
-
[-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],
|
|
660
|
+
[-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25], // Low
|
|
661
|
+
[-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49], // Medium
|
|
662
|
+
[-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68], // Quartile
|
|
664
663
|
[-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81], // High
|
|
665
664
|
];
|
|
666
665
|
return QrCode;
|
|
@@ -906,7 +905,7 @@ var qrcodegen;
|
|
|
906
905
|
})(qrcodegen || (qrcodegen = {}));
|
|
907
906
|
var QR = qrcodegen;
|
|
908
907
|
|
|
909
|
-
var defaultErrorCorrectLevel = '
|
|
908
|
+
var defaultErrorCorrectLevel = 'L';
|
|
910
909
|
var ErrorCorrectLevelMap = {
|
|
911
910
|
L: QR.QrCode.Ecc.LOW,
|
|
912
911
|
M: QR.QrCode.Ecc.MEDIUM,
|
|
@@ -963,6 +962,38 @@ function generatePath(modules, margin) {
|
|
|
963
962
|
});
|
|
964
963
|
return ops.join('');
|
|
965
964
|
}
|
|
965
|
+
function getImageSettings(cells, size, margin, imageSettings) {
|
|
966
|
+
var width = imageSettings.width, height = imageSettings.height, imageX = imageSettings.x, imageY = imageSettings.y;
|
|
967
|
+
var numCells = cells.length + margin * 2;
|
|
968
|
+
var defaultSize = Math.floor(size * 0.1);
|
|
969
|
+
var scale = numCells / size;
|
|
970
|
+
var w = (width || defaultSize) * scale;
|
|
971
|
+
var h = (height || defaultSize) * scale;
|
|
972
|
+
var x = imageX == null ? cells.length / 2 - w / 2 : imageX * scale;
|
|
973
|
+
var y = imageY == null ? cells.length / 2 - h / 2 : imageY * scale;
|
|
974
|
+
var excavation = null;
|
|
975
|
+
if (imageSettings.excavate) {
|
|
976
|
+
var floorX = Math.floor(x);
|
|
977
|
+
var floorY = Math.floor(y);
|
|
978
|
+
var ceilW = Math.ceil(w + x - floorX);
|
|
979
|
+
var ceilH = Math.ceil(h + y - floorY);
|
|
980
|
+
excavation = { x: floorX, y: floorY, w: ceilW, h: ceilH };
|
|
981
|
+
}
|
|
982
|
+
return { x: x, y: y, h: h, w: w, excavation: excavation };
|
|
983
|
+
}
|
|
984
|
+
function excavateModules(modules, excavation) {
|
|
985
|
+
return modules.slice().map(function (row, y) {
|
|
986
|
+
if (y < excavation.y || y >= excavation.y + excavation.h) {
|
|
987
|
+
return row;
|
|
988
|
+
}
|
|
989
|
+
return row.map(function (cell, x) {
|
|
990
|
+
if (x < excavation.x || x >= excavation.x + excavation.w) {
|
|
991
|
+
return cell;
|
|
992
|
+
}
|
|
993
|
+
return false;
|
|
994
|
+
});
|
|
995
|
+
});
|
|
996
|
+
}
|
|
966
997
|
var QRCodeProps = {
|
|
967
998
|
value: {
|
|
968
999
|
type: String,
|
|
@@ -991,6 +1022,11 @@ var QRCodeProps = {
|
|
|
991
1022
|
required: false,
|
|
992
1023
|
default: 0,
|
|
993
1024
|
},
|
|
1025
|
+
imageSettings: {
|
|
1026
|
+
type: Object,
|
|
1027
|
+
required: false,
|
|
1028
|
+
default: function () { return ({}); },
|
|
1029
|
+
},
|
|
994
1030
|
};
|
|
995
1031
|
var QRCodeVueProps = __assign(__assign({}, QRCodeProps), { renderAs: {
|
|
996
1032
|
type: String,
|
|
@@ -998,16 +1034,31 @@ var QRCodeVueProps = __assign(__assign({}, QRCodeProps), { renderAs: {
|
|
|
998
1034
|
default: 'canvas',
|
|
999
1035
|
validator: function (as) { return ['canvas', 'svg'].indexOf(as) > -1; },
|
|
1000
1036
|
} });
|
|
1001
|
-
var
|
|
1037
|
+
var QrcodeSvg = defineComponent({
|
|
1002
1038
|
name: 'QRCodeSvg',
|
|
1003
1039
|
props: QRCodeProps,
|
|
1004
1040
|
setup: function (props) {
|
|
1005
1041
|
var numCells = ref(0);
|
|
1006
1042
|
var fgPath = ref('');
|
|
1043
|
+
var imageProps;
|
|
1007
1044
|
var generate = function () {
|
|
1008
|
-
var value = props.value,
|
|
1045
|
+
var value = props.value, _level = props.level, _margin = props.margin;
|
|
1046
|
+
var margin = _margin >>> 0;
|
|
1047
|
+
var level = validErrorCorrectLevel(_level) ? _level : defaultErrorCorrectLevel;
|
|
1009
1048
|
var cells = QR.QrCode.encodeText(value, ErrorCorrectLevelMap[level]).getModules();
|
|
1010
1049
|
numCells.value = cells.length + margin * 2;
|
|
1050
|
+
if (props.imageSettings.src) {
|
|
1051
|
+
var imageSettings = getImageSettings(cells, props.size, margin, props.imageSettings);
|
|
1052
|
+
imageProps = {
|
|
1053
|
+
x: imageSettings.x + margin,
|
|
1054
|
+
y: imageSettings.y + margin,
|
|
1055
|
+
width: imageSettings.w,
|
|
1056
|
+
height: imageSettings.h,
|
|
1057
|
+
};
|
|
1058
|
+
if (imageSettings.excavation) {
|
|
1059
|
+
cells = excavateModules(cells, imageSettings.excavation);
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1011
1062
|
// Drawing strategy: instead of a rect per module, we're going to create a
|
|
1012
1063
|
// single path for the dark modules and layer that on top of a light rect,
|
|
1013
1064
|
// for a total of 2 DOM nodes. We pay a bit more in string concat but that's
|
|
@@ -1030,16 +1081,20 @@ var QRCodeSvg = defineComponent({
|
|
|
1030
1081
|
d: "M0,0 h".concat(numCells.value, "v").concat(numCells.value, "H0z"),
|
|
1031
1082
|
}),
|
|
1032
1083
|
h('path', { fill: props.foreground, d: fgPath.value }),
|
|
1084
|
+
props.imageSettings.src && h('image', __assign({ href: props.imageSettings.src }, imageProps)),
|
|
1033
1085
|
]); };
|
|
1034
1086
|
},
|
|
1035
1087
|
});
|
|
1036
|
-
var
|
|
1088
|
+
var QrcodeCanvas = defineComponent({
|
|
1037
1089
|
name: 'QRCodeCanvas',
|
|
1038
1090
|
props: QRCodeProps,
|
|
1039
|
-
setup: function (props) {
|
|
1091
|
+
setup: function (props, ctx) {
|
|
1040
1092
|
var canvasEl = ref(null);
|
|
1093
|
+
var imageRef = ref(null);
|
|
1041
1094
|
var generate = function () {
|
|
1042
|
-
var value = props.value,
|
|
1095
|
+
var value = props.value, _level = props.level, size = props.size, _margin = props.margin, background = props.background, foreground = props.foreground;
|
|
1096
|
+
var margin = _margin >>> 0;
|
|
1097
|
+
var level = validErrorCorrectLevel(_level) ? _level : defaultErrorCorrectLevel;
|
|
1043
1098
|
var canvas = canvasEl.value;
|
|
1044
1099
|
if (!canvas) {
|
|
1045
1100
|
return;
|
|
@@ -1050,6 +1105,21 @@ var QRCodeCanvas = defineComponent({
|
|
|
1050
1105
|
}
|
|
1051
1106
|
var cells = QR.QrCode.encodeText(value, ErrorCorrectLevelMap[level]).getModules();
|
|
1052
1107
|
var numCells = cells.length + margin * 2;
|
|
1108
|
+
var image = imageRef.value;
|
|
1109
|
+
var imageProps = { x: 0, y: 0, width: 0, height: 0 };
|
|
1110
|
+
var showImage = props.imageSettings.src && image != null && image.naturalWidth !== 0 && image.naturalHeight !== 0;
|
|
1111
|
+
if (showImage) {
|
|
1112
|
+
var imageSettings = getImageSettings(cells, props.size, margin, props.imageSettings);
|
|
1113
|
+
imageProps = {
|
|
1114
|
+
x: imageSettings.x + margin,
|
|
1115
|
+
y: imageSettings.y + margin,
|
|
1116
|
+
width: imageSettings.w,
|
|
1117
|
+
height: imageSettings.h,
|
|
1118
|
+
};
|
|
1119
|
+
if (imageSettings.excavation) {
|
|
1120
|
+
cells = excavateModules(cells, imageSettings.excavation);
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1053
1123
|
var devicePixelRatio = window.devicePixelRatio || 1;
|
|
1054
1124
|
var scale = (size / numCells) * devicePixelRatio;
|
|
1055
1125
|
canvas.height = canvas.width = size * devicePixelRatio;
|
|
@@ -1069,25 +1139,31 @@ var QRCodeCanvas = defineComponent({
|
|
|
1069
1139
|
});
|
|
1070
1140
|
});
|
|
1071
1141
|
}
|
|
1142
|
+
if (showImage) {
|
|
1143
|
+
ctx.drawImage(image, imageProps.x, imageProps.y, imageProps.width, imageProps.height);
|
|
1144
|
+
}
|
|
1072
1145
|
};
|
|
1073
1146
|
onMounted(generate);
|
|
1074
1147
|
onUpdated(generate);
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
style: { width: "".concat(props.size, "px"), height: "".concat(props.size, "px") },
|
|
1078
|
-
|
|
1148
|
+
var style = ctx.attrs.style;
|
|
1149
|
+
return function () { return h(Fragment, [
|
|
1150
|
+
h('canvas', __assign(__assign({}, ctx.attrs), { ref: canvasEl, style: __assign(__assign({}, style), { width: "".concat(props.size, "px"), height: "".concat(props.size, "px") }) })),
|
|
1151
|
+
props.imageSettings.src && h('img', {
|
|
1152
|
+
ref: imageRef,
|
|
1153
|
+
src: props.imageSettings.src,
|
|
1154
|
+
style: { display: 'none' },
|
|
1155
|
+
onLoad: generate,
|
|
1156
|
+
})
|
|
1157
|
+
]); };
|
|
1079
1158
|
},
|
|
1080
1159
|
});
|
|
1081
1160
|
var QrcodeVue = defineComponent({
|
|
1082
1161
|
name: 'Qrcode',
|
|
1083
1162
|
render: function () {
|
|
1084
|
-
var _a = this.$props, renderAs = _a.renderAs, value = _a.value,
|
|
1085
|
-
|
|
1086
|
-
var margin = _margin >>> 0;
|
|
1087
|
-
var level = validErrorCorrectLevel(_level) ? _level : defaultErrorCorrectLevel;
|
|
1088
|
-
return h(renderAs === 'svg' ? QRCodeSvg : QRCodeCanvas, { value: value, size: size, margin: margin, level: level, background: background, foreground: foreground });
|
|
1163
|
+
var _a = this.$props, renderAs = _a.renderAs, value = _a.value, size = _a.size, margin = _a.margin, level = _a.level, background = _a.background, foreground = _a.foreground, imageSettings = _a.imageSettings;
|
|
1164
|
+
return h(renderAs === 'svg' ? QrcodeSvg : QrcodeCanvas, { value: value, size: size, margin: margin, level: level, background: background, foreground: foreground, imageSettings: imageSettings });
|
|
1089
1165
|
},
|
|
1090
1166
|
props: QRCodeVueProps,
|
|
1091
1167
|
});
|
|
1092
1168
|
|
|
1093
|
-
export { QrcodeVue as default };
|
|
1169
|
+
export { QrcodeCanvas, QrcodeSvg, QrcodeVue as default };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "qrcode.vue",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"description": "A Vue.js component to generate QRCode.",
|
|
3
|
+
"version": "3.5.1",
|
|
4
|
+
"description": "A Vue.js component to generate QRCode. Both support Vue 2 and Vue 3",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/qrcode.vue.cjs.js",
|
|
7
7
|
"module": "./dist/qrcode.vue.esm.js",
|
|
@@ -18,16 +18,13 @@
|
|
|
18
18
|
"./package": "./package.json"
|
|
19
19
|
},
|
|
20
20
|
"scripts": {
|
|
21
|
-
"
|
|
21
|
+
"dev": "rsbuild dev",
|
|
22
22
|
"build": "rollup -c"
|
|
23
23
|
},
|
|
24
|
-
"repository":
|
|
25
|
-
"type": "git",
|
|
26
|
-
"url": "git+https://github.com/scopewu/qrcode.vue.git"
|
|
27
|
-
},
|
|
24
|
+
"repository": "https://github.com/scopewu/qrcode.vue.git",
|
|
28
25
|
"keywords": [
|
|
29
26
|
"vue",
|
|
30
|
-
"vue
|
|
27
|
+
"vue qrcode",
|
|
31
28
|
"component",
|
|
32
29
|
"code",
|
|
33
30
|
"qrcode",
|
|
@@ -50,18 +47,11 @@
|
|
|
50
47
|
},
|
|
51
48
|
"dependencies": {},
|
|
52
49
|
"devDependencies": {
|
|
53
|
-
"@rollup/plugin-terser": "^0.4.
|
|
54
|
-
"@
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"ts-loader": "^9.4.3",
|
|
60
|
-
"typescript": "^5.1.3",
|
|
61
|
-
"vue": "^3.3.4",
|
|
62
|
-
"vue-loader": "^17.2.2",
|
|
63
|
-
"webpack": "^5.88.0",
|
|
64
|
-
"webpack-cli": "^5.1.4",
|
|
65
|
-
"webpack-dev-server": "^4.15.1"
|
|
50
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
51
|
+
"@rsbuild/core": "^1.0.14",
|
|
52
|
+
"rollup": "^4.24.0",
|
|
53
|
+
"rollup-plugin-typescript2": "^0.36.0",
|
|
54
|
+
"typescript": "^5.6.3",
|
|
55
|
+
"vue": "^3.5.12"
|
|
66
56
|
}
|
|
67
57
|
}
|