@qr-platform/qr-code.js 0.8.17

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.
Files changed (208) hide show
  1. package/.github/workflows/publish.yml +18 -0
  2. package/CHANGELOG.md +233 -0
  3. package/LICENSE.md +77 -0
  4. package/README.md +188 -0
  5. package/docs/advanced-examples.md +523 -0
  6. package/docs/api-reference-guide.md +254 -0
  7. package/docs/documentation.md +1592 -0
  8. package/docs/examples.md +322 -0
  9. package/docs/license-management.md +501 -0
  10. package/docs/typescript-types-definitions.md +372 -0
  11. package/docs/usage-guide.md +622 -0
  12. package/lib/core/qr-code-js.d.ts +48 -0
  13. package/lib/core/qr-constant.d.ts +9 -0
  14. package/lib/core/qr-options-validation.d.ts +13 -0
  15. package/lib/core/qr-svg.d.ts +76 -0
  16. package/lib/core/qr-templates.d.ts +6 -0
  17. package/lib/figures/corner-dot.d.ts +24 -0
  18. package/lib/figures/corner-square.d.ts +24 -0
  19. package/lib/figures/dot.d.ts +31 -0
  20. package/lib/index.d.ts +52 -0
  21. package/lib/lib/image/GIFImage.d.ts +19 -0
  22. package/lib/lib/io/Base64.d.ts +10 -0
  23. package/lib/lib/io/Base64DecodeInputStream.d.ts +15 -0
  24. package/lib/lib/io/Base64EncodeOutputStream.d.ts +17 -0
  25. package/lib/lib/io/ByteArrayInputStream.d.ts +12 -0
  26. package/lib/lib/io/ByteArrayOutputStream.d.ts +12 -0
  27. package/lib/lib/io/InputStream.d.ts +10 -0
  28. package/lib/lib/io/OutputStream.d.ts +12 -0
  29. package/lib/lib/qr-code.d.ts +5 -0
  30. package/lib/lib/qrcode/BitBuffer.d.ts +11 -0
  31. package/lib/lib/qrcode/ErrorCorrectLevel.d.ts +23 -0
  32. package/lib/lib/qrcode/MaskPattern.d.ts +39 -0
  33. package/lib/lib/qrcode/Mode.d.ts +23 -0
  34. package/lib/lib/qrcode/Polynomial.d.ts +15 -0
  35. package/lib/lib/qrcode/QR8BitByte.d.ts +13 -0
  36. package/lib/lib/qrcode/QRAlphaNum.d.ts +13 -0
  37. package/lib/lib/qrcode/QRCode.d.ts +22 -0
  38. package/lib/lib/qrcode/QRCodeMinimal.d.ts +58 -0
  39. package/lib/lib/qrcode/QRData.d.ts +17 -0
  40. package/lib/lib/qrcode/QRKanji.d.ts +13 -0
  41. package/lib/lib/qrcode/QRMath.d.ts +13 -0
  42. package/lib/lib/qrcode/QRNumber.d.ts +14 -0
  43. package/lib/lib/qrcode/QRUtil.d.ts +25 -0
  44. package/lib/lib/qrcode/RSBlock.d.ts +16 -0
  45. package/lib/lib/text/createStringToBytes.d.ts +9 -0
  46. package/lib/lib/text/stringToBytes_SJIS.d.ts +8 -0
  47. package/lib/lib/text/stringToBytes_UTF8.d.ts +7 -0
  48. package/lib/lib/zbar-wasm/index.d.ts +1 -0
  49. package/lib/lib/zxing-js/src/browser/BrowserCodeReader.d.ts +410 -0
  50. package/lib/lib/zxing-js/src/browser/BrowserQRCodeReader.d.ts +29 -0
  51. package/lib/lib/zxing-js/src/browser/BrowserQRCodeSvgWriter.d.ts +46 -0
  52. package/lib/lib/zxing-js/src/browser/BrowserSvgCodeWriter.d.ts +49 -0
  53. package/lib/lib/zxing-js/src/browser/DecodeContinuouslyCallback.d.ts +6 -0
  54. package/lib/lib/zxing-js/src/browser/HTMLCanvasElementLuminanceSource.d.ts +27 -0
  55. package/lib/lib/zxing-js/src/browser/HTMLVisualMediaElement.d.ts +4 -0
  56. package/lib/lib/zxing-js/src/browser/VideoInputDevice.d.ts +22 -0
  57. package/lib/lib/zxing-js/src/browser.d.ts +3 -0
  58. package/lib/lib/zxing-js/src/core/ArgumentException.d.ts +7 -0
  59. package/lib/lib/zxing-js/src/core/ArithmeticException.d.ts +7 -0
  60. package/lib/lib/zxing-js/src/core/ArrayIndexOutOfBoundsException.d.ts +10 -0
  61. package/lib/lib/zxing-js/src/core/BarcodeFormat.d.ts +42 -0
  62. package/lib/lib/zxing-js/src/core/Binarizer.d.ts +53 -0
  63. package/lib/lib/zxing-js/src/core/BinaryBitmap.d.ts +78 -0
  64. package/lib/lib/zxing-js/src/core/ChecksumException.d.ts +8 -0
  65. package/lib/lib/zxing-js/src/core/DecodeHintType.d.ts +91 -0
  66. package/lib/lib/zxing-js/src/core/Dimension.d.ts +13 -0
  67. package/lib/lib/zxing-js/src/core/EncodeHintType.d.ts +99 -0
  68. package/lib/lib/zxing-js/src/core/Exception.d.ts +17 -0
  69. package/lib/lib/zxing-js/src/core/FormatException.d.ts +8 -0
  70. package/lib/lib/zxing-js/src/core/HighContrastLuminanceSource.d.ts +27 -0
  71. package/lib/lib/zxing-js/src/core/IllegalArgumentException.d.ts +7 -0
  72. package/lib/lib/zxing-js/src/core/IllegalStateException.d.ts +7 -0
  73. package/lib/lib/zxing-js/src/core/IndexOutOfBoundsException.d.ts +7 -0
  74. package/lib/lib/zxing-js/src/core/InvertedLuminanceSource.d.ts +22 -0
  75. package/lib/lib/zxing-js/src/core/LuminanceSource.d.ts +84 -0
  76. package/lib/lib/zxing-js/src/core/NodeLuminanceSource.d.ts +36 -0
  77. package/lib/lib/zxing-js/src/core/NotFoundException.d.ts +8 -0
  78. package/lib/lib/zxing-js/src/core/NullPointerException.d.ts +7 -0
  79. package/lib/lib/zxing-js/src/core/OutOfMemoryError.d.ts +6 -0
  80. package/lib/lib/zxing-js/src/core/PlanarYUVLuminanceSource.d.ts +35 -0
  81. package/lib/lib/zxing-js/src/core/RGBLuminanceSource.d.ts +21 -0
  82. package/lib/lib/zxing-js/src/core/Reader.d.ts +49 -0
  83. package/lib/lib/zxing-js/src/core/ReaderException.d.ts +7 -0
  84. package/lib/lib/zxing-js/src/core/ReedSolomonException.d.ts +7 -0
  85. package/lib/lib/zxing-js/src/core/Result.d.ts +52 -0
  86. package/lib/lib/zxing-js/src/core/ResultMetadataType.d.ts +68 -0
  87. package/lib/lib/zxing-js/src/core/ResultPoint.d.ts +34 -0
  88. package/lib/lib/zxing-js/src/core/ResultPointCallback.d.ts +11 -0
  89. package/lib/lib/zxing-js/src/core/UniversalLuminanceSource.d.ts +46 -0
  90. package/lib/lib/zxing-js/src/core/UnsupportedOperationException.d.ts +7 -0
  91. package/lib/lib/zxing-js/src/core/Writer.d.ts +30 -0
  92. package/lib/lib/zxing-js/src/core/WriterException.d.ts +7 -0
  93. package/lib/lib/zxing-js/src/core/common/BitArray.d.ts +111 -0
  94. package/lib/lib/zxing-js/src/core/common/BitMatrix.d.ts +98 -0
  95. package/lib/lib/zxing-js/src/core/common/BitSource.d.ts +38 -0
  96. package/lib/lib/zxing-js/src/core/common/CharacterSetECI.d.ts +89 -0
  97. package/lib/lib/zxing-js/src/core/common/DecoderResult.d.ts +64 -0
  98. package/lib/lib/zxing-js/src/core/common/DefaultGridSampler.d.ts +10 -0
  99. package/lib/lib/zxing-js/src/core/common/DetectorResult.d.ts +16 -0
  100. package/lib/lib/zxing-js/src/core/common/ECIEncoderSet.d.ts +37 -0
  101. package/lib/lib/zxing-js/src/core/common/ECIInput.d.ts +79 -0
  102. package/lib/lib/zxing-js/src/core/common/GlobalHistogramBinarizer.d.ts +29 -0
  103. package/lib/lib/zxing-js/src/core/common/GridSampler.d.ts +36 -0
  104. package/lib/lib/zxing-js/src/core/common/GridSamplerInstance.d.ts +18 -0
  105. package/lib/lib/zxing-js/src/core/common/HybridBinarizer.d.ts +54 -0
  106. package/lib/lib/zxing-js/src/core/common/MinimalECIInput.d.ts +123 -0
  107. package/lib/lib/zxing-js/src/core/common/PerspectiveTransform.d.ts +26 -0
  108. package/lib/lib/zxing-js/src/core/common/StringUtils.d.ts +48 -0
  109. package/lib/lib/zxing-js/src/core/common/detector/CornerDetector.d.ts +35 -0
  110. package/lib/lib/zxing-js/src/core/common/detector/MathUtils.d.ts +36 -0
  111. package/lib/lib/zxing-js/src/core/common/detector/WhiteRectangleDetector.d.ts +71 -0
  112. package/lib/lib/zxing-js/src/core/common/reedsolomon/AbstractGenericGF.d.ts +34 -0
  113. package/lib/lib/zxing-js/src/core/common/reedsolomon/AbstractGenericGFPoly.d.ts +36 -0
  114. package/lib/lib/zxing-js/src/core/common/reedsolomon/GenericGF.d.ts +58 -0
  115. package/lib/lib/zxing-js/src/core/common/reedsolomon/GenericGFPoly.d.ts +47 -0
  116. package/lib/lib/zxing-js/src/core/common/reedsolomon/ReedSolomonDecoder.d.ts +40 -0
  117. package/lib/lib/zxing-js/src/core/common/reedsolomon/ReedSolomonEncoder.d.ts +41 -0
  118. package/lib/lib/zxing-js/src/core/qrcode/QRCodeReader.d.ts +35 -0
  119. package/lib/lib/zxing-js/src/core/qrcode/QRCodeWriter.d.ts +13 -0
  120. package/lib/lib/zxing-js/src/core/qrcode/decoder/BitMatrixParser.d.ts +58 -0
  121. package/lib/lib/zxing-js/src/core/qrcode/decoder/DataBlock.d.ts +28 -0
  122. package/lib/lib/zxing-js/src/core/qrcode/decoder/DataMask.d.ts +36 -0
  123. package/lib/lib/zxing-js/src/core/qrcode/decoder/DecodedBitStreamParser.d.ts +30 -0
  124. package/lib/lib/zxing-js/src/core/qrcode/decoder/Decoder.d.ts +44 -0
  125. package/lib/lib/zxing-js/src/core/qrcode/decoder/ECB.d.ts +12 -0
  126. package/lib/lib/zxing-js/src/core/qrcode/decoder/ECBlocks.d.ts +16 -0
  127. package/lib/lib/zxing-js/src/core/qrcode/decoder/ErrorCorrectionLevel.d.ts +38 -0
  128. package/lib/lib/zxing-js/src/core/qrcode/decoder/FormatInformation.d.ts +33 -0
  129. package/lib/lib/zxing-js/src/core/qrcode/decoder/Mode.d.ts +56 -0
  130. package/lib/lib/zxing-js/src/core/qrcode/decoder/QRCodeDecoderMetaData.d.ts +21 -0
  131. package/lib/lib/zxing-js/src/core/qrcode/decoder/Version.d.ts +44 -0
  132. package/lib/lib/zxing-js/src/core/qrcode/detector/AlignmentPattern.d.ts +21 -0
  133. package/lib/lib/zxing-js/src/core/qrcode/detector/AlignmentPatternFinder.d.ts +82 -0
  134. package/lib/lib/zxing-js/src/core/qrcode/detector/Detector.d.ts +87 -0
  135. package/lib/lib/zxing-js/src/core/qrcode/detector/FinderPattern.d.ts +26 -0
  136. package/lib/lib/zxing-js/src/core/qrcode/detector/FinderPatternFinder.d.ts +114 -0
  137. package/lib/lib/zxing-js/src/core/qrcode/detector/FinderPatternInfo.d.ts +16 -0
  138. package/lib/lib/zxing-js/src/core/qrcode/encoder/BlockPair.d.ts +7 -0
  139. package/lib/lib/zxing-js/src/core/qrcode/encoder/ByteMatrix.d.ts +24 -0
  140. package/lib/lib/zxing-js/src/core/qrcode/encoder/Encoder.d.ts +85 -0
  141. package/lib/lib/zxing-js/src/core/qrcode/encoder/MaskUtil.d.ts +47 -0
  142. package/lib/lib/zxing-js/src/core/qrcode/encoder/MatrixUtil.d.ts +37 -0
  143. package/lib/lib/zxing-js/src/core/qrcode/encoder/QRCode.d.ts +29 -0
  144. package/lib/lib/zxing-js/src/core/util/Arrays.d.ts +45 -0
  145. package/lib/lib/zxing-js/src/core/util/ByteArrayOutputStream.d.ts +174 -0
  146. package/lib/lib/zxing-js/src/core/util/Charset.d.ts +7 -0
  147. package/lib/lib/zxing-js/src/core/util/Collections.d.ts +11 -0
  148. package/lib/lib/zxing-js/src/core/util/Float.d.ts +14 -0
  149. package/lib/lib/zxing-js/src/core/util/Formatter.d.ts +28 -0
  150. package/lib/lib/zxing-js/src/core/util/Integer.d.ts +19 -0
  151. package/lib/lib/zxing-js/src/core/util/Long.d.ts +12 -0
  152. package/lib/lib/zxing-js/src/core/util/OutputStream.d.ts +106 -0
  153. package/lib/lib/zxing-js/src/core/util/StandardCharsets.d.ts +7 -0
  154. package/lib/lib/zxing-js/src/core/util/StringBuilder.d.ts +21 -0
  155. package/lib/lib/zxing-js/src/core/util/StringEncoding.d.ts +51 -0
  156. package/lib/lib/zxing-js/src/core/util/System.d.ts +10 -0
  157. package/lib/lib/zxing-js/src/customTypings.d.ts +16 -0
  158. package/lib/lib/zxing-js/src/index.d.ts +5 -0
  159. package/lib/lib/zxing-js/src/node.d.ts +1 -0
  160. package/lib/license/LicenseManager.d.ts +69 -0
  161. package/lib/license/LicenseManagerNode.d.ts +64 -0
  162. package/lib/node.d.ts +37 -0
  163. package/lib/options-demo.d.ts +239 -0
  164. package/lib/plugins/QRBorderHelpers.d.ts +32 -0
  165. package/lib/plugins/QRBorderPlugin.d.ts +35 -0
  166. package/lib/plugins/QRValidatorZbar.d.ts +38 -0
  167. package/lib/plugins/QRValidatorZbarNode.d.ts +60 -0
  168. package/lib/plugins/QRValidatorZbarNodeSharp.d.ts +83 -0
  169. package/lib/qr-code-js-node.js +1 -0
  170. package/lib/qr-code-js.js +1 -0
  171. package/lib/templates/borders-inner-outter.d.ts +129 -0
  172. package/lib/templates/borders-inner-scale-offset.d.ts +497 -0
  173. package/lib/templates/borders-inner.d.ts +129 -0
  174. package/lib/templates/borders-no-license.d.ts +129 -0
  175. package/lib/templates/borders-outter.d.ts +129 -0
  176. package/lib/templates/borders-text-auto-curved.d.ts +129 -0
  177. package/lib/templates/borders-text-full-curved.d.ts +133 -0
  178. package/lib/templates/borders.d.ts +129 -0
  179. package/lib/templates/scales.d.ts +130 -0
  180. package/lib/templates/scan-validators/index.d.ts +1 -0
  181. package/lib/templates/scan-validators/tests/cases/basic-inverted.d.ts +9 -0
  182. package/lib/templates/scan-validators/tests/cases/basic-no-license.d.ts +3 -0
  183. package/lib/templates/scan-validators/tests/cases/basic.d.ts +3 -0
  184. package/lib/templates/scan-validators/tests/cases/colors-inverted.d.ts +2 -0
  185. package/lib/templates/scan-validators/tests/cases/colors.d.ts +58 -0
  186. package/lib/templates/scan-validators/tests/cases/out-of-borders-inverted.d.ts +9 -0
  187. package/lib/templates/scan-validators/tests/cases/out-of-borders.d.ts +9 -0
  188. package/lib/templates/scan-validators/tests/cases/position-inverted.d.ts +9 -0
  189. package/lib/templates/scan-validators/tests/cases/position.d.ts +3 -0
  190. package/lib/templates/scan-validators/tests/index.d.ts +27 -0
  191. package/lib/tools/browser-image-tools.d.ts +7 -0
  192. package/lib/tools/browser-utils.d.ts +18 -0
  193. package/lib/types/helper.d.ts +23 -0
  194. package/lib/utils/canvas-options.d.ts +7 -0
  195. package/lib/utils/color.d.ts +4 -0
  196. package/lib/utils/gradient.d.ts +26 -0
  197. package/lib/utils/image.d.ts +16 -0
  198. package/lib/utils/merge.d.ts +5 -0
  199. package/lib/utils/options.d.ts +220 -0
  200. package/lib/utils/qrcode.d.ts +8 -0
  201. package/lib/utils/scan-validator-node.d.ts +15 -0
  202. package/lib/utils/scan-validators/abstract-scan-validator.d.ts +43 -0
  203. package/lib/utils/scan-validators/zbar-scan-validator.d.ts +8 -0
  204. package/lib/utils/scan-validators/zxing-canvas-scan-validator.d.ts +10 -0
  205. package/lib/utils/scan-validators/zxing-scan-validator.d.ts +8 -0
  206. package/lib/utils/svg.d.ts +2 -0
  207. package/lib/utils/token-validator.d.ts +19 -0
  208. package/package.json +80 -0
@@ -0,0 +1,523 @@
1
+ # Advanced Examples for QR-Code.js
2
+ <a id="start"></a>
3
+
4
+ This document provides advanced examples demonstrating the customization capabilities of QRCode.js. Each section focuses on specific options to help you create unique and visually appealing QR codes.
5
+
6
+ ---
7
+
8
+ ## Detailed Examples by Options
9
+
10
+ ### Core Options
11
+
12
+ These examples focus on the fundamental QR code generation settings.
13
+
14
+ **Example 1: High Error Correction & Specific Type Number**
15
+
16
+ ```typescript
17
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
18
+ const qrCoreHighEC = new QRCodeJs({
19
+ data: 'https://example.com/high-ec',
20
+ qrOptions: {
21
+ typeNumber: 10, // Larger QR code version
22
+ errorCorrectionLevel: 'H' // Highest error correction
23
+ },
24
+ dotsOptions: {
25
+ color: '#4A00E0' // Deep purple dots
26
+ }
27
+ });
28
+ qrCoreHighEC.append(document.getElementById('core-high-ec-container'));
29
+ ```
30
+
31
+ **Example 2: Auto Type Number & Medium Error Correction**
32
+
33
+ ```typescript
34
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
35
+ const qrCoreAutoEC = new QRCodeJs({
36
+ data: 'https://example.com/auto-ec-medium',
37
+ qrOptions: {
38
+ typeNumber: 0, // Auto-detect size
39
+ errorCorrectionLevel: 'M' // Medium error correction
40
+ },
41
+ dotsOptions: {
42
+ color: '#006400' // Dark green dots
43
+ }
44
+ });
45
+ qrCoreAutoEC.append(document.getElementById('core-auto-ec-container'));
46
+ ```
47
+
48
+ ---
49
+
50
+ ### Layout Options
51
+
52
+ Demonstrates how to control the positioning and scaling within the container or border.
53
+
54
+ **Example 1: Scaled Down with Offsets**
55
+
56
+ ```typescript
57
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
58
+ const qrLayoutScaledOffset = new QRCodeJs({
59
+ data: 'https://example.com/layout-scaled-offset',
60
+ scale: 0.75, // QR code occupies 75% of the space
61
+ offset: -15, // Moves QR code 15px up relative to center
62
+ verticalOffset: 5, // Additional 5px absolute downward shift
63
+ horizontalOffset: -5, // Additional 5px absolute leftward shift
64
+ dotsOptions: {
65
+ color: '#D32F2F' // Red dots
66
+ },
67
+ backgroundOptions: {
68
+ color: '#FFEBEE' // Light red background
69
+ }
70
+ });
71
+ qrLayoutScaledOffset.append(document.getElementById('layout-scaled-offset-container'));
72
+ ```
73
+
74
+ **Example 2: Responsive QR Code**
75
+
76
+ ```typescript
77
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
78
+ const qrLayoutResponsive = new QRCodeJs({
79
+ data: 'https://example.com/layout-responsive',
80
+ isResponsive: true, // SVG will resize with container
81
+ margin: 10, // Add a 10px quiet zone
82
+ dotsOptions: {
83
+ color: '#0277BD' // Blue dots
84
+ }
85
+ });
86
+ // Ensure the container has a defined size or resizes
87
+ const responsiveContainer = document.getElementById('layout-responsive-container');
88
+ if (responsiveContainer) {
89
+ responsiveContainer.style.width = '80%'; // Example: container takes 80% width
90
+ responsiveContainer.style.height = 'auto';
91
+ qrLayoutResponsive.append(responsiveContainer);
92
+ }
93
+ ```
94
+
95
+ ---
96
+
97
+ ### Dot Styling
98
+
99
+ Showcases different shapes and colors for the main data dots.
100
+
101
+ **Example 1: Classy Rounded Dots**
102
+
103
+ ```typescript
104
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
105
+ const qrDotsClassy = new QRCodeJs({
106
+ data: 'https://example.com/dots-classy',
107
+ dotsOptions: {
108
+ type: 'classyRounded',
109
+ color: '#388E3C', // Green classy dots
110
+ size: 11
111
+ }
112
+ });
113
+ qrDotsClassy.append(document.getElementById('dots-classy-container'));
114
+ ```
115
+
116
+ **Example 2: Star Dots**
117
+
118
+ ```typescript
119
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
120
+ const qrDotsStar = new QRCodeJs({
121
+ data: 'https://example.com/dots-star',
122
+ dotsOptions: {
123
+ type: 'star',
124
+ color: '#FFA000', // Amber star dots
125
+ size: 13
126
+ }
127
+ });
128
+ qrDotsStar.append(document.getElementById('dots-star-container'));
129
+ ```
130
+
131
+ **Example 3: Diamond Dots**
132
+
133
+ ```typescript
134
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
135
+ const qrDotsDiamond = new QRCodeJs({
136
+ data: 'https://example.com/dots-diamond',
137
+ dotsOptions: {
138
+ type: 'diamond',
139
+ color: '#5E35B1', // Deep Purple diamond dots
140
+ size: 10
141
+ }
142
+ });
143
+ qrDotsDiamond.append(document.getElementById('dots-diamond-container'));
144
+ ```
145
+
146
+ ---
147
+
148
+ ### Corner Squares Styling
149
+
150
+ Customizes the three large corner squares.
151
+
152
+ **Example 1: Outpoint Corner Squares**
153
+
154
+ ```typescript
155
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
156
+ const qrCornerSquareOutpoint = new QRCodeJs({
157
+ data: 'https://example.com/corner-square-outpoint',
158
+ dotsOptions: { color: '#444' },
159
+ cornersSquareOptions: {
160
+ type: 'outpoint',
161
+ color: '#C2185B' // Pink outpoint corners
162
+ }
163
+ });
164
+ qrCornerSquareOutpoint.append(document.getElementById('corner-square-outpoint-container'));
165
+ ```
166
+
167
+ **Example 2: Rounded Corner Squares**
168
+
169
+ ```typescript
170
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
171
+ const qrCornerSquareRounded = new QRCodeJs({
172
+ data: 'https://example.com/corner-square-rounded',
173
+ dotsOptions: { type: 'dot', color: '#7B1FA2' }, // Purple dots
174
+ cornersSquareOptions: {
175
+ type: 'rounded',
176
+ color: '#00796B' // Teal rounded corners
177
+ }
178
+ });
179
+ qrCornerSquareRounded.append(document.getElementById('corner-square-rounded-container'));
180
+ ```
181
+
182
+ ---
183
+
184
+ ### Corner Dots Styling
185
+
186
+ Customizes the smaller dots within the corner squares.
187
+
188
+ **Example 1: Heart Corner Dots**
189
+
190
+ ```typescript
191
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
192
+ const qrCornerDotHeart = new QRCodeJs({
193
+ data: 'https://example.com/corner-dot-heart',
194
+ dotsOptions: { color: '#555' },
195
+ cornersSquareOptions: { type: 'square', color: '#E64A19' }, // Orange square corners
196
+ cornersDotOptions: {
197
+ type: 'heart',
198
+ color: '#FFFFFF' // White heart dots inside corners
199
+ }
200
+ });
201
+ qrCornerDotHeart.append(document.getElementById('corner-dot-heart-container'));
202
+ ```
203
+
204
+ **Example 2: Square Corner Dots with Different Color**
205
+
206
+ ```typescript
207
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
208
+ const qrCornerDotSquare = new QRCodeJs({
209
+ data: 'https://example.com/corner-dot-square',
210
+ dotsOptions: { type: 'rounded', color: '#004D40' }, // Dark Teal dots
211
+ cornersSquareOptions: { type: 'rounded', color: '#FBC02D' }, // Yellow rounded corners
212
+ cornersDotOptions: {
213
+ type: 'square',
214
+ color: '#004D40' // Dark Teal square dots inside corners
215
+ }
216
+ });
217
+ qrCornerDotSquare.append(document.getElementById('corner-dot-square-container'));
218
+ ```
219
+
220
+ ---
221
+
222
+ ### Background Styling
223
+
224
+ Applies color, rounding, and gradients to the background.
225
+
226
+ **Example 1: Colored and Rounded Background**
227
+
228
+ ```typescript
229
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
230
+ const qrBackgroundStyled = new QRCodeJs({
231
+ data: 'https://example.com/background-styled',
232
+ dotsOptions: { color: '#FFFFFF' }, // White dots for contrast
233
+ backgroundOptions: {
234
+ color: '#1A237E', // Indigo background
235
+ round: 0.3 // 30% rounding
236
+ }
237
+ });
238
+ qrBackgroundStyled.append(document.getElementById('background-styled-container'));
239
+ ```
240
+
241
+ **Example 2: Background with Subtle Radial Gradient**
242
+
243
+ ```typescript
244
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
245
+ const qrBackgroundGradient = new QRCodeJs({
246
+ data: 'https://example.com/background-gradient',
247
+ dotsOptions: { color: '#333' },
248
+ backgroundOptions: {
249
+ round: '10%',
250
+ gradient: {
251
+ type: 'radial',
252
+ colorStops: [
253
+ { offset: 0, color: '#E3F2FD' }, // Light blue center
254
+ { offset: 1, color: '#BBDEFB' } // Darker blue edge
255
+ ]
256
+ }
257
+ }
258
+ });
259
+ qrBackgroundGradient.append(document.getElementById('background-gradient-container'));
260
+ ```
261
+
262
+ ---
263
+
264
+ ### Gradients Usage
265
+
266
+ Applies linear and radial gradients to various elements.
267
+
268
+ **Example 1: Linear Gradient on Dots**
269
+
270
+ ```typescript
271
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
272
+ const qrGradientDotsLinear = new QRCodeJs({
273
+ data: 'https://example.com/gradient-dots-linear',
274
+ dotsOptions: {
275
+ type: 'rounded',
276
+ gradient: {
277
+ type: 'linear',
278
+ rotation: Math.PI / 2, // Vertical gradient
279
+ colorStops: [
280
+ { offset: 0, color: '#FDD835' }, // Yellow start
281
+ { offset: 1, color: '#F57F17' } // Orange end
282
+ ]
283
+ }
284
+ },
285
+ backgroundOptions: { color: '#FFFDE7' } // Light yellow background
286
+ });
287
+ qrGradientDotsLinear.append(document.getElementById('gradient-dots-linear-container'));
288
+ ```
289
+
290
+ **Example 2: Radial Gradient on Corner Squares & Linear on Dots**
291
+
292
+ ```typescript
293
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
294
+ const qrGradientMultiple = new QRCodeJs({
295
+ data: 'https://example.com/gradient-multiple',
296
+ dotsOptions: {
297
+ type: 'square',
298
+ gradient: {
299
+ type: 'linear',
300
+ rotation: 0, // Horizontal
301
+ colorStops: [
302
+ { offset: 0, color: '#8E24AA' }, // Purple
303
+ { offset: 1, color: '#D81B60' } // Pink
304
+ ]
305
+ }
306
+ },
307
+ cornersSquareOptions: {
308
+ type: 'dot',
309
+ gradient: {
310
+ type: 'radial',
311
+ colorStops: [
312
+ { offset: 0, color: '#D81B60' }, // Pink center
313
+ { offset: 1, color: '#8E24AA' } // Purple edge
314
+ ]
315
+ }
316
+ },
317
+ cornersDotOptions: { // Keep inner dots consistent with square gradient
318
+ type: 'dot',
319
+ gradient: {
320
+ type: 'radial',
321
+ colorStops: [
322
+ { offset: 0, color: '#D81B60' },
323
+ { offset: 1, color: '#8E24AA' }
324
+ ]
325
+ }
326
+ },
327
+ backgroundOptions: { color: '#F3E5F5' } // Light purple background
328
+ });
329
+ qrGradientMultiple.append(document.getElementById('gradient-multiple-container'));
330
+ ```
331
+
332
+ ---
333
+
334
+ ### Image Embedding
335
+
336
+ Embeds logos or images within the QR code.
337
+
338
+ **Example 1: Centered Logo with Fill**
339
+
340
+ ```typescript
341
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
342
+ const qrImageCenter = new QRCodeJs({
343
+ data: 'https://example.com/image-center',
344
+ qrOptions: { errorCorrectionLevel: 'Q' }, // Higher EC recommended
345
+ image: 'https://upload.wikimedia.org/wikipedia/commons/a/a5/Instagram_icon.png', // Example: Instagram logo
346
+ imageOptions: {
347
+ mode: 'center',
348
+ imageSize: 0.35,
349
+ margin: 3,
350
+ crossOrigin: 'anonymous',
351
+ fill: { color: 'rgba(255,255,255,0.8)' } // Semi-transparent white fill behind logo
352
+ },
353
+ dotsOptions: { color: '#C13584' } // Instagram-like color
354
+ });
355
+ qrImageCenter.append(document.getElementById('image-center-container'));
356
+ ```
357
+
358
+ **Example 2: Image as Background**
359
+
360
+ ```typescript
361
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
362
+ const qrImageBackground = new QRCodeJs({
363
+ data: 'https://example.com/image-background',
364
+ qrOptions: { errorCorrectionLevel: 'M' },
365
+ image: 'https://source.unsplash.com/random/300x300?nature,water', // Example: Random nature image
366
+ imageOptions: {
367
+ mode: 'background', // Use image as background
368
+ imageSize: 1, // Image covers the whole area
369
+ crossOrigin: 'anonymous'
370
+ },
371
+ dotsOptions: {
372
+ type: 'rounded',
373
+ color: 'rgba(0, 0, 0, 0.7)' // Semi-transparent dark dots for contrast
374
+ },
375
+ cornersSquareOptions: { color: 'rgba(0, 0, 0, 0.7)' },
376
+ cornersDotOptions: { color: 'rgba(0, 0, 0, 0.7)' },
377
+ backgroundOptions: false // Disable default background color
378
+ });
379
+ qrImageBackground.append(document.getElementById('image-background-container'));
380
+ ```
381
+
382
+ ---
383
+
384
+ ### Border Options and Decorations (Premium Feature)
385
+
386
+ Uses premium border features for advanced styling and text. Requires a license.
387
+
388
+ **Example 1: Elaborate Border with Multiple Decorations**
389
+
390
+ ```typescript
391
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
392
+ // Ensure license is activated first
393
+ // await QRCodeJs.license('YOUR-LICENSE-KEY');
394
+
395
+ const qrBorderElaborate = new QRCodeJs({
396
+ data: 'https://example.com/border-elaborate',
397
+ dotsOptions: {
398
+ type: 'extraRounded',
399
+ color: '#0D47A1' // Dark Blue
400
+ },
401
+ backgroundOptions: { color: '#E3F2FD' }, // Light Blue background
402
+ borderOptions: {
403
+ hasBorder: true,
404
+ thickness: 30,
405
+ color: '#0D47A1', // Dark Blue main border
406
+ radius: '15%',
407
+ background: '#BBDEFB', // Lighter blue border background
408
+ borderOuter: { // Gold outer line
409
+ color: '#FFAB00',
410
+ thickness: 4
411
+ },
412
+ borderInner: { // White inner line
413
+ color: '#FFFFFF',
414
+ thickness: 2
415
+ },
416
+ decorations: {
417
+ top: {
418
+ enableText: true,
419
+ type: 'text',
420
+ value: 'SCAN FOR DETAILS',
421
+ style: { fontFace: 'Arial', fontSize: 16, fontColor: '#FFFFFF', fontWeight: 'bold' }
422
+ },
423
+ bottom: {
424
+ enableText: true,
425
+ type: 'text',
426
+ value: 'Powered by QR-Platform',
427
+ style: { fontFace: 'Arial', fontSize: 12, fontColor: '#FFFFFF' }
428
+ },
429
+ left: { // Example: Add small icon/text on side (adjust offset/size)
430
+ enableText: true,
431
+ type: 'text',
432
+ value: '>',
433
+ style: { fontFace: 'Arial', fontSize: 20, fontColor: '#FFFFFF', fontWeight: 'bold' },
434
+ offset: 0 // Center vertically
435
+ },
436
+ right: {
437
+ enableText: true,
438
+ type: 'text',
439
+ value: '<',
440
+ style: { fontFace: 'Arial', fontSize: 20, fontColor: '#FFFFFF', fontWeight: 'bold' },
441
+ offset: 0
442
+ }
443
+ }
444
+ }
445
+ });
446
+ qrBorderElaborate.append(document.getElementById('border-elaborate-container'));
447
+ ```
448
+
449
+ ---
450
+
451
+ ### Scan Validation (Premium Feature)
452
+
453
+ Validate if the generated QR code is scannable using the built-in validator. This requires a premium license.
454
+
455
+ ```typescript
456
+ // filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
457
+ // Ensure license is activated first
458
+ // await QRCodeJs.license('YOUR-LICENSE-KEY');
459
+
460
+ const qrCodeToValidate = new QRCodeJs({
461
+ data: 'Complex data string that might be hard to scan due to density or styling choices',
462
+ qrOptions: { errorCorrectionLevel: 'L' }, // Lower error correction can make scanning harder
463
+ dotsOptions: { type: 'tinySquare', color: '#CCCCCC' } // Light color, complex dot type
464
+ });
465
+
466
+ // Basic validation
467
+ qrCodeToValidate.validateScanning()
468
+ .then(result => {
469
+ console.log('Basic Validation Result:', result);
470
+ if (!result.isValid) {
471
+ console.warn(`QR code might not be scannable. Reason: ${result.message}`);
472
+ // Consider adjusting options like increasing errorCorrectionLevel or changing dot style/color
473
+ } else {
474
+ console.log(`QR code is valid! Decoded: ${result.decodedText}`);
475
+ }
476
+ })
477
+ .catch(error => {
478
+ console.error('Validation error:', error);
479
+ });
480
+
481
+ // Validation with debug output using zbar validator
482
+ qrCodeToValidate.validateScanning('zbar', true)
483
+ .then(result => {
484
+ console.log('Validation Result (zbar with debug):', result);
485
+ })
486
+ .catch(error => {
487
+ console.error('Validation error (zbar with debug):', error);
488
+ });
489
+
490
+ // Example of handling validation failure within an async function
491
+ async function createAndValidate() {
492
+ const qr = new QRCodeJs({
493
+ data: 'Test Data for Validation',
494
+ dotsOptions: { type: 'star', color: '#FF00FF'} // Potentially difficult style
495
+ });
496
+ try {
497
+ const validation = await qr.validateScanning();
498
+ if (validation.isValid) {
499
+ console.log(`QR Code is valid! Decoded: ${validation.decodedText}`);
500
+ qr.append(document.getElementById('validation-success-container'));
501
+ } else {
502
+ console.error(`QR Code validation failed: ${validation.message}. Consider simplifying the design.`);
503
+ // Optionally, try adjusting options and re-validating
504
+ // qr.update({ dotsOptions: { type: 'square', color: '#000000' } });
505
+ // const reValidation = await qr.validateScanning();
506
+ // ... handle reValidation result
507
+ }
508
+ } catch (err) {
509
+ console.error('An error occurred during validation:', err);
510
+ }
511
+ }
512
+
513
+ createAndValidate();
514
+ ```
515
+
516
+ ---
517
+
518
+ ### See Also
519
+ - [QRCode.js Documentation](./documentation.md#start)
520
+ - [API Reference Guide](./api-reference-guide.md#start)
521
+ - [TypeScript Types and Definitions](./typescript-types-definitions.md#start)
522
+ - [License Management](./license-management.md#start)
523
+ - [Basic Examples](./examples.md#start)