@qbs-origin/origin-form 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +96 -13
  2. package/esm2022/lib/action-step-handler.mjs +3 -3
  3. package/esm2022/lib/auth-client.service.mjs +3 -3
  4. package/esm2022/lib/formly/baseFormlyControlComponent.mjs +3 -3
  5. package/esm2022/lib/formly/baseFormlyStepComponent.mjs +3 -3
  6. package/esm2022/lib/formly/custom-section-separator.component.mjs +3 -3
  7. package/esm2022/lib/formly/form-section-separator.component.mjs +3 -3
  8. package/esm2022/lib/formly/formly-action.mjs +3 -3
  9. package/esm2022/lib/formly/formly-checkbox/formly-checkbox.component.mjs +3 -3
  10. package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +3 -3
  11. package/esm2022/lib/formly/formly-download-documents/formly-download-documents.component.mjs +3 -3
  12. package/esm2022/lib/formly/formly-enrol-card/formly-enrol-card.component.mjs +3 -3
  13. package/esm2022/lib/formly/formly-field-stepper/formly-field-stepper.component.mjs +3 -3
  14. package/esm2022/lib/formly/formly-generate-documents/formly-generate-documents.component.mjs +3 -3
  15. package/esm2022/lib/formly/formly-identification.component.mjs +3 -3
  16. package/esm2022/lib/formly/formly-open-banking/formly-open-banking.component.mjs +3 -3
  17. package/esm2022/lib/formly/formly-paragraph/formly-paragraph.component.mjs +3 -3
  18. package/esm2022/lib/formly/formly-radio/formly-radio-component.mjs +3 -3
  19. package/esm2022/lib/formly/formly-row-fille.mjs +3 -3
  20. package/esm2022/lib/formly/formly-scan-id/formly-scan-id.component.mjs +3 -3
  21. package/esm2022/lib/formly/formly-sign/formly-sign.component.mjs +5 -5
  22. package/esm2022/lib/formly/formly-upload-documents/formly-upload-documents.component.mjs +3 -3
  23. package/esm2022/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.mjs +3 -3
  24. package/esm2022/lib/formly/formly-view-documents/formly-view-documents.component.mjs +3 -3
  25. package/esm2022/lib/formly/formly-view-offers/formly-view-offers.component.mjs +3 -3
  26. package/esm2022/lib/origin-form-auth.service.mjs +3 -3
  27. package/esm2022/lib/origin-form-token.interceptor.mjs +3 -3
  28. package/esm2022/lib/origin-form.component.mjs +3 -3
  29. package/esm2022/lib/origin-form.module.mjs +6 -6
  30. package/esm2022/lib/origin-form.service.mjs +3 -3
  31. package/esm2022/lib/others/check-list.database.mjs +3 -3
  32. package/esm2022/lib/others/config-service.mjs +3 -3
  33. package/esm2022/lib/others/external-link.directive.mjs +3 -3
  34. package/esm2022/lib/others/flux-helper.mjs +3 -3
  35. package/esm2022/lib/others/picker.component.mjs +3 -3
  36. package/esm2022/lib/others/translation.pipe.mjs +3 -3
  37. package/esm2022/lib/others/translations-helper.mjs +3 -3
  38. package/esm2022/lib/services/applicationData.service.mjs +3 -3
  39. package/esm2022/lib/services/auth-http.service.mjs +3 -3
  40. package/esm2022/lib/services/dialog.service.mjs +3 -3
  41. package/esm2022/lib/services/dictionary.service.mjs +3 -3
  42. package/esm2022/lib/services/forms.service.mjs +3 -3
  43. package/esm2022/lib/services/labels.service.mjs +3 -3
  44. package/esm2022/lib/services/language.service.mjs +3 -3
  45. package/esm2022/lib/services/open-banking.service.mjs +3 -3
  46. package/esm2022/lib/services/origin-form-signalr-handler.service.mjs +3 -3
  47. package/esm2022/lib/services/origin-form-signalr.service.mjs +3 -3
  48. package/esm2022/lib/services/otp.service.mjs +3 -3
  49. package/esm2022/lib/services/proxy.service.mjs +3 -3
  50. package/esm2022/lib/services/scroll-to-error.service.mjs +3 -3
  51. package/esm2022/lib/services/translation.service.mjs +3 -3
  52. package/esm2022/lib/shared-components/confirmation.component.mjs +3 -3
  53. package/esm2022/lib/shared-components/dictionaries-tree.component.mjs +3 -3
  54. package/esm2022/lib/shared-components/grid.component.mjs +3 -3
  55. package/esm2022/lib/shared-components/treeview/treeview.component.mjs +3 -3
  56. package/esm2022/lib/theme-injector.service.mjs +3 -3
  57. package/fesm2022/qbs-origin-origin-form.mjs +168 -168
  58. package/fesm2022/qbs-origin-origin-form.mjs.map +1 -1
  59. package/lib/formly/formly-sign/formly-sign.component.d.ts +1 -1
  60. package/lib/origin-form.module.d.ts +1 -1
  61. package/package.json +2 -2
@@ -25,10 +25,10 @@ export class FormlyParagraphComponent extends BaseFormlyStepComponent {
25
25
  }
26
26
  return cleanValue;
27
27
  }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyParagraphComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
29
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyParagraphComponent, selector: "formly-paragraph", usesInheritance: true, ngImport: i0, template: "<div\n class=\"mat-mdc-text-field-wrapper formly-paragraph\"\n [class.hasLabel]=\"title\"\n [ngStyle]=\"cssMargins\"\n appExternalLink\n>\n\n <ng-container *ngIf=\"props['controlType'] === 'Paragraph'\">\n <p *ngIf=\"props['translatedParagraphTitle']\" [ngStyle]=\"props['design']['.font-label']\">\n {{ props['translatedParagraphTitle'] }}\n </p>\n <p *ngIf=\"props['translatedDescription']\" [ngStyle]=\"props['design']['.font-paragraph']\">\n {{ props['translatedDescription'] }}\n </p>\n </ng-container>\n\n <ng-container *ngIf=\"props['controlType'] !== 'Paragraph'\">\n <div\n class=\"component-text-field\"\n *ngIf=\"field?.defaultValue !== undefined && field?.defaultValue !== null\"\n >\n <p [ngStyle]=\"props['design']['.font-label']\">\n {{ field.props?.label }}\n </p>\n <p [ngStyle]=\"props['design']['.font-paragraph']\">\n {{ field.defaultValue }}\n </p>\n </div>\n </ng-container>\n</div>\n", styles: [".formly-paragraph{border:none!important;background:none!important;padding:0;display:block}.formly-paragraph label{display:block}.formly-paragraph.hasLabel p{margin-top:.5rem}.mat-mdc-text-field-wrapper.formly-paragraph{padding:8px 16px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.ExternalLinkDirective, selector: "[appExternalLink]" }] }); }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyParagraphComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
29
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlyParagraphComponent, selector: "formly-paragraph", usesInheritance: true, ngImport: i0, template: "<div\n class=\"mat-mdc-text-field-wrapper formly-paragraph\"\n [class.hasLabel]=\"title\"\n [ngStyle]=\"cssMargins\"\n appExternalLink\n>\n\n <ng-container *ngIf=\"props['controlType'] === 'Paragraph'\">\n <p *ngIf=\"props['translatedParagraphTitle']\" [ngStyle]=\"props['design']['.font-label']\">\n {{ props['translatedParagraphTitle'] }}\n </p>\n <p *ngIf=\"props['translatedDescription']\" [ngStyle]=\"props['design']['.font-paragraph']\">\n {{ props['translatedDescription'] }}\n </p>\n </ng-container>\n\n <ng-container *ngIf=\"props['controlType'] !== 'Paragraph'\">\n <div\n class=\"component-text-field\"\n *ngIf=\"field?.defaultValue !== undefined && field?.defaultValue !== null\"\n >\n <p [ngStyle]=\"props['design']['.font-label']\">\n {{ field.props?.label }}\n </p>\n <p [ngStyle]=\"props['design']['.font-paragraph']\">\n {{ field.defaultValue }}\n </p>\n </div>\n </ng-container>\n</div>\n", styles: [".formly-paragraph{border:none!important;background:none!important;padding:0;display:block}.formly-paragraph label{display:block}.formly-paragraph.hasLabel p{margin-top:.5rem}.mat-mdc-text-field-wrapper.formly-paragraph{padding:8px 16px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.ExternalLinkDirective, selector: "[appExternalLink]" }] }); }
30
30
  }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyParagraphComponent, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyParagraphComponent, decorators: [{
32
32
  type: Component,
33
33
  args: [{ selector: 'formly-paragraph', template: "<div\n class=\"mat-mdc-text-field-wrapper formly-paragraph\"\n [class.hasLabel]=\"title\"\n [ngStyle]=\"cssMargins\"\n appExternalLink\n>\n\n <ng-container *ngIf=\"props['controlType'] === 'Paragraph'\">\n <p *ngIf=\"props['translatedParagraphTitle']\" [ngStyle]=\"props['design']['.font-label']\">\n {{ props['translatedParagraphTitle'] }}\n </p>\n <p *ngIf=\"props['translatedDescription']\" [ngStyle]=\"props['design']['.font-paragraph']\">\n {{ props['translatedDescription'] }}\n </p>\n </ng-container>\n\n <ng-container *ngIf=\"props['controlType'] !== 'Paragraph'\">\n <div\n class=\"component-text-field\"\n *ngIf=\"field?.defaultValue !== undefined && field?.defaultValue !== null\"\n >\n <p [ngStyle]=\"props['design']['.font-label']\">\n {{ field.props?.label }}\n </p>\n <p [ngStyle]=\"props['design']['.font-paragraph']\">\n {{ field.defaultValue }}\n </p>\n </div>\n </ng-container>\n</div>\n", styles: [".formly-paragraph{border:none!important;background:none!important;padding:0;display:block}.formly-paragraph label{display:block}.formly-paragraph.hasLabel p{margin-top:.5rem}.mat-mdc-text-field-wrapper.formly-paragraph{padding:8px 16px}\n"] }]
34
34
  }] });
@@ -39,10 +39,10 @@ export class FormlyRadioComponent extends FieldType {
39
39
  }
40
40
  }
41
41
  }
42
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyRadioComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
43
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyRadioComponent, selector: "formly-radio", usesInheritance: true, ngImport: i0, template: "<div class=\"mat-mdc-text-field-wrapper mdc-radiobox-field\" appExternalLink>\n <label>\n <markdown [data]=\"title\"></markdown>\n </label>\n <div *ngIf=\"radioOptionsList.length > 0\">\n <mat-radio-group [value]=\"formControl.value?.id\"\n (change)=\"onRadioChange($event)\">\n <ng-container *ngFor=\"let option of radioOptionsList\">\n <div>\n <mat-radio-button [value]=\"option.value.id\">\n {{ option.label }}\n </mat-radio-button>\n </div>\n </ng-container>\n </mat-radio-group>\n </div>\n <formly-validation-message *ngIf=\"showError\" [field]=\"field\">\n </formly-validation-message>\n</div>\n", styles: ["formly-validation-message{color:red;font-size:12px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "directive", type: i3.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i3.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i4.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }, { kind: "directive", type: i5.ExternalLinkDirective, selector: "[appExternalLink]" }] }); }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyRadioComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
43
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlyRadioComponent, selector: "formly-radio", usesInheritance: true, ngImport: i0, template: "<div class=\"mat-mdc-text-field-wrapper mdc-radiobox-field\" appExternalLink>\n <label>\n <markdown [data]=\"title\"></markdown>\n </label>\n <div *ngIf=\"radioOptionsList.length > 0\">\n <mat-radio-group [value]=\"formControl.value?.id\"\n (change)=\"onRadioChange($event)\">\n <ng-container *ngFor=\"let option of radioOptionsList\">\n <div>\n <mat-radio-button [value]=\"option.value.id\">\n {{ option.label }}\n </mat-radio-button>\n </div>\n </ng-container>\n </mat-radio-group>\n </div>\n <formly-validation-message *ngIf=\"showError\" [field]=\"field\">\n </formly-validation-message>\n</div>\n", styles: ["formly-validation-message{color:red;font-size:12px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "directive", type: i3.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i3.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i4.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }, { kind: "directive", type: i5.ExternalLinkDirective, selector: "[appExternalLink]" }] }); }
44
44
  }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyRadioComponent, decorators: [{
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyRadioComponent, decorators: [{
46
46
  type: Component,
47
47
  args: [{ selector: 'formly-radio', template: "<div class=\"mat-mdc-text-field-wrapper mdc-radiobox-field\" appExternalLink>\n <label>\n <markdown [data]=\"title\"></markdown>\n </label>\n <div *ngIf=\"radioOptionsList.length > 0\">\n <mat-radio-group [value]=\"formControl.value?.id\"\n (change)=\"onRadioChange($event)\">\n <ng-container *ngFor=\"let option of radioOptionsList\">\n <div>\n <mat-radio-button [value]=\"option.value.id\">\n {{ option.label }}\n </mat-radio-button>\n </div>\n </ng-container>\n </mat-radio-group>\n </div>\n <formly-validation-message *ngIf=\"showError\" [field]=\"field\">\n </formly-validation-message>\n</div>\n", styles: ["formly-validation-message{color:red;font-size:12px}\n"] }]
48
48
  }] });
@@ -2,10 +2,10 @@ import { Component } from '@angular/core';
2
2
  import { FieldType } from '@ngx-formly/core';
3
3
  import * as i0 from "@angular/core";
4
4
  export class RowFillerComponent extends FieldType {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RowFillerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RowFillerComponent, selector: "formly-row-filler", usesInheritance: true, ngImport: i0, template: `<div class="row-filler"></div>`, isInline: true, styles: [".row-filler{width:100%}\n"] }); }
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowFillerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RowFillerComponent, selector: "formly-row-filler", usesInheritance: true, ngImport: i0, template: `<div class="row-filler"></div>`, isInline: true, styles: [".row-filler{width:100%}\n"] }); }
7
7
  }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RowFillerComponent, decorators: [{
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowFillerComponent, decorators: [{
9
9
  type: Component,
10
10
  args: [{ selector: 'formly-row-filler', template: `<div class="row-filler"></div>`, styles: [".row-filler{width:100%}\n"] }]
11
11
  }] });
