@progress/kendo-angular-barcodes 0.2.3 → 1.0.0-next.202203150945

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 (70) hide show
  1. package/bundles/kendo-angular-barcodes.umd.js +5 -0
  2. package/package.json +34 -101
  3. package/schematics/ngAdd/index.js +5 -2
  4. package/schematics/ngAdd/index.js.map +1 -1
  5. package/dist/cdn/js/kendo-angular-barcodes.js +0 -20
  6. package/dist/cdn/main.js +0 -5
  7. package/dist/es/barcode-validator.js +0 -51
  8. package/dist/es/barcode.component.js +0 -149
  9. package/dist/es/barcode.module.js +0 -52
  10. package/dist/es/barcodes.module.js +0 -50
  11. package/dist/es/base.component.js +0 -117
  12. package/dist/es/chart-types/barcode-types.js +0 -4
  13. package/dist/es/chart-types/field-types.js +0 -4
  14. package/dist/es/chart-types/qrcode-types.js +0 -4
  15. package/dist/es/chart-types.js +0 -4
  16. package/dist/es/index.js +0 -9
  17. package/dist/es/main.js +0 -11
  18. package/dist/es/package-metadata.js +0 -15
  19. package/dist/es/qrcode-validator.js +0 -45
  20. package/dist/es/qrcode.component.js +0 -147
  21. package/dist/es/qrcode.module.js +0 -52
  22. package/dist/es2015/barcode-validator.d.ts +0 -28
  23. package/dist/es2015/barcode-validator.js +0 -51
  24. package/dist/es2015/barcode.component.d.ts +0 -312
  25. package/dist/es2015/barcode.component.js +0 -144
  26. package/dist/es2015/barcode.module.d.ts +0 -37
  27. package/dist/es2015/barcode.module.js +0 -49
  28. package/dist/es2015/barcodes.module.d.ts +0 -37
  29. package/dist/es2015/barcodes.module.js +0 -47
  30. package/dist/es2015/base.component.d.ts +0 -55
  31. package/dist/es2015/base.component.js +0 -105
  32. package/dist/es2015/chart-types/barcode-types.d.ts +0 -109
  33. package/dist/es2015/chart-types/barcode-types.js +0 -4
  34. package/dist/es2015/chart-types/field-types.d.ts +0 -75
  35. package/dist/es2015/chart-types/field-types.js +0 -4
  36. package/dist/es2015/chart-types/qrcode-types.d.ts +0 -124
  37. package/dist/es2015/chart-types/qrcode-types.js +0 -4
  38. package/dist/es2015/chart-types.d.ts +0 -7
  39. package/dist/es2015/chart-types.js +0 -4
  40. package/dist/es2015/index.d.ts +0 -9
  41. package/dist/es2015/index.js +0 -9
  42. package/dist/es2015/index.metadata.json +0 -1
  43. package/dist/es2015/main.d.ts +0 -12
  44. package/dist/es2015/main.js +0 -11
  45. package/dist/es2015/package-metadata.d.ts +0 -9
  46. package/dist/es2015/package-metadata.js +0 -15
  47. package/dist/es2015/qrcode-validator.d.ts +0 -26
  48. package/dist/es2015/qrcode-validator.js +0 -44
  49. package/dist/es2015/qrcode.component.d.ts +0 -289
  50. package/dist/es2015/qrcode.component.js +0 -142
  51. package/dist/es2015/qrcode.module.d.ts +0 -37
  52. package/dist/es2015/qrcode.module.js +0 -49
  53. package/dist/fesm2015/index.js +0 -598
  54. package/dist/fesm5/index.js +0 -629
  55. package/dist/npm/barcode-validator.js +0 -53
  56. package/dist/npm/barcode.component.js +0 -151
  57. package/dist/npm/barcode.module.js +0 -54
  58. package/dist/npm/barcodes.module.js +0 -52
  59. package/dist/npm/base.component.js +0 -119
  60. package/dist/npm/chart-types/barcode-types.js +0 -6
  61. package/dist/npm/chart-types/field-types.js +0 -6
  62. package/dist/npm/chart-types/qrcode-types.js +0 -6
  63. package/dist/npm/chart-types.js +0 -6
  64. package/dist/npm/index.js +0 -13
  65. package/dist/npm/main.js +0 -20
  66. package/dist/npm/package-metadata.js +0 -17
  67. package/dist/npm/qrcode-validator.js +0 -47
  68. package/dist/npm/qrcode.component.js +0 -149
  69. package/dist/npm/qrcode.module.js +0 -54
  70. package/dist/systemjs/kendo-angular-barcodes.js +0 -5
