@rangertechnologies/ngnxt 2.1.106 → 2.1.108

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 (143) hide show
  1. package/esm2022/lib/ar.i18n.mjs +29 -0
  2. package/esm2022/lib/components/button/nxt-button.component.mjs +130 -0
  3. package/esm2022/lib/components/custom-button/custom-button.component.mjs +39 -0
  4. package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +366 -0
  5. package/esm2022/lib/components/custom-date/custom-date.component.mjs +47 -0
  6. package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +48 -0
  7. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +219 -0
  8. package/esm2022/lib/components/custom-image/custom-image.component.mjs +34 -0
  9. package/esm2022/lib/components/custom-input/custom-input.component.mjs +93 -0
  10. package/esm2022/lib/components/custom-label/custom-label.component.mjs +21 -0
  11. package/esm2022/lib/components/custom-model/custom-model.component.mjs +48 -0
  12. package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +115 -0
  13. package/esm2022/lib/components/custom-rich-text/custom-rich-text.component.mjs +186 -0
  14. package/esm2022/lib/components/custom-table/custom-table.component.mjs +347 -0
  15. package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +65 -0
  16. package/esm2022/lib/components/custom-time/custom-time.component.mjs +61 -0
  17. package/esm2022/lib/components/datatable/datatable.component.mjs +801 -0
  18. package/esm2022/lib/components/dependent-table/dependent-table.component.mjs +42 -0
  19. package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +39 -0
  20. package/esm2022/lib/components/file-upload/file-upload.component.mjs +279 -0
  21. package/esm2022/lib/components/file-view/file-view.component.mjs +46 -0
  22. package/esm2022/lib/components/loader/loader.component.mjs +23 -0
  23. package/esm2022/lib/components/pagination/pagination.component.mjs +100 -0
  24. package/esm2022/lib/components/pick-location/pick-location.component.mjs +216 -0
  25. package/esm2022/lib/components/search-box/search-box.component.mjs +202 -0
  26. package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +123 -0
  27. package/esm2022/lib/directives/componenthost/componenthost.directive.mjs +19 -0
  28. package/esm2022/lib/en.i18n.mjs +29 -0
  29. package/esm2022/lib/i18n-config.service.mjs +4 -0
  30. package/esm2022/lib/i18n.component.mjs +47 -0
  31. package/esm2022/lib/i18n.module.mjs +38 -0
  32. package/esm2022/lib/i18n.pipe.mjs +25 -0
  33. package/esm2022/lib/i18n.service.mjs +56 -0
  34. package/esm2022/lib/interfaces/actionMeta.mjs +2 -0
  35. package/esm2022/lib/interfaces/apimeta.mjs +2 -0
  36. package/esm2022/lib/interfaces/dependencyMeta.mjs +2 -0
  37. package/esm2022/lib/model/bookletWrapper.mjs +9 -0
  38. package/esm2022/lib/model/changeWrapper.mjs +11 -0
  39. package/esm2022/lib/model/errorWrapper.mjs +6 -0
  40. package/esm2022/lib/model/tableWrapper.mjs +20 -0
  41. package/esm2022/lib/nxt-app.component.mjs +22 -0
  42. package/esm2022/lib/nxt-app.module.mjs +399 -0
  43. package/esm2022/lib/nxt-app.service.mjs +14 -0
  44. package/esm2022/lib/pages/booklet/booklet.component.mjs +541 -0
  45. package/esm2022/lib/pages/builder/element/element.component.mjs +196 -0
  46. package/esm2022/lib/pages/builder/form/form.component.mjs +34 -0
  47. package/esm2022/lib/pages/builder/menu/menu.component.mjs +28 -0
  48. package/esm2022/lib/pages/builder/properties/properties.component.mjs +494 -0
  49. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +458 -0
  50. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +2387 -0
  51. package/esm2022/lib/pages/summary-page/summary-page.component.mjs +76 -0
  52. package/esm2022/lib/pipe/date/date.pipe.mjs +28 -0
  53. package/esm2022/lib/pipe/editColumnCheck/edit-column-check.pipe.mjs +28 -0
  54. package/esm2022/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.mjs +20 -0
  55. package/esm2022/lib/pipe/editColumnType/edit-column-type.pipe.mjs +20 -0
  56. package/esm2022/lib/pipe/get-value.pipe.mjs +50 -0
  57. package/esm2022/lib/pipe/search-filter/search-filter.pipe.mjs +39 -0
  58. package/esm2022/lib/pipe/time/time.pipe.mjs +26 -0
  59. package/esm2022/lib/sample.mjs +3715 -0
  60. package/esm2022/lib/services/change.service.mjs +53 -0
  61. package/esm2022/lib/services/data.service.mjs +80 -0
  62. package/esm2022/lib/services/form-builder.service.mjs +173 -0
  63. package/esm2022/lib/services/salesforce.service.mjs +46 -0
  64. package/esm2022/lib/services/shared.service.mjs +100 -0
  65. package/esm2022/lib/services/storage.service.mjs +44 -0
  66. package/esm2022/lib/tam.i18n.mjs +29 -0
  67. package/esm2022/lib/wrapper.mjs +175 -0
  68. package/esm2022/public-api.mjs +22 -0
  69. package/esm2022/rangertechnologies-ngnxt.mjs +5 -0
  70. package/fesm2022/rangertechnologies-ngnxt.mjs +12900 -0
  71. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -0
  72. package/index.d.ts +5 -0
  73. package/lib/ar.i18n.d.ts +24 -0
  74. package/lib/components/button/nxt-button.component.d.ts +38 -0
  75. package/lib/components/custom-button/custom-button.component.d.ts +16 -0
  76. package/lib/components/custom-calendar/custom-calendar.component.d.ts +65 -0
  77. package/lib/components/custom-date/custom-date.component.d.ts +18 -0
  78. package/lib/components/custom-date-picker/custom-date-picker.component.d.ts +19 -0
  79. package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +39 -0
  80. package/lib/components/custom-image/custom-image.component.d.ts +13 -0
  81. package/lib/components/custom-input/custom-input.component.d.ts +31 -0
  82. package/lib/components/custom-label/custom-label.component.d.ts +10 -0
  83. package/lib/components/custom-model/custom-model.component.d.ts +19 -0
  84. package/lib/components/custom-radio/custom-radio.component.d.ts +33 -0
  85. package/lib/components/custom-rich-text/custom-rich-text.component.d.ts +29 -0
  86. package/lib/components/custom-table/custom-table.component.d.ts +65 -0
  87. package/lib/components/custom-text-area/custom-text-area.component.d.ts +22 -0
  88. package/lib/components/custom-time/custom-time.component.d.ts +18 -0
  89. package/lib/components/datatable/datatable.component.d.ts +126 -0
  90. package/lib/components/dependent-table/dependent-table.component.d.ts +15 -0
  91. package/lib/components/dropdown-with-flag/dropdown-with-flag.component.d.ts +16 -0
  92. package/lib/components/file-upload/file-upload.component.d.ts +47 -0
  93. package/lib/components/file-view/file-view.component.d.ts +16 -0
  94. package/lib/components/loader/loader.component.d.ts +11 -0
  95. package/lib/components/pagination/pagination.component.d.ts +36 -0
  96. package/lib/components/pick-location/pick-location.component.d.ts +44 -0
  97. package/lib/components/search-box/search-box.component.d.ts +43 -0
  98. package/lib/components/table-appendix/table-appendix.component.d.ts +30 -0
  99. package/lib/directives/componenthost/componenthost.directive.d.ts +8 -0
  100. package/lib/en.i18n.d.ts +24 -0
  101. package/lib/i18n-config.service.d.ts +2 -0
  102. package/lib/i18n.component.d.ts +11 -0
  103. package/lib/i18n.module.d.ts +9 -0
  104. package/lib/i18n.pipe.d.ts +10 -0
  105. package/lib/i18n.service.d.ts +14 -0
  106. package/lib/interfaces/actionMeta.d.ts +5 -0
  107. package/lib/interfaces/apimeta.d.ts +15 -0
  108. package/lib/interfaces/dependencyMeta.d.ts +8 -0
  109. package/lib/model/bookletWrapper.d.ts +5 -0
  110. package/lib/model/changeWrapper.d.ts +10 -0
  111. package/lib/model/errorWrapper.d.ts +5 -0
  112. package/lib/model/tableWrapper.d.ts +18 -0
  113. package/lib/nxt-app.component.d.ts +8 -0
  114. package/lib/nxt-app.module.d.ts +52 -0
  115. package/lib/nxt-app.service.d.ts +6 -0
  116. package/lib/pages/booklet/booklet.component.d.ts +68 -0
  117. package/lib/pages/builder/element/element.component.d.ts +33 -0
  118. package/lib/pages/builder/form/form.component.d.ts +11 -0
  119. package/lib/pages/builder/menu/menu.component.d.ts +10 -0
  120. package/lib/pages/builder/properties/properties.component.d.ts +575 -0
  121. package/lib/pages/questionbook/questionbook.component.d.ts +68 -0
  122. package/lib/pages/questionnaire/questionnaire.component.d.ts +220 -0
  123. package/lib/pages/summary-page/summary-page.component.d.ts +20 -0
  124. package/lib/pipe/date/date.pipe.d.ts +7 -0
  125. package/lib/pipe/editColumnCheck/edit-column-check.pipe.d.ts +7 -0
  126. package/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.d.ts +7 -0
  127. package/lib/pipe/editColumnType/edit-column-type.pipe.d.ts +7 -0
  128. package/lib/pipe/get-value.pipe.d.ts +7 -0
  129. package/lib/pipe/search-filter/search-filter.pipe.d.ts +8 -0
  130. package/lib/pipe/time/time.pipe.d.ts +7 -0
  131. package/lib/sample.d.ts +11 -0
  132. package/lib/services/change.service.d.ts +22 -0
  133. package/lib/services/data.service.d.ts +13 -0
  134. package/lib/services/form-builder.service.d.ts +76 -0
  135. package/lib/services/salesforce.service.d.ts +11 -0
  136. package/lib/services/shared.service.d.ts +15 -0
  137. package/lib/services/storage.service.d.ts +13 -0
  138. package/lib/tam.i18n.d.ts +24 -0
  139. package/lib/wrapper.d.ts +203 -0
  140. package/package.json +1 -5
  141. package/public-api.d.ts +15 -0
  142. package/rangertechnologies-ngnxt-2.1.108.tgz +0 -0
  143. package/src/lib/style.css +1817 -0