@@ -265,10 +265,10 @@ export class FormlyScanIdComponent extends FieldType {
265
265
  }
266
266
  return null;
267
267
  }
268
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyScanIdComponent, deps: [{ token: i1.ApplicationDataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
269
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyScanIdComponent, selector: "app-formly-scan-id", viewQueries: [{ propertyName: "fileInputFront", first: true, predicate: ["fileInputFront"], descendants: true }, { propertyName: "fileInputBack", first: true, predicate: ["fileInputBack"], descendants: true }, { propertyName: "videoElement", first: true, predicate: ["videoElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"scan-id-container\">\n <h2 class=\"title\">{{ props[\"name\"] }}</h2>\n <p class=\"description\">{{ props[\"description\"] }}</p>\n\n <!-- Selection Step -->\n <div class=\"card-selection-container\">\n <div class=\"card-options\">\n <div class=\"card-option\"\n [class.selected]=\"oldIdCard === true && cardTypeSelected\"\n (click)=\"selectCardType(true)\">\n <img src=\"assets/images/origin-form/old-id-card.png\" alt=\"Old ID Card\" />\n </div>\n <div class=\"card-option\"\n [class.selected]=\"oldIdCard === false && cardTypeSelected\"\n (click)=\"selectCardType(false)\">\n <img src=\"assets/images/origin-form/new-id-card.png\" alt=\"New ID Card\" />\n </div>\n </div>\n </div>\n\n <div *ngIf=\"isLoading\" class=\"loading-spinner\">\n <mat-spinner></mat-spinner>\n </div>\n\n <div *ngIf=\"cardTypeSelected && !isLoading\" class=\"actions\">\n <!-- Step 1: Upload Front Photo -->\n <div *ngIf=\"!frontPhotoUploaded\" class=\"upload-button-container\">\n <p>{{ props['labels'].uploadFrontPrompt || 'Please upload the front photo of your ID card.' }}</p>\n <input type=\"file\" #fileInputFront (change)=\"onFileSelected($event, true)\" hidden />\n <button mat-flat-button color=\"primary\" (click)=\"fileInputFront.click()\">\n <mat-icon>cloud_upload</mat-icon>\n {{ fileNameFront ? fileNameFront : props['labels'].uploadFileButtonTranslations || 'Upload Front Photo' }}\n </button>\n <div *ngIf=\"fileError\" class=\"error-message\">\n {{ fileError }}\n </div>\n </div>\n\n <!-- Step 2: Upload Back Photo (Only for New ID Cards) -->\n <div *ngIf=\"frontPhotoUploaded && !oldIdCard && !isLoading\" class=\"upload-button-container\">\n <p>{{ props['labels'].uploadBackPrompt || 'Please upload the back photo of your ID card.' }}</p>\n <input type=\"file\" #fileInputBack (change)=\"onFileSelected($event, false)\" hidden />\n <button mat-flat-button color=\"primary\" (click)=\"fileInputBack.click()\">\n <mat-icon>cloud_upload</mat-icon>\n {{ fileNameBack ? fileNameBack : props['labels'].uploadFileButtonTranslations || 'Upload Back Photo' }}\n </button>\n <div *ngIf=\"fileError\" class=\"error-message\">\n {{ fileError }}\n </div>\n </div> \n <!-- Take Photo Button (Optional) -->\n <div *ngIf=\"props['config'].showTakePictureButton\" class=\"take-photo-container\">\n <button mat-flat-button color=\"accent\" (click)=\"takePicture()\">\n <mat-icon>camera_alt</mat-icon>\n {{ props['labels'].takePictureButtonTranslations || 'Take a photo' }}\n </button>\n <video #videoElement *ngIf=\"videoStream\" width=\"100%\" class=\"video-preview\" autoplay></video>\n\n <!-- Take Front Photo -->\n <button mat-flat-button color=\"warn\" *ngIf=\"videoStream && !frontPhotoUploaded\" (click)=\"capturePhoto(true)\">\n <mat-icon>photo_camera</mat-icon>\n {{ this.props['errorMessages']?.frontId || 'Take a photo' }}\n </button>\n\n <!-- Take Back Photo -->\n <button mat-flat-button color=\"warn\" *ngIf=\"videoStream && frontPhotoUploaded && !oldIdCard\" (click)=\"capturePhoto(false)\">\n <mat-icon>photo_camera</mat-icon>\n {{ this.props['errorMessages']?.backId || 'Take a photo' }}\n </button>\n </div>\n </div>\n <div *ngIf=\"successMessage && isScanValid\" class=\"success-message-container\">\n <mat-icon class=\"large-icon\" color=\"primary\">check_circle</mat-icon>\n </div>\n</div>", styles: [".loading-spinner{display:flex;justify-content:center;align-items:center;margin-top:20px}.success-message-container{display:flex;align-items:center;gap:8px;color:green;font-weight:700;justify-content:center}.large-icon{font-size:36px;width:36px;height:36px}.scan-id-container{max-width:600px;margin:0 auto 16px;padding:20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a;text-align:center}.scan-id-container .card-selection-container{margin-bottom:20px}.scan-id-container .card-options{display:flex;justify-content:space-around}.scan-id-container .card-option{border:2px solid transparent;border-radius:10px;cursor:pointer;padding:10px;text-align:center;transition:border-color .3s,background-color .3s}.scan-id-container .card-option:hover{border-color:#3f51b5}.scan-id-container .card-option img{max-width:100%;height:auto;margin-bottom:10px}.scan-id-container .card-option p{font-weight:700}.scan-id-container .card-option.selected{border-color:#3f51b5;background-color:#e3f2fd;box-shadow:0 0 10px #0000001a}.scan-id-container .title{font-size:24px;font-weight:700;color:#333;margin-bottom:10px}.scan-id-container .description{font-size:16px;color:#666;margin-bottom:20px}.scan-id-container .actions{display:flex;flex-direction:column;gap:20px}.scan-id-container .actions .upload-button-container,.scan-id-container .actions .take-photo-container{display:flex;flex-direction:column;align-items:center}.scan-id-container .actions .upload-button-container button,.scan-id-container .actions .take-photo-container button{display:flex;align-items:center;gap:8px;padding:10px 20px;font-size:16px;font-weight:600;border-radius:50px;transition:background-color .3s}.scan-id-container .actions .upload-button-container button mat-icon,.scan-id-container .actions .take-photo-container button mat-icon{font-size:20px}.scan-id-container .actions .upload-button-container button:hover,.scan-id-container .actions .take-photo-container button:hover{background-color:#0069c0}.scan-id-container .actions .upload-button-container .error-message,.scan-id-container .actions .take-photo-container .error-message{color:#e53935;font-size:14px;margin-top:10px}.scan-id-container .actions .video-preview{margin-top:20px;border-radius:8px;box-shadow:0 2px 4px #0003}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
268
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyScanIdComponent, deps: [{ token: i1.ApplicationDataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
269
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlyScanIdComponent, selector: "app-formly-scan-id", viewQueries: [{ propertyName: "fileInputFront", first: true, predicate: ["fileInputFront"], descendants: true }, { propertyName: "fileInputBack", first: true, predicate: ["fileInputBack"], descendants: true }, { propertyName: "videoElement", first: true, predicate: ["videoElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"scan-id-container\">\n <h2 class=\"title\">{{ props[\"name\"] }}</h2>\n <p class=\"description\">{{ props[\"description\"] }}</p>\n\n <!-- Selection Step -->\n <div class=\"card-selection-container\">\n <div class=\"card-options\">\n <div class=\"card-option\"\n [class.selected]=\"oldIdCard === true && cardTypeSelected\"\n (click)=\"selectCardType(true)\">\n <img src=\"assets/images/origin-form/old-id-card.png\" alt=\"Old ID Card\" />\n </div>\n <div class=\"card-option\"\n [class.selected]=\"oldIdCard === false && cardTypeSelected\"\n (click)=\"selectCardType(false)\">\n <img src=\"assets/images/origin-form/new-id-card.png\" alt=\"New ID Card\" />\n </div>\n </div>\n </div>\n\n <div *ngIf=\"isLoading\" class=\"loading-spinner\">\n <mat-spinner></mat-spinner>\n </div>\n\n <div *ngIf=\"cardTypeSelected && !isLoading\" class=\"actions\">\n <!-- Step 1: Upload Front Photo -->\n <div *ngIf=\"!frontPhotoUploaded\" class=\"upload-button-container\">\n <p>{{ props['labels'].uploadFrontPrompt || 'Please upload the front photo of your ID card.' }}</p>\n <input type=\"file\" #fileInputFront (change)=\"onFileSelected($event, true)\" hidden />\n <button mat-flat-button color=\"primary\" (click)=\"fileInputFront.click()\">\n <mat-icon>cloud_upload</mat-icon>\n {{ fileNameFront ? fileNameFront : props['labels'].uploadFileButtonTranslations || 'Upload Front Photo' }}\n </button>\n <div *ngIf=\"fileError\" class=\"error-message\">\n {{ fileError }}\n </div>\n </div>\n\n <!-- Step 2: Upload Back Photo (Only for New ID Cards) -->\n <div *ngIf=\"frontPhotoUploaded && !oldIdCard && !isLoading\" class=\"upload-button-container\">\n <p>{{ props['labels'].uploadBackPrompt || 'Please upload the back photo of your ID card.' }}</p>\n <input type=\"file\" #fileInputBack (change)=\"onFileSelected($event, false)\" hidden />\n <button mat-flat-button color=\"primary\" (click)=\"fileInputBack.click()\">\n <mat-icon>cloud_upload</mat-icon>\n {{ fileNameBack ? fileNameBack : props['labels'].uploadFileButtonTranslations || 'Upload Back Photo' }}\n </button>\n <div *ngIf=\"fileError\" class=\"error-message\">\n {{ fileError }}\n </div>\n </div> \n <!-- Take Photo Button (Optional) -->\n <div *ngIf=\"props['config'].showTakePictureButton\" class=\"take-photo-container\">\n <button mat-flat-button color=\"accent\" (click)=\"takePicture()\">\n <mat-icon>camera_alt</mat-icon>\n {{ props['labels'].takePictureButtonTranslations || 'Take a photo' }}\n </button>\n <video #videoElement *ngIf=\"videoStream\" width=\"100%\" class=\"video-preview\" autoplay></video>\n\n <!-- Take Front Photo -->\n <button mat-flat-button color=\"warn\" *ngIf=\"videoStream && !frontPhotoUploaded\" (click)=\"capturePhoto(true)\">\n <mat-icon>photo_camera</mat-icon>\n {{ this.props['errorMessages']?.frontId || 'Take a photo' }}\n </button>\n\n <!-- Take Back Photo -->\n <button mat-flat-button color=\"warn\" *ngIf=\"videoStream && frontPhotoUploaded && !oldIdCard\" (click)=\"capturePhoto(false)\">\n <mat-icon>photo_camera</mat-icon>\n {{ this.props['errorMessages']?.backId || 'Take a photo' }}\n </button>\n </div>\n </div>\n <div *ngIf=\"successMessage && isScanValid\" class=\"success-message-container\">\n <mat-icon class=\"large-icon\" color=\"primary\">check_circle</mat-icon>\n </div>\n</div>", styles: [".loading-spinner{display:flex;justify-content:center;align-items:center;margin-top:20px}.success-message-container{display:flex;align-items:center;gap:8px;color:green;font-weight:700;justify-content:center}.large-icon{font-size:36px;width:36px;height:36px}.scan-id-container{max-width:600px;margin:0 auto 16px;padding:20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a;text-align:center}.scan-id-container .card-selection-container{margin-bottom:20px}.scan-id-container .card-options{display:flex;justify-content:space-around}.scan-id-container .card-option{border:2px solid transparent;border-radius:10px;cursor:pointer;padding:10px;text-align:center;transition:border-color .3s,background-color .3s}.scan-id-container .card-option:hover{border-color:#3f51b5}.scan-id-container .card-option img{max-width:100%;height:auto;margin-bottom:10px}.scan-id-container .card-option p{font-weight:700}.scan-id-container .card-option.selected{border-color:#3f51b5;background-color:#e3f2fd;box-shadow:0 0 10px #0000001a}.scan-id-container .title{font-size:24px;font-weight:700;color:#333;margin-bottom:10px}.scan-id-container .description{font-size:16px;color:#666;margin-bottom:20px}.scan-id-container .actions{display:flex;flex-direction:column;gap:20px}.scan-id-container .actions .upload-button-container,.scan-id-container .actions .take-photo-container{display:flex;flex-direction:column;align-items:center}.scan-id-container .actions .upload-button-container button,.scan-id-container .actions .take-photo-container button{display:flex;align-items:center;gap:8px;padding:10px 20px;font-size:16px;font-weight:600;border-radius:50px;transition:background-color .3s}.scan-id-container .actions .upload-button-container button mat-icon,.scan-id-container .actions .take-photo-container button mat-icon{font-size:20px}.scan-id-container .actions .upload-button-container button:hover,.scan-id-container .actions .take-photo-container button:hover{background-color:#0069c0}.scan-id-container .actions .upload-button-container .error-message,.scan-id-container .actions .take-photo-container .error-message{color:#e53935;font-size:14px;margin-top:10px}.scan-id-container .actions .video-preview{margin-top:20px;border-radius:8px;box-shadow:0 2px 4px #0003}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
270
270
  }
271
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyScanIdComponent, decorators: [{
271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyScanIdComponent, decorators: [{
272
272
  type: Component,
273
273
  args: [{ selector: 'app-formly-scan-id', template: "<div class=\"scan-id-container\">\n <h2 class=\"title\">{{ props[\"name\"] }}</h2>\n <p class=\"description\">{{ props[\"description\"] }}</p>\n\n <!-- Selection Step -->\n <div class=\"card-selection-container\">\n <div class=\"card-options\">\n <div class=\"card-option\"\n [class.selected]=\"oldIdCard === true && cardTypeSelected\"\n (click)=\"selectCardType(true)\">\n <img src=\"assets/images/origin-form/old-id-card.png\" alt=\"Old ID Card\" />\n </div>\n <div class=\"card-option\"\n [class.selected]=\"oldIdCard === false && cardTypeSelected\"\n (click)=\"selectCardType(false)\">\n <img src=\"assets/images/origin-form/new-id-card.png\" alt=\"New ID Card\" />\n </div>\n </div>\n </div>\n\n <div *ngIf=\"isLoading\" class=\"loading-spinner\">\n <mat-spinner></mat-spinner>\n </div>\n\n <div *ngIf=\"cardTypeSelected && !isLoading\" class=\"actions\">\n <!-- Step 1: Upload Front Photo -->\n <div *ngIf=\"!frontPhotoUploaded\" class=\"upload-button-container\">\n <p>{{ props['labels'].uploadFrontPrompt || 'Please upload the front photo of your ID card.' }}</p>\n <input type=\"file\" #fileInputFront (change)=\"onFileSelected($event, true)\" hidden />\n <button mat-flat-button color=\"primary\" (click)=\"fileInputFront.click()\">\n <mat-icon>cloud_upload</mat-icon>\n {{ fileNameFront ? fileNameFront : props['labels'].uploadFileButtonTranslations || 'Upload Front Photo' }}\n </button>\n <div *ngIf=\"fileError\" class=\"error-message\">\n {{ fileError }}\n </div>\n </div>\n\n <!-- Step 2: Upload Back Photo (Only for New ID Cards) -->\n <div *ngIf=\"frontPhotoUploaded && !oldIdCard && !isLoading\" class=\"upload-button-container\">\n <p>{{ props['labels'].uploadBackPrompt || 'Please upload the back photo of your ID card.' }}</p>\n <input type=\"file\" #fileInputBack (change)=\"onFileSelected($event, false)\" hidden />\n <button mat-flat-button color=\"primary\" (click)=\"fileInputBack.click()\">\n <mat-icon>cloud_upload</mat-icon>\n {{ fileNameBack ? fileNameBack : props['labels'].uploadFileButtonTranslations || 'Upload Back Photo' }}\n </button>\n <div *ngIf=\"fileError\" class=\"error-message\">\n {{ fileError }}\n </div>\n </div> \n <!-- Take Photo Button (Optional) -->\n <div *ngIf=\"props['config'].showTakePictureButton\" class=\"take-photo-container\">\n <button mat-flat-button color=\"accent\" (click)=\"takePicture()\">\n <mat-icon>camera_alt</mat-icon>\n {{ props['labels'].takePictureButtonTranslations || 'Take a photo' }}\n </button>\n <video #videoElement *ngIf=\"videoStream\" width=\"100%\" class=\"video-preview\" autoplay></video>\n\n <!-- Take Front Photo -->\n <button mat-flat-button color=\"warn\" *ngIf=\"videoStream && !frontPhotoUploaded\" (click)=\"capturePhoto(true)\">\n <mat-icon>photo_camera</mat-icon>\n {{ this.props['errorMessages']?.frontId || 'Take a photo' }}\n </button>\n\n <!-- Take Back Photo -->\n <button mat-flat-button color=\"warn\" *ngIf=\"videoStream && frontPhotoUploaded && !oldIdCard\" (click)=\"capturePhoto(false)\">\n <mat-icon>photo_camera</mat-icon>\n {{ this.props['errorMessages']?.backId || 'Take a photo' }}\n </button>\n </div>\n </div>\n <div *ngIf=\"successMessage && isScanValid\" class=\"success-message-container\">\n <mat-icon class=\"large-icon\" color=\"primary\">check_circle</mat-icon>\n </div>\n</div>", styles: [".loading-spinner{display:flex;justify-content:center;align-items:center;margin-top:20px}.success-message-container{display:flex;align-items:center;gap:8px;color:green;font-weight:700;justify-content:center}.large-icon{font-size:36px;width:36px;height:36px}.scan-id-container{max-width:600px;margin:0 auto 16px;padding:20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a;text-align:center}.scan-id-container .card-selection-container{margin-bottom:20px}.scan-id-container .card-options{display:flex;justify-content:space-around}.scan-id-container .card-option{border:2px solid transparent;border-radius:10px;cursor:pointer;padding:10px;text-align:center;transition:border-color .3s,background-color .3s}.scan-id-container .card-option:hover{border-color:#3f51b5}.scan-id-container .card-option img{max-width:100%;height:auto;margin-bottom:10px}.scan-id-container .card-option p{font-weight:700}.scan-id-container .card-option.selected{border-color:#3f51b5;background-color:#e3f2fd;box-shadow:0 0 10px #0000001a}.scan-id-container .title{font-size:24px;font-weight:700;color:#333;margin-bottom:10px}.scan-id-container .description{font-size:16px;color:#666;margin-bottom:20px}.scan-id-container .actions{display:flex;flex-direction:column;gap:20px}.scan-id-container .actions .upload-button-container,.scan-id-container .actions .take-photo-container{display:flex;flex-direction:column;align-items:center}.scan-id-container .actions .upload-button-container button,.scan-id-container .actions .take-photo-container button{display:flex;align-items:center;gap:8px;padding:10px 20px;font-size:16px;font-weight:600;border-radius:50px;transition:background-color .3s}.scan-id-container .actions .upload-button-container button mat-icon,.scan-id-container .actions .take-photo-container button mat-icon{font-size:20px}.scan-id-container .actions .upload-button-container button:hover,.scan-id-container .actions .take-photo-container button:hover{background-color:#0069c0}.scan-id-container .actions .upload-button-container .error-message,.scan-id-container .actions .take-photo-container .error-message{color:#e53935;font-size:14px;margin-top:10px}.scan-id-container .actions .video-preview{margin-top:20px;border-radius:8px;box-shadow:0 2px 4px #0003}\n"] }]
274
274
  }], ctorParameters: () => [{ type: i1.ApplicationDataService }, { type: i0.ChangeDetectorRef }], propDecorators: { fileInputFront: [{
@@ -5,7 +5,7 @@ import { BaseFormlyStepComponent } from '../baseFormlyStepComponent';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "../../origin-form-auth.service";
7
7
  import * as i2 from "../../services/dialog.service";
8
- import * as i3 from "sign-lib";
8
+ import * as i3 from "@qbs-origin/sign-lib";
9
9
  export class FormlySignComponent extends BaseFormlyStepComponent {
10
10
  constructor(authService, cdr, dialog) {
11
11
  super(cdr);
@@ -160,14 +160,14 @@ export class FormlySignComponent extends BaseFormlyStepComponent {
160
160
  this.config = null;
161
161
  console.log('🔷 FormlySignComponent: Component cleanup completed');
162
162
  }
163
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlySignComponent, deps: [{ token: i1.OriginFormAuthService }, { token: i0.ChangeDetectorRef }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
164
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlySignComponent, selector: "formly-sign", viewQueries: [{ propertyName: "signLib", first: true, predicate: ["signLib"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<lib-sign #signLib [config]=\"config\" (event)=\"libEvent($event)\"> </lib-sign>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: i3.SignLibComponent, selector: "lib-sign", inputs: ["config", "instanceId"], outputs: ["event"] }] }); }
163
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlySignComponent, deps: [{ token: i1.OriginFormAuthService }, { token: i0.ChangeDetectorRef }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
164
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlySignComponent, selector: "formly-sign", viewQueries: [{ propertyName: "signLib", first: true, predicate: ["signLib"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<lib-sign #signLib [config]=\"config\" (event)=\"libEvent($event)\"> </lib-sign>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: i3.SignLibComponent, selector: "lib-sign", inputs: ["config", "instanceId"], outputs: ["event"] }] }); }
165
165
  }
166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlySignComponent, decorators: [{
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlySignComponent, decorators: [{
167
167
  type: Component,
168
168
  args: [{ selector: 'formly-sign', template: "<lib-sign #signLib [config]=\"config\" (event)=\"libEvent($event)\"> </lib-sign>\n", styles: [":host{display:block}\n"] }]
169
169
  }], ctorParameters: () => [{ type: i1.OriginFormAuthService }, { type: i0.ChangeDetectorRef }, { type: i2.DialogService }], propDecorators: { signLib: [{
170
170
  type: ViewChild,
171
171
  args: ['signLib']
172
172
  }] } });
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LXNpZ24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXNpZ24vZm9ybWx5LXNpZ24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXNpZ24vZm9ybWx5LXNpZ24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUc1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7O0FBT3JFLE1BQU0sT0FBTyxtQkFDWCxTQUFRLHVCQUF1QjtJQVEvQixZQUNTLFdBQWtDLEVBQ3pDLEdBQXNCLEVBQ2QsTUFBcUI7UUFFN0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBSkosZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBRWpDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFQL0IsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUNwQixxQkFBZ0IsR0FBOEIsRUFBRSxDQUFDO1FBRXpELGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBT3RDLENBQUM7SUFFUSxNQUFNLEtBQUksQ0FBQztJQUVYLEtBQUssQ0FBQyxtQkFBbUI7UUFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMvRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lB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O1FBRW5CLE9BQU8sQ0FBQyxHQUFHLENBQUMscURBQXFELENBQUMsQ0FBQztJQUNyRSxDQUFDOytHQTFNVSxtQkFBbUI7bUdBQW5CLG1CQUFtQiw4S0NwQmhDLG9GQUNBOzs0RkRtQmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGFBQWE7c0pBUUQsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBWaWV3Q2hpbGQsXG4gIGluamVjdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaWduTGliQ29tcG9uZW50IH0gZnJvbSAnc2lnbi1saWInO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9vdGhlcnMvY29uZmlnLXNlcnZpY2UnO1xuaW1wb3J0IHsgT3JpZ2luRm9ybUF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vb3JpZ2luLWZvcm0tYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBGbHV4VHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9mb3Jtcy5tb2RlbCc7XG5pbXBvcnQgeyBCYXNlRm9ybWx5U3RlcENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2VGb3JtbHlTdGVwQ29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm9ybWx5LXNpZ24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LXNpZ24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZm9ybWx5LXNpZ24uY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlTaWduQ29tcG9uZW50XG4gIGV4dGVuZHMgQmFzZUZvcm1seVN0ZXBDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3lcbntcbiAgQFZpZXdDaGlsZCgnc2lnbkxpYicpIHNpZ25MaWI6IFNpZ25MaWJDb21wb25lbnQ7XG4gIGNhblByb2NlZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2lnbkJ1dHRvblN0eWxlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIHB1YmxpYyBjb25maWc6IGFueTtcbiAgY29uZmlnU2VydmljZSA9IGluamVjdChDb25maWdTZXJ2aWNlKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGF1dGhTZXJ2aWNlOiBPcmlnaW5Gb3JtQXV0aFNlcnZpY2UsXG4gICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGRpYWxvZzogRGlhbG9nU2VydmljZVxuICApIHtcbiAgICBzdXBlcihjZHIpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25Jbml0KCkge31cblxuICBvdmVycmlkZSBhc3luYyBvblBhZ2VTZWxlY3RlZEFzeW5jKCkge1xuICAgIGNvbnN0IHN0eWxlT2JqID0gdGhpcy5wcm9wcz8uWydkZXNpZ24nXT8uWycuYnV0dG9uLW90cGFjdGlvbiddO1xuICAgIGlmIChzdHlsZU9iaikge1xuICAgICAgY29uc3QgY2FtZWxDYXNlU3R5bGU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKHN0eWxlT2JqKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgY29uc3QgY2FtZWxLZXkgPSBrZXkucmVwbGFjZSgvLShbYS16XSkvZywgKGcpID0+IGdbMV0udG9VcHBlckNhc2UoKSk7XG4gICAgICAgIGNhbWVsQ2FzZVN0eWxlW2NhbWVsS2V5XSA9IHN0eWxlT2JqW2tleV07XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3NpZ25CdXR0b25TdHlsZSA9IGNhbWVsQ2FzZVN0eWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zaWduQnV0dG9uU3R5bGUgPSB7fTtcbiAgICB9XG4gICAgLy8gUmVzZXQgY29tcG9uZW50IHN0YXRlIHdoZW4gcGFnZSBpcyBzZWxlY3RlZFxuICAgIHRoaXMuY2FuUHJvY2VlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5jb25maWcgPSBhd2FpdCB0aGlzLmdldENvbmZpZygpO1xuICAgIHRoaXMuYWRkUGhvbmVOdW1iZXJ0b0NvbmZpZygpO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIFNob3dDb25maXJtOiB0aGlzLnN0ZXBEYXRhLmNvbmZpZy5zaG93Q29uZmlybSA/PyBmYWxzZSxcbiAgICAgIFNpZ25Nb2RlOiB0aGlzLnN0ZXBEYXRhLmNvbmZpZy5jb21wYW55U2lnbiA/PyBmYWxzZSA/ICdib3RoJyA6ICdjbGllbnQnLFxuICAgICAgLi4uKE9iamVjdC5rZXlzKHRoaXMuc2lnbkJ1dHRvblN0eWxlKS5sZW5ndGggPiAwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgU3R5bGVzOiB7XG4gICAgICAgICAgICAgIC4uLih0aGlzLmNvbmZpZy5TdHlsZXMgfHwge30pLFxuICAgICAgICAgICAgICBidXR0b25TdHlsZXM6IHRoaXMuc2lnbkJ1dHRvblN0eWxlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5jb25maWcuU3R5bGVzPy5idXR0b25TdHlsZXMpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBg8J+nqyBGb3JtbHlTaWduQ29tcG9uZW50OiBTdHlsZXMgZm9yIHNpZ24gYnV0dG9uIGFyZSBzZW50OmAsXG4gICAgICAgIHRoaXMuY29uZmlnLlN0eWxlcy5idXR0b25TdHlsZXNcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZygnY29uZmlnJywgdGhpcy5jb25maWcpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYPCflLcgRm9ybWx5U2lnbkNvbXBvbmVudDogSW5pdGlhbGl6aW5nIHNpZ24gY29tcG9uZW50IGZvciBzdGVwICR7dGhpcy5zdGVwRGF0YS5pZGVudGlmaWVyfWBcbiAgICApO1xuXG4gICAgLy92ZXJ5IGltcG9ydGFudCB0byB0cmlnZ2VyIGlucHV0IHBhcmFtZXRlciBwYXNzIHRvIFNpZ25MaWIgY29tcG9uZW50XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgLy8gV2FpdCBhIGJpdCBmb3IgVmlld0NoaWxkIHRvIGJlIGF2YWlsYWJsZSBhbmQgdGhlbiBpbml0aWFsaXplXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgNTApKTtcblxuICAgIC8vIEVuc3VyZSBTaWduTGliQ29tcG9uZW50IGlzIHByb3Blcmx5IGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMuc2lnbkxpYikge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGDwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IFNpZ25MaWJDb21wb25lbnQgZm91bmQsIGNhbGxpbmcgbmdPbkluaXQgZm9yIHN0ZXAgJHt0aGlzLnN0ZXBEYXRhLmlkZW50aWZpZXJ9YFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2lnbkxpYi5uZ09uSW5pdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGDwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IFNpZ25MaWJDb21wb25lbnQgbm90IGZvdW5kIGZvciBzdGVwICR7dGhpcy5zdGVwRGF0YS5pZGVudGlmaWVyfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cnlBc3luYygpIHtcbiAgICBhd2FpdCB0aGlzLm9uUGFnZVNlbGVjdGVkQXN5bmMoKTtcbiAgfVxuXG4gIGFzeW5jIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgQXBwRGF0YUlkOiB0aGlzLnByb3BzWydhcHBEYXRhSWQnXSxcbiAgICAgIFN0ZXBJZDogdGhpcy5zdGVwRGF0YS5pZGVudGlmaWVyLFxuICAgICAgVG9rZW46IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VG9rZW4oKSxcbiAgICAgIEJhc2VVcmw6IHRoaXMuY29uZmlnU2VydmljZS5yZWFkQ29uZmlnKCkuYmFzZVVybEdhdGV3YXksXG4gICAgICBBdXRvU2lnbjogdGhpcy5zdGVwRGF0YS5pc1Zpc2libGUgPT09IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZFBob25lTnVtYmVydG9Db25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgcGhvbmVLZXkgPSB0aGlzLnN0ZXBEYXRhLmNvbmZpZy5jb21wb25lbnRDb2xsZWN0ZWQ7XG5cbiAgICBpZiAocGhvbmVLZXkpIHtcbiAgICAgIGxldCBwaG9uZU51bWJlciA9IG51bGw7XG5cbiAgICAgIC8vIEdldCByZWZlcmVuY2VzIHRvIHBhcmVudCBmb3JtIGFuZCBtb2RlbCBmcm9tIHByb3BzXG4gICAgICBjb25zdCBwYXJlbnRGb3JtID0gdGhpcy5wcm9wc1sncGFyZW50Rm9ybSddO1xuICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLnByb3BzWydnZXRNb2RlbCddKCk7XG4gICAgICBjb25zdCBmbHV4ID0gdGhpcy5wcm9wc1snZmx1eCddO1xuXG4gICAgICAvLyBGaXJzdCB0cnkgdG8gZ2V0IGZyb20gcGFyZW50IGZvcm0gY29udHJvbCAoZm9yIHZhbGlkYXRlZCBwaG9uZSBudW1iZXJzKVxuICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBwYXJlbnRGb3JtPy5nZXQocGhvbmVLZXkpO1xuICAgICAgcGhvbmVOdW1iZXIgPSBmb3JtQ29udHJvbD8udmFsdWU7XG5cbiAgICAgIC8vIElmIG5vdCBmb3VuZCBpbiBmb3JtIGNvbnRyb2wsIHRyeSBmcm9tIG1vZGVsXG4gICAgICBpZiAoIXBob25lTnVtYmVyICYmIG1vZGVsICYmIG1vZGVsW3Bob25lS2V5XSkge1xuICAgICAgICBwaG9uZU51bWJlciA9IG1vZGVsW3Bob25lS2V5XTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwaG9uZU51bWJlciAmJiBwaG9uZUtleSA9PT0gJ3ZhbGlkYXRlZC1waG9uZScgJiYgZmx1eCkge1xuICAgICAgICBjb25zdCBwaG9uZVN0ZXAgPSBmbHV4LmZpbmQoXG4gICAgICAgICAgKHN0ZXA6IGFueSkgPT4gc3RlcC50eXBlID09PSBGbHV4VHlwZS5QaG9uZVxuICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcGhvbmVTdGVwICYmXG4gICAgICAgICAgcGhvbmVTdGVwLmNvbmZpZyAmJlxuICAgICAgICAgIHBob25lU3RlcC5jb25maWcuY29tcG9uZW50Q29sbGVjdGVkXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsUGhvbmVLZXkgPSBwaG9uZVN0ZXAuY29uZmlnLmNvbXBvbmVudENvbGxlY3RlZDtcbiAgICAgICAgICAvLyBUcnkgZnJvbSBwYXJlbnQgZm9ybSBmaXJzdCwgdGhlbiBtb2RlbFxuICAgICAgICAgIHBob25lTnVtYmVyID1cbiAgICAgICAgICAgIHBhcmVudEZvcm0/LmdldChvcmlnaW5hbFBob25lS2V5KT8udmFsdWUgfHxcbiAgICAgICAgICAgIChtb2RlbCAmJiBtb2RlbFtvcmlnaW5hbFBob25lS2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBob25lTnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgICAgIFBob25lTnVtYmVyOiBwaG9uZU51bWJlcixcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAn8J+UtyBGb3JtbHlTaWduQ29tcG9uZW50OiBObyBwaG9uZSBudW1iZXIgZm91bmQgZm9yIGtleTonLFxuICAgICAgICAgIHBob25lS2V5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ/CflLcgRm9ybWx5U2lnbkNvbXBvbmVudDogTm8gY29tcG9uZW50Q29sbGVjdGVkIGtleSBmb3VuZCBpbiBzdGVwIGNvbmZpZydcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgY2FuQWR2YW5jZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuUHJvY2VlZCkge1xuICAgICAgdGhpcy5kaWFsb2cucG9wRXJyb3IoJ3NpZ25Db21wb25lbnQudmlld2ZpbGVzLndhaXRGb3JTaWduJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbGliRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCAmJiBldmVudC50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2VzcycpIHtcbiAgICAgIHRoaXMuY2FuUHJvY2VlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMub25FdmVudChldmVudCk7XG4gIH1cblxuICBnZXQgc2lnbkJ1dHRvblN0eWxlKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLl9zaWduQnV0dG9uU3R5bGU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICfwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IERlc3Ryb3lpbmcgY29tcG9uZW50IGFuZCBjbGVhbmluZyB1cCBTaWduTGliQ29tcG9uZW50J1xuICAgICk7XG5cbiAgICAvLyBDbGVhbnVwIFNpZ25MaWJDb21wb25lbnQgaWYgaXQgZXhpc3RzXG4gICAgaWYgKHRoaXMuc2lnbkxpYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQ2FsbCBkZXN0cm95IG1ldGhvZCBpZiBpdCBleGlzdHMgKGNoZWNrIGZvciB2YXJpb3VzIHBvc3NpYmxlIGNsZWFudXAgbWV0aG9kcylcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5zaWduTGliIGFzIGFueSkubmdPbkRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAodGhpcy5zaWduTGliIGFzIGFueSkubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKHRoaXMuc2lnbkxpYiBhcyBhbnkpLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAodGhpcy5zaWduTGliIGFzIGFueSkuZGVzdHJveSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAodGhpcy5zaWduTGliIGFzIGFueSkuY2xlYW51cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICh0aGlzLnNpZ25MaWIgYXMgYW55KS5jbGVhbnVwKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbGVhciBhbnkgcmVmZXJlbmNlc1xuICAgICAgICAodGhpcy5zaWduTGliIGFzIGFueSkgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICfwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IEVycm9yIGR1cmluZyBTaWduTGliQ29tcG9uZW50IGNsZWFudXA6JyxcbiAgICAgICAgICBlcnJvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc2V0IGNvbXBvbmVudCBzdGF0ZVxuICAgIHRoaXMuY2FuUHJvY2VlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29uZmlnID0gbnVsbDtcblxuICAgIGNvbnNvbGUubG9nKCfwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IENvbXBvbmVudCBjbGVhbnVwIGNvbXBsZXRlZCcpO1xuICB9XG59XG4iLCI8bGliLXNpZ24gI3NpZ25MaWIgW2NvbmZpZ109XCJjb25maWdcIiAoZXZlbnQpPVwibGliRXZlbnQoJGV2ZW50KVwiPiA8L2xpYi1zaWduPlxuIl19
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LXNpZ24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXNpZ24vZm9ybWx5LXNpZ24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXNpZ24vZm9ybWx5LXNpZ24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUc1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7O0FBT3JFLE1BQU0sT0FBTyxtQkFDWCxTQUFRLHVCQUF1QjtJQVEvQixZQUNTLFdBQWtDLEVBQ3pDLEdBQXNCLEVBQ2QsTUFBcUI7UUFFN0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBSkosZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBRWpDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFQL0IsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUNwQixxQkFBZ0IsR0FBOEIsRUFBRSxDQUFDO1FBRXpELGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBT3RDLENBQUM7SUFFUSxNQUFNLEtBQUksQ0FBQztJQUVYLEtBQUssQ0FBQyxtQkFBbUI7UUFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMvRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lB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O1FBRW5CLE9BQU8sQ0FBQyxHQUFHLENBQUMscURBQXFELENBQUMsQ0FBQztJQUNyRSxDQUFDOytHQTFNVSxtQkFBbUI7bUdBQW5CLG1CQUFtQiw4S0NwQmhDLG9GQUNBOzs0RkRtQmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGFBQWE7c0pBUUQsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBWaWV3Q2hpbGQsXG4gIGluamVjdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaWduTGliQ29tcG9uZW50IH0gZnJvbSAnQHFicy1vcmlnaW4vc2lnbi1saWInO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9vdGhlcnMvY29uZmlnLXNlcnZpY2UnO1xuaW1wb3J0IHsgT3JpZ2luRm9ybUF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vb3JpZ2luLWZvcm0tYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBGbHV4VHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9mb3Jtcy5tb2RlbCc7XG5pbXBvcnQgeyBCYXNlRm9ybWx5U3RlcENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2VGb3JtbHlTdGVwQ29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm9ybWx5LXNpZ24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LXNpZ24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZm9ybWx5LXNpZ24uY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlTaWduQ29tcG9uZW50XG4gIGV4dGVuZHMgQmFzZUZvcm1seVN0ZXBDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3lcbntcbiAgQFZpZXdDaGlsZCgnc2lnbkxpYicpIHNpZ25MaWI6IFNpZ25MaWJDb21wb25lbnQ7XG4gIGNhblByb2NlZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2lnbkJ1dHRvblN0eWxlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIHB1YmxpYyBjb25maWc6IGFueTtcbiAgY29uZmlnU2VydmljZSA9IGluamVjdChDb25maWdTZXJ2aWNlKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGF1dGhTZXJ2aWNlOiBPcmlnaW5Gb3JtQXV0aFNlcnZpY2UsXG4gICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGRpYWxvZzogRGlhbG9nU2VydmljZVxuICApIHtcbiAgICBzdXBlcihjZHIpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25Jbml0KCkge31cblxuICBvdmVycmlkZSBhc3luYyBvblBhZ2VTZWxlY3RlZEFzeW5jKCkge1xuICAgIGNvbnN0IHN0eWxlT2JqID0gdGhpcy5wcm9wcz8uWydkZXNpZ24nXT8uWycuYnV0dG9uLW90cGFjdGlvbiddO1xuICAgIGlmIChzdHlsZU9iaikge1xuICAgICAgY29uc3QgY2FtZWxDYXNlU3R5bGU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKHN0eWxlT2JqKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgY29uc3QgY2FtZWxLZXkgPSBrZXkucmVwbGFjZSgvLShbYS16XSkvZywgKGcpID0+IGdbMV0udG9VcHBlckNhc2UoKSk7XG4gICAgICAgIGNhbWVsQ2FzZVN0eWxlW2NhbWVsS2V5XSA9IHN0eWxlT2JqW2tleV07XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3NpZ25CdXR0b25TdHlsZSA9IGNhbWVsQ2FzZVN0eWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zaWduQnV0dG9uU3R5bGUgPSB7fTtcbiAgICB9XG4gICAgLy8gUmVzZXQgY29tcG9uZW50IHN0YXRlIHdoZW4gcGFnZSBpcyBzZWxlY3RlZFxuICAgIHRoaXMuY2FuUHJvY2VlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5jb25maWcgPSBhd2FpdCB0aGlzLmdldENvbmZpZygpO1xuICAgIHRoaXMuYWRkUGhvbmVOdW1iZXJ0b0NvbmZpZygpO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIFNob3dDb25maXJtOiB0aGlzLnN0ZXBEYXRhLmNvbmZpZy5zaG93Q29uZmlybSA/PyBmYWxzZSxcbiAgICAgIFNpZ25Nb2RlOiB0aGlzLnN0ZXBEYXRhLmNvbmZpZy5jb21wYW55U2lnbiA/PyBmYWxzZSA/ICdib3RoJyA6ICdjbGllbnQnLFxuICAgICAgLi4uKE9iamVjdC5rZXlzKHRoaXMuc2lnbkJ1dHRvblN0eWxlKS5sZW5ndGggPiAwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgU3R5bGVzOiB7XG4gICAgICAgICAgICAgIC4uLih0aGlzLmNvbmZpZy5TdHlsZXMgfHwge30pLFxuICAgICAgICAgICAgICBidXR0b25TdHlsZXM6IHRoaXMuc2lnbkJ1dHRvblN0eWxlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5jb25maWcuU3R5bGVzPy5idXR0b25TdHlsZXMpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBg8J+nqyBGb3JtbHlTaWduQ29tcG9uZW50OiBTdHlsZXMgZm9yIHNpZ24gYnV0dG9uIGFyZSBzZW50OmAsXG4gICAgICAgIHRoaXMuY29uZmlnLlN0eWxlcy5idXR0b25TdHlsZXNcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZygnY29uZmlnJywgdGhpcy5jb25maWcpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYPCflLcgRm9ybWx5U2lnbkNvbXBvbmVudDogSW5pdGlhbGl6aW5nIHNpZ24gY29tcG9uZW50IGZvciBzdGVwICR7dGhpcy5zdGVwRGF0YS5pZGVudGlmaWVyfWBcbiAgICApO1xuXG4gICAgLy92ZXJ5IGltcG9ydGFudCB0byB0cmlnZ2VyIGlucHV0IHBhcmFtZXRlciBwYXNzIHRvIFNpZ25MaWIgY29tcG9uZW50XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgLy8gV2FpdCBhIGJpdCBmb3IgVmlld0NoaWxkIHRvIGJlIGF2YWlsYWJsZSBhbmQgdGhlbiBpbml0aWFsaXplXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgNTApKTtcblxuICAgIC8vIEVuc3VyZSBTaWduTGliQ29tcG9uZW50IGlzIHByb3Blcmx5IGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMuc2lnbkxpYikge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGDwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IFNpZ25MaWJDb21wb25lbnQgZm91bmQsIGNhbGxpbmcgbmdPbkluaXQgZm9yIHN0ZXAgJHt0aGlzLnN0ZXBEYXRhLmlkZW50aWZpZXJ9YFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2lnbkxpYi5uZ09uSW5pdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGDwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IFNpZ25MaWJDb21wb25lbnQgbm90IGZvdW5kIGZvciBzdGVwICR7dGhpcy5zdGVwRGF0YS5pZGVudGlmaWVyfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cnlBc3luYygpIHtcbiAgICBhd2FpdCB0aGlzLm9uUGFnZVNlbGVjdGVkQXN5bmMoKTtcbiAgfVxuXG4gIGFzeW5jIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgQXBwRGF0YUlkOiB0aGlzLnByb3BzWydhcHBEYXRhSWQnXSxcbiAgICAgIFN0ZXBJZDogdGhpcy5zdGVwRGF0YS5pZGVudGlmaWVyLFxuICAgICAgVG9rZW46IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VG9rZW4oKSxcbiAgICAgIEJhc2VVcmw6IHRoaXMuY29uZmlnU2VydmljZS5yZWFkQ29uZmlnKCkuYmFzZVVybEdhdGV3YXksXG4gICAgICBBdXRvU2lnbjogdGhpcy5zdGVwRGF0YS5pc1Zpc2libGUgPT09IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZFBob25lTnVtYmVydG9Db25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgcGhvbmVLZXkgPSB0aGlzLnN0ZXBEYXRhLmNvbmZpZy5jb21wb25lbnRDb2xsZWN0ZWQ7XG5cbiAgICBpZiAocGhvbmVLZXkpIHtcbiAgICAgIGxldCBwaG9uZU51bWJlciA9IG51bGw7XG5cbiAgICAgIC8vIEdldCByZWZlcmVuY2VzIHRvIHBhcmVudCBmb3JtIGFuZCBtb2RlbCBmcm9tIHByb3BzXG4gICAgICBjb25zdCBwYXJlbnRGb3JtID0gdGhpcy5wcm9wc1sncGFyZW50Rm9ybSddO1xuICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLnByb3BzWydnZXRNb2RlbCddKCk7XG4gICAgICBjb25zdCBmbHV4ID0gdGhpcy5wcm9wc1snZmx1eCddO1xuXG4gICAgICAvLyBGaXJzdCB0cnkgdG8gZ2V0IGZyb20gcGFyZW50IGZvcm0gY29udHJvbCAoZm9yIHZhbGlkYXRlZCBwaG9uZSBudW1iZXJzKVxuICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBwYXJlbnRGb3JtPy5nZXQocGhvbmVLZXkpO1xuICAgICAgcGhvbmVOdW1iZXIgPSBmb3JtQ29udHJvbD8udmFsdWU7XG5cbiAgICAgIC8vIElmIG5vdCBmb3VuZCBpbiBmb3JtIGNvbnRyb2wsIHRyeSBmcm9tIG1vZGVsXG4gICAgICBpZiAoIXBob25lTnVtYmVyICYmIG1vZGVsICYmIG1vZGVsW3Bob25lS2V5XSkge1xuICAgICAgICBwaG9uZU51bWJlciA9IG1vZGVsW3Bob25lS2V5XTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwaG9uZU51bWJlciAmJiBwaG9uZUtleSA9PT0gJ3ZhbGlkYXRlZC1waG9uZScgJiYgZmx1eCkge1xuICAgICAgICBjb25zdCBwaG9uZVN0ZXAgPSBmbHV4LmZpbmQoXG4gICAgICAgICAgKHN0ZXA6IGFueSkgPT4gc3RlcC50eXBlID09PSBGbHV4VHlwZS5QaG9uZVxuICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcGhvbmVTdGVwICYmXG4gICAgICAgICAgcGhvbmVTdGVwLmNvbmZpZyAmJlxuICAgICAgICAgIHBob25lU3RlcC5jb25maWcuY29tcG9uZW50Q29sbGVjdGVkXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsUGhvbmVLZXkgPSBwaG9uZVN0ZXAuY29uZmlnLmNvbXBvbmVudENvbGxlY3RlZDtcbiAgICAgICAgICAvLyBUcnkgZnJvbSBwYXJlbnQgZm9ybSBmaXJzdCwgdGhlbiBtb2RlbFxuICAgICAgICAgIHBob25lTnVtYmVyID1cbiAgICAgICAgICAgIHBhcmVudEZvcm0/LmdldChvcmlnaW5hbFBob25lS2V5KT8udmFsdWUgfHxcbiAgICAgICAgICAgIChtb2RlbCAmJiBtb2RlbFtvcmlnaW5hbFBob25lS2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBob25lTnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgICAgIFBob25lTnVtYmVyOiBwaG9uZU51bWJlcixcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAn8J+UtyBGb3JtbHlTaWduQ29tcG9uZW50OiBObyBwaG9uZSBudW1iZXIgZm91bmQgZm9yIGtleTonLFxuICAgICAgICAgIHBob25lS2V5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ/CflLcgRm9ybWx5U2lnbkNvbXBvbmVudDogTm8gY29tcG9uZW50Q29sbGVjdGVkIGtleSBmb3VuZCBpbiBzdGVwIGNvbmZpZydcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgY2FuQWR2YW5jZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuUHJvY2VlZCkge1xuICAgICAgdGhpcy5kaWFsb2cucG9wRXJyb3IoJ3NpZ25Db21wb25lbnQudmlld2ZpbGVzLndhaXRGb3JTaWduJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbGliRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCAmJiBldmVudC50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2VzcycpIHtcbiAgICAgIHRoaXMuY2FuUHJvY2VlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMub25FdmVudChldmVudCk7XG4gIH1cblxuICBnZXQgc2lnbkJ1dHRvblN0eWxlKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLl9zaWduQnV0dG9uU3R5bGU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICfwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IERlc3Ryb3lpbmcgY29tcG9uZW50IGFuZCBjbGVhbmluZyB1cCBTaWduTGliQ29tcG9uZW50J1xuICAgICk7XG5cbiAgICAvLyBDbGVhbnVwIFNpZ25MaWJDb21wb25lbnQgaWYgaXQgZXhpc3RzXG4gICAgaWYgKHRoaXMuc2lnbkxpYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQ2FsbCBkZXN0cm95IG1ldGhvZCBpZiBpdCBleGlzdHMgKGNoZWNrIGZvciB2YXJpb3VzIHBvc3NpYmxlIGNsZWFudXAgbWV0aG9kcylcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5zaWduTGliIGFzIGFueSkubmdPbkRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAodGhpcy5zaWduTGliIGFzIGFueSkubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKHRoaXMuc2lnbkxpYiBhcyBhbnkpLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAodGhpcy5zaWduTGliIGFzIGFueSkuZGVzdHJveSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAodGhpcy5zaWduTGliIGFzIGFueSkuY2xlYW51cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICh0aGlzLnNpZ25MaWIgYXMgYW55KS5jbGVhbnVwKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbGVhciBhbnkgcmVmZXJlbmNlc1xuICAgICAgICAodGhpcy5zaWduTGliIGFzIGFueSkgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICfwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IEVycm9yIGR1cmluZyBTaWduTGliQ29tcG9uZW50IGNsZWFudXA6JyxcbiAgICAgICAgICBlcnJvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc2V0IGNvbXBvbmVudCBzdGF0ZVxuICAgIHRoaXMuY2FuUHJvY2VlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29uZmlnID0gbnVsbDtcblxuICAgIGNvbnNvbGUubG9nKCfwn5S3IEZvcm1seVNpZ25Db21wb25lbnQ6IENvbXBvbmVudCBjbGVhbnVwIGNvbXBsZXRlZCcpO1xuICB9XG59XG4iLCI8bGliLXNpZ24gI3NpZ25MaWIgW2NvbmZpZ109XCJjb25maWdcIiAoZXZlbnQpPVwibGliRXZlbnQoJGV2ZW50KVwiPiA8L2xpYi1zaWduPlxuIl19
@@ -188,10 +188,10 @@ export class FormlyUploadDocumentsComponent extends BaseFormlyControlComponent {
188
188
  uploadPayload.documents = [];
189
189
  return uploadPayload;
190
190
  }
191
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyUploadDocumentsComponent, deps: [{ token: i1.DialogService }, { token: i2.ApplicationDataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
192
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyUploadDocumentsComponent, selector: "app-formly-upload-documents", usesInheritance: true, ngImport: i0, template: "<p *ngIf=\"title\">\n {{ title }}\n</p>\n\n<table>\n <thead class=\"table-head\">\n <tr>\n <th>\n {{ \"document\" | translate }}\n </th>\n <th>\n {{ \"format\" | translate }}\n </th>\n <th>\n {{ \"flux.components.uploadDocument.maxSize\" | translate }}\n </th>\n <th>\n {{ \"stepControl.mandatory\" | translate }}\n </th>\n </tr>\n </thead>\n <tbody class=\"table-detail\">\n <tr *ngFor=\"let doc of documents; let i = index\">\n <td>\n {{ doc.documentName }}\n </td>\n <td>\n {{ doc.documentExtensions }}\n </td>\n <td>\n {{ doc.documentMaxSize }}\n </td>\n <td>\n {{ (doc.isMandatory ? \"yes\" : \"no\") | translate }}\n </td>\n <td>\n <div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"selectFile($event, doc)\"\n hidden\n />\n <button\n mat-flat-button\n color=\"primary\"\n (click)=\"fileInput.click()\"\n [disabled]=\"this.isDisabled\"\n >\n <mat-icon>cloud_upload</mat-icon>\n {{\n doc.fileName\n ? doc.fileName\n : (\"common.actions.upload\" | translate)\n }}\n </button>\n </div>\n </td>\n <td *ngIf=\"doc.fileName\">\n <i-tabler\n *ngIf=\"\n doc.isUploading === false &&\n doc.isUploadSuccess === true &&\n doc.fileName\n \"\n class=\"icon-25 text-white bg-primary rounded\"\n name=\"check\"\n ></i-tabler>\n <mat-spinner\n *ngIf=\"doc.isUploading === true\"\n class=\"m-x-auto upload-spinner\"\n ></mat-spinner>\n </td>\n </tr>\n </tbody>\n</table>\n", styles: [".upload-spinner{width:30px!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] }); }
191
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyUploadDocumentsComponent, deps: [{ token: i1.DialogService }, { token: i2.ApplicationDataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
192
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlyUploadDocumentsComponent, selector: "app-formly-upload-documents", usesInheritance: true, ngImport: i0, template: "<p *ngIf=\"title\">\n {{ title }}\n</p>\n\n<table>\n <thead class=\"table-head\">\n <tr>\n <th>\n {{ \"document\" | translate }}\n </th>\n <th>\n {{ \"format\" | translate }}\n </th>\n <th>\n {{ \"flux.components.uploadDocument.maxSize\" | translate }}\n </th>\n <th>\n {{ \"stepControl.mandatory\" | translate }}\n </th>\n </tr>\n </thead>\n <tbody class=\"table-detail\">\n <tr *ngFor=\"let doc of documents; let i = index\">\n <td>\n {{ doc.documentName }}\n </td>\n <td>\n {{ doc.documentExtensions }}\n </td>\n <td>\n {{ doc.documentMaxSize }}\n </td>\n <td>\n {{ (doc.isMandatory ? \"yes\" : \"no\") | translate }}\n </td>\n <td>\n <div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"selectFile($event, doc)\"\n hidden\n />\n <button\n mat-flat-button\n color=\"primary\"\n (click)=\"fileInput.click()\"\n [disabled]=\"this.isDisabled\"\n >\n <mat-icon>cloud_upload</mat-icon>\n {{\n doc.fileName\n ? doc.fileName\n : (\"common.actions.upload\" | translate)\n }}\n </button>\n </div>\n </td>\n <td *ngIf=\"doc.fileName\">\n <i-tabler\n *ngIf=\"\n doc.isUploading === false &&\n doc.isUploadSuccess === true &&\n doc.fileName\n \"\n class=\"icon-25 text-white bg-primary rounded\"\n name=\"check\"\n ></i-tabler>\n <mat-spinner\n *ngIf=\"doc.isUploading === true\"\n class=\"m-x-auto upload-spinner\"\n ></mat-spinner>\n </td>\n </tr>\n </tbody>\n</table>\n", styles: [".upload-spinner{width:30px!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] }); }
193
193
  }
194
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyUploadDocumentsComponent, decorators: [{
194
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyUploadDocumentsComponent, decorators: [{
195
195
  type: Component,
196
196
  args: [{ selector: 'app-formly-upload-documents', template: "<p *ngIf=\"title\">\n {{ title }}\n</p>\n\n<table>\n <thead class=\"table-head\">\n <tr>\n <th>\n {{ \"document\" | translate }}\n </th>\n <th>\n {{ \"format\" | translate }}\n </th>\n <th>\n {{ \"flux.components.uploadDocument.maxSize\" | translate }}\n </th>\n <th>\n {{ \"stepControl.mandatory\" | translate }}\n </th>\n </tr>\n </thead>\n <tbody class=\"table-detail\">\n <tr *ngFor=\"let doc of documents; let i = index\">\n <td>\n {{ doc.documentName }}\n </td>\n <td>\n {{ doc.documentExtensions }}\n </td>\n <td>\n {{ doc.documentMaxSize }}\n </td>\n <td>\n {{ (doc.isMandatory ? \"yes\" : \"no\") | translate }}\n </td>\n <td>\n <div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"selectFile($event, doc)\"\n hidden\n />\n <button\n mat-flat-button\n color=\"primary\"\n (click)=\"fileInput.click()\"\n [disabled]=\"this.isDisabled\"\n >\n <mat-icon>cloud_upload</mat-icon>\n {{\n doc.fileName\n ? doc.fileName\n : (\"common.actions.upload\" | translate)\n }}\n </button>\n </div>\n </td>\n <td *ngIf=\"doc.fileName\">\n <i-tabler\n *ngIf=\"\n doc.isUploading === false &&\n doc.isUploadSuccess === true &&\n doc.fileName\n \"\n class=\"icon-25 text-white bg-primary rounded\"\n name=\"check\"\n ></i-tabler>\n <mat-spinner\n *ngIf=\"doc.isUploading === true\"\n class=\"m-x-auto upload-spinner\"\n ></mat-spinner>\n </td>\n </tr>\n </tbody>\n</table>\n", styles: [".upload-spinner{width:30px!important}\n"] }]
197
197
  }], ctorParameters: () => [{ type: i1.DialogService }, { type: i2.ApplicationDataService }, { type: i0.ChangeDetectorRef }] });
@@ -114,10 +114,10 @@ export class FormlyValidateContactInfoComponent extends BaseFormlyStepComponent
114
114
  });
115
115
  }
116
116
  }
117
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyValidateContactInfoComponent, deps: [{ token: i1.OtpService }, { token: i2.DialogService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
118
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyValidateContactInfoComponent, selector: "app-formly-validate-contact-info", usesInheritance: true, ngImport: i0, template: "<div class=\"component-text-field\">\n <div *ngIf=\"!(sent | async); else otpTemplate\">\n <mat-form-field class=\"full-width\">\n <mat-label>\n {{ isEmail ? props[\"labels\"].emailLabel : props[\"labels\"].phoneLabel }}\n </mat-label>\n <input\n matInput\n type=\"text\"\n [formControl]=\"control\"\n [readonly]=\"stepData.config.collected\"\n />\n </mat-form-field>\n <div\n *ngIf=\"\n control.invalid &&\n (control.dirty || control.touched) &&\n control.hasError('required')\n \"\n class=\"alert alert-danger\"\n >\n {{\n isEmail\n ? props[\"labels\"].emailRequiredLabel\n : props[\"labels\"].phoneRequiredLabel\n }}\n </div>\n <div\n *ngIf=\"\n control.invalid &&\n (control.dirty || control.touched) &&\n !control.hasError('required')\n \"\n class=\"alert alert-danger\"\n >\n {{\n isEmail\n ? props[\"labels\"].emailErrorLabel\n : props[\"labels\"].phoneErrorLabel\n }}\n </div>\n <button\n mat-button\n type=\"button\"\n [ngStyle]=\"otpButtonStyle\"\n (click)=\"sendOtp()\"\n >\n {{ buttonText }}\n </button>\n </div>\n</div>\n\n<ng-template #otpTemplate>\n <mat-form-field class=\"full-width\">\n <mat-label>\n {{ props[\"labels\"].otpLabel }}\n </mat-label>\n <input matInput type=\"text\" [formControl]=\"otp\" />\n </mat-form-field>\n <button\n mat-button\n type=\"button\"\n *ngIf=\"!(otpValidated | async)\"\n [ngStyle]=\"otpButtonStyle\"\n (click)=\"validateOtp()\"\n >\n {{ props[\"labels\"].otpButtonLabel }}\n </button>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
117
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyValidateContactInfoComponent, deps: [{ token: i1.OtpService }, { token: i2.DialogService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
118
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlyValidateContactInfoComponent, selector: "app-formly-validate-contact-info", usesInheritance: true, ngImport: i0, template: "<div class=\"component-text-field\">\n <div *ngIf=\"!(sent | async); else otpTemplate\">\n <mat-form-field class=\"full-width\">\n <mat-label>\n {{ isEmail ? props[\"labels\"].emailLabel : props[\"labels\"].phoneLabel }}\n </mat-label>\n <input\n matInput\n type=\"text\"\n [formControl]=\"control\"\n [readonly]=\"stepData.config.collected\"\n />\n </mat-form-field>\n <div\n *ngIf=\"\n control.invalid &&\n (control.dirty || control.touched) &&\n control.hasError('required')\n \"\n class=\"alert alert-danger\"\n >\n {{\n isEmail\n ? props[\"labels\"].emailRequiredLabel\n : props[\"labels\"].phoneRequiredLabel\n }}\n </div>\n <div\n *ngIf=\"\n control.invalid &&\n (control.dirty || control.touched) &&\n !control.hasError('required')\n \"\n class=\"alert alert-danger\"\n >\n {{\n isEmail\n ? props[\"labels\"].emailErrorLabel\n : props[\"labels\"].phoneErrorLabel\n }}\n </div>\n <button\n mat-button\n type=\"button\"\n [ngStyle]=\"otpButtonStyle\"\n (click)=\"sendOtp()\"\n >\n {{ buttonText }}\n </button>\n </div>\n</div>\n\n<ng-template #otpTemplate>\n <mat-form-field class=\"full-width\">\n <mat-label>\n {{ props[\"labels\"].otpLabel }}\n </mat-label>\n <input matInput type=\"text\" [formControl]=\"otp\" />\n </mat-form-field>\n <button\n mat-button\n type=\"button\"\n *ngIf=\"!(otpValidated | async)\"\n [ngStyle]=\"otpButtonStyle\"\n (click)=\"validateOtp()\"\n >\n {{ props[\"labels\"].otpButtonLabel }}\n </button>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
119
119
  }
120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyValidateContactInfoComponent, decorators: [{
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyValidateContactInfoComponent, decorators: [{
121
121
  type: Component,
122
122
  args: [{ selector: 'app-formly-validate-contact-info', template: "<div class=\"component-text-field\">\n <div *ngIf=\"!(sent | async); else otpTemplate\">\n <mat-form-field class=\"full-width\">\n <mat-label>\n {{ isEmail ? props[\"labels\"].emailLabel : props[\"labels\"].phoneLabel }}\n </mat-label>\n <input\n matInput\n type=\"text\"\n [formControl]=\"control\"\n [readonly]=\"stepData.config.collected\"\n />\n </mat-form-field>\n <div\n *ngIf=\"\n control.invalid &&\n (control.dirty || control.touched) &&\n control.hasError('required')\n \"\n class=\"alert alert-danger\"\n >\n {{\n isEmail\n ? props[\"labels\"].emailRequiredLabel\n : props[\"labels\"].phoneRequiredLabel\n }}\n </div>\n <div\n *ngIf=\"\n control.invalid &&\n (control.dirty || control.touched) &&\n !control.hasError('required')\n \"\n class=\"alert alert-danger\"\n >\n {{\n isEmail\n ? props[\"labels\"].emailErrorLabel\n : props[\"labels\"].phoneErrorLabel\n }}\n </div>\n <button\n mat-button\n type=\"button\"\n [ngStyle]=\"otpButtonStyle\"\n (click)=\"sendOtp()\"\n >\n {{ buttonText }}\n </button>\n </div>\n</div>\n\n<ng-template #otpTemplate>\n <mat-form-field class=\"full-width\">\n <mat-label>\n {{ props[\"labels\"].otpLabel }}\n </mat-label>\n <input matInput type=\"text\" [formControl]=\"otp\" />\n </mat-form-field>\n <button\n mat-button\n type=\"button\"\n *ngIf=\"!(otpValidated | async)\"\n [ngStyle]=\"otpButtonStyle\"\n (click)=\"validateOtp()\"\n >\n {{ props[\"labels\"].otpButtonLabel }}\n </button>\n</ng-template>\n" }]
123
123
  }], ctorParameters: () => [{ type: i1.OtpService }, { type: i2.DialogService }, { type: i0.ChangeDetectorRef }] });
@@ -235,10 +235,10 @@ export class FormlyViewDocumentsComponent extends BaseFormlyControlComponent {
235
235
  return null;
236
236
  }
237
237
  }
238
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyViewDocumentsComponent, deps: [{ token: i1.ApplicationDataService }, { token: i2.DialogService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
239
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyViewDocumentsComponent, selector: "app-formly-view-documents", usesInheritance: true, ngImport: i0, template: "<p *ngIf=\"isLoading === false && (!documents || documents.length === 0)\">\n {{ getErrorTranslationMessage(\"noDocumentsToShow\") }}\n</p>\n\n<div class=\"buttons-container\">\n <button (click)=\"prevDocument()\"\n [disabled]=\"!canGoBack\"\n class=\"nav-button larger-width-nav-buttons\">\n &#8592;\n </button>\n\n <p class=\"file-info font-paragraph\" *ngIf=\"currentDocument\">\n {{ this.currentDocument.name }}\n </p>\n\n <button (click)=\"nextDocument()\"\n [disabled]=\"!canGoNext\"\n class=\"nav-button larger-width-nav-buttons\">\n &#8594;\n </button>\n</div>\n\n<mat-spinner *ngIf=\"isLoading === true\" class=\"m-x-auto\"></mat-spinner>\n<pdf-viewer *ngIf=\"isLoading === false\"\n [src]=\"currentPdf\"\n [render-text]=\"true\"\n [original-size]=\"false\"\n [external-link-target]=\"'blank'\"\n class=\"pdf-viewer\"></pdf-viewer>\n", styles: [".buttons-container button{margin-right:5px;margin-bottom:10px;margin-top:10px}ng2-pdf-viewer{display:block;margin:0 auto;width:80%;height:600px}.pdf-viewer-container{display:flex;flex-direction:column;align-items:center;margin:20px}.pdf-viewer{width:80vw;height:86.254vw;max-width:1000px;max-height:1414px;min-width:300px;min-height:424px;overflow:auto;margin:auto}.nav-button{width:60px;height:35px;background-color:#7f81ff;display:flex;justify-content:center;align-items:center;color:#fff;text-align:center;border:none;padding:5px 10px;border-radius:10px;cursor:pointer;font-size:1.4rem;font-weight:700;transition:background-color .3s ease-in}.smaller-width-nav-buttons-section{display:none}.nav-button:hover{background-color:#9091ff}.nav-button:disabled{background-color:#ccc;cursor:not-allowed}.file-info{margin:0 10px;font-weight:700;font-size:1.8rem}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PdfViewerComponent, selector: "pdf-viewer", inputs: ["src", "c-maps-url", "page", "render-text", "render-text-mode", "original-size", "show-all", "stick-to-page", "zoom", "zoom-scale", "rotation", "external-link-target", "autoresize", "fit-to-page", "show-borders"], outputs: ["after-load-complete", "page-rendered", "pages-initialized", "text-layer-rendered", "error", "on-progress", "pageChange"] }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
238
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyViewDocumentsComponent, deps: [{ token: i1.ApplicationDataService }, { token: i2.DialogService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
239
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlyViewDocumentsComponent, selector: "app-formly-view-documents", usesInheritance: true, ngImport: i0, template: "<p *ngIf=\"isLoading === false && (!documents || documents.length === 0)\">\n {{ getErrorTranslationMessage(\"noDocumentsToShow\") }}\n</p>\n\n<div class=\"buttons-container\">\n <button (click)=\"prevDocument()\"\n [disabled]=\"!canGoBack\"\n class=\"nav-button larger-width-nav-buttons\">\n &#8592;\n </button>\n\n <p class=\"file-info font-paragraph\" *ngIf=\"currentDocument\">\n {{ this.currentDocument.name }}\n </p>\n\n <button (click)=\"nextDocument()\"\n [disabled]=\"!canGoNext\"\n class=\"nav-button larger-width-nav-buttons\">\n &#8594;\n </button>\n</div>\n\n<mat-spinner *ngIf=\"isLoading === true\" class=\"m-x-auto\"></mat-spinner>\n<pdf-viewer *ngIf=\"isLoading === false\"\n [src]=\"currentPdf\"\n [render-text]=\"true\"\n [original-size]=\"false\"\n [external-link-target]=\"'blank'\"\n class=\"pdf-viewer\"></pdf-viewer>\n", styles: [".buttons-container button{margin-right:5px;margin-bottom:10px;margin-top:10px}ng2-pdf-viewer{display:block;margin:0 auto;width:80%;height:600px}.pdf-viewer-container{display:flex;flex-direction:column;align-items:center;margin:20px}.pdf-viewer{width:80vw;height:86.254vw;max-width:1000px;max-height:1414px;min-width:300px;min-height:424px;overflow:auto;margin:auto}.nav-button{width:60px;height:35px;background-color:#7f81ff;display:flex;justify-content:center;align-items:center;color:#fff;text-align:center;border:none;padding:5px 10px;border-radius:10px;cursor:pointer;font-size:1.4rem;font-weight:700;transition:background-color .3s ease-in}.smaller-width-nav-buttons-section{display:none}.nav-button:hover{background-color:#9091ff}.nav-button:disabled{background-color:#ccc;cursor:not-allowed}.file-info{margin:0 10px;font-weight:700;font-size:1.8rem}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PdfViewerComponent, selector: "pdf-viewer", inputs: ["src", "c-maps-url", "page", "render-text", "render-text-mode", "original-size", "show-all", "stick-to-page", "zoom", "zoom-scale", "rotation", "external-link-target", "autoresize", "fit-to-page", "show-borders"], outputs: ["after-load-complete", "page-rendered", "pages-initialized", "text-layer-rendered", "error", "on-progress", "pageChange"] }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
240
240
  }
241
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyViewDocumentsComponent, decorators: [{
241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyViewDocumentsComponent, decorators: [{
242
242
  type: Component,
243
243
  args: [{ selector: 'app-formly-view-documents', template: "<p *ngIf=\"isLoading === false && (!documents || documents.length === 0)\">\n {{ getErrorTranslationMessage(\"noDocumentsToShow\") }}\n</p>\n\n<div class=\"buttons-container\">\n <button (click)=\"prevDocument()\"\n [disabled]=\"!canGoBack\"\n class=\"nav-button larger-width-nav-buttons\">\n &#8592;\n </button>\n\n <p class=\"file-info font-paragraph\" *ngIf=\"currentDocument\">\n {{ this.currentDocument.name }}\n </p>\n\n <button (click)=\"nextDocument()\"\n [disabled]=\"!canGoNext\"\n class=\"nav-button larger-width-nav-buttons\">\n &#8594;\n </button>\n</div>\n\n<mat-spinner *ngIf=\"isLoading === true\" class=\"m-x-auto\"></mat-spinner>\n<pdf-viewer *ngIf=\"isLoading === false\"\n [src]=\"currentPdf\"\n [render-text]=\"true\"\n [original-size]=\"false\"\n [external-link-target]=\"'blank'\"\n class=\"pdf-viewer\"></pdf-viewer>\n", styles: [".buttons-container button{margin-right:5px;margin-bottom:10px;margin-top:10px}ng2-pdf-viewer{display:block;margin:0 auto;width:80%;height:600px}.pdf-viewer-container{display:flex;flex-direction:column;align-items:center;margin:20px}.pdf-viewer{width:80vw;height:86.254vw;max-width:1000px;max-height:1414px;min-width:300px;min-height:424px;overflow:auto;margin:auto}.nav-button{width:60px;height:35px;background-color:#7f81ff;display:flex;justify-content:center;align-items:center;color:#fff;text-align:center;border:none;padding:5px 10px;border-radius:10px;cursor:pointer;font-size:1.4rem;font-weight:700;transition:background-color .3s ease-in}.smaller-width-nav-buttons-section{display:none}.nav-button:hover{background-color:#9091ff}.nav-button:disabled{background-color:#ccc;cursor:not-allowed}.file-info{margin:0 10px;font-weight:700;font-size:1.8rem}\n"] }]
244
244
  }], ctorParameters: () => [{ type: i1.ApplicationDataService }, { type: i2.DialogService }, { type: i0.ChangeDetectorRef }] });
@@ -150,10 +150,10 @@ export class FormlyViewOffersComponent extends BaseFormlyStepComponent {
150
150
  this.props['event'](selectedOffer.offerId);
151
151
  }
152
152
  }
153
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyViewOffersComponent, deps: [{ token: i1.ApplicationDataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
154
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyViewOffersComponent, selector: "app-formly-view-offers", usesInheritance: true, ngImport: i0, template: "<mat-spinner *ngIf=\"isLoading\" class=\"m-x-auto upload-spinner\"></mat-spinner>\n<ng-container class=\"d-flex flex-row\" *ngIf=\"!isLoading\">\n <mat-card class=\"cardWithShadow blue_theme theme-card align-items-stretch\">\n <mat-card-content class=\"p-24\">\n <shared-grid [data]=\"datasource\"\n [count]=\"datasource.length\"\n [columns]=\"columns\"\n [config]=\"config\"\n (open)=\"offerSelected($event)\"></shared-grid>\n </mat-card-content>\n </mat-card>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i5.GridComponent, selector: "shared-grid", inputs: ["data", "count", "columns", "config"], outputs: ["reload", "delete", "duplicate", "open"] }] }); }
153
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyViewOffersComponent, deps: [{ token: i1.ApplicationDataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
154
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlyViewOffersComponent, selector: "app-formly-view-offers", usesInheritance: true, ngImport: i0, template: "<mat-spinner *ngIf=\"isLoading\" class=\"m-x-auto upload-spinner\"></mat-spinner>\n<ng-container class=\"d-flex flex-row\" *ngIf=\"!isLoading\">\n <mat-card class=\"cardWithShadow blue_theme theme-card align-items-stretch\">\n <mat-card-content class=\"p-24\">\n <shared-grid [data]=\"datasource\"\n [count]=\"datasource.length\"\n [columns]=\"columns\"\n [config]=\"config\"\n (open)=\"offerSelected($event)\"></shared-grid>\n </mat-card-content>\n </mat-card>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i5.GridComponent, selector: "shared-grid", inputs: ["data", "count", "columns", "config"], outputs: ["reload", "delete", "duplicate", "open"] }] }); }
155
155
  }
156
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyViewOffersComponent, decorators: [{
156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyViewOffersComponent, decorators: [{
157
157
  type: Component,
158
158
  args: [{ selector: 'app-formly-view-offers', template: "<mat-spinner *ngIf=\"isLoading\" class=\"m-x-auto upload-spinner\"></mat-spinner>\n<ng-container class=\"d-flex flex-row\" *ngIf=\"!isLoading\">\n <mat-card class=\"cardWithShadow blue_theme theme-card align-items-stretch\">\n <mat-card-content class=\"p-24\">\n <shared-grid [data]=\"datasource\"\n [count]=\"datasource.length\"\n [columns]=\"columns\"\n [config]=\"config\"\n (open)=\"offerSelected($event)\"></shared-grid>\n </mat-card-content>\n </mat-card>\n</ng-container>\n" }]
159
159
  }], ctorParameters: () => [{ type: i1.ApplicationDataService }, { type: i0.ChangeDetectorRef }] });
@@ -28,10 +28,10 @@ export class OriginFormAuthService {
28
28
  tokenObservable() {
29
29
  return this.tokenSubject.asObservable();
30
30
  }
31
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OriginFormAuthService, deps: [{ token: i1.AuthenticationClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
32
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OriginFormAuthService, providedIn: 'root' }); }
31
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OriginFormAuthService, deps: [{ token: i1.AuthenticationClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
32
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OriginFormAuthService, providedIn: 'root' }); }
33
33
  }
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OriginFormAuthService, decorators: [{
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OriginFormAuthService, decorators: [{
35
35
  type: Injectable,
36
36
  args: [{
37
37
  providedIn: 'root',
@@ -26,10 +26,10 @@ export class OriginFormTokenInterceptor {
26
26
  return next.handle(newReq);
27
27
  }), catchError(err => throwError(err)));
28
28
  }
29
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OriginFormTokenInterceptor, deps: [{ token: i1.OriginFormAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
30
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OriginFormTokenInterceptor }); }
29
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OriginFormTokenInterceptor, deps: [{ token: i1.OriginFormAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
30
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OriginFormTokenInterceptor }); }
31
31
  }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OriginFormTokenInterceptor, decorators: [{
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OriginFormTokenInterceptor, decorators: [{
33
33
  type: Injectable
34
34
  }], ctorParameters: () => [{ type: i1.OriginFormAuthService }] });
35
35
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JpZ2luLWZvcm0tdG9rZW4uaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL29yaWdpbi1mb3JtLXRva2VuLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFJdkQsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUFvQixXQUFrQztRQUFsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBdUI7SUFBRyxDQUFDO0lBRTFELFNBQVMsQ0FBQyxHQUFxQixFQUFFLElBQWlCO1FBQ2hELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM5QixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFxQixFQUFFLElBQWlCO1FBQzdELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ3pDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEYsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNuQyxDQUFDO0lBQ0osQ0FBQzsrR0EzQlUsMEJBQTBCO21IQUExQiwwQkFBMEI7OzRGQUExQiwwQkFBMEI7a0JBRHRDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0LCBIdHRwSGFuZGxlciwgSHR0cEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT3JpZ2luRm9ybUF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9vcmlnaW4tZm9ybS1hdXRoLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT3JpZ2luRm9ybVRva2VuSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBPcmlnaW5Gb3JtQXV0aFNlcnZpY2UpIHt9XG5cbiAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFRva2VuKCk7XG4gICAgbGV0IGF1dGhSZXEgPSByZXE7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBhdXRoUmVxID0gcmVxLmNsb25lKHsgc2V0SGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCB9IH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dC5oYW5kbGUoYXV0aFJlcSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGU0MDFFcnJvcihhdXRoUmVxLCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZTQwMUVycm9yKHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UucmVmcmVzaFRva2VuKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcChuZXdUb2tlbiA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1JlcSA9IHJlcS5jbG9uZSh7IHNldEhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke25ld1Rva2VufWAgfSB9KTtcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKG5ld1JlcSk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHRocm93RXJyb3IoZXJyKSlcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -2344,10 +2344,10 @@ export class CollectorFormComponent {
2344
2344
  this.cdRef.detectChanges();
2345
2345
  }
2346
2346
  }
2347
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CollectorFormComponent, deps: [{ token: i1.DictionaryService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i2.ProxyService }, { token: i3.LabelService }, { token: i4.ApplicationDataService }, { token: i5.LanguageService }, { token: i6.OriginFormAuthService }, { token: i7.FormsService }, { token: i8.ConfigService }, { token: i9.TranslationService }, { token: i10.OriginFormSignalrHandlerService }, { token: i11.ActionStepHandler }, { token: i12.ScrollToErrorService }], target: i0.ɵɵFactoryTarget.Component }); }
2348
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CollectorFormComponent, selector: "app-origin-form", inputs: { configComponent: "configComponent", configUuid: "configUuid", currentStepId: "currentStepId", appModel: "appModel", signBaseUrl: "signBaseUrl", currentLanguageIso: "currentLanguageIso", fillData: "fillData", env: "env", showDisplayMode: "showDisplayMode", showLanguageSelector: "showLanguageSelector", isDemoMode: "isDemoMode", isDebug: "isDebug", appDataUuid: "appDataUuid", blockPreviousStep: "blockPreviousStep", dataUrlId: "dataUrlId", noButtonsInView: "noButtonsInView" }, outputs: { completionEvent: "completionEvent" }, viewQueries: [{ propertyName: "formlyFields", predicate: FormlyField, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"isLoading\" class=\"loading-overlay\">\n <mat-spinner></mat-spinner>\n</div>\n<div [hidden]=\"isLoading\">\n <div *ngIf=\"showLanguageSelector\" appearance=\"outline\" class=\"right-aligned\">\n <button [matMenuTriggerFor]=\"flags\" mat-icon-button class=\"m-r-5\">\n <img\n [src]=\"returnFLag(currentLanguageIso)\"\n class=\"rounded-circle object-cover icon-20\"\n />\n </button>\n <mat-menu #flags=\"matMenu\" class=\"cardWithShadow\">\n <button\n mat-menu-item\n *ngFor=\"let lang of applicationLanguages()\"\n (click)=\"changeLanguage(lang.iso)\"\n >\n <div class=\"d-flex align-items-center\">\n <img\n [src]=\"returnFLag(lang.iso)\"\n class=\"rounded-circle object-cover icon-20\"\n />\n <span class=\"mat-subtitle-1 f-s-14\">{{ lang.name }}</span>\n </div>\n </button>\n </mat-menu>\n </div>\n\n <br />\n <div class=\"form-container\">\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <formly-form\n [model]=\"model\"\n [fields]=\"formlyConfig\"\n [options]=\"options\"\n [form]=\"form\"\n ></formly-form>\n </form>\n </div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700&display=swap\";@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";@font-face{font-family:ttrounds;src:url(/assets/fonts/ttrounds-bold-webfont.woff2) format(\"woff2\"),url(/assets/fonts/ttrounds-bold-webfont.woff) format(\"woff\");font-weight:700;font-style:normal}@font-face{font-family:ttrounds;src:url(/assets/fonts/ttrounds-regular-webfont.woff2) format(\"woff2\"),url(/assets/fonts/ttrounds-regular-webfont.woff) format(\"woff\");font-weight:400;font-style:normal}@font-face{font-family:ttrounds;src:url(/assets/fonts/ttrounds-thin-webfont.woff2) format(\"woff2\"),url(/assets/fonts/ttrounds-thin-webfont.woff) format(\"woff\");font-weight:200;font-style:normal}@font-face{font-family:Sora Light;src:url(/assets/fonts/Sora-Light.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Sora Regular;src:url(/assets/fonts/Sora-Regular.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Sora ExtraBold;src:url(/assets/fonts/Sora-ExtraBold.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Figtree Light;src:url(/assets/fonts/Figtree-Light.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Figtree Regular;src:url(/assets/fonts/Figtree-Regular.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Figtree Bold;src:url(/assets/fonts/Figtree-Bold.ttf) format(\"truetype\");font-weight:400;font-style:normal}.loader{border-top:16px solid blue;border-right:16px solid green;border-bottom:16px solid red;border-left:16px solid pink}:host ::ng-deep .mat-mdc-text-field-wrapper .mdc-line-ripple{display:none!important}.right-aligned{display:flex;justify-content:flex-end!important}.flag-icon{width:20px;height:20px;margin-right:8px;vertical-align:middle}.rounded-circle{border-radius:50%}.object-cover{object-fit:cover}.m-r-8{margin-right:8px}.icon-20{width:20px;height:20px}.loading-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#ffffffb3;display:flex;justify-content:center;align-items:center;z-index:9999}\n"], dependencies: [{ kind: "directive", type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i14.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i14.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i14.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i15.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i15.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i15.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i16.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i17.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i18.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }] }); }
2347
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CollectorFormComponent, deps: [{ token: i1.DictionaryService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i2.ProxyService }, { token: i3.LabelService }, { token: i4.ApplicationDataService }, { token: i5.LanguageService }, { token: i6.OriginFormAuthService }, { token: i7.FormsService }, { token: i8.ConfigService }, { token: i9.TranslationService }, { token: i10.OriginFormSignalrHandlerService }, { token: i11.ActionStepHandler }, { token: i12.ScrollToErrorService }], target: i0.ɵɵFactoryTarget.Component }); }
2348
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CollectorFormComponent, selector: "app-origin-form", inputs: { configComponent: "configComponent", configUuid: "configUuid", currentStepId: "currentStepId", appModel: "appModel", signBaseUrl: "signBaseUrl", currentLanguageIso: "currentLanguageIso", fillData: "fillData", env: "env", showDisplayMode: "showDisplayMode", showLanguageSelector: "showLanguageSelector", isDemoMode: "isDemoMode", isDebug: "isDebug", appDataUuid: "appDataUuid", blockPreviousStep: "blockPreviousStep", dataUrlId: "dataUrlId", noButtonsInView: "noButtonsInView" }, outputs: { completionEvent: "completionEvent" }, viewQueries: [{ propertyName: "formlyFields", predicate: FormlyField, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"isLoading\" class=\"loading-overlay\">\n <mat-spinner></mat-spinner>\n</div>\n<div [hidden]=\"isLoading\">\n <div *ngIf=\"showLanguageSelector\" appearance=\"outline\" class=\"right-aligned\">\n <button [matMenuTriggerFor]=\"flags\" mat-icon-button class=\"m-r-5\">\n <img\n [src]=\"returnFLag(currentLanguageIso)\"\n class=\"rounded-circle object-cover icon-20\"\n />\n </button>\n <mat-menu #flags=\"matMenu\" class=\"cardWithShadow\">\n <button\n mat-menu-item\n *ngFor=\"let lang of applicationLanguages()\"\n (click)=\"changeLanguage(lang.iso)\"\n >\n <div class=\"d-flex align-items-center\">\n <img\n [src]=\"returnFLag(lang.iso)\"\n class=\"rounded-circle object-cover icon-20\"\n />\n <span class=\"mat-subtitle-1 f-s-14\">{{ lang.name }}</span>\n </div>\n </button>\n </mat-menu>\n </div>\n\n <br />\n <div class=\"form-container\">\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <formly-form\n [model]=\"model\"\n [fields]=\"formlyConfig\"\n [options]=\"options\"\n [form]=\"form\"\n ></formly-form>\n </form>\n </div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700&display=swap\";@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";@font-face{font-family:ttrounds;src:url(/assets/fonts/ttrounds-bold-webfont.woff2) format(\"woff2\"),url(/assets/fonts/ttrounds-bold-webfont.woff) format(\"woff\");font-weight:700;font-style:normal}@font-face{font-family:ttrounds;src:url(/assets/fonts/ttrounds-regular-webfont.woff2) format(\"woff2\"),url(/assets/fonts/ttrounds-regular-webfont.woff) format(\"woff\");font-weight:400;font-style:normal}@font-face{font-family:ttrounds;src:url(/assets/fonts/ttrounds-thin-webfont.woff2) format(\"woff2\"),url(/assets/fonts/ttrounds-thin-webfont.woff) format(\"woff\");font-weight:200;font-style:normal}@font-face{font-family:Sora Light;src:url(/assets/fonts/Sora-Light.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Sora Regular;src:url(/assets/fonts/Sora-Regular.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Sora ExtraBold;src:url(/assets/fonts/Sora-ExtraBold.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Figtree Light;src:url(/assets/fonts/Figtree-Light.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Figtree Regular;src:url(/assets/fonts/Figtree-Regular.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Figtree Bold;src:url(/assets/fonts/Figtree-Bold.ttf) format(\"truetype\");font-weight:400;font-style:normal}.loader{border-top:16px solid blue;border-right:16px solid green;border-bottom:16px solid red;border-left:16px solid pink}:host ::ng-deep .mat-mdc-text-field-wrapper .mdc-line-ripple{display:none!important}.right-aligned{display:flex;justify-content:flex-end!important}.flag-icon{width:20px;height:20px;margin-right:8px;vertical-align:middle}.rounded-circle{border-radius:50%}.object-cover{object-fit:cover}.m-r-8{margin-right:8px}.icon-20{width:20px;height:20px}.loading-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#ffffffb3;display:flex;justify-content:center;align-items:center;z-index:9999}\n"], dependencies: [{ kind: "directive", type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i14.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i14.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i14.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i15.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i15.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i15.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i16.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i17.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i18.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }] }); }
2349
2349
  }
2350
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CollectorFormComponent, decorators: [{
2350
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CollectorFormComponent, decorators: [{
2351
2351
  type: Component,
2352
2352
  args: [{ selector: 'app-origin-form', template: "<div *ngIf=\"isLoading\" class=\"loading-overlay\">\n <mat-spinner></mat-spinner>\n</div>\n<div [hidden]=\"isLoading\">\n <div *ngIf=\"showLanguageSelector\" appearance=\"outline\" class=\"right-aligned\">\n <button [matMenuTriggerFor]=\"flags\" mat-icon-button class=\"m-r-5\">\n <img\n [src]=\"returnFLag(currentLanguageIso)\"\n class=\"rounded-circle object-cover icon-20\"\n />\n </button>\n <mat-menu #flags=\"matMenu\" class=\"cardWithShadow\">\n <button\n mat-menu-item\n *ngFor=\"let lang of applicationLanguages()\"\n (click)=\"changeLanguage(lang.iso)\"\n >\n <div class=\"d-flex align-items-center\">\n <img\n [src]=\"returnFLag(lang.iso)\"\n class=\"rounded-circle object-cover icon-20\"\n />\n <span class=\"mat-subtitle-1 f-s-14\">{{ lang.name }}</span>\n </div>\n </button>\n </mat-menu>\n </div>\n\n <br />\n <div class=\"form-container\">\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <formly-form\n [model]=\"model\"\n [fields]=\"formlyConfig\"\n [options]=\"options\"\n [form]=\"form\"\n ></formly-form>\n </form>\n </div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700&display=swap\";@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";@font-face{font-family:ttrounds;src:url(/assets/fonts/ttrounds-bold-webfont.woff2) format(\"woff2\"),url(/assets/fonts/ttrounds-bold-webfont.woff) format(\"woff\");font-weight:700;font-style:normal}@font-face{font-family:ttrounds;src:url(/assets/fonts/ttrounds-regular-webfont.woff2) format(\"woff2\"),url(/assets/fonts/ttrounds-regular-webfont.woff) format(\"woff\");font-weight:400;font-style:normal}@font-face{font-family:ttrounds;src:url(/assets/fonts/ttrounds-thin-webfont.woff2) format(\"woff2\"),url(/assets/fonts/ttrounds-thin-webfont.woff) format(\"woff\");font-weight:200;font-style:normal}@font-face{font-family:Sora Light;src:url(/assets/fonts/Sora-Light.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Sora Regular;src:url(/assets/fonts/Sora-Regular.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Sora ExtraBold;src:url(/assets/fonts/Sora-ExtraBold.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Figtree Light;src:url(/assets/fonts/Figtree-Light.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Figtree Regular;src:url(/assets/fonts/Figtree-Regular.ttf) format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:Figtree Bold;src:url(/assets/fonts/Figtree-Bold.ttf) format(\"truetype\");font-weight:400;font-style:normal}.loader{border-top:16px solid blue;border-right:16px solid green;border-bottom:16px solid red;border-left:16px solid pink}:host ::ng-deep .mat-mdc-text-field-wrapper .mdc-line-ripple{display:none!important}.right-aligned{display:flex;justify-content:flex-end!important}.flag-icon{width:20px;height:20px;margin-right:8px;vertical-align:middle}.rounded-circle{border-radius:50%}.object-cover{object-fit:cover}.m-r-8{margin-right:8px}.icon-20{width:20px;height:20px}.loading-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#ffffffb3;display:flex;justify-content:center;align-items:center;z-index:9999}\n"] }]
2353
2353
  }], ctorParameters: () => [{ type: i1.DictionaryService }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i2.ProxyService }, { type: i3.LabelService }, { type: i4.ApplicationDataService }, { type: i5.LanguageService }, { type: i6.OriginFormAuthService }, { type: i7.FormsService }, { type: i8.ConfigService }, { type: i9.TranslationService }, { type: i10.OriginFormSignalrHandlerService }, { type: i11.ActionStepHandler }, { type: i12.ScrollToErrorService }], propDecorators: { formlyFields: [{