@@ -1,598 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { __decorate, __metadata } from 'tslib';
6
- import { isDevMode, Input, ViewChild, ElementRef, Component, ChangeDetectionStrategy, Renderer2, NgZone, NgModule } from '@angular/core';
7
- import { Barcode, QRCode, barcodeValidator, qrcodeValidator } from '@progress/kendo-charts';
8
- import { isDocumentAvailable, ResizeSensorModule } from '@progress/kendo-angular-common';
9
- import { exportImage, exportSVG } from '@progress/kendo-drawing';
10
- import { validatePackage } from '@progress/kendo-licensing';
11
-
12
- /**
13
- * @hidden
14
- */
15
- const packageMetadata = {
16
- name: '@progress/kendo-angular-barcodes',
17
- productName: 'Kendo UI for Angular',
18
- productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
19
- publishDate: 1646216855,
20
- version: '',
21
- licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
22
- };
23
-
24
- /**
25
- * @hidden
26
- */
27
- class BaseComponent {
28
- constructor(element, renderer, ngZone) {
29
- this.element = element;
30
- this.renderer = renderer;
31
- this.ngZone = ngZone;
32
- this.resizeRateLimit = 10;
33
- validatePackage(packageMetadata);
34
- }
35
- get autoResize() {
36
- return this.resizeRateLimit > 0;
37
- }
38
- get canRender() {
39
- return isDocumentAvailable() && Boolean(this.element);
40
- }
41
- ngAfterViewInit() {
42
- this.refresh();
43
- }
44
- ngOnChanges(changes) {
45
- // Need to create a new instance if the rendering mode changes.
46
- if (changes['renderAs'] && this.instance) {
47
- this.instance.destroy();
48
- this.instance = null;
49
- }
50
- this.refresh();
51
- }
52
- /**
53
- * Detects the size of the container and redraws the component.
54
- * Resizing is automatic unless you set the `resizeRateLimit` option to `0`.
55
- */
56
- resize() {
57
- if (this.instance) {
58
- this.instance.redraw();
59
- }
60
- }
61
- /**
62
- * @hidden
63
- */
64
- onResize() {
65
- if (this.autoResize) {
66
- this.resize();
67
- }
68
- }
69
- /**
70
- * Exports the component as an image. The export operation is asynchronous and returns a promise.
71
- *
72
- * @param {ImageExportOptions} options - The parameters for the exported image.
73
- * @returns {Promise<string>} - A promise that will be resolved with a PNG image encoded as a Data URI.
74
- */
75
- exportImage(options = {}) {
76
- return exportImage(this.exportVisual(), options);
77
- }
78
- /**
79
- * Exports the component as an SVG document. The export operation is asynchronous and returns a promise.
80
- *
81
- * @param options - The parameters for the exported file.
82
- * @returns - A promise that will be resolved with an SVG document that is encoded as a Data URI.
83
- */
84
- exportSVG(options = {}) {
85
- return exportSVG(this.exportVisual(), options);
86
- }
87
- /**
88
- * Exports the component as a Drawing Group.
89
- *
90
- * @returns - The exported Group.
91
- */
92
- exportVisual() {
93
- return this.instance.exportVisual();
94
- }
95
- refresh() {
96
- if (!this.canRender) {
97
- return;
98
- }
99
- if (!this.instance) {
100
- const element = this.element.nativeElement;
101
- this.instance = this.createInstance(element, this.options);
102
- }
103
- else {
104
- this.instance.setOptions(this.options);
105
- }
106
- }
107
- isDevMode() {
108
- return isDevMode();
109
- }
110
- }
111
- __decorate([
112
- Input(),
113
- __metadata("design:type", Number)
114
- ], BaseComponent.prototype, "resizeRateLimit", void 0);
115
- __decorate([
116
- ViewChild('surface', { static: true }),
117
- __metadata("design:type", ElementRef)
118
- ], BaseComponent.prototype, "surfaceElement", void 0);
119
-
120
- /**
121
- * Represents the Kendo UI Barcode component for Angular.
122
- *
123
- * @example
124
- * ```ts
125
- * import { Component } from '@angular/core';
126
- *
127
- * _@Component({
128
- * selector: 'my-app',
129
- * template: `
130
- * <kendo-barcode type="EAN8" value="1234567">
131
- * </kendo-barcode>
132
- * `
133
- * })
134
- * export class AppComponent {
135
- * }
136
- * ```
137
- */
138
- let BarcodeComponent = class BarcodeComponent extends BaseComponent {
139
- constructor(element, renderer, ngZone) {
140
- super(element, renderer, ngZone);
141
- this.element = element;
142
- this.renderer = renderer;
143
- this.ngZone = ngZone;
144
- /**
145
- * Limits the automatic resizing of the Barcode. Sets the maximum number of times per second
146
- * that the component redraws its content when the size of its container changes.
147
- * Defaults to `10`. To disable the automatic resizing, set it to `0`.
148
- *
149
- * @example
150
- * ```ts
151
- * _@Component({
152
- * selector: 'my-app',
153
- * template: `
154
- * <kendo-barcode type="EAN8" [value]="1234567"
155
- * [resizeRateLimit]="2">
156
- * </kendo-barcode>
157
- * `
158
- * })
159
- * export class AppComponent {
160
- * }
161
- * ```
162
- */
163
- this.resizeRateLimit = 10;
164
- }
165
- get options() {
166
- return {
167
- renderAs: this.renderAs,
168
- background: this.background,
169
- border: this.border,
170
- checksum: this.checksum,
171
- color: this.color,
172
- height: this.height,
173
- padding: this.padding,
174
- text: this.text,
175
- type: this.type,
176
- value: this.value,
177
- width: this.width
178
- };
179
- }
180
- createInstance(element, options) {
181
- return new Barcode(element, options, this.onError.bind(this));
182
- }
183
- onError(error) {
184
- error.name = packageMetadata.productName + ' Barcode';
185
- if (this.isDevMode()) {
186
- throw error;
187
- }
188
- else {
189
- console.warn(error);
190
- }
191
- }
192
- };
193
- __decorate([
194
- Input(),
195
- __metadata("design:type", String)
196
- ], BarcodeComponent.prototype, "background", void 0);
197
- __decorate([
198
- Input(),
199
- __metadata("design:type", Object)
200
- ], BarcodeComponent.prototype, "border", void 0);
201
- __decorate([
202
- Input(),
203
- __metadata("design:type", Boolean)
204
- ], BarcodeComponent.prototype, "checksum", void 0);
205
- __decorate([
206
- Input(),
207
- __metadata("design:type", String)
208
- ], BarcodeComponent.prototype, "color", void 0);
209
- __decorate([
210
- Input(),
211
- __metadata("design:type", Number)
212
- ], BarcodeComponent.prototype, "height", void 0);
213
- __decorate([
214
- Input(),
215
- __metadata("design:type", Object)
216
- ], BarcodeComponent.prototype, "padding", void 0);
217
- __decorate([
218
- Input(),
219
- __metadata("design:type", String)
220
- ], BarcodeComponent.prototype, "renderAs", void 0);
221
- __decorate([
222
- Input(),
223
- __metadata("design:type", Object)
224
- ], BarcodeComponent.prototype, "text", void 0);
225
- __decorate([
226
- Input(),
227
- __metadata("design:type", String)
228
- ], BarcodeComponent.prototype, "type", void 0);
229
- __decorate([
230
- Input(),
231
- __metadata("design:type", Object)
232
- ], BarcodeComponent.prototype, "value", void 0);
233
- __decorate([
234
- Input(),
235
- __metadata("design:type", Number)
236
- ], BarcodeComponent.prototype, "width", void 0);
237
- __decorate([
238
- Input(),
239
- __metadata("design:type", Number)
240
- ], BarcodeComponent.prototype, "resizeRateLimit", void 0);
241
- BarcodeComponent = __decorate([
242
- Component({
243
- changeDetection: ChangeDetectionStrategy.OnPush,
244
- exportAs: 'kendoBarcode',
245
- selector: 'kendo-barcode',
246
- template: `
247
- <kendo-resize-sensor (resize)="onResize()" [rateLimit]="resizeRateLimit"></kendo-resize-sensor>
248
- `
249
- }),
250
- __metadata("design:paramtypes", [ElementRef,
251
- Renderer2,
252
- NgZone])
253
- ], BarcodeComponent);
254
-
255
- const DEFAULT_COLOR = '#000';
256
- const DEFAULT_BACKGROUND = '#fff';
257
- const DEFAULT_ERROR_CORRECTION = 'L';
258
- /**
259
- * Represents the Kendo UI QR Code component for Angular.
260
- *
261
- * @example
262
- * ```ts
263
- * import { Component } from '@angular/core';
264
- *
265
- * _@Component({
266
- * selector: 'my-app',
267
- * template: `
268
- * <kendo-qrcode value="https://www.telerik.com/kendo-angular-ui">
269
- * </kendo-qrcode>
270
- * `
271
- * })
272
- * export class AppComponent {
273
- * }
274
- * ```
275
- */
276
- let QRCodeComponent = class QRCodeComponent extends BaseComponent {
277
- constructor(element, renderer, ngZone) {
278
- super(element, renderer, ngZone);
279
- this.element = element;
280
- this.renderer = renderer;
281
- this.ngZone = ngZone;
282
- /**
283
- * Limits the automatic resizing of the QR Code. Sets the maximum number of times per second
284
- * that the component redraws its content when the size of its container changes.
285
- * Defaults to `10`. To disable the automatic resizing, set it to `0`.
286
- *
287
- * @example
288
- * ```ts
289
- * _@Component({
290
- * selector: 'my-app',
291
- * template: `
292
- * <kendo-qrcode value="https://www.telerik.com/kendo-angular-ui"
293
- * [resizeRateLimit]="2">
294
- * </kendo-qrcode>
295
- * `
296
- * })
297
- * export class AppComponent {
298
- * }
299
- * ```
300
- */
301
- this.resizeRateLimit = 10;
302
- }
303
- get options() {
304
- return {
305
- background: this.background || DEFAULT_BACKGROUND,
306
- border: this.border,
307
- color: this.color || DEFAULT_COLOR,
308
- encoding: this.encoding,
309
- errorCorrection: this.errorCorrection || DEFAULT_ERROR_CORRECTION,
310
- overlay: this.overlay || {},
311
- padding: this.padding,
312
- renderAs: this.renderAs,
313
- size: this.size,
314
- value: this.value
315
- };
316
- }
317
- createInstance(element, options) {
318
- return new QRCode(element, options, this.onError.bind(this));
319
- }
320
- onError(error) {
321
- error.name = packageMetadata.productName + ' QRCode';
322
- if (this.isDevMode()) {
323
- throw error;
324
- }
325
- else {
326
- console.warn(error);
327
- }
328
- }
329
- };
330
- __decorate([
331
- Input(),
332
- __metadata("design:type", String)
333
- ], QRCodeComponent.prototype, "background", void 0);
334
- __decorate([
335
- Input(),
336
- __metadata("design:type", Object)
337
- ], QRCodeComponent.prototype, "border", void 0);
338
- __decorate([
339
- Input(),
340
- __metadata("design:type", String)
341
- ], QRCodeComponent.prototype, "color", void 0);
342
- __decorate([
343
- Input(),
344
- __metadata("design:type", String)
345
- ], QRCodeComponent.prototype, "encoding", void 0);
346
- __decorate([
347
- Input(),
348
- __metadata("design:type", String)
349
- ], QRCodeComponent.prototype, "errorCorrection", void 0);
350
- __decorate([
351
- Input(),
352
- __metadata("design:type", Object)
353
- ], QRCodeComponent.prototype, "overlay", void 0);
354
- __decorate([
355
- Input(),
356
- __metadata("design:type", Number)
357
- ], QRCodeComponent.prototype, "padding", void 0);
358
- __decorate([
359
- Input(),
360
- __metadata("design:type", String)
361
- ], QRCodeComponent.prototype, "renderAs", void 0);
362
- __decorate([
363
- Input(),
364
- __metadata("design:type", Object)
365
- ], QRCodeComponent.prototype, "size", void 0);
366
- __decorate([
367
- Input(),
368
- __metadata("design:type", Object)
369
- ], QRCodeComponent.prototype, "value", void 0);
370
- __decorate([
371
- Input(),
372
- __metadata("design:type", Number)
373
- ], QRCodeComponent.prototype, "resizeRateLimit", void 0);
374
- QRCodeComponent = __decorate([
375
- Component({
376
- changeDetection: ChangeDetectionStrategy.OnPush,
377
- selector: 'kendo-qrcode',
378
- exportAs: 'kendoQRCode',
379
- template: `
380
- <kendo-resize-sensor (resize)="onResize()" [rateLimit]="resizeRateLimit"></kendo-resize-sensor>
381
- `
382
- }),
383
- __metadata("design:paramtypes", [ElementRef,
384
- Renderer2,
385
- NgZone])
386
- ], QRCodeComponent);
387
-
388
- /**
389
- * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})
390
- * definition for the Barcode component.
391
- *
392
- * @example
393
- *
394
- * ```ts-no-run
395
- * // Import the Barcode module
396
- * import { BarcodeModule } from '@progress/kendo-angular-barcodes';
397
- *
398
- * // The browser platform with a compiler
399
- * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
400
- *
401
- * import { NgModule } from '@angular/core';
402
- *
403
- * // Import the app component
404
- * import { AppComponent } from './app.component';
405
- *
406
- * // Define the app module
407
- * _@NgModule({
408
- * declarations: [AppComponent], // declare app component
409
- * imports: [BrowserModule, BarcodeModule], // import Barcode module
410
- * bootstrap: [AppComponent]
411
- * })
412
- * export class AppModule {}
413
- *
414
- * // Compile and launch the module
415
- * platformBrowserDynamic().bootstrapModule(AppModule);
416
- *
417
- * ```
418
- */
419
- let BarcodeModule = class BarcodeModule {
420
- };
421
- BarcodeModule = __decorate([
422
- NgModule({
423
- declarations: [BarcodeComponent],
424
- imports: [ResizeSensorModule],
425
- exports: [BarcodeComponent]
426
- })
427
- ], BarcodeModule);
428
-
429
- /**
430
- * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})
431
- * definition for the QR Code component.
432
- *
433
- * @example
434
- *
435
- * ```ts-no-run
436
- * // Import the QR Code module
437
- * import { QRCodeModule } from '@progress/kendo-angular-barcodes';
438
- *
439
- * // The browser platform with a compiler
440
- * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
441
- *
442
- * import { NgModule } from '@angular/core';
443
- *
444
- * // Import the app component
445
- * import { AppComponent } from './app.component';
446
- *
447
- * // Define the app module
448
- * _@NgModule({
449
- * declarations: [AppComponent], // declare app component
450
- * imports: [BrowserModule, QRCodeModule], // import QRCodeModule module
451
- * bootstrap: [AppComponent]
452
- * })
453
- * export class AppModule {}
454
- *
455
- * // Compile and launch the module
456
- * platformBrowserDynamic().bootstrapModule(AppModule);
457
- *
458
- * ```
459
- */
460
- let QRCodeModule = class QRCodeModule {
461
- };
462
- QRCodeModule = __decorate([
463
- NgModule({
464
- declarations: [QRCodeComponent],
465
- imports: [ResizeSensorModule],
466
- exports: [QRCodeComponent]
467
- })
468
- ], QRCodeModule);
469
-
470
- /**
471
- * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})
472
- * definition for the Barcode and QR Code components.
473
- *
474
- * @example
475
- *
476
- * ```ts-no-run
477
- * // Import the Barcodes module
478
- * import { BarcodesModule } from '@progress/kendo-angular-barcodes';
479
- *
480
- * // The browser platform with a compiler
481
- * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
482
- *
483
- * import { NgModule } from '@angular/core';
484
- *
485
- * // Import the app component
486
- * import { AppComponent } from './app.component';
487
- *
488
- * // Define the app module
489
- * _@NgModule({
490
- * declarations: [AppComponent], // declare app component
491
- * imports: [BrowserModule, BarcodesModule], // import Barcodes module
492
- * bootstrap: [AppComponent]
493
- * })
494
- * export class AppModule {}
495
- *
496
- * // Compile and launch the module
497
- * platformBrowserDynamic().bootstrapModule(AppModule);
498
- *
499
- * ```
500
- */
501
- let BarcodesModule = class BarcodesModule {
502
- };
503
- BarcodesModule = __decorate([
504
- NgModule({
505
- exports: [BarcodeModule, QRCodeModule]
506
- })
507
- ], BarcodesModule);
508
-
509
- /**
510
- * @hidden
511
- */
512
- const isPresent = (value) => value !== null && value !== undefined;
513
- /**
514
- * Creates a value validator for a particular Barcode type.
515
- *
516
- * @param {BarcodeType} type The type of the Barcode.
517
- * @param {Size} size The size of the barcode, excluding the text label, padding and border. Optional.
518
- * @returns {ValidatorFn} A validator function that returns an error map with the `barcode` property if the validation check fails, otherwise `null`.
519
- *
520
- * @example
521
- * ```ts-no-run
522
- * const control = new FormControl('1234', createBarcodeValidator('EAN8'));
523
- * console.log(control.errors);
524
- *
525
- * // {
526
- * // barcode: {
527
- * // message: 'The value of the "EAN13" encoding should be 12 symbols',
528
- * // value: '1234',
529
- * // type: 'EAN13'
530
- * // }
531
- * // }
532
- * ```
533
- */
534
- const createBarcodeValidator = (type, size) => {
535
- const validator = barcodeValidator(type, size);
536
- return (control) => {
537
- if (!isPresent(control.value) || control.value === '') {
538
- return null;
539
- }
540
- const result = validator(control.value);
541
- if (result.valid === true) {
542
- return null;
543
- }
544
- return {
545
- barcode: {
546
- message: result.error.message,
547
- value: control.value,
548
- type: type
549
- }
550
- };
551
- };
552
- };
553
-
554
- /**
555
- * Creates a value validator for a particular Barcode type.
556
- *
557
- * @param {QRCodeEncoding} encoding The QR Code encoding. Defaults to 'ISO_8859_1'.
558
- * @returns {ValidatorFn} A validator function that returns an error map with the `qrcode` property if the validation check fails, otherwise `null`.
559
- *
560
- * @example
561
- * ```ts-no-run
562
- * const control = new FormControl('Фоо', createQRCodeValidator());
563
- * console.log(control.errors);
564
- *
565
- * // {
566
- * // qrcode: {
567
- * // message: 'Unsupported character in QR Code: "Ф".',
568
- * // value: '1234',
569
- * // type: 'EAN13'
570
- * // }
571
- * // }
572
- * ```
573
- */
574
- const createQRCodeValidator = (encoding = 'ISO_8859_1') => {
575
- const validator = qrcodeValidator(encoding);
576
- return (control) => {
577
- if (!control.value) {
578
- return null;
579
- }
580
- const result = validator(control.value);
581
- if (result.valid === true) {
582
- return null;
583
- }
584
- return {
585
- qrcode: {
586
- message: result.error.message,
587
- value: control.value,
588
- encoding: encoding
589
- }
590
- };
591
- };
592
- };
593
-
594
- /**
595
- * Generated bundle index. Do not edit.
596
- */
597
-
598
- export { BaseComponent, BarcodeComponent, QRCodeComponent, BarcodeModule, QRCodeModule, BarcodesModule, createBarcodeValidator, createQRCodeValidator };