@@ -0,0 +1,115 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { ChangeWrapper } from '../../model/changeWrapper';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../services/change.service";
5
+ import * as i2 from "../../services/data.service";
6
+ import * as i3 from "../../i18n.service";
7
+ import * as i4 from "@angular/common";
8
+ export class CustomRadioComponent {
9
+ changeService;
10
+ dataService;
11
+ i18nService;
12
+ options = [];
13
+ apiMeta;
14
+ selectedValue;
15
+ progressBar;
16
+ id;
17
+ readOnly = false;
18
+ errorMessage;
19
+ error;
20
+ fromShengel = false;
21
+ referenceField;
22
+ token;
23
+ valueChange = new EventEmitter();
24
+ invalidFieldIds = [];
25
+ labelField;
26
+ valueField;
27
+ subscription;
28
+ constructor(changeService, dataService, i18nService) {
29
+ this.changeService = changeService;
30
+ this.dataService = dataService;
31
+ this.i18nService = i18nService;
32
+ this.changeService.submitValidate$.subscribe((data) => {
33
+ this.invalidFieldIds.push(data);
34
+ });
35
+ }
36
+ ngOnInit() {
37
+ // VD 31NOV24 null check
38
+ if (this.apiMeta) {
39
+ let apiObj = JSON.parse(this.apiMeta);
40
+ this.labelField = apiObj.field;
41
+ this.dataService.apiResponse(apiObj.endpoint)?.subscribe((apiResponse) => {
42
+ let responses;
43
+ if (apiObj.variable) {
44
+ responses = this.dataService.getValue(apiResponse, apiObj.variable);
45
+ let results = [];
46
+ for (let i = 0; i < responses?.length; i++) {
47
+ var resp = responses[i];
48
+ results.push(resp);
49
+ }
50
+ this.options = results;
51
+ }
52
+ else {
53
+ responses = apiResponse;
54
+ this.options = responses;
55
+ }
56
+ });
57
+ let sourceId = apiObj.sourceQuestionId;
58
+ if (sourceId) {
59
+ this.subscription = this.changeService.changeAnnounced$.subscribe((changeValue) => {
60
+ if (changeValue != undefined) {
61
+ if (changeValue.valueObj != undefined && changeValue.fromQuestionId == apiObj.sourceQuestionId) {
62
+ this.selectedValue = changeValue.valueObj[apiObj.valueField];
63
+ let value = {};
64
+ value['name'] = this.selectedValue;
65
+ this.radioChange(value);
66
+ }
67
+ this.changeService.confirmChange(apiObj.sourceQuestionId);
68
+ }
69
+ });
70
+ }
71
+ }
72
+ }
73
+ radioChange(event) {
74
+ let change = new ChangeWrapper();
75
+ change.fromQuestionId = this.id;
76
+ change.valueObj = event.target?.id ? event.target?.id : '';
77
+ change.referenceField = this.referenceField;
78
+ change.selectedObj = event ? event[this.labelField] : '';
79
+ this.valueChange.emit(change);
80
+ if (event) {
81
+ this.invalidFieldIds = [];
82
+ }
83
+ }
84
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomRadioComponent, deps: [{ token: i1.ChangeService }, { token: i2.DataService }, { token: i3.I18nService }], target: i0.ɵɵFactoryTarget.Component });
85
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomRadioComponent, selector: "app-custom-radio", inputs: { options: "options", apiMeta: "apiMeta", selectedValue: "selectedValue", progressBar: "progressBar", id: "id", readOnly: "readOnly", errorMessage: "errorMessage", error: "error", fromShengel: "fromShengel", referenceField: "referenceField", token: "token" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<!-- RS 09DEC24 Changed keys-->\n <!-- RS 019JAN25 -->\n <!-- validate for NULL -->\n<div class=\"custom-radio-container\">\n <div\n *ngFor=\"let option of options\"\n [class]=\"invalidFieldIds.includes(id) || error ? 'custom-radio-option invalid' : 'custom-radio-option'\"\n >\n <input\n type=\"radio\"\n [id]=\"apiMeta !== undefined && apiMeta !== null ? option[labelField] : option.value\"\n [checked] = \"selectedValue == option.value\"\n [name]=\"id\"\n [value]=\"selectedValue\"\n (change)=\"radioChange($event)\"\n [disabled]=\"readOnly\"\n />\n <label class=\"nxt-radio-label\" [for]=\"apiMeta !== undefined && apiMeta !== null ? option[labelField] : option.value\">{{ apiMeta !== undefined && apiMeta !== null ? option[labelField] : option.value}}</label>\n </div>\n <span *ngIf=\"error || invalidFieldIds.includes(id)\" class=\"error-msg\">{{ errorMessage }}</span>\n</div>", styles: [".custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.custom-radio-option.invalid label{color:red}.error-msg{color:red;font-size:12px;margin-top:5px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
86
+ }
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomRadioComponent, decorators: [{
88
+ type: Component,
89
+ args: [{ selector: 'app-custom-radio', template: "<!-- RS 09DEC24 Changed keys-->\n <!-- RS 019JAN25 -->\n <!-- validate for NULL -->\n<div class=\"custom-radio-container\">\n <div\n *ngFor=\"let option of options\"\n [class]=\"invalidFieldIds.includes(id) || error ? 'custom-radio-option invalid' : 'custom-radio-option'\"\n >\n <input\n type=\"radio\"\n [id]=\"apiMeta !== undefined && apiMeta !== null ? option[labelField] : option.value\"\n [checked] = \"selectedValue == option.value\"\n [name]=\"id\"\n [value]=\"selectedValue\"\n (change)=\"radioChange($event)\"\n [disabled]=\"readOnly\"\n />\n <label class=\"nxt-radio-label\" [for]=\"apiMeta !== undefined && apiMeta !== null ? option[labelField] : option.value\">{{ apiMeta !== undefined && apiMeta !== null ? option[labelField] : option.value}}</label>\n </div>\n <span *ngIf=\"error || invalidFieldIds.includes(id)\" class=\"error-msg\">{{ errorMessage }}</span>\n</div>", styles: [".custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.custom-radio-option.invalid label{color:red}.error-msg{color:red;font-size:12px;margin-top:5px}\n"] }]
90
+ }], ctorParameters: () => [{ type: i1.ChangeService }, { type: i2.DataService }, { type: i3.I18nService }], propDecorators: { options: [{
91
+ type: Input
92
+ }], apiMeta: [{
93
+ type: Input
94
+ }], selectedValue: [{
95
+ type: Input
96
+ }], progressBar: [{
97
+ type: Input
98
+ }], id: [{
99
+ type: Input
100
+ }], readOnly: [{
101
+ type: Input
102
+ }], errorMessage: [{
103
+ type: Input
104
+ }], error: [{
105
+ type: Input
106
+ }], fromShengel: [{
107
+ type: Input
108
+ }], referenceField: [{
109
+ type: Input
110
+ }], token: [{
111
+ type: Input
112
+ }], valueChange: [{
113
+ type: Output
114
+ }] } });
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJhZGlvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1yYWRpby9jdXN0b20tcmFkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLXJhZGlvL2N1c3RvbS1yYWRpby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBWTFELE1BQU0sT0FBTyxvQkFBb0I7SUFxQnJCO0lBQ0E7SUFDRDtJQXJCQSxPQUFPLEdBQVUsRUFBRSxDQUFDO0lBQ3BCLE9BQU8sQ0FBUztJQUNoQixhQUFhLENBQVM7SUFDdEIsV0FBVyxDQUFVO0lBQ3JCLEVBQUUsQ0FBUztJQUNYLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsWUFBWSxDQUFTO0lBQ3JCLEtBQUssQ0FBTTtJQUNYLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0IsY0FBYyxDQUFTO0lBQ3ZCLEtBQUssQ0FBUztJQUNiLFdBQVcsR0FBZ0MsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDdkYsZUFBZSxHQUFhLEVBQUUsQ0FBQztJQUV4QixVQUFVLENBQVM7SUFDbkIsVUFBVSxDQUFTO0lBQzFCLFlBQVksQ0FBZTtJQUUzQixZQUNVLGFBQTRCLEVBQzVCLFdBQXdCLEVBQ3pCLFdBQXdCO1FBRnZCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3pCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRS9CLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3BELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTix3QkFBd0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxNQUFNLEdBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBRS9CLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDdkUsSUFBSSxTQUFTLENBQUM7Z0JBQ2QsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3BCLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNwRSxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7d0JBQzNDLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDckIsQ0FBQztvQkFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztnQkFDekIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFNBQVMsR0FBRyxXQUFXLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7WUFDdkMsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUMvRCxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUNkLElBQUksV0FBVyxJQUFJLFNBQVMsRUFBRSxDQUFDO3dCQUM3QixJQUFJLFdBQVcsQ0FBQyxRQUFRLElBQUksU0FBUyxJQUFJLFdBQVcsQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7NEJBQy9GLElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQzdELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQzs0QkFDZixLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs0QkFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDMUIsQ0FBQzt3QkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDNUQsQ0FBQztnQkFDSCxDQUFDLENBQ0YsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLElBQUksTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0QsTUFBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO3dHQWpGVSxvQkFBb0I7NEZBQXBCLG9CQUFvQiw2V0NiakMsNDZCQW9CTTs7NEZEUE8sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQjtzSUFNbkIsT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhbmdlV3JhcHBlciB9IGZyb20gJy4uLy4uL21vZGVsL2NoYW5nZVdyYXBwZXInO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaTE4bi5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVBJTWV0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYXBpbWV0YSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jdXN0b20tcmFkaW8nLFxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXJhZGlvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3VzdG9tLXJhZGlvLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21SYWRpb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgb3B0aW9uczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgYXBpTWV0YTogc3RyaW5nO1xuICBASW5wdXQoKSBzZWxlY3RlZFZhbHVlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHByb2dyZXNzQmFyOiBib29sZWFuO1xuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgQElucHV0KCkgZXJyb3I6IGFueTtcbiAgQElucHV0KCkgZnJvbVNoZW5nZWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcmVmZXJlbmNlRmllbGQ6IHN0cmluZztcbiAgQElucHV0KCkgdG9rZW46IHN0cmluZztcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Q2hhbmdlV3JhcHBlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPENoYW5nZVdyYXBwZXI+KCk7XG4gIGludmFsaWRGaWVsZElkczogc3RyaW5nW10gPSBbXTtcblxuICBwdWJsaWMgbGFiZWxGaWVsZDogc3RyaW5nO1xuICBwdWJsaWMgdmFsdWVGaWVsZDogc3RyaW5nO1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZVxuICApIHtcbiAgICB0aGlzLmNoYW5nZVNlcnZpY2Uuc3VibWl0VmFsaWRhdGUkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5pbnZhbGlkRmllbGRJZHMucHVzaChkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFZEIDMxTk9WMjQgbnVsbCBjaGVja1xuICAgIGlmICh0aGlzLmFwaU1ldGEpIHtcbiAgICAgIGxldCBhcGlPYmo6IEFQSU1ldGEgPSBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSk7XG4gICAgICB0aGlzLmxhYmVsRmllbGQgPSBhcGlPYmouZmllbGQ7XG5cbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoYXBpT2JqLmVuZHBvaW50KT8uc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xuICAgICAgICBsZXQgcmVzcG9uc2VzO1xuICAgICAgICBpZiAoYXBpT2JqLnZhcmlhYmxlKSB7XG4gICAgICAgICAgcmVzcG9uc2VzID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShhcGlSZXNwb25zZSwgYXBpT2JqLnZhcmlhYmxlKTtcbiAgICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzcG9uc2VzPy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHJlc3AgPSByZXNwb25zZXNbaV07XG4gICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHJlc3VsdHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzcG9uc2VzID0gYXBpUmVzcG9uc2U7XG4gICAgICAgICAgdGhpcy5vcHRpb25zID0gcmVzcG9uc2VzO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbGV0IHNvdXJjZUlkID0gYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQ7XG4gICAgICBpZiAoc291cmNlSWQpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPSB1bmRlZmluZWQgJiYgY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT0gYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBjaGFuZ2VWYWx1ZS52YWx1ZU9ialthcGlPYmoudmFsdWVGaWVsZF07XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0ge307XG4gICAgICAgICAgICAgICAgdmFsdWVbJ25hbWUnXSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJhZGlvQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuY29uZmlybUNoYW5nZShhcGlPYmouc291cmNlUXVlc3Rpb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJhZGlvQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBsZXQgY2hhbmdlID0gbmV3IENoYW5nZVdyYXBwZXIoKTtcbiAgICBjaGFuZ2UuZnJvbVF1ZXN0aW9uSWQgPSB0aGlzLmlkO1xuICAgIGNoYW5nZS52YWx1ZU9iaiA9IGV2ZW50LnRhcmdldD8uaWQgPyBldmVudC50YXJnZXQ/LmlkIDogJyc7XG4gICAgY2hhbmdlLnJlZmVyZW5jZUZpZWxkID0gdGhpcy5yZWZlcmVuY2VGaWVsZDtcbiAgICBjaGFuZ2Uuc2VsZWN0ZWRPYmogPSBldmVudCA/IGV2ZW50W3RoaXMubGFiZWxGaWVsZF0gOiAnJztcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2hhbmdlKTtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuaW52YWxpZEZpZWxkSWRzID0gW107XG4gICAgfVxuICB9XG5cbn1cbiIsIjwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiA8IS0tIFJTIDAxOUpBTjI1IC0tPlxuIDwhLS0gdmFsaWRhdGUgZm9yIE5VTEwgIC0tPlxuPGRpdiBjbGFzcz1cImN1c3RvbS1yYWRpby1jb250YWluZXJcIj5cbiAgPGRpdlxuICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc1wiXG4gICAgW2NsYXNzXT1cImludmFsaWRGaWVsZElkcy5pbmNsdWRlcyhpZCkgfHwgZXJyb3IgPyAnY3VzdG9tLXJhZGlvLW9wdGlvbiBpbnZhbGlkJyA6ICdjdXN0b20tcmFkaW8tb3B0aW9uJ1wiXG4gID5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICBbaWRdPVwiYXBpTWV0YSAhPT0gdW5kZWZpbmVkICYmIGFwaU1ldGEgIT09IG51bGwgPyBvcHRpb25bbGFiZWxGaWVsZF0gOiBvcHRpb24udmFsdWVcIlxuICAgICAgW2NoZWNrZWRdID0gXCJzZWxlY3RlZFZhbHVlID09IG9wdGlvbi52YWx1ZVwiXG4gICAgICBbbmFtZV09XCJpZFwiXG4gICAgICBbdmFsdWVdPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAoY2hhbmdlKT1cInJhZGlvQ2hhbmdlKCRldmVudClcIlxuICAgICAgW2Rpc2FibGVkXT1cInJlYWRPbmx5XCJcbiAgICAvPlxuICAgIDxsYWJlbCBjbGFzcz1cIm54dC1yYWRpby1sYWJlbFwiIFtmb3JdPVwiYXBpTWV0YSAhPT0gdW5kZWZpbmVkICYmIGFwaU1ldGEgIT09IG51bGwgPyBvcHRpb25bbGFiZWxGaWVsZF0gOiBvcHRpb24udmFsdWVcIj57eyBhcGlNZXRhICE9PSB1bmRlZmluZWQgJiYgYXBpTWV0YSAhPT0gbnVsbCA/IG9wdGlvbltsYWJlbEZpZWxkXSA6IG9wdGlvbi52YWx1ZX19PC9sYWJlbD5cbiAgPC9kaXY+XG4gIDxzcGFuICpuZ0lmPVwiZXJyb3IgfHwgaW52YWxpZEZpZWxkSWRzLmluY2x1ZGVzKGlkKVwiIGNsYXNzPVwiZXJyb3ItbXNnXCI+e3sgZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuPC9kaXY+Il19
@@ -0,0 +1,186 @@
1
+ // Changes commented out due to Angular version compatibility; will apply after upgrade.
2
+ // // RS 06JAN2025
3
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
4
+ import { QuillEditorComponent } from 'ngx-quill';
5
+ import { FormsModule } from '@angular/forms';
6
+ import Quill from 'quill';
7
+ import { Mention } from 'quill-mention';
8
+ import ImageResizor from 'quill-image-resizor';
9
+ import { CommonModule } from '@angular/common';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "../../i18n.service";
12
+ import * as i2 from "../../services/change.service";
13
+ import * as i3 from "@angular/forms";
14
+ import * as i4 from "@angular/common";
15
+ // RS 17JAN2025
16
+ // An array fontFamilyArr is created containing a list of font family names as strings.
17
+ const fontFamilyArr = ["Roboto", "Roboto Condensed", "Arial", "Verdana", "Tahoma", "Trebuchet MS",
18
+ "Georgia", "Times New Roman", "Courier New", "Palatino Linotype",
19
+ "Segoe UI", "Calibri", "Calibri Light", "Sans-Serif", "Helvetica",
20
+ "Impact", "Garamond", "Comic Sans MS", "Lucida Console", "Franklin Gothic Medium"];
21
+ // Register Quill modules
22
+ Quill.register('modules/mention', Mention);
23
+ ImageResizor.Quill = Quill;
24
+ Quill.register('modules/imageResizor', ImageResizor);
25
+ // RS 17JAN2025
26
+ //The Quill font style attributor is imported and it is registered with Quil
27
+ let fonts = Quill.import("attributors/style/font");
28
+ fonts.whitelist = fontFamilyArr;
29
+ Quill.register(fonts, true);
30
+ export const QuillConfiguration = {
31
+ imageResizor: {},
32
+ toolbar: {
33
+ container: [
34
+ [{ 'font': fontFamilyArr }], //RS 17JAN2025 Added font family dropdown
35
+ ['bold', 'italic', 'underline', 'strike'],
36
+ ['blockquote', 'code-block'],
37
+ [{ header: [1, 2, 3, 4, 5, 6, false] }],
38
+ [{ list: 'ordered' }, { list: 'bullet' }],
39
+ [{ color: [] }, { background: [] }],
40
+ [{ align: [] }],
41
+ ['link', 'image', 'video'],
42
+ ['formula'],
43
+ ['clean'],
44
+ ],
45
+ },
46
+ mention: {
47
+ allowedChars: /^[A-Za-z\sÅÄÖåäö]*$/,
48
+ mentionDenotationChars: ['@', '#'],
49
+ source: function (searchTerm, renderList) {
50
+ const values = [
51
+ { id: 1, value: 'User 1' },
52
+ { id: 2, value: 'User 2' },
53
+ ];
54
+ if (searchTerm.length === 0) {
55
+ renderList(values, searchTerm);
56
+ }
57
+ else {
58
+ const matches = values.filter((item) => item.value.toLowerCase().includes(searchTerm.toLowerCase()));
59
+ renderList(matches, searchTerm);
60
+ }
61
+ },
62
+ },
63
+ };
64
+ // resize: {
65
+ // displaySize: true,
66
+ // modules: ['Resize', 'DisplaySize', 'Toolbar'],
67
+ // toolbarStyles: {
68
+ // backgroundColor: 'black',
69
+ // border: 'none',
70
+ // color: 'white'
71
+ // },
72
+ // handleStyles: {
73
+ // backgroundColor: 'black',
74
+ // border: 'none',
75
+ // color: 'white'
76
+ // }
77
+ // },
78
+ export class CustomRichTextComponent {
79
+ i18nService;
80
+ changeService;
81
+ value = '';
82
+ placeholder;
83
+ error;
84
+ question;
85
+ rows; //The number of visible text lines for the control
86
+ readOnly = false;
87
+ textValueChange = new EventEmitter();
88
+ minLength;
89
+ maxLength;
90
+ // @Input() value: any = ''; // Set default value
91
+ quillConfiguration = QuillConfiguration;
92
+ subscription;
93
+ constructor(i18nService, changeService) {
94
+ this.i18nService = i18nService;
95
+ this.changeService = changeService;
96
+ }
97
+ ngOnInit() {
98
+ console.log('Rich Text Init:', {
99
+ value: this.value,
100
+ question: this.question
101
+ });
102
+ if (this.value === undefined || this.value === null) {
103
+ this.value = '';
104
+ this.textValueChange.emit('');
105
+ }
106
+ this.initializeDependency();
107
+ }
108
+ // Separated dependency initialization for better organization
109
+ initializeDependency() {
110
+ if (this.question?.subText) {
111
+ console.log('subText:', this.question.subText);
112
+ try {
113
+ const dependencyObj = JSON.parse(this.question.subText);
114
+ if (dependencyObj?.sourceQuestionId) {
115
+ this.subscription = this.changeService.changeAnnounced$.subscribe((changeValue) => {
116
+ console.log('Change Value:', changeValue);
117
+ if (changeValue && changeValue.valueObj &&
118
+ changeValue.fromQuestionId === dependencyObj.sourceQuestionId) {
119
+ this.value = changeValue.valueObj[dependencyObj.valueField];
120
+ this.textValueChange.emit(this.value);
121
+ }
122
+ this.changeService.confirmChange(dependencyObj.sourceQuestionId);
123
+ });
124
+ }
125
+ }
126
+ catch (error) {
127
+ console.error('Error parsing subText:', error);
128
+ }
129
+ }
130
+ }
131
+ // onEditorChange(event: any): void {
132
+ // if (event && event.html !== undefined) {
133
+ // this.textValueChange.emit(event.html);
134
+ // } else {
135
+ // this.textValueChange.emit('');
136
+ // }
137
+ // }
138
+ // onEditorChange(event: any): void {
139
+ // console.log('Typing detected...', event.html);
140
+ // if (this.typingTimer) {
141
+ // clearTimeout(this.typingTimer); // Clear previous timer
142
+ // }
143
+ // this.typingTimer = setTimeout(() => {
144
+ // console.log('Debounced event fired:', event.html);
145
+ // const newValue = event?.html ? event.html : ''; // Ensure empty values are handled
146
+ // this.textValueChange.emit(newValue);
147
+ // }, this.doneTypingInterval);
148
+ // }
149
+ // RS 28JAN2015
150
+ onEditorFocusOut() {
151
+ const currentValue = this.value || '';
152
+ this.textValueChange.emit(currentValue);
153
+ console.log('Rich Text Editor Focus Out - Emitting Value:', currentValue);
154
+ }
155
+ // Added ngOnDestroy to prevent memory leaks
156
+ ngOnDestroy() {
157
+ if (this.subscription) {
158
+ this.subscription.unsubscribe();
159
+ }
160
+ }
161
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomRichTextComponent, deps: [{ token: i1.I18nService }, { token: i2.ChangeService }], target: i0.ɵɵFactoryTarget.Component });
162
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomRichTextComponent, isStandalone: true, selector: "app-custom-rich-text", inputs: { value: "value", placeholder: "placeholder", error: "error", question: "question", rows: "rows", readOnly: "readOnly", minLength: "minLength", maxLength: "maxLength" }, outputs: { textValueChange: "textValueChange" }, ngImport: i0, template: "<!-- RS 06JAN25 -->\n<div class=\"rich-text-container\">\n <quill-editor\n [(ngModel)]=\"value\"\n [placeholder]=\"placeholder\"\n [modules]=\"quillConfiguration\"\n [readOnly]=\"readOnly\"\n (focusout)=\"onEditorFocusOut()\"\n [class.error]=\"error\">\n </quill-editor>\n <div *ngIf=\"error\" class=\"error-message\">\n {{ error }}\n </div>\n</div>", styles: [".rich-text-container{width:100%;margin:10px 0}.error{border:1px solid red}:is() .ql-editor img{cursor:pointer}:is() .image-resizer{display:block!important;visibility:visible!important}:is() .ql-editor .image-resizer{border:1px dashed #000;position:absolute}:is() .ql-editor .image-resizer .handle{background-color:#000;border:1px solid #fff;border-radius:50%;height:12px;width:12px;position:absolute}quill-editor{width:100%}\n"], dependencies: [{ kind: "component", type: QuillEditorComponent, selector: "quill-editor" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
163
+ }
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomRichTextComponent, decorators: [{
165
+ type: Component,
166
+ args: [{ imports: [QuillEditorComponent, FormsModule, CommonModule], selector: 'app-custom-rich-text', standalone: true, template: "<!-- RS 06JAN25 -->\n<div class=\"rich-text-container\">\n <quill-editor\n [(ngModel)]=\"value\"\n [placeholder]=\"placeholder\"\n [modules]=\"quillConfiguration\"\n [readOnly]=\"readOnly\"\n (focusout)=\"onEditorFocusOut()\"\n [class.error]=\"error\">\n </quill-editor>\n <div *ngIf=\"error\" class=\"error-message\">\n {{ error }}\n </div>\n</div>", styles: [".rich-text-container{width:100%;margin:10px 0}.error{border:1px solid red}:is() .ql-editor img{cursor:pointer}:is() .image-resizer{display:block!important;visibility:visible!important}:is() .ql-editor .image-resizer{border:1px dashed #000;position:absolute}:is() .ql-editor .image-resizer .handle{background-color:#000;border:1px solid #fff;border-radius:50%;height:12px;width:12px;position:absolute}quill-editor{width:100%}\n"] }]
167
+ }], ctorParameters: () => [{ type: i1.I18nService }, { type: i2.ChangeService }], propDecorators: { value: [{
168
+ type: Input
169
+ }], placeholder: [{
170
+ type: Input
171
+ }], error: [{
172
+ type: Input
173
+ }], question: [{
174
+ type: Input
175
+ }], rows: [{
176
+ type: Input
177
+ }], readOnly: [{
178
+ type: Input
179
+ }], textValueChange: [{
180
+ type: Output
181
+ }], minLength: [{
182
+ type: Input
183
+ }], maxLength: [{
184
+ type: Input
185
+ }] } });
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJpY2gtdGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9jdXN0b20tcmljaC10ZXh0L2N1c3RvbS1yaWNoLXRleHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLXJpY2gtdGV4dC9jdXN0b20tcmljaC10ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdGQUF3RjtBQUN4RixrQkFBa0I7QUFDbEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBcUMsTUFBTSxlQUFlLENBQUM7QUFLbEgsT0FBTyxFQUFFLG9CQUFvQixFQUFnQixNQUFNLFdBQVcsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDNUMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxZQUFZLE1BQU0scUJBQXFCLENBQUE7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFFL0MsZUFBZTtBQUNmLHVGQUF1RjtBQUN2RixNQUFNLGFBQWEsR0FBRyxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxjQUFjO0lBQy9GLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsbUJBQW1CO0lBQ2hFLFVBQVUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxXQUFXO0lBQ2pFLFFBQVEsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLHdC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QWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4Q0FBOEMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUMsNENBQTRDO0lBQzVDLFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO3dHQTVGVSx1QkFBdUI7NEZBQXZCLHVCQUF1QixtVEMzRnBDLHdYQWFNLG9lRHVFUSxvQkFBb0Isd0RBQUUsV0FBVyw4VkFBRSxZQUFZOzs0RkFPaEQsdUJBQXVCO2tCQVJuQyxTQUFTOzhCQUNHLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxZQUNoRCxzQkFBc0IsY0FDcEIsSUFBSTs0R0FNVCxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENoYW5nZXMgY29tbWVudGVkIG91dCBkdWUgdG8gQW5ndWxhciB2ZXJzaW9uIGNvbXBhdGliaWxpdHk7IHdpbGwgYXBwbHkgYWZ0ZXIgdXBncmFkZS5cbi8vIC8vIFJTIDA2SkFOMjAyNVxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgT25EZXN0cm95LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uL2kxOG4uc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBEZXBlbmRlbmN5TWV0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGVwZW5kZW5jeU1ldGEnO1xuaW1wb3J0IHsgUXVpbGxFZGl0b3JDb21wb25lbnQsIFF1aWxsTW9kdWxlcyB9IGZyb20gJ25neC1xdWlsbCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IFF1aWxsIGZyb20gJ3F1aWxsJztcbmltcG9ydCB7IE1lbnRpb24gfSBmcm9tICdxdWlsbC1tZW50aW9uJztcbmltcG9ydCBJbWFnZVJlc2l6b3IgZnJvbSAncXVpbGwtaW1hZ2UtcmVzaXpvcidcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8vIFJTIDE3SkFOMjAyNVxuLy8gQW4gYXJyYXkgZm9udEZhbWlseUFyciBpcyBjcmVhdGVkIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGZvbnQgZmFtaWx5IG5hbWVzIGFzIHN0cmluZ3MuXG5jb25zdCBmb250RmFtaWx5QXJyID0gW1wiUm9ib3RvXCIsIFwiUm9ib3RvIENvbmRlbnNlZFwiLCBcIkFyaWFsXCIsIFwiVmVyZGFuYVwiLCBcIlRhaG9tYVwiLCBcIlRyZWJ1Y2hldCBNU1wiLFxuICBcIkdlb3JnaWFcIiwgXCJUaW1lcyBOZXcgUm9tYW5cIiwgXCJDb3VyaWVyIE5ld1wiLCBcIlBhbGF0aW5vIExpbm90eXBlXCIsXG4gIFwiU2Vnb2UgVUlcIiwgXCJDYWxpYnJpXCIsIFwiQ2FsaWJyaSBMaWdodFwiLCBcIlNhbnMtU2VyaWZcIiwgXCJIZWx2ZXRpY2FcIixcbiAgXCJJbXBhY3RcIiwgXCJHYXJhbW9uZFwiLCBcIkNvbWljIFNhbnMgTVNcIiwgXCJMdWNpZGEgQ29uc29sZVwiLCBcIkZyYW5rbGluIEdvdGhpYyBNZWRpdW1cIl07XG5cbi8vIFJlZ2lzdGVyIFF1aWxsIG1vZHVsZXNcblF1aWxsLnJlZ2lzdGVyKCdtb2R1bGVzL21lbnRpb24nLCBNZW50aW9uKTtcbkltYWdlUmVzaXpvci5RdWlsbCA9IFF1aWxsXG5RdWlsbC5yZWdpc3RlcignbW9kdWxlcy9pbWFnZVJlc2l6b3InLCBJbWFnZVJlc2l6b3IpXG5cbi8vIFJTIDE3SkFOMjAyNVxuLy9UaGUgUXVpbGwgZm9udCBzdHlsZSBhdHRyaWJ1dG9yIGlzIGltcG9ydGVkIGFuZCBpdCBpcyByZWdpc3RlcmVkIHdpdGggUXVpbFxubGV0IGZvbnRzOiBhbnkgPSBRdWlsbC5pbXBvcnQoXCJhdHRyaWJ1dG9ycy9zdHlsZS9mb250XCIpO1xuZm9udHMud2hpdGVsaXN0ID0gZm9udEZhbWlseUFycjtcblF1aWxsLnJlZ2lzdGVyKGZvbnRzLCB0cnVlKTtcblxuZXhwb3J0IGNvbnN0IFF1aWxsQ29uZmlndXJhdGlvbjogUXVpbGxNb2R1bGVzID0ge1xuICAgIGltYWdlUmVzaXpvcjoge30sXG4gIHRvb2xiYXI6IHtcbiAgICBjb250YWluZXI6IFtcbiAgICAgIFt7ICdmb250JzogZm9udEZhbWlseUFyciB9XSwgIC8vUlMgMTdKQU4yMDI1ICBBZGRlZCBmb250IGZhbWlseSBkcm9wZG93blxuICAgICAgWydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnLCAnc3RyaWtlJ10sXG4gICAgICBbJ2Jsb2NrcXVvdGUnLCAnY29kZS1ibG9jayddLFxuICAgICAgW3sgaGVhZGVyOiBbMSwgMiwgMywgNCwgNSwgNiwgZmFsc2VdIH1dLFxuICAgICAgW3sgbGlzdDogJ29yZGVyZWQnIH0sIHsgbGlzdDogJ2J1bGxldCcgfV0sXG4gICAgICBbeyBjb2xvcjogW10gfSwgeyBiYWNrZ3JvdW5kOiBbXSB9XSxcbiAgICAgIFt7IGFsaWduOiBbXSB9XSxcbiAgICAgIFsnbGluaycsICdpbWFnZScsICd2aWRlbyddLFxuICAgICAgWydmb3JtdWxhJ10sXG4gICAgICBbJ2NsZWFuJ10sXG4gICAgXSxcbiAgfSxcbiAgbWVudGlvbjoge1xuICAgIGFsbG93ZWRDaGFyczogL15bQS1aYS16XFxzw4XDhMOWw6XDpMO2XSokLyxcbiAgICBtZW50aW9uRGVub3RhdGlvbkNoYXJzOiBbJ0AnLCAnIyddLFxuICAgIHNvdXJjZTogZnVuY3Rpb24gKHNlYXJjaFRlcm06IHN0cmluZywgcmVuZGVyTGlzdDogYW55KSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBbXG4gICAgICAgIHsgaWQ6IDEsIHZhbHVlOiAnVXNlciAxJyB9LFxuICAgICAgICB7IGlkOiAyLCB2YWx1ZTogJ1VzZXIgMicgfSxcbiAgICAgIF07XG5cbiAgICAgIGlmIChzZWFyY2hUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZW5kZXJMaXN0KHZhbHVlcywgc2VhcmNoVGVybSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gdmFsdWVzLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgICBpdGVtLnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICApO1xuICAgICAgICByZW5kZXJMaXN0KG1hdGNoZXMsIHNlYXJjaFRlcm0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG59O1xuXG4vLyByZXNpemU6IHtcbi8vICAgICBkaXNwbGF5U2l6ZTogdHJ1ZSxcbi8vICAgICBtb2R1bGVzOiBbJ1Jlc2l6ZScsICdEaXNwbGF5U2l6ZScsICdUb29sYmFyJ10sXG4vLyAgICAgdG9vbGJhclN0eWxlczoge1xuLy8gICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdibGFjaycsXG4vLyAgICAgICAgIGJvcmRlcjogJ25vbmUnLFxuLy8gICAgICAgICBjb2xvcjogJ3doaXRlJ1xuLy8gICAgIH0sXG4vLyAgICAgaGFuZGxlU3R5bGVzOiB7XG4vLyAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ2JsYWNrJyxcbi8vICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4vLyAgICAgICAgIGNvbG9yOiAnd2hpdGUnXG4vLyAgICAgfVxuLy8gfSxcbkBDb21wb25lbnQoe1xuICAgIGltcG9ydHM6IFtRdWlsbEVkaXRvckNvbXBvbmVudCwgRm9ybXNNb2R1bGUgLENvbW1vbk1vZHVsZV0sXG4gICAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLXJpY2gtdGV4dCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXJpY2gtdGV4dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY3VzdG9tLXJpY2gtdGV4dC5jb21wb25lbnQuY3NzJ11cbn0pXG5cbmV4cG9ydCBjbGFzcyBDdXN0b21SaWNoVGV4dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdmFsdWU6IGFueSB8IGFueVtdID0gJyc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGVycm9yOiBhbnk7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIHJvd3M6TnVtYmVyOyAvL1RoZSBudW1iZXIgb2YgdmlzaWJsZSB0ZXh0IGxpbmVzIGZvciB0aGUgY29udHJvbFxuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlO1xuICBAT3V0cHV0KCkgdGV4dFZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBASW5wdXQoKSBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIG1heExlbmd0aD86IG51bWJlcjtcbiAgLy8gQElucHV0KCkgdmFsdWU6IGFueSA9ICcnOyAvLyBTZXQgZGVmYXVsdCB2YWx1ZVxuXG4gIHF1aWxsQ29uZmlndXJhdGlvbjogUXVpbGxNb2R1bGVzID0gUXVpbGxDb25maWd1cmF0aW9uO1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlU2VydmljZTogQ2hhbmdlU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdSaWNoIFRleHQgSW5pdDonLCB7XG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uXG4gICAgfSk7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgICB0aGlzLnRleHRWYWx1ZUNoYW5nZS5lbWl0KCcnKTtcblxuICAgIH1cbiAgICB0aGlzLmluaXRpYWxpemVEZXBlbmRlbmN5KCk7XG4gIH1cblxuICAvLyBTZXBhcmF0ZWQgZGVwZW5kZW5jeSBpbml0aWFsaXphdGlvbiBmb3IgYmV0dGVyIG9yZ2FuaXphdGlvblxuICBwcml2YXRlIGluaXRpYWxpemVEZXBlbmRlbmN5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uPy5zdWJUZXh0KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzdWJUZXh0OicsIHRoaXMucXVlc3Rpb24uc3ViVGV4dCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZXBlbmRlbmN5T2JqOiBEZXBlbmRlbmN5TWV0YSA9IEpTT04ucGFyc2UodGhpcy5xdWVzdGlvbi5zdWJUZXh0KTtcbiAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5T2JqPy5zb3VyY2VRdWVzdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2VWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZSBWYWx1ZTonLCBjaGFuZ2VWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhbmdlVmFsdWUgJiYgY2hhbmdlVmFsdWUudmFsdWVPYmogJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCA9PT0gZGVwZW5kZW5jeU9iai5zb3VyY2VRdWVzdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNoYW5nZVZhbHVlLnZhbHVlT2JqW2RlcGVuZGVuY3lPYmoudmFsdWVGaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0VmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VydmljZS5jb25maXJtQ2hhbmdlKGRlcGVuZGVuY3lPYmouc291cmNlUXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBzdWJUZXh0OicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG4vLyBvbkVkaXRvckNoYW5nZShldmVudDogYW55KTogdm9pZCB7XG4vLyAgIGlmIChldmVudCAmJiBldmVudC5odG1sICE9PSB1bmRlZmluZWQpIHtcbi8vICAgICB0aGlzLnRleHRWYWx1ZUNoYW5nZS5lbWl0KGV2ZW50Lmh0bWwpO1xuLy8gICB9IGVsc2Uge1xuLy8gICAgIHRoaXMudGV4dFZhbHVlQ2hhbmdlLmVtaXQoJycpO1xuLy8gICB9XG4vLyB9XG4vLyBvbkVkaXRvckNoYW5nZShldmVudDogYW55KTogdm9pZCB7XG4vLyAgIGNvbnNvbGUubG9nKCdUeXBpbmcgZGV0ZWN0ZWQuLi4nLCBldmVudC5odG1sKTtcblxuLy8gICBpZiAodGhpcy50eXBpbmdUaW1lcikge1xuLy8gICAgIGNsZWFyVGltZW91dCh0aGlzLnR5cGluZ1RpbWVyKTsgLy8gQ2xlYXIgcHJldmlvdXMgdGltZXJcbi8vICAgfVxuLy8gICB0aGlzLnR5cGluZ1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4vLyAgICAgY29uc29sZS5sb2coJ0RlYm91bmNlZCBldmVudCBmaXJlZDonLCBldmVudC5odG1sKTtcblxuLy8gICAgIGNvbnN0IG5ld1ZhbHVlID0gZXZlbnQ/Lmh0bWwgPyBldmVudC5odG1sIDogJyc7IC8vIEVuc3VyZSBlbXB0eSB2YWx1ZXMgYXJlIGhhbmRsZWRcbi8vICAgICB0aGlzLnRleHRWYWx1ZUNoYW5nZS5lbWl0KG5ld1ZhbHVlKTtcbi8vICAgfSwgdGhpcy5kb25lVHlwaW5nSW50ZXJ2YWwpO1xuLy8gfVxuXG4vLyBSUyAyOEpBTjIwMTVcbm9uRWRpdG9yRm9jdXNPdXQoKTogdm9pZCB7XG4gIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWUgfHwgJyc7XG4gIHRoaXMudGV4dFZhbHVlQ2hhbmdlLmVtaXQoY3VycmVudFZhbHVlKTtcbiAgY29uc29sZS5sb2coJ1JpY2ggVGV4dCBFZGl0b3IgRm9jdXMgT3V0IC0gRW1pdHRpbmcgVmFsdWU6JywgY3VycmVudFZhbHVlKTtcbn1cblxuICAvLyBBZGRlZCBuZ09uRGVzdHJveSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG5cblxuIiwiPCEtLSBSUyAwNkpBTjI1IC0tPlxuPGRpdiBjbGFzcz1cInJpY2gtdGV4dC1jb250YWluZXJcIj5cbiAgPHF1aWxsLWVkaXRvclxuICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW21vZHVsZXNdPVwicXVpbGxDb25maWd1cmF0aW9uXCJcbiAgICBbcmVhZE9ubHldPVwicmVhZE9ubHlcIlxuICAgIChmb2N1c291dCk9XCJvbkVkaXRvckZvY3VzT3V0KClcIlxuICAgIFtjbGFzcy5lcnJvcl09XCJlcnJvclwiPlxuICA8L3F1aWxsLWVkaXRvcj5cbiAgPGRpdiAqbmdJZj1cImVycm9yXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+XG4gICAge3sgZXJyb3IgfX1cbiAgPC9kaXY+XG48L2Rpdj4iXX0=