@liquid-js/qr-code-styling 3.1.3 → 4.0.0-0

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.
@@ -1,4 +1,8 @@
1
- import qrcode from "qrcode-generator";
1
+ import { QRUtil } from "@liquid-js/qrcode-generator/lib/qrcode/QRUtil.js";
2
+
3
+ import { stringToBytes_UTF8 } from "@liquid-js/qrcode-generator/lib/text/stringToBytes_UTF8.js";
4
+
5
+ import { TypeNumber, ErrorCorrectionLevel, Mode, QRCodeMinimal } from "@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js";
2
6
 
3
7
  import sharp from "sharp";
4
8
 
@@ -6,14 +10,7 @@ import { fileTypeFromBuffer } from "file-type";
6
10
 
7
11
  import { DOMImplementation, XMLSerializer as XMLSerializer$1, DOMParser as DOMParser$1 } from "@xmldom/xmldom";
8
12
 
9
- let TypeNumber = Array(41).fill(0).map(((_, i) => i));
10
-
11
- var ErrorCorrectionLevel, Mode;
12
-
13
- (ErrorCorrectionLevel = ErrorCorrectionLevel || (ErrorCorrectionLevel = {})).L = "L",
14
- ErrorCorrectionLevel.M = "M", ErrorCorrectionLevel.Q = "Q", ErrorCorrectionLevel.H = "H",
15
- (Mode = Mode || (Mode = {})).numeric = "Numeric", Mode.alphanumeric = "Alphanumeric",
16
- Mode.byte = "Byte", Mode.kanji = "Kanji", Mode.unicode = "Unicode";
13
+ export { ErrorCorrectionLevel, Mode, TypeNumber } from "@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js";
17
14
 
18
15
  let isObject = obj => !!obj && "object" == typeof obj && !Array.isArray(obj);
19
16
 
@@ -28,7 +25,7 @@ function mergeDeep(target, ...sources) {
28
25
  })), mergeDeep(target, ...sources)) : target;
29
26
  }
30
27
 
31
- var GradientType, DotType, CornerDotType, CornerSquareType, ShapeType;
28
+ var GradientType, DotType, CornerDotType, CornerSquareType, ShapeType, ImageMode;
32
29
 
33
30
  function sanitizeGradient(gradient_newGradient) {
34
31
  if (!(gradient_newGradient = {
@@ -45,13 +42,15 @@ function sanitizeGradient(gradient_newGradient) {
45
42
  (DotType = DotType || (DotType = {})).dot = "dot", DotType.randomDot = "random-dot",
46
43
  DotType.rounded = "rounded", DotType.extraRounded = "extra-rounded", DotType.verticalLine = "vertical-line",
47
44
  DotType.horizontalLine = "horizontal-line", DotType.classy = "classy", DotType.classyRounded = "classy-rounded",
48
- DotType.square = "square", DotType.smallSquare = "small-square", DotType.diamond = "diamond",
49
- (CornerDotType = CornerDotType || (CornerDotType = {})).dot = "dot", CornerDotType.square = "square",
50
- CornerDotType.heart = "heart", CornerDotType.extraRounded = "extra-rounded", CornerDotType.classy = "classy",
51
- CornerDotType.outpoint = "outpoint", CornerDotType.inpoint = "inpoint", (CornerSquareType = CornerSquareType || (CornerSquareType = {})).dot = "dot",
52
- CornerSquareType.square = "square", CornerSquareType.extraRounded = "extra-rounded",
53
- CornerSquareType.classy = "classy", CornerSquareType.outpoint = "outpoint", CornerSquareType.inpoint = "inpoint",
54
- (ShapeType = ShapeType || (ShapeType = {})).square = "square", ShapeType.circle = "circle";
45
+ DotType.square = "square", DotType.smallSquare = "small-square", DotType.tinySquare = "tiny-square",
46
+ DotType.diamond = "diamond", (CornerDotType = CornerDotType || (CornerDotType = {})).dot = "dot",
47
+ CornerDotType.square = "square", CornerDotType.heart = "heart", CornerDotType.extraRounded = "extra-rounded",
48
+ CornerDotType.classy = "classy", CornerDotType.outpoint = "outpoint", CornerDotType.inpoint = "inpoint",
49
+ (CornerSquareType = CornerSquareType || (CornerSquareType = {})).dot = "dot", CornerSquareType.square = "square",
50
+ CornerSquareType.extraRounded = "extra-rounded", CornerSquareType.classy = "classy",
51
+ CornerSquareType.outpoint = "outpoint", CornerSquareType.inpoint = "inpoint", (ShapeType = ShapeType || (ShapeType = {})).square = "square",
52
+ ShapeType.circle = "circle", (ImageMode = ImageMode || (ImageMode = {})).center = "center",
53
+ ImageMode.background = "background";
55
54
 
56
55
  let defaultOptions = {
57
56
  document: void 0,
@@ -65,10 +64,13 @@ let defaultOptions = {
65
64
  errorCorrectionLevel: ErrorCorrectionLevel.Q
66
65
  },
67
66
  imageOptions: {
68
- hideBackgroundDots: !0,
67
+ mode: ImageMode.center,
69
68
  imageSize: .4,
70
69
  crossOrigin: void 0,
71
- margin: 0
70
+ margin: 0,
71
+ fill: {
72
+ color: "rgba(255,255,255,1)"
73
+ }
72
74
  },
73
75
  dotsOptions: {
74
76
  type: DotType.square,
@@ -82,10 +84,14 @@ function sanitizeOptions(newOptions_options) {
82
84
  ...newOptions_options
83
85
  }).imageOptions = {
84
86
  ...newOptions_options.imageOptions,
85
- hideBackgroundDots: !!newOptions_options.imageOptions.hideBackgroundDots,
86
87
  imageSize: Math.min(1, Number(newOptions_options.imageOptions.imageSize)) || 1,
87
- margin: Number(newOptions_options.imageOptions.margin)
88
- }, newOptions_options.dotsOptions = {
88
+ margin: Number(newOptions_options.imageOptions.margin),
89
+ fill: {
90
+ ...newOptions_options.imageOptions.fill
91
+ }
92
+ }, newOptions_options.imageOptions.mode == ImageMode.background && (newOptions_options.imageOptions.margin = 0),
93
+ newOptions_options.imageOptions.fill.gradient && (newOptions_options.imageOptions.fill.gradient = sanitizeGradient(newOptions_options.imageOptions.fill.gradient)),
94
+ newOptions_options.dotsOptions = {
89
95
  ...newOptions_options.dotsOptions
90
96
  }, newOptions_options.dotsOptions.gradient && (newOptions_options.dotsOptions.gradient = sanitizeGradient(newOptions_options.dotsOptions.gradient)),
91
97
  newOptions_options.dotsOptions.size = Math.round(Math.max(0, newOptions_options.dotsOptions.size) || 10),
@@ -287,6 +293,9 @@ class QRCornerSquare {
287
293
  get element() {
288
294
  return this._element;
289
295
  }
296
+ get fill() {
297
+ return this._fill;
298
+ }
290
299
  constructor(type, document) {
291
300
  this.type = type, this.document = document;
292
301
  }
@@ -319,7 +328,8 @@ class QRCornerSquare {
319
328
  drawFunction.call(this, args);
320
329
  }
321
330
  rotateFigure({x: cx, y: cy, size, rotation = 0, draw}) {
322
- cx += size / 2, cy += size / 2, draw(), this._element?.setAttribute("transform", `rotate(${numToAttr(180 * rotation / Math.PI)},${cx},${cy})`);
331
+ cx += size / 2, cy += size / 2, draw(), this._element?.setAttribute("transform", `rotate(${numToAttr(180 * rotation / Math.PI)},${cx},${cy})`),
332
+ this._fill?.setAttribute("transform", `rotate(${numToAttr(180 * rotation / Math.PI)},${cx},${cy})`);
323
333
  }
324
334
  basicDot(args) {
325
335
  let {size, x, y} = args, dotSize = size / 7;
@@ -327,7 +337,9 @@ class QRCornerSquare {
327
337
  ...args,
328
338
  draw: () => {
329
339
  this._element = this.document.createElementNS("http://www.w3.org/2000/svg", "path"),
330
- this._element.setAttribute("clip-rule", "evenodd"), this._element.setAttribute("d", svgPath`M ${x + size / 2} ${y} a ${size / 2} ${size / 2} 0 1 0 0.1 0 z m 0 ${dotSize} a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0 Z`);
340
+ this._element.setAttribute("clip-rule", "evenodd"), this._element.setAttribute("d", svgPath`M ${x + size / 2} ${y} a ${size / 2} ${size / 2} 0 1 0 0.1 0 z m 0 ${dotSize} a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0 Z`),
341
+ this._fill = this.document.createElementNS("http://www.w3.org/2000/svg", "path"),
342
+ this._fill.setAttribute("clip-rule", "evenodd"), this._fill.setAttribute("d", svgPath`M ${x + size / 2} ${y - dotSize} a ${size / 2 + dotSize} ${size / 2 + dotSize} 0 1 0 0.1 0 z`);
331
343
  }
332
344
  });
333
345
  }
@@ -337,7 +349,9 @@ class QRCornerSquare {
337
349
  ...args,
338
350
  draw: () => {
339
351
  this._element = this.document.createElementNS("http://www.w3.org/2000/svg", "path"),
340
- this._element.setAttribute("clip-rule", "evenodd"), this._element.setAttribute("d", svgPath`M ${x} ${y} v ${size} h ${size} v ${-size} z M ${x + dotSize} ${y + dotSize} h ${size - 2 * dotSize} v ${size - 2 * dotSize} h ${2 * dotSize - size} z`);
352
+ this._element.setAttribute("clip-rule", "evenodd"), this._element.setAttribute("d", svgPath`M ${x} ${y} v ${size} h ${size} v ${-size} z M ${x + dotSize} ${y + dotSize} h ${size - 2 * dotSize} v ${size - 2 * dotSize} h ${2 * dotSize - size} z`),
353
+ this._fill = this.document.createElementNS("http://www.w3.org/2000/svg", "path"),
354
+ this._fill.setAttribute("clip-rule", "evenodd"), this._fill.setAttribute("d", svgPath`M ${x - dotSize} ${y - dotSize} h ${size + 2 * dotSize} v ${size + 2 * dotSize} h ${-size - 2 * dotSize} z`);
341
355
  }
342
356
  });
343
357
  }
@@ -347,7 +361,9 @@ class QRCornerSquare {
347
361
  ...args,
348
362
  draw: () => {
349
363
  this._element = this.document.createElementNS("http://www.w3.org/2000/svg", "path"),
350
- this._element.setAttribute("clip-rule", "evenodd"), this._element.setAttribute("d", svgPath`M ${x} ${y + 2.5 * dotSize} v ${2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * dotSize} ${2.5 * dotSize} h ${2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * dotSize} ${2.5 * -dotSize} v ${-2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * -dotSize} ${2.5 * -dotSize} h ${-2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * -dotSize} ${2.5 * dotSize} z M ${x + 2.5 * dotSize} ${y + dotSize} h ${2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * dotSize} ${1.5 * dotSize} v ${2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * -dotSize} ${1.5 * dotSize} h ${-2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * -dotSize} ${1.5 * -dotSize} v ${-2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * dotSize} ${1.5 * -dotSize} z`);
364
+ this._element.setAttribute("clip-rule", "evenodd"), this._element.setAttribute("d", svgPath`M ${x} ${y + 2.5 * dotSize} v ${2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * dotSize} ${2.5 * dotSize} h ${2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * dotSize} ${2.5 * -dotSize} v ${-2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * -dotSize} ${2.5 * -dotSize} h ${-2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * -dotSize} ${2.5 * dotSize} z M ${x + 2.5 * dotSize} ${y + dotSize} h ${2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * dotSize} ${1.5 * dotSize} v ${2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * -dotSize} ${1.5 * dotSize} h ${-2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * -dotSize} ${1.5 * -dotSize} v ${-2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * dotSize} ${1.5 * -dotSize} z`),
365
+ this._fill = this.document.createElementNS("http://www.w3.org/2000/svg", "path"),
366
+ this._fill.setAttribute("clip-rule", "evenodd"), this._fill.setAttribute("d", svgPath`M ${x + 2.5 * dotSize} ${y + dotSize} h ${2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * dotSize} ${1.5 * dotSize} v ${2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * -dotSize} ${1.5 * dotSize} h ${-2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * -dotSize} ${1.5 * -dotSize} v ${-2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * dotSize} ${1.5 * -dotSize} z`);
351
367
  }
352
368
  });
353
369
  }
@@ -357,7 +373,9 @@ class QRCornerSquare {
357
373
  ...args,
358
374
  draw: () => {
359
375
  this._element = this.document.createElementNS("http://www.w3.org/2000/svg", "path"),
360
- this._element.setAttribute("clip-rule", "evenodd"), this._element.setAttribute("d", svgPath`M ${x} ${y + 2.5 * dotSize} v ${2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * dotSize} ${2.5 * dotSize} h ${4.5 * dotSize} v ${-4.5 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * -dotSize} ${2.5 * -dotSize} h ${-2 * dotSize} H ${x} z M ${x + 2.5 * dotSize} ${y + dotSize} h ${2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * dotSize} ${1.5 * dotSize} v ${3.5 * dotSize} h ${-3.5 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * -dotSize} ${1.5 * -dotSize} v ${-3.5 * dotSize} z`);
376
+ this._element.setAttribute("clip-rule", "evenodd"), this._element.setAttribute("d", svgPath`M ${x} ${y + 2.5 * dotSize} v ${2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * dotSize} ${2.5 * dotSize} h ${4.5 * dotSize} v ${-4.5 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * -dotSize} ${2.5 * -dotSize} h ${-2 * dotSize} H ${x} z M ${x + 2.5 * dotSize} ${y + dotSize} h ${2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * dotSize} ${1.5 * dotSize} v ${3.5 * dotSize} h ${-3.5 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * -dotSize} ${1.5 * -dotSize} v ${-3.5 * dotSize} z`),
377
+ this._fill = this.document.createElementNS("http://www.w3.org/2000/svg", "path"),
378
+ this._fill.setAttribute("clip-rule", "evenodd"), this._fill.setAttribute("d", svgPath`M ${x + .5 * dotSize} ${y - dotSize} h ${4 * dotSize} a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${3.5 * dotSize} ${3.5 * dotSize} v ${5.5 * dotSize} h ${-5.5 * dotSize} a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${3.5 * -dotSize} ${3.5 * -dotSize} v ${-5.5 * dotSize} z`);
361
379
  }
362
380
  });
363
381
  }
@@ -367,7 +385,9 @@ class QRCornerSquare {
367
385
  ...args,
368
386
  draw: () => {
369
387
  this._element = this.document.createElementNS("http://www.w3.org/2000/svg", "path"),
370
- this._element.setAttribute("clip-rule", "evenodd"), this._element.setAttribute("d", svgPath`M ${x} ${y + 2.5 * dotSize} v ${2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * dotSize} ${2.5 * dotSize} h ${4.5 * dotSize} v ${-4.5 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * -dotSize} ${2.5 * -dotSize} h ${-2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * -dotSize} ${2.5 * dotSize} z M ${x + 2.5 * dotSize} ${y + dotSize} h ${2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * dotSize} ${1.5 * dotSize} v ${3.5 * dotSize} h ${-3.5 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * -dotSize} ${1.5 * -dotSize} v ${-2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * dotSize} ${1.5 * -dotSize} z`);
388
+ this._element.setAttribute("clip-rule", "evenodd"), this._element.setAttribute("d", svgPath`M ${x} ${y + 2.5 * dotSize} v ${2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * dotSize} ${2.5 * dotSize} h ${4.5 * dotSize} v ${-4.5 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * -dotSize} ${2.5 * -dotSize} h ${-2 * dotSize} a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${2.5 * -dotSize} ${2.5 * dotSize} z M ${x + 2.5 * dotSize} ${y + dotSize} h ${2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * dotSize} ${1.5 * dotSize} v ${3.5 * dotSize} h ${-3.5 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * -dotSize} ${1.5 * -dotSize} v ${-2 * dotSize} a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${1.5 * dotSize} ${1.5 * -dotSize} z`),
389
+ this._fill = this.document.createElementNS("http://www.w3.org/2000/svg", "path"),
390
+ this._fill.setAttribute("clip-rule", "evenodd"), this._fill.setAttribute("d", svgPath`M ${x + .5 * dotSize} ${y - dotSize} h ${4 * dotSize} a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${3.5 * dotSize} ${3.5 * dotSize} v ${5.5 * dotSize} h ${-5.5 * dotSize} a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${3.5 * -dotSize} ${3.5 * -dotSize} v ${-2 * dotSize} a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${3.5 * dotSize} ${3.5 * -dotSize} z`);
371
391
  }
372
392
  });
373
393
  }
@@ -471,6 +491,10 @@ class QRDot {
471
491
  drawFunction = this.drawSmallSquare;
472
492
  break;
473
493
 
494
+ case DotType.tinySquare:
495
+ drawFunction = this.drawTinySquare;
496
+ break;
497
+
474
498
  default:
475
499
  drawFunction = this.drawSquare;
476
500
  }
@@ -573,6 +597,14 @@ class QRDot {
573
597
  rotation: 0
574
598
  });
575
599
  }
600
+ drawTinySquare({x, y, size}) {
601
+ this.basicSquare({
602
+ x: x + .35 * size,
603
+ y: y + .35 * size,
604
+ size: .3 * size,
605
+ rotation: 0
606
+ });
607
+ }
576
608
  drawDiamond({x, y, size}) {
577
609
  this.basicSquare({
578
610
  x,
@@ -764,7 +796,7 @@ let browserImageTools = {
764
796
  }))
765
797
  };
766
798
 
767
- let squareMask = [ [ 1, 1, 1, 1, 1, 1, 1 ], [ 1, 0, 0, 0, 0, 0, 1 ], [ 1, 0, 0, 0, 0, 0, 1 ], [ 1, 0, 0, 0, 0, 0, 1 ], [ 1, 0, 0, 0, 0, 0, 1 ], [ 1, 0, 0, 0, 0, 0, 1 ], [ 1, 1, 1, 1, 1, 1, 1 ] ], dotMask = [ [ 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 1, 1, 1, 0, 0 ], [ 0, 0, 1, 1, 1, 0, 0 ], [ 0, 0, 1, 1, 1, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0 ] ], alignmentCount = [ [ 35, 49 ], [ 28, 36 ], [ 21, 25 ], [ 14, 16 ], [ 7, 9 ], [ 2, 4 ], [ 1, 1 ] ];
799
+ let squareMask = [ [ 1, 1, 1, 1, 1, 1, 1 ], [ 1, 0, 0, 0, 0, 0, 1 ], [ 1, 0, 0, 0, 0, 0, 1 ], [ 1, 0, 0, 0, 0, 0, 1 ], [ 1, 0, 0, 0, 0, 0, 1 ], [ 1, 0, 0, 0, 0, 0, 1 ], [ 1, 1, 1, 1, 1, 1, 1 ] ], dotMask = [ [ 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 1, 1, 1, 0, 0 ], [ 0, 0, 1, 1, 1, 0, 0 ], [ 0, 0, 1, 1, 1, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0 ] ];
768
800
 
769
801
  class QRSVG {
770
802
  get element() {
@@ -784,7 +816,9 @@ class QRSVG {
784
816
  return this.options.height;
785
817
  }
786
818
  async drawQR(qr_size) {
787
- let count = qr_size.getModuleCount(), typeNumber = parseInt(((count - 17) / 4).toFixed(0), 10), dotSize = this.options.dotsOptions.size, drawImageSize = {
819
+ let count = qr_size.getModuleCount();
820
+ var alignment_maxWidth_typeNumber = parseInt(((count - 17) / 4).toFixed(0), 10);
821
+ let dotSize = this.options.dotsOptions.size, drawImageSize = {
788
822
  hideXDots: 0,
789
823
  hideYDots: 0,
790
824
  width: 0,
@@ -792,52 +826,65 @@ class QRSVG {
792
826
  };
793
827
  if (this.qr = qr_size, this.options.image) {
794
828
  qr_size = await this.imageTools.getSize(this.options.image, this.options.imageOptions.crossOrigin);
795
- let {imageOptions, errorCorrectionPercent} = this.options, coverLevel = imageOptions.imageSize * errorCorrectionPercent, alignment = alignmentCount.find((v => v[0] <= typeNumber)) || [ 0, 0 ];
796
- drawImageSize = function({originalHeight, originalWidth, maxHiddenDots: JSCompiler_object_inline_x_18_hideMax_maxHiddenDots, maxHiddenAxisDots: JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper, dotSize, margin}) {
797
- if (0 >= originalHeight || 0 >= originalWidth || 0 >= JSCompiler_object_inline_x_18_hideMax_maxHiddenDots || 0 >= dotSize || 4 * margin ** 2 > JSCompiler_object_inline_x_18_hideMax_maxHiddenDots) return {
829
+ let {imageOptions, errorCorrectionPercent} = this.options;
830
+ if (imageOptions.mode == ImageMode.background) {
831
+ alignment_maxWidth_typeNumber = this.options.width * imageOptions.imageSize;
832
+ var coverLevel_maxHeight = this.options.height * imageOptions.imageSize;
833
+ let {width, height} = qr_size;
834
+ height = height / width * alignment_maxWidth_typeNumber, width = alignment_maxWidth_typeNumber,
835
+ height > coverLevel_maxHeight && (width = width / height * coverLevel_maxHeight,
836
+ height = coverLevel_maxHeight), drawImageSize = {
837
+ hideXDots: 0,
838
+ hideYDots: 0,
839
+ width,
840
+ height
841
+ };
842
+ } else coverLevel_maxHeight = imageOptions.imageSize * errorCorrectionPercent, alignment_maxWidth_typeNumber = QRUtil.getPatternPosition(alignment_maxWidth_typeNumber),
843
+ drawImageSize = function({originalHeight, originalWidth, maxHiddenDots: JSCompiler_object_inline_x_16_hideMax_maxHiddenDots, maxHiddenAxisDots: JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper, dotSize, margin}) {
844
+ if (0 >= originalHeight || 0 >= originalWidth || 0 >= JSCompiler_object_inline_x_16_hideMax_maxHiddenDots || 0 >= dotSize || 4 * margin ** 2 > JSCompiler_object_inline_x_16_hideMax_maxHiddenDots) return {
798
845
  height: 0,
799
846
  width: 0,
800
847
  hideYDots: 0,
801
848
  hideXDots: 0
802
849
  };
803
- JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper && 0 == JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper % 2 && (JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper = Math.max(1, JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper - 1));
804
- var JSCompiler_object_inline_x_16_dimMax = Math.max(originalWidth, originalHeight), JSCompiler_object_inline_y_17_dimMin_hideMin = Math.min(originalWidth, originalHeight), lower_maxH_size = 0;
805
- JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper = (JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper || JSCompiler_object_inline_x_18_hideMax_maxHiddenDots) - 2 * margin;
850
+ JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper && 0 == JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper % 2 && (JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper = Math.max(1, JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper - 1));
851
+ var JSCompiler_object_inline_x_14_dimMax = Math.max(originalWidth, originalHeight), JSCompiler_object_inline_y_15_dimMin_hideMin = Math.min(originalWidth, originalHeight), lower_maxH_size = 0;
852
+ JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper = (JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper || JSCompiler_object_inline_x_16_hideMax_maxHiddenDots) - 2 * margin;
806
853
  do {
807
- let size = lower_maxH_size + (JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper - lower_maxH_size) / 2, dotsMax = Math.max(1, Math.ceil(size + 2 * margin));
854
+ let size = lower_maxH_size + (JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper - lower_maxH_size) / 2, dotsMax = Math.max(1, Math.ceil(size + 2 * margin));
808
855
  0 == dotsMax % 2 && dotsMax++;
809
- let dotsMin = Math.max(1, Math.ceil(size * JSCompiler_object_inline_y_17_dimMin_hideMin / JSCompiler_object_inline_x_16_dimMax + 2 * margin));
810
- 0 == dotsMin % 2 && dotsMin++, dotsMax * dotsMin > JSCompiler_object_inline_x_18_hideMax_maxHiddenDots ? JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper = size : lower_maxH_size = size;
811
- } while (.001 < Math.abs(lower_maxH_size - JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper));
812
- return 0 == (JSCompiler_object_inline_x_18_hideMax_maxHiddenDots = Math.max(1, Math.ceil(lower_maxH_size + 2 * margin))) % 2 && JSCompiler_object_inline_x_18_hideMax_maxHiddenDots++,
813
- 0 == (JSCompiler_object_inline_y_17_dimMin_hideMin = Math.max(1, Math.ceil(lower_maxH_size * JSCompiler_object_inline_y_17_dimMin_hideMin / JSCompiler_object_inline_x_16_dimMax + 2 * margin))) % 2 && JSCompiler_object_inline_y_17_dimMin_hideMin++,
814
- originalWidth > originalHeight ? JSCompiler_object_inline_x_16_dimMax = JSCompiler_object_inline_x_18_hideMax_maxHiddenDots : (JSCompiler_object_inline_x_16_dimMax = JSCompiler_object_inline_y_17_dimMin_hideMin,
815
- JSCompiler_object_inline_y_17_dimMin_hideMin = JSCompiler_object_inline_x_18_hideMax_maxHiddenDots),
816
- JSCompiler_object_inline_x_18_hideMax_maxHiddenDots = JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper = (JSCompiler_object_inline_x_16_dimMax - 2 * margin) * dotSize,
817
- (JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper = JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper * originalHeight / originalWidth) > (lower_maxH_size = (JSCompiler_object_inline_y_17_dimMin_hideMin - 2 * margin) * dotSize) && (JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper = lower_maxH_size,
818
- JSCompiler_object_inline_x_18_hideMax_maxHiddenDots = lower_maxH_size * originalWidth / originalHeight),
856
+ let dotsMin = Math.max(1, Math.ceil(size * JSCompiler_object_inline_y_15_dimMin_hideMin / JSCompiler_object_inline_x_14_dimMax + 2 * margin));
857
+ 0 == dotsMin % 2 && dotsMin++, dotsMax * dotsMin > JSCompiler_object_inline_x_16_hideMax_maxHiddenDots ? JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper = size : lower_maxH_size = size;
858
+ } while (.001 < Math.abs(lower_maxH_size - JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper));
859
+ return 0 == (JSCompiler_object_inline_x_16_hideMax_maxHiddenDots = Math.max(1, Math.ceil(lower_maxH_size + 2 * margin))) % 2 && JSCompiler_object_inline_x_16_hideMax_maxHiddenDots++,
860
+ 0 == (JSCompiler_object_inline_y_15_dimMin_hideMin = Math.max(1, Math.ceil(lower_maxH_size * JSCompiler_object_inline_y_15_dimMin_hideMin / JSCompiler_object_inline_x_14_dimMax + 2 * margin))) % 2 && JSCompiler_object_inline_y_15_dimMin_hideMin++,
861
+ originalWidth > originalHeight ? JSCompiler_object_inline_x_14_dimMax = JSCompiler_object_inline_x_16_hideMax_maxHiddenDots : (JSCompiler_object_inline_x_14_dimMax = JSCompiler_object_inline_y_15_dimMin_hideMin,
862
+ JSCompiler_object_inline_y_15_dimMin_hideMin = JSCompiler_object_inline_x_16_hideMax_maxHiddenDots),
863
+ JSCompiler_object_inline_x_16_hideMax_maxHiddenDots = JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper = (JSCompiler_object_inline_x_14_dimMax - 2 * margin) * dotSize,
864
+ (JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper = JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper * originalHeight / originalWidth) > (lower_maxH_size = (JSCompiler_object_inline_y_15_dimMin_hideMin - 2 * margin) * dotSize) && (JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper = lower_maxH_size,
865
+ JSCompiler_object_inline_x_16_hideMax_maxHiddenDots = lower_maxH_size * originalWidth / originalHeight),
819
866
  {
820
- height: Math.round(JSCompiler_object_inline_y_19_maxHiddenAxisDots_maxW_upper + 2 * margin * dotSize),
821
- width: Math.round(JSCompiler_object_inline_x_18_hideMax_maxHiddenDots + 2 * margin * dotSize),
822
- hideYDots: JSCompiler_object_inline_y_17_dimMin_hideMin,
823
- hideXDots: JSCompiler_object_inline_x_16_dimMax
867
+ height: Math.round(JSCompiler_object_inline_y_17_maxHiddenAxisDots_maxW_upper + 2 * margin * dotSize),
868
+ width: Math.round(JSCompiler_object_inline_x_16_hideMax_maxHiddenDots + 2 * margin * dotSize),
869
+ hideYDots: JSCompiler_object_inline_y_15_dimMin_hideMin,
870
+ hideXDots: JSCompiler_object_inline_x_14_dimMax
824
871
  };
825
872
  }({
826
873
  originalWidth: qr_size.width,
827
874
  originalHeight: qr_size.height,
828
- maxHiddenDots: Math.floor(coverLevel * (count * count - 192 - 2 * (count - 16) - 25 * alignment[1])),
875
+ maxHiddenDots: Math.floor(coverLevel_maxHeight * (count * count - 192 - 2 * (count - 16) - 25 * alignment_maxWidth_typeNumber.length ** 2)),
829
876
  maxHiddenAxisDots: count - 14,
830
877
  dotSize,
831
878
  margin: imageOptions.margin
832
879
  });
833
880
  }
834
- this.drawBackground(), this.drawDots(((i, j) => !(this.options.imageOptions.hideBackgroundDots && i >= (count - drawImageSize.hideXDots) / 2 && i < (count + drawImageSize.hideXDots) / 2 && j >= (count - drawImageSize.hideYDots) / 2 && j < (count + drawImageSize.hideYDots) / 2 || squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7] || dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]))),
835
- this.drawCorners(), this.options.image && 0 < drawImageSize.width && 0 < drawImageSize.height && await this.drawImage({
881
+ this.options.image && 0 < drawImageSize.width && 0 < drawImageSize.height && await this.drawImage({
836
882
  width: drawImageSize.width,
837
883
  height: drawImageSize.height,
838
884
  count,
839
885
  dotSize
840
- });
886
+ }), this.drawBackground(), this.drawDots(((i, j) => !(this.options.imageOptions.mode == ImageMode.center && i >= (count - drawImageSize.hideXDots) / 2 && i < (count + drawImageSize.hideXDots) / 2 && j >= (count - drawImageSize.hideYDots) / 2 && j < (count + drawImageSize.hideYDots) / 2 || 8 > i && 8 > j || i >= count - 8 && 8 > j || j >= count - 8 && 8 > i))),
887
+ this.drawCorners();
841
888
  }
842
889
  drawBackground() {
843
890
  let options = this.options;
@@ -860,47 +907,67 @@ class QRSVG {
860
907
  this.backgroundMaskGroup.appendChild(element);
861
908
  }
862
909
  }
863
- drawDots(filter) {
910
+ drawDots(alignment) {
864
911
  if (!this.qr) throw "QR code is not defined";
865
- let options = this.options, count = this.qr.getModuleCount();
912
+ let options = this.options;
913
+ var count = this.qr.getModuleCount();
866
914
  if (count > options.width || count > options.height) throw "The canvas is too small.";
867
- var additionalDots_minSize = Math.min(options.width, options.height);
915
+ var minSize_xFakeBeginning = Math.min(options.width, options.height);
868
916
  let dotSize = this.options.dotsOptions.size;
869
- var xBeginning_xFakeBeginning = Math.floor((options.width - count * dotSize) / 2), yBeginning_yFakeBeginning = Math.floor((options.height - count * dotSize) / 2);
870
- let dot = new QRDot(options.dotsOptions.type, this.document);
871
- [this.dotsMask, this.dotsMaskGroup] = this.createMask("mask-dot-color"), this.defs.appendChild(this.dotsMask);
872
- for (let i = 0; i < count; i++) for (let j = 0; j < count; j++) filter && !filter(i, j) || !this.qr?.isDark(j, i) || (dot.draw({
873
- x: xBeginning_xFakeBeginning + i * dotSize,
874
- y: yBeginning_yFakeBeginning + j * dotSize,
875
- size: dotSize,
876
- getNeighbor: (xOffset, yOffset) => !(0 > i + xOffset || 0 > j + yOffset || i + xOffset >= count || j + yOffset >= count || filter && !filter(i + xOffset, j + yOffset)) && (!!this.qr && this.qr.isDark(j + yOffset, i + xOffset))
877
- }), dot.element && this.dotsMask && this.dotsMaskGroup.appendChild(dot.element));
878
- let colorX = xBeginning_xFakeBeginning, colorY = yBeginning_yFakeBeginning, colorCount = count;
879
- if (options.shape === ShapeType.circle) {
880
- additionalDots_minSize = Math.floor((additionalDots_minSize / dotSize - count - 2 * (this.options.backgroundOptions && this.options.backgroundOptions.margin || 0)) / 2);
881
- let fakeCount = count + 2 * additionalDots_minSize;
882
- colorX = xBeginning_xFakeBeginning -= additionalDots_minSize * dotSize, colorY = yBeginning_yFakeBeginning -= additionalDots_minSize * dotSize,
883
- colorCount = count + 2 * additionalDots_minSize;
884
- let fakeMatrix = [], center = Math.floor(fakeCount / 2);
885
- for (let i = 0; i < fakeCount; i++) {
886
- fakeMatrix[i] = [];
887
- for (let j = 0; j < fakeCount; j++) fakeMatrix[i][j] = i >= additionalDots_minSize - 1 && i <= fakeCount - additionalDots_minSize && j >= additionalDots_minSize - 1 && j <= fakeCount - additionalDots_minSize || Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center ? 0 : this.qr.isDark(0 > j - 2 * additionalDots_minSize ? j : j >= count ? j - 2 * additionalDots_minSize : j - additionalDots_minSize, 0 > i - 2 * additionalDots_minSize ? i : i >= count ? i - 2 * additionalDots_minSize : i - additionalDots_minSize) ? 1 : 0;
888
- }
889
- for (let i = 0; i < fakeCount; i++) for (let j = 0; j < fakeCount; j++) fakeMatrix[i][j] && (dot.draw({
890
- x: xBeginning_xFakeBeginning + i * dotSize,
917
+ var colorCount_xBeginning = Math.floor((options.width - count * dotSize) / 2), yBeginning_yFakeBeginning = Math.floor((options.height - count * dotSize) / 2);
918
+ let dot = new QRDot(options.dotsOptions.type, this.document), overlayDot = new QRDot(DotType.tinySquare, this.document), markerDot = new QRDot(DotType.square, this.document);
919
+ [this.dotsMask, this.dotsMaskGroup] = this.createMask("mask-dot-color"), this.defs.appendChild(this.dotsMask),
920
+ options.imageOptions.mode == ImageMode.background && ([this.lightDotsMask, this.lightDotsMaskGroup] = this.createMask("mask-light-dot-color"),
921
+ this.defs.appendChild(this.lightDotsMask));
922
+ var fakeCount_margin = 0;
923
+ let additionalDots = 0;
924
+ fakeCount_margin = count, options.shape === ShapeType.circle && (fakeCount_margin = this.options.backgroundOptions && this.options.backgroundOptions.margin || 0,
925
+ additionalDots = Math.floor((minSize_xFakeBeginning / dotSize - count - 2 * fakeCount_margin) / 2),
926
+ fakeCount_margin = count + 2 * additionalDots), minSize_xFakeBeginning = colorCount_xBeginning - additionalDots * dotSize,
927
+ yBeginning_yFakeBeginning -= additionalDots * dotSize, colorCount_xBeginning = count + 2 * additionalDots;
928
+ let fakeMatrix = Array(fakeCount_margin);
929
+ var center_jAlign = Math.floor(fakeCount_margin / 2);
930
+ for (let i = 0; i < fakeCount_margin; i++) {
931
+ fakeMatrix[i] = Array(fakeCount_margin);
932
+ for (let j = 0; j < fakeCount_margin; j++) if (i > additionalDots - 1 && i < fakeCount_margin - additionalDots && j > additionalDots - 1 && j < fakeCount_margin - additionalDots) {
933
+ let ii = i - additionalDots, jj = j - additionalDots;
934
+ alignment && !alignment(ii, jj) ? fakeMatrix[i][j] = void 0 : fakeMatrix[i][j] = !!this.qr.isDark(jj, ii);
935
+ } else options.shape === ShapeType.circle && Math.sqrt((i - center_jAlign) * (i - center_jAlign) + (j - center_jAlign) * (j - center_jAlign)) > center_jAlign ? fakeMatrix[i][j] = void 0 : i == additionalDots - 1 || i == fakeCount_margin - additionalDots || j == additionalDots - 1 || j == fakeCount_margin - additionalDots ? fakeMatrix[i][j] = (j == additionalDots - 1 && (i < additionalDots + 8 || i > fakeCount_margin - additionalDots - 9) || j == fakeCount_margin - additionalDots && i < additionalDots + 8 || i == additionalDots - 1 && (j < additionalDots + 8 || j > fakeCount_margin - additionalDots - 9) || i == fakeCount_margin - additionalDots && j < additionalDots + 8) && void 0 : this.lightDotsMask || (fakeMatrix[i][j] = this.qr.isDark(0 > j - 2 * additionalDots ? j : j >= count ? j - 2 * additionalDots : j - additionalDots, 0 > i - 2 * additionalDots ? i : i >= count ? i - 2 * additionalDots : i - additionalDots));
936
+ }
937
+ alignment = QRUtil.getPatternPosition((count - 17) / 4);
938
+ for (let i = 0; i < fakeCount_margin; i++) {
939
+ count = alignment.find((v => i - additionalDots > v - 3 && i - additionalDots < v + 3));
940
+ for (let j = 0; j < fakeCount_margin; j++) center_jAlign = alignment.find((v => j - additionalDots > v - 3 && j - additionalDots < v + 3)),
941
+ null != fakeMatrix[i][j] && (this.lightDotsMask && (dot = count && center_jAlign && (count != alignment[0] && center_jAlign != alignment[0] || center_jAlign != alignment[0] && center_jAlign != alignment[alignment.length - 1] || count != alignment[0] && count != alignment[alignment.length - 1]) ? markerDot : overlayDot),
942
+ fakeMatrix[i][j] ? (dot.draw({
943
+ x: minSize_xFakeBeginning + i * dotSize,
944
+ y: yBeginning_yFakeBeginning + j * dotSize,
945
+ size: dotSize,
946
+ getNeighbor: (xOffset, yOffset) => !0 === fakeMatrix[i + xOffset]?.[j + yOffset]
947
+ }), dot.element && this.dotsMaskGroup && this.dotsMaskGroup.appendChild(dot.element)) : this.lightDotsMask && (dot.draw({
948
+ x: minSize_xFakeBeginning + i * dotSize,
891
949
  y: yBeginning_yFakeBeginning + j * dotSize,
892
950
  size: dotSize,
893
- getNeighbor: (xOffset, yOffset) => !!fakeMatrix[i + xOffset]?.[j + yOffset]
894
- }), dot.element && this.dotsMask && this.dotsMaskGroup.appendChild(dot.element));
951
+ getNeighbor: (xOffset, yOffset) => !1 === fakeMatrix[i + xOffset]?.[j + yOffset]
952
+ }), dot.element && this.lightDotsMaskGroup && this.lightDotsMaskGroup.appendChild(dot.element)));
895
953
  }
896
- this.createColor({
954
+ this.lightDotsMask && this.createColor({
955
+ options: options.imageOptions.fill.gradient,
956
+ color: options.imageOptions.fill.color,
957
+ additionalRotation: 0,
958
+ x: minSize_xFakeBeginning - dotSize,
959
+ y: yBeginning_yFakeBeginning - dotSize,
960
+ height: (colorCount_xBeginning + 2) * dotSize,
961
+ width: (colorCount_xBeginning + 2) * dotSize,
962
+ name: "light-dot-color"
963
+ }), this.createColor({
897
964
  options: options.dotsOptions?.gradient,
898
965
  color: options.dotsOptions.color,
899
966
  additionalRotation: 0,
900
- x: colorX,
901
- y: colorY,
902
- height: colorCount * dotSize,
903
- width: colorCount * dotSize,
967
+ x: minSize_xFakeBeginning,
968
+ y: yBeginning_yFakeBeginning,
969
+ height: colorCount_xBeginning * dotSize,
970
+ width: colorCount_xBeginning * dotSize,
904
971
  name: "dot-color"
905
972
  });
906
973
  }
@@ -930,14 +997,26 @@ class QRSVG {
930
997
  y,
931
998
  size: cornersSquareSize,
932
999
  rotation: dot
933
- }), cornersDotMask_cornersSquare_dot.element && cornersSquareMaskGroup && cornersSquareMaskGroup.appendChild(cornersDotMask_cornersSquare_dot.element); else {
1000
+ }), cornersDotMask_cornersSquare_dot.element && cornersSquareMaskGroup && cornersSquareMaskGroup.appendChild(cornersDotMask_cornersSquare_dot.element),
1001
+ cornersDotMask_cornersSquare_dot.fill && this.lightDotsMaskGroup && this.lightDotsMaskGroup.appendChild(cornersDotMask_cornersSquare_dot.fill); else {
934
1002
  cornersDotMask_cornersSquare_dot = new QRDot(options.dotsOptions.type, this.document);
935
- for (let i = 0; i < squareMask.length; i++) for (let j = 0; j < squareMask[i].length; j++) squareMask[i]?.[j] && (cornersDotMask_cornersSquare_dot.draw({
1003
+ for (let i = 0; i < squareMask.length; i++) for (let j = 0; j < squareMask[i].length; j++) squareMask[i]?.[j] ? (cornersDotMask_cornersSquare_dot.draw({
936
1004
  x: x + i * dotSize,
937
1005
  y: y + j * dotSize,
938
1006
  size: dotSize,
939
1007
  getNeighbor: (xOffset, yOffset) => !!squareMask[i + xOffset]?.[j + yOffset]
940
- }), cornersDotMask_cornersSquare_dot.element && cornersSquareMaskGroup && cornersSquareMaskGroup.appendChild(cornersDotMask_cornersSquare_dot.element));
1008
+ }), cornersDotMask_cornersSquare_dot.element && cornersSquareMaskGroup && cornersSquareMaskGroup.appendChild(cornersDotMask_cornersSquare_dot.element)) : this.lightDotsMask && !dotMask[i]?.[j] && (cornersDotMask_cornersSquare_dot.draw({
1009
+ x: x + i * dotSize,
1010
+ y: y + j * dotSize,
1011
+ size: dotSize,
1012
+ getNeighbor: (xOffset, yOffset) => !squareMask[i + xOffset]?.[j + yOffset] && !dotMask[i + xOffset]?.[j + yOffset]
1013
+ }), cornersDotMask_cornersSquare_dot.element && this.lightDotsMaskGroup && this.lightDotsMaskGroup.appendChild(cornersDotMask_cornersSquare_dot.element));
1014
+ if (this.lightDotsMask) for (let i = -1; 8 > i; i++) for (let j = -1; 8 > j; j++) -1 != i && 7 != i && -1 != j && 7 != j || (cornersDotMask_cornersSquare_dot.draw({
1015
+ x: x + i * dotSize,
1016
+ y: y + j * dotSize,
1017
+ size: dotSize,
1018
+ getNeighbor: (ii, jj) => (jj = j + jj, -1 <= (ii = i + ii) && 7 >= ii && -1 <= jj && 7 >= jj && (-1 == ii || 7 == ii || -1 == jj || 7 == jj))
1019
+ }), cornersDotMask_cornersSquare_dot.element && this.lightDotsMaskGroup && this.lightDotsMaskGroup.appendChild(cornersDotMask_cornersSquare_dot.element));
941
1020
  }
942
1021
  if ((options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) && ([cornersDotMask_cornersSquare_dot, cornersDotMaskGroup_cornersSquareMask] = this.createMask(`mask-corners-dot-color-${column_cornersDot}-${row}`),
943
1022
  this.defs.appendChild(cornersDotMask_cornersSquare_dot), this.createColor({
@@ -1023,6 +1102,8 @@ class QRSVG {
1023
1102
  }
1024
1103
  }
1025
1104
 
1105
+ Object.assign(QRCodeMinimal.stringToBytesFuncs, stringToBytes_UTF8);
1106
+
1026
1107
  let QRCodeStyling$1 = class {
1027
1108
  get size() {
1028
1109
  if (this.qrSVG) return {
@@ -1036,9 +1117,9 @@ let QRCodeStyling$1 = class {
1036
1117
  }
1037
1118
  update(mode) {
1038
1119
  this.container && (this.container.innerHTML = ""), this.options = mode ? sanitizeOptions(mergeDeep(this.options, mode)) : this.options,
1039
- this.options.data && (this.options.stringToBytesFuncs && (Object.assign(qrcode.stringToBytesFuncs, this.options.stringToBytesFuncs),
1040
- delete this.options.stringToBytesFuncs), this.qr = qrcode(this.options.qrOptions.typeNumber, this.options.qrOptions.errorCorrectionLevel),
1041
- (mode = this.options.qrOptions.mode || function(data) {
1120
+ this.options.data && (this.options.stringToBytesFuncs && (Object.assign(QRCodeMinimal.stringToBytesFuncs, this.options.stringToBytesFuncs),
1121
+ delete this.options.stringToBytesFuncs), this.qr = new QRCodeMinimal(this.options.qrOptions.typeNumber, this.options.qrOptions.errorCorrectionLevel),
1122
+ mode = this.options.qrOptions.mode || function(data) {
1042
1123
  switch (!0) {
1043
1124
  case /^[0-9]*$/.test(data):
1044
1125
  return Mode.numeric;
@@ -1052,9 +1133,8 @@ let QRCodeStyling$1 = class {
1052
1133
  default:
1053
1134
  return Mode.byte;
1054
1135
  }
1055
- }(this.options.data)) == Mode.unicode ? (qrcode.stringToBytes = qrcode.stringToBytesFuncs["UTF-8"],
1056
- mode = Mode.byte) : qrcode.stringToBytes = qrcode.stringToBytesFuncs.default, this.qr.addData(this.options.data, mode),
1057
- this.qr.make(), this.setupSvg(), this.append(this.container));
1136
+ }(this.options.data), this.qr.addData(this.options.data, mode), this.qr.make(),
1137
+ this.setupSvg(), this.append(this.container));
1058
1138
  }
1059
1139
  append(container) {
1060
1140
  container && (this.qrSVG?.element && container.appendChild(this.qrSVG.element),
@@ -1074,12 +1154,13 @@ let QRCodeStyling$1 = class {
1074
1154
  }
1075
1155
  setupSvg() {
1076
1156
  if (this.qr) {
1077
- var count = Math.ceil((this.options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * this.qr.getModuleCount());
1078
- count = Math.ceil(this.options.dotsOptions.size * (count + 2 * (this.options.backgroundOptions && this.options.backgroundOptions.margin || 0))),
1157
+ var moduleCount_size = this.qr.getModuleCount();
1158
+ this.options.imageOptions.mode == ImageMode.background && (moduleCount_size += 2),
1159
+ moduleCount_size = Math.ceil(this.options.dotsOptions.size * (Math.ceil((this.options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * moduleCount_size) + 2 * (this.options.backgroundOptions && this.options.backgroundOptions.margin || 0))),
1079
1160
  this.qrSVG = new QRSVG({
1080
1161
  ...this.options,
1081
- width: count,
1082
- height: count,
1162
+ width: moduleCount_size,
1163
+ height: moduleCount_size,
1083
1164
  errorCorrectionPercent: ErrorCorrectionPercents[this.options.qrOptions.errorCorrectionLevel]
1084
1165
  }), this.svgDrawingPromise = this.qrSVG.drawQR(this.qr).then((() => {
1085
1166
  this.qrSVG?.element && this.extension?.(this.qrSVG.element, this.options);
@@ -1127,5 +1208,5 @@ class QRCodeStyling extends QRCodeStyling$1 {
1127
1208
 
1128
1209
  var browserUtils = void 0;
1129
1210
 
1130
- export { CornerDotType, CornerSquareType, DotType, ErrorCorrectionLevel, ErrorCorrectionPercents, FileExtension, GradientType, Mode, QRCodeStyling, ShapeType, TypeNumber, browserUtils };
1211
+ export { CornerDotType, CornerSquareType, DotType, ErrorCorrectionPercents, FileExtension, GradientType, QRCodeStyling, ShapeType, browserUtils };
1131
1212
  //# sourceMappingURL=qr-code-styling-node.js.map