@rangertechnologies/ngnxt 2.1.76 → 2.1.77

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 (116) hide show
  1. package/README.md +29 -29
  2. package/esm2022/lib/ar.i18n.mjs +29 -29
  3. package/esm2022/lib/components/custom-button/custom-button.component.mjs +39 -39
  4. package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +366 -366
  5. package/esm2022/lib/components/custom-date/custom-date.component.mjs +47 -47
  6. package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +48 -48
  7. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +219 -212
  8. package/esm2022/lib/components/custom-image/custom-image.component.mjs +34 -34
  9. package/esm2022/lib/components/custom-input/custom-input.component.mjs +93 -93
  10. package/esm2022/lib/components/custom-label/custom-label.component.mjs +21 -21
  11. package/esm2022/lib/components/custom-model/custom-model.component.mjs +48 -48
  12. package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +115 -115
  13. package/esm2022/lib/components/custom-rich-text/custom-rich-text.component.mjs +177 -0
  14. package/esm2022/lib/components/custom-table/custom-table.component.mjs +169 -169
  15. package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +65 -65
  16. package/esm2022/lib/components/custom-time/custom-time.component.mjs +61 -61
  17. package/esm2022/lib/components/dependent-table/dependent-table.component.mjs +42 -42
  18. package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +39 -39
  19. package/esm2022/lib/components/file-upload/file-upload.component.mjs +233 -233
  20. package/esm2022/lib/components/file-view/file-view.component.mjs +46 -46
  21. package/esm2022/lib/components/loader/loader.component.mjs +23 -23
  22. package/esm2022/lib/components/pick-location/pick-location.component.mjs +188 -188
  23. package/esm2022/lib/components/search-box/search-box.component.mjs +130 -130
  24. package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +123 -123
  25. package/esm2022/lib/directives/componenthost/componenthost.directive.mjs +19 -19
  26. package/esm2022/lib/en.i18n.mjs +29 -29
  27. package/esm2022/lib/i18n-config.service.mjs +4 -4
  28. package/esm2022/lib/i18n.component.mjs +47 -47
  29. package/esm2022/lib/i18n.module.mjs +38 -38
  30. package/esm2022/lib/i18n.pipe.mjs +25 -25
  31. package/esm2022/lib/i18n.service.mjs +56 -56
  32. package/esm2022/lib/interfaces/actionMeta.mjs +2 -2
  33. package/esm2022/lib/interfaces/apimeta.mjs +2 -2
  34. package/esm2022/lib/interfaces/dependencyMeta.mjs +2 -2
  35. package/esm2022/lib/model/bookletWrapper.mjs +9 -9
  36. package/esm2022/lib/model/changeWrapper.mjs +11 -11
  37. package/esm2022/lib/model/errorWrapper.mjs +6 -6
  38. package/esm2022/lib/model/tableWrapper.mjs +20 -20
  39. package/esm2022/lib/nxt-app.component.mjs +22 -22
  40. package/esm2022/lib/nxt-app.module.mjs +368 -352
  41. package/esm2022/lib/nxt-app.service.mjs +14 -14
  42. package/esm2022/lib/pages/booklet/booklet.component.mjs +541 -541
  43. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +414 -407
  44. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +2392 -2373
  45. package/esm2022/lib/pages/summary-page/summary-page.component.mjs +76 -76
  46. package/esm2022/lib/pipe/get-value.pipe.mjs +50 -50
  47. package/esm2022/lib/sample.mjs +3715 -3431
  48. package/esm2022/lib/services/change.service.mjs +53 -53
  49. package/esm2022/lib/services/data.service.mjs +80 -80
  50. package/esm2022/lib/services/salesforce.service.mjs +46 -46
  51. package/esm2022/lib/services/shared.service.mjs +100 -100
  52. package/esm2022/lib/services/storage.service.mjs +44 -44
  53. package/esm2022/lib/tam.i18n.mjs +29 -29
  54. package/esm2022/lib/wrapper.mjs +175 -175
  55. package/esm2022/public-api.mjs +15 -15
  56. package/esm2022/rangertechnologies-ngnxt.mjs +4 -4
  57. package/fesm2022/rangertechnologies-ngnxt.mjs +10305 -9805
  58. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  59. package/index.d.ts +5 -5
  60. package/lib/ar.i18n.d.ts +24 -24
  61. package/lib/components/custom-button/custom-button.component.d.ts +16 -16
  62. package/lib/components/custom-calendar/custom-calendar.component.d.ts +65 -65
  63. package/lib/components/custom-date/custom-date.component.d.ts +18 -18
  64. package/lib/components/custom-date-picker/custom-date-picker.component.d.ts +19 -19
  65. package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +39 -39
  66. package/lib/components/custom-image/custom-image.component.d.ts +13 -13
  67. package/lib/components/custom-input/custom-input.component.d.ts +31 -31
  68. package/lib/components/custom-label/custom-label.component.d.ts +10 -10
  69. package/lib/components/custom-model/custom-model.component.d.ts +19 -19
  70. package/lib/components/custom-radio/custom-radio.component.d.ts +33 -33
  71. package/lib/components/custom-rich-text/custom-rich-text.component.d.ts +29 -0
  72. package/lib/components/custom-table/custom-table.component.d.ts +43 -43
  73. package/lib/components/custom-text-area/custom-text-area.component.d.ts +22 -22
  74. package/lib/components/custom-time/custom-time.component.d.ts +18 -18
  75. package/lib/components/dependent-table/dependent-table.component.d.ts +15 -15
  76. package/lib/components/dropdown-with-flag/dropdown-with-flag.component.d.ts +16 -16
  77. package/lib/components/file-upload/file-upload.component.d.ts +42 -42
  78. package/lib/components/file-view/file-view.component.d.ts +16 -16
  79. package/lib/components/loader/loader.component.d.ts +11 -11
  80. package/lib/components/pick-location/pick-location.component.d.ts +42 -42
  81. package/lib/components/search-box/search-box.component.d.ts +40 -40
  82. package/lib/components/table-appendix/table-appendix.component.d.ts +30 -30
  83. package/lib/directives/componenthost/componenthost.directive.d.ts +8 -8
  84. package/lib/en.i18n.d.ts +24 -24
  85. package/lib/i18n-config.service.d.ts +2 -2
  86. package/lib/i18n.component.d.ts +11 -11
  87. package/lib/i18n.module.d.ts +9 -9
  88. package/lib/i18n.pipe.d.ts +10 -10
  89. package/lib/i18n.service.d.ts +14 -14
  90. package/lib/interfaces/actionMeta.d.ts +5 -5
  91. package/lib/interfaces/apimeta.d.ts +14 -13
  92. package/lib/interfaces/dependencyMeta.d.ts +8 -8
  93. package/lib/model/bookletWrapper.d.ts +5 -5
  94. package/lib/model/changeWrapper.d.ts +10 -10
  95. package/lib/model/errorWrapper.d.ts +5 -5
  96. package/lib/model/tableWrapper.d.ts +18 -18
  97. package/lib/nxt-app.component.d.ts +8 -8
  98. package/lib/nxt-app.module.d.ts +49 -46
  99. package/lib/nxt-app.service.d.ts +6 -6
  100. package/lib/pages/booklet/booklet.component.d.ts +68 -68
  101. package/lib/pages/questionbook/questionbook.component.d.ts +66 -66
  102. package/lib/pages/questionnaire/questionnaire.component.d.ts +220 -218
  103. package/lib/pages/summary-page/summary-page.component.d.ts +20 -20
  104. package/lib/pipe/get-value.pipe.d.ts +7 -7
  105. package/lib/sample.d.ts +11 -10
  106. package/lib/services/change.service.d.ts +22 -22
  107. package/lib/services/data.service.d.ts +13 -13
  108. package/lib/services/salesforce.service.d.ts +11 -11
  109. package/lib/services/shared.service.d.ts +15 -15
  110. package/lib/services/storage.service.d.ts +13 -13
  111. package/lib/tam.i18n.d.ts +24 -24
  112. package/lib/wrapper.d.ts +203 -203
  113. package/package.json +1 -1
  114. package/public-api.d.ts +10 -10
  115. package/rangertechnologies-ngnxt-2.1.77.tgz +0 -0
  116. package/rangertechnologies-ngnxt-2.1.76.tgz +0 -0
@@ -1,115 +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: "14.3.0", 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: "14.3.0", 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<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 ? 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 ? option[labelField] : option.value\">{{ apiMeta !== undefined ? option[labelField] : option.value }}</label>\n </div>\n <span *ngIf=\"error || invalidFieldIds.includes(id)\" class=\"error-msg\">{{ errorMessage }}</span>\n </div>\n ", 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: "14.3.0", ngImport: i0, type: CustomRadioComponent, decorators: [{
88
- type: Component,
89
- args: [{ selector: 'app-custom-radio', template: "<!-- RS 09DEC24 Changed keys--> \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 ? 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 ? option[labelField] : option.value\">{{ apiMeta !== undefined ? option[labelField] : option.value }}</label>\n </div>\n <span *ngIf=\"error || invalidFieldIds.includes(id)\" class=\"error-msg\">{{ errorMessage }}</span>\n </div>\n ", 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: function () { return [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJhZGlvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1yYWRpby9jdXN0b20tcmFkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLXJhZGlvL2N1c3RvbS1yYWRpby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBWTFELE1BQU0sT0FBTyxvQkFBb0I7SUFxQnJCO0lBQ0E7SUFDRDtJQXJCQSxPQUFPLEdBQVUsRUFBRSxDQUFDO0lBQ3BCLE9BQU8sQ0FBUztJQUNoQixhQUFhLENBQVM7SUFDdEIsV0FBVyxDQUFVO0lBQ3JCLEVBQUUsQ0FBUztJQUNYLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsWUFBWSxDQUFTO0lBQ3JCLEtBQUssQ0FBTTtJQUNYLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0IsY0FBYyxDQUFTO0lBQ3ZCLEtBQUssQ0FBUztJQUNiLFdBQVcsR0FBZ0MsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDdkYsZUFBZSxHQUFhLEVBQUUsQ0FBQztJQUV4QixVQUFVLENBQVM7SUFDbkIsVUFBVSxDQUFTO0lBQzFCLFlBQVksQ0FBZTtJQUUzQixZQUNVLGFBQTRCLEVBQzVCLFdBQXdCLEVBQ3pCLFdBQXdCO1FBRnZCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3pCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRS9CLElBQUksQ0FB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LENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQzt1R0FqRlUsb0JBQW9COzJGQUFwQixvQkFBb0IsNldDYmpDLHMyQkFtQkU7OzJGRE5XLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0I7d0pBTW5CLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYW5nZVdyYXBwZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9jaGFuZ2VXcmFwcGVyJztcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uL2kxOG4uc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFQSU1ldGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FwaW1ldGEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLXJhZGlvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1yYWRpby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1yYWRpby5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tUmFkaW9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIG9wdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGFwaU1ldGE6IHN0cmluZztcbiAgQElucHV0KCkgc2VsZWN0ZWRWYWx1ZTogc3RyaW5nO1xuICBASW5wdXQoKSBwcm9ncmVzc0JhcjogYm9vbGVhbjtcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgcmVhZE9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGVycm9yOiBhbnk7XG4gIEBJbnB1dCgpIGZyb21TaGVuZ2VsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlZmVyZW5jZUZpZWxkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRva2VuOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPENoYW5nZVdyYXBwZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxDaGFuZ2VXcmFwcGVyPigpO1xuICBpbnZhbGlkRmllbGRJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgcHVibGljIGxhYmVsRmllbGQ6IHN0cmluZztcbiAgcHVibGljIHZhbHVlRmllbGQ6IHN0cmluZztcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLnN1Ym1pdFZhbGlkYXRlJC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuaW52YWxpZEZpZWxkSWRzLnB1c2goZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBWRCAzMU5PVjI0IG51bGwgY2hlY2tcbiAgICBpZiAodGhpcy5hcGlNZXRhKSB7XG4gICAgICBsZXQgYXBpT2JqOiBBUElNZXRhID0gSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xuICAgICAgdGhpcy5sYWJlbEZpZWxkID0gYXBpT2JqLmZpZWxkO1xuXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwaVJlc3BvbnNlKGFwaU9iai5lbmRwb2ludCk/LnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlcztcbiAgICAgICAgaWYgKGFwaU9iai52YXJpYWJsZSkge1xuICAgICAgICAgIHJlc3BvbnNlcyA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoYXBpUmVzcG9uc2UsIGFwaU9iai52YXJpYWJsZSk7XG4gICAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlcz8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciByZXNwID0gcmVzcG9uc2VzW2ldO1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSByZXN1bHRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3BvbnNlcyA9IGFwaVJlc3BvbnNlO1xuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHJlc3BvbnNlcztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGxldCBzb3VyY2VJZCA9IGFwaU9iai5zb3VyY2VRdWVzdGlvbklkO1xuICAgICAgaWYgKHNvdXJjZUlkKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFuZ2VTZXJ2aWNlLmNoYW5nZUFubm91bmNlZCQuc3Vic2NyaWJlKFxuICAgICAgICAgIChjaGFuZ2VWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNoYW5nZVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBpZiAoY2hhbmdlVmFsdWUudmFsdWVPYmogIT0gdW5kZWZpbmVkICYmIGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkID09IGFwaU9iai5zb3VyY2VRdWVzdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gY2hhbmdlVmFsdWUudmFsdWVPYmpbYXBpT2JqLnZhbHVlRmllbGRdO1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIHZhbHVlWyduYW1lJ10gPSB0aGlzLnNlbGVjdGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yYWRpb0NoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmNvbmZpcm1DaGFuZ2UoYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByYWRpb0NoYW5nZShldmVudDogYW55KSB7XG4gICAgbGV0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7XG4gICAgY2hhbmdlLmZyb21RdWVzdGlvbklkID0gdGhpcy5pZDtcbiAgICBjaGFuZ2UudmFsdWVPYmogPSBldmVudC50YXJnZXQ/LmlkID8gZXZlbnQudGFyZ2V0Py5pZCA6ICcnO1xuICAgIGNoYW5nZS5yZWZlcmVuY2VGaWVsZCA9IHRoaXMucmVmZXJlbmNlRmllbGQ7XG4gICAgY2hhbmdlLnNlbGVjdGVkT2JqID0gZXZlbnQgPyBldmVudFt0aGlzLmxhYmVsRmllbGRdIDogJyc7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGNoYW5nZSk7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmludmFsaWRGaWVsZElkcyA9IFtdO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+IFxuPGRpdiBjbGFzcz1cImN1c3RvbS1yYWRpby1jb250YWluZXJcIj5cbiAgICA8ZGl2XG4gICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIlxuICAgICAgW2NsYXNzXT1cImludmFsaWRGaWVsZElkcy5pbmNsdWRlcyhpZCkgfHwgZXJyb3IgPyAnY3VzdG9tLXJhZGlvLW9wdGlvbiBpbnZhbGlkJyA6ICdjdXN0b20tcmFkaW8tb3B0aW9uJ1wiXG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIFtpZF09XCJhcGlNZXRhICE9PSB1bmRlZmluZWQgPyBvcHRpb25bbGFiZWxGaWVsZF0gOiBvcHRpb24udmFsdWUgXCJcbiAgICAgICAgW2NoZWNrZWRdID0gXCJzZWxlY3RlZFZhbHVlID09IG9wdGlvbi52YWx1ZSBcIlxuICAgICAgICBbbmFtZV09XCJpZFwiXG4gICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgKGNoYW5nZSk9XCJyYWRpb0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRPbmx5XCJcbiAgICAgIC8+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJueHQtcmFkaW8tbGFiZWxcIiBbZm9yXT1cImFwaU1ldGEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbltsYWJlbEZpZWxkXSA6IG9wdGlvbi52YWx1ZVwiPnt7IGFwaU1ldGEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbltsYWJlbEZpZWxkXSA6IG9wdGlvbi52YWx1ZSAgfX08L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuICpuZ0lmPVwiZXJyb3IgfHwgaW52YWxpZEZpZWxkSWRzLmluY2x1ZGVzKGlkKVwiIGNsYXNzPVwiZXJyb3ItbXNnXCI+e3sgZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgIl19
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: "14.3.0", 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: "14.3.0", 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--> \r\n<div class=\"custom-radio-container\">\r\n <div\r\n *ngFor=\"let option of options\"\r\n [class]=\"invalidFieldIds.includes(id) || error ? 'custom-radio-option invalid' : 'custom-radio-option'\"\r\n >\r\n <input\r\n type=\"radio\"\r\n [id]=\"apiMeta !== undefined ? option[labelField] : option.value \"\r\n [checked] = \"selectedValue == option.value \"\r\n [name]=\"id\"\r\n [value]=\"selectedValue\"\r\n (change)=\"radioChange($event)\"\r\n [disabled]=\"readOnly\"\r\n />\r\n <label class=\"nxt-radio-label\" [for]=\"apiMeta !== undefined ? option[labelField] : option.value\">{{ apiMeta !== undefined ? option[labelField] : option.value }}</label>\r\n </div>\r\n <span *ngIf=\"error || invalidFieldIds.includes(id)\" class=\"error-msg\">{{ errorMessage }}</span>\r\n </div>\r\n ", 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: "14.3.0", ngImport: i0, type: CustomRadioComponent, decorators: [{
88
+ type: Component,
89
+ args: [{ selector: 'app-custom-radio', template: "<!-- RS 09DEC24 Changed keys--> \r\n<div class=\"custom-radio-container\">\r\n <div\r\n *ngFor=\"let option of options\"\r\n [class]=\"invalidFieldIds.includes(id) || error ? 'custom-radio-option invalid' : 'custom-radio-option'\"\r\n >\r\n <input\r\n type=\"radio\"\r\n [id]=\"apiMeta !== undefined ? option[labelField] : option.value \"\r\n [checked] = \"selectedValue == option.value \"\r\n [name]=\"id\"\r\n [value]=\"selectedValue\"\r\n (change)=\"radioChange($event)\"\r\n [disabled]=\"readOnly\"\r\n />\r\n <label class=\"nxt-radio-label\" [for]=\"apiMeta !== undefined ? option[labelField] : option.value\">{{ apiMeta !== undefined ? option[labelField] : option.value }}</label>\r\n </div>\r\n <span *ngIf=\"error || invalidFieldIds.includes(id)\" class=\"error-msg\">{{ errorMessage }}</span>\r\n </div>\r\n ", 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: function () { return [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJhZGlvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1yYWRpby9jdXN0b20tcmFkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLXJhZGlvL2N1c3RvbS1yYWRpby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBWTFELE1BQU0sT0FBTyxvQkFBb0I7SUFxQnJCO0lBQ0E7SUFDRDtJQXJCQSxPQUFPLEdBQVUsRUFBRSxDQUFDO0lBQ3BCLE9BQU8sQ0FBUztJQUNoQixhQUFhLENBQVM7SUFDdEIsV0FBVyxDQUFVO0lBQ3JCLEVBQUUsQ0FBUztJQUNYLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsWUFBWSxDQUFTO0lBQ3JCLEtBQUssQ0FBTTtJQUNYLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0IsY0FBYyxDQUFTO0lBQ3ZCLEtBQUssQ0FBUztJQUNiLFdBQVcsR0FBZ0MsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDdkYsZUFBZSxHQUFhLEVBQUUsQ0FBQztJQUV4QixVQUFVLENBQVM7SUFDbkIsVUFBVSxDQUFTO0lBQzFCLFlBQVksQ0FBZTtJQUUzQixZQUNVLGFBQTRCLEVBQzVCLFdBQXdCLEVBQ3pCLFdBQXdCO1FBRnZCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3pCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRS9CLElBQUksQ0FB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LENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQzt1R0FqRlUsb0JBQW9COzJGQUFwQixvQkFBb0IsNldDYmpDLDQ0QkFtQkU7OzJGRE5XLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0I7d0pBTW5CLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhbmdlV3JhcHBlciB9IGZyb20gJy4uLy4uL21vZGVsL2NoYW5nZVdyYXBwZXInO1xyXG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uL2kxOG4uc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFQSU1ldGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FwaW1ldGEnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLXJhZGlvJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXJhZGlvLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tcmFkaW8uY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21SYWRpb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgYXBpTWV0YTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkVmFsdWU6IHN0cmluZztcclxuICBASW5wdXQoKSBwcm9ncmVzc0JhcjogYm9vbGVhbjtcclxuICBASW5wdXQoKSBpZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZXJyb3I6IGFueTtcclxuICBASW5wdXQoKSBmcm9tU2hlbmdlbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHJlZmVyZW5jZUZpZWxkOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdG9rZW46IHN0cmluZztcclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxDaGFuZ2VXcmFwcGVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhbmdlV3JhcHBlcj4oKTtcclxuICBpbnZhbGlkRmllbGRJZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHB1YmxpYyBsYWJlbEZpZWxkOiBzdHJpbmc7XHJcbiAgcHVibGljIHZhbHVlRmllbGQ6IHN0cmluZztcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuY2hhbmdlU2VydmljZS5zdWJtaXRWYWxpZGF0ZSQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgIHRoaXMuaW52YWxpZEZpZWxkSWRzLnB1c2goZGF0YSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gVkQgMzFOT1YyNCBudWxsIGNoZWNrXHJcbiAgICBpZiAodGhpcy5hcGlNZXRhKSB7XHJcbiAgICAgIGxldCBhcGlPYmo6IEFQSU1ldGEgPSBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSk7XHJcbiAgICAgIHRoaXMubGFiZWxGaWVsZCA9IGFwaU9iai5maWVsZDtcclxuXHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoYXBpT2JqLmVuZHBvaW50KT8uc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGxldCByZXNwb25zZXM7XHJcbiAgICAgICAgaWYgKGFwaU9iai52YXJpYWJsZSkge1xyXG4gICAgICAgICAgcmVzcG9uc2VzID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShhcGlSZXNwb25zZSwgYXBpT2JqLnZhcmlhYmxlKTtcclxuICAgICAgICAgIGxldCByZXN1bHRzID0gW107XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlcz8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJlc3AgPSByZXNwb25zZXNbaV07XHJcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXNwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHJlc3VsdHM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc3BvbnNlcyA9IGFwaVJlc3BvbnNlO1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zID0gcmVzcG9uc2VzO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBsZXQgc291cmNlSWQgPSBhcGlPYmouc291cmNlUXVlc3Rpb25JZDtcclxuICAgICAgaWYgKHNvdXJjZUlkKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNoYW5nZVZhbHVlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPSB1bmRlZmluZWQgJiYgY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT0gYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGNoYW5nZVZhbHVlLnZhbHVlT2JqW2FwaU9iai52YWx1ZUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdmFsdWVbJ25hbWUnXSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmFkaW9DaGFuZ2UodmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuY29uZmlybUNoYW5nZShhcGlPYmouc291cmNlUXVlc3Rpb25JZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByYWRpb0NoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBsZXQgY2hhbmdlID0gbmV3IENoYW5nZVdyYXBwZXIoKTtcclxuICAgIGNoYW5nZS5mcm9tUXVlc3Rpb25JZCA9IHRoaXMuaWQ7XHJcbiAgICBjaGFuZ2UudmFsdWVPYmogPSBldmVudC50YXJnZXQ/LmlkID8gZXZlbnQudGFyZ2V0Py5pZCA6ICcnO1xyXG4gICAgY2hhbmdlLnJlZmVyZW5jZUZpZWxkID0gdGhpcy5yZWZlcmVuY2VGaWVsZDtcclxuICAgIGNoYW5nZS5zZWxlY3RlZE9iaiA9IGV2ZW50ID8gZXZlbnRbdGhpcy5sYWJlbEZpZWxkXSA6ICcnO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGNoYW5nZSk7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkRmllbGRJZHMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT4gXHJcbjxkaXYgY2xhc3M9XCJjdXN0b20tcmFkaW8tY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc1wiXHJcbiAgICAgIFtjbGFzc109XCJpbnZhbGlkRmllbGRJZHMuaW5jbHVkZXMoaWQpIHx8IGVycm9yID8gJ2N1c3RvbS1yYWRpby1vcHRpb24gaW52YWxpZCcgOiAnY3VzdG9tLXJhZGlvLW9wdGlvbidcIlxyXG4gICAgPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICB0eXBlPVwicmFkaW9cIlxyXG4gICAgICAgIFtpZF09XCJhcGlNZXRhICE9PSB1bmRlZmluZWQgPyBvcHRpb25bbGFiZWxGaWVsZF0gOiBvcHRpb24udmFsdWUgXCJcclxuICAgICAgICBbY2hlY2tlZF0gPSBcInNlbGVjdGVkVmFsdWUgPT0gb3B0aW9uLnZhbHVlIFwiXHJcbiAgICAgICAgW25hbWVdPVwiaWRcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZFZhbHVlXCJcclxuICAgICAgICAoY2hhbmdlKT1cInJhZGlvQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJyZWFkT25seVwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cIm54dC1yYWRpby1sYWJlbFwiIFtmb3JdPVwiYXBpTWV0YSAhPT0gdW5kZWZpbmVkID8gb3B0aW9uW2xhYmVsRmllbGRdIDogb3B0aW9uLnZhbHVlXCI+e3sgYXBpTWV0YSAhPT0gdW5kZWZpbmVkID8gb3B0aW9uW2xhYmVsRmllbGRdIDogb3B0aW9uLnZhbHVlICB9fTwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuICpuZ0lmPVwiZXJyb3IgfHwgaW52YWxpZEZpZWxkSWRzLmluY2x1ZGVzKGlkKVwiIGNsYXNzPVwiZXJyb3ItbXNnXCI+e3sgZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxyXG4gIDwvZGl2PlxyXG4gICJdfQ==
@@ -0,0 +1,177 @@
1
+ // RS 06JAN2025
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import Quill from 'quill';
4
+ import { Mention } from 'quill-mention';
5
+ import ImageResize from 'quill-image-resize-module';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../i18n.service";
8
+ import * as i2 from "../../services/change.service";
9
+ import * as i3 from "ngx-quill";
10
+ import * as i4 from "@angular/common";
11
+ import * as i5 from "@angular/forms";
12
+ // Register Quill modules
13
+ Quill.register('modules/mention', Mention);
14
+ Quill.register('modules/imageResize', ImageResize);
15
+ // Define font families with their display names and actual CSS values
16
+ const fontFamilyArr = [
17
+ "Roboto Condensed",
18
+ "Times New Roman",
19
+ "Calibri",
20
+ "Calibri Light",
21
+ "Sans-Serif",
22
+ "Arial",
23
+ "Verdana",
24
+ "Georgia",
25
+ "Courier New",
26
+ "Comic Sans MS",
27
+ "Trebuchet MS",
28
+ "Lucida Console",
29
+ "Tahoma",
30
+ "Impact",
31
+ "Palatino Linotype",
32
+ "Segoe UI",
33
+ "Helvetica"
34
+ ];
35
+ let fonts = Quill.import("attributors/style/font");
36
+ fonts.whitelist = fontFamilyArr; // Updated with additional fonts
37
+ Quill.register(fonts, true);
38
+ export const QuillConfiguration = {
39
+ toolbar: {
40
+ container: [
41
+ [{ 'font': fontFamilyArr }],
42
+ ['bold', 'italic', 'underline', 'strike'],
43
+ ['blockquote', 'code-block'],
44
+ [{ header: [1, 2, 3, 4, 5, 6, false] }],
45
+ [{ list: 'ordered' }, { list: 'bullet' }],
46
+ [{ color: [] }, { background: [] }],
47
+ [{ align: [] }],
48
+ ['link', 'image', 'video'],
49
+ ['formula'],
50
+ ['clean'],
51
+ ],
52
+ },
53
+ imageResize: {
54
+ displaySize: true,
55
+ modules: ['Resize', 'DisplaySize', 'Toolbar'],
56
+ toolbarStyles: {
57
+ backgroundColor: 'black',
58
+ border: 'none',
59
+ color: 'white'
60
+ },
61
+ handleStyles: {
62
+ backgroundColor: 'black',
63
+ border: 'none',
64
+ color: 'white'
65
+ }
66
+ },
67
+ mention: {
68
+ allowedChars: /^[A-Za-z\sÅÄÖåäö]*$/,
69
+ mentionDenotationChars: ['@', '#'],
70
+ source: function (searchTerm, renderList) {
71
+ const values = [
72
+ { id: 1, value: 'User 1' },
73
+ { id: 2, value: 'User 2' },
74
+ ];
75
+ if (searchTerm.length === 0) {
76
+ renderList(values, searchTerm);
77
+ }
78
+ else {
79
+ const matches = values.filter((item) => item.value.toLowerCase().includes(searchTerm.toLowerCase()));
80
+ renderList(matches, searchTerm);
81
+ }
82
+ },
83
+ },
84
+ };
85
+ export class CustomRichTextComponent {
86
+ i18nService;
87
+ changeService;
88
+ value = '';
89
+ placeholder;
90
+ error;
91
+ question;
92
+ rows; //The number of visible text lines for the control
93
+ readOnly = false;
94
+ textValueChange = new EventEmitter();
95
+ minLength;
96
+ maxLength;
97
+ // @Input() value: any = ''; // Set default value
98
+ quillConfiguration = QuillConfiguration;
99
+ subscription;
100
+ constructor(i18nService, changeService) {
101
+ this.i18nService = i18nService;
102
+ this.changeService = changeService;
103
+ }
104
+ ngOnInit() {
105
+ console.log('Rich Text Init:', {
106
+ value: this.value,
107
+ question: this.question
108
+ });
109
+ if (this.value === undefined || this.value === null) {
110
+ this.value = '';
111
+ this.textValueChange.emit('');
112
+ }
113
+ this.initializeDependency();
114
+ }
115
+ // Separated dependency initialization for better organization
116
+ initializeDependency() {
117
+ if (this.question?.subText) {
118
+ console.log('subText:', this.question.subText);
119
+ try {
120
+ const dependencyObj = JSON.parse(this.question.subText);
121
+ if (dependencyObj?.sourceQuestionId) {
122
+ this.subscription = this.changeService.changeAnnounced$.subscribe((changeValue) => {
123
+ console.log('Change Value:', changeValue);
124
+ if (changeValue && changeValue.valueObj &&
125
+ changeValue.fromQuestionId === dependencyObj.sourceQuestionId) {
126
+ this.value = changeValue.valueObj[dependencyObj.valueField];
127
+ this.textValueChange.emit(this.value);
128
+ }
129
+ this.changeService.confirmChange(dependencyObj.sourceQuestionId);
130
+ });
131
+ }
132
+ }
133
+ catch (error) {
134
+ console.error('Error parsing subText:', error);
135
+ }
136
+ }
137
+ }
138
+ onEditorChange(event) {
139
+ if (event && event.html !== undefined) {
140
+ this.textValueChange.emit(event.html);
141
+ }
142
+ else {
143
+ this.textValueChange.emit('');
144
+ }
145
+ }
146
+ // Added ngOnDestroy to prevent memory leaks
147
+ ngOnDestroy() {
148
+ if (this.subscription) {
149
+ this.subscription.unsubscribe();
150
+ }
151
+ }
152
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomRichTextComponent, deps: [{ token: i1.I18nService }, { token: i2.ChangeService }], target: i0.ɵɵFactoryTarget.Component });
153
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CustomRichTextComponent, 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 -->\r\n<div class=\"rich-text-container\" >\r\n <quill-editor\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n [modules]=\"quillConfiguration\"\r\n [readOnly]=\"readOnly\"\r\n (onContentChanged)=\"onEditorChange($event)\"\r\n [class.error]=\"error\">\r\n </quill-editor>\r\n <div *ngIf=\"error\" class=\"error-message\">\r\n {{ error }}\r\n </div>\r\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}\n"], dependencies: [{ kind: "component", type: i3.QuillEditorComponent, selector: "quill-editor" }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
154
+ }
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomRichTextComponent, decorators: [{
156
+ type: Component,
157
+ args: [{ selector: 'app-custom-rich-text', template: "<!-- RS 06JAN25 -->\r\n<div class=\"rich-text-container\" >\r\n <quill-editor\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n [modules]=\"quillConfiguration\"\r\n [readOnly]=\"readOnly\"\r\n (onContentChanged)=\"onEditorChange($event)\"\r\n [class.error]=\"error\">\r\n </quill-editor>\r\n <div *ngIf=\"error\" class=\"error-message\">\r\n {{ error }}\r\n </div>\r\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}\n"] }]
158
+ }], ctorParameters: function () { return [{ type: i1.I18nService }, { type: i2.ChangeService }]; }, propDecorators: { value: [{
159
+ type: Input
160
+ }], placeholder: [{
161
+ type: Input
162
+ }], error: [{
163
+ type: Input
164
+ }], question: [{
165
+ type: Input
166
+ }], rows: [{
167
+ type: Input
168
+ }], readOnly: [{
169
+ type: Input
170
+ }], textValueChange: [{
171
+ type: Output
172
+ }], minLength: [{
173
+ type: Input
174
+ }], maxLength: [{
175
+ type: Input
176
+ }] } });
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJpY2gtdGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9jdXN0b20tcmljaC10ZXh0L2N1c3RvbS1yaWNoLXRleHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLXJpY2gtdGV4dC9jdXN0b20tcmljaC10ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWU7QUFDZixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBTTFGLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sV0FBVyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBRXBELHlCQUF5QjtBQUN6QixLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLEtBQUssQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFFbkQsc0VBQXNFO0FBQ3RFLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIsU0FBUztJQUNULGVBQWU7SUFDZixZQUFZO0lBQ1osT0FBTztJQUNQLFNBQVM7SUFDVCxTQUFTO0lBQ1QsYUFBYTtJQUNiLGVBQWU7SUFDZixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLFFBQVE7SUFDUixRQUFRO0lBQ1IsbUJBQW1CO0lBQ25CLFVBQVU7SUFDVixXQUFXO0NBQ1osQ0FBQztBQUNGLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMs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QkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gUlMgMDZKQU4yMDI1XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uL2kxOG4uc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEZXBlbmRlbmN5TWV0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGVwZW5kZW5jeU1ldGEnO1xyXG5pbXBvcnQgeyBRdWlsbE1vZHVsZXMgfSBmcm9tICduZ3gtcXVpbGwnO1xyXG5pbXBvcnQgUXVpbGwgZnJvbSAncXVpbGwnO1xyXG5pbXBvcnQgeyBNZW50aW9uIH0gZnJvbSAncXVpbGwtbWVudGlvbic7XHJcbmltcG9ydCBJbWFnZVJlc2l6ZSBmcm9tICdxdWlsbC1pbWFnZS1yZXNpemUtbW9kdWxlJztcclxuXHJcbi8vIFJlZ2lzdGVyIFF1aWxsIG1vZHVsZXNcclxuUXVpbGwucmVnaXN0ZXIoJ21vZHVsZXMvbWVudGlvbicsIE1lbnRpb24pO1xyXG5RdWlsbC5yZWdpc3RlcignbW9kdWxlcy9pbWFnZVJlc2l6ZScsIEltYWdlUmVzaXplKTtcclxuXHJcbi8vIERlZmluZSBmb250IGZhbWlsaWVzIHdpdGggdGhlaXIgZGlzcGxheSBuYW1lcyBhbmQgYWN0dWFsIENTUyB2YWx1ZXNcclxuY29uc3QgZm9udEZhbWlseUFyciA9IFtcclxuICBcIlJvYm90byBDb25kZW5zZWRcIiwgXHJcbiAgXCJUaW1lcyBOZXcgUm9tYW5cIiwgXHJcbiAgXCJDYWxpYnJpXCIsIFxyXG4gIFwiQ2FsaWJyaSBMaWdodFwiLCBcclxuICBcIlNhbnMtU2VyaWZcIiwgXHJcbiAgXCJBcmlhbFwiLCBcclxuICBcIlZlcmRhbmFcIiwgXHJcbiAgXCJHZW9yZ2lhXCIsIFxyXG4gIFwiQ291cmllciBOZXdcIiwgXHJcbiAgXCJDb21pYyBTYW5zIE1TXCIsIFxyXG4gIFwiVHJlYnVjaGV0IE1TXCIsIFxyXG4gIFwiTHVjaWRhIENvbnNvbGVcIiwgXHJcbiAgXCJUYWhvbWFcIiwgXHJcbiAgXCJJbXBhY3RcIiwgXHJcbiAgXCJQYWxhdGlubyBMaW5vdHlwZVwiLCBcclxuICBcIlNlZ29lIFVJXCIsIFxyXG4gIFwiSGVsdmV0aWNhXCJcclxuXTtcclxubGV0IGZvbnRzID0gUXVpbGwuaW1wb3J0KFwiYXR0cmlidXRvcnMvc3R5bGUvZm9udFwiKTtcclxuZm9udHMud2hpdGVsaXN0ID0gZm9udEZhbWlseUFycjsgLy8gVXBkYXRlZCB3aXRoIGFkZGl0aW9uYWwgZm9udHNcclxuUXVpbGwucmVnaXN0ZXIoZm9udHMsIHRydWUpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFF1aWxsQ29uZmlndXJhdGlvbjogUXVpbGxNb2R1bGVzID0ge1xyXG4gIHRvb2xiYXI6IHtcclxuICAgIGNvbnRhaW5lcjogW1xyXG4gICAgICBbeyAnZm9udCc6IGZvbnRGYW1pbHlBcnIgfV0sXHJcbiAgICAgIFsnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJywgJ3N0cmlrZSddLFxyXG4gICAgICBbJ2Jsb2NrcXVvdGUnLCAnY29kZS1ibG9jayddLFxyXG4gICAgICBbeyBoZWFkZXI6IFsxLCAyLCAzLCA0LCA1LCA2LCBmYWxzZV0gfV0sXHJcbiAgICAgIFt7IGxpc3Q6ICdvcmRlcmVkJyB9LCB7IGxpc3Q6ICdidWxsZXQnIH1dLFxyXG4gICAgICBbeyBjb2xvcjogW10gfSwgeyBiYWNrZ3JvdW5kOiBbXSB9XSxcclxuICAgICAgW3sgYWxpZ246IFtdIH1dLFxyXG4gICAgICBbJ2xpbmsnLCAnaW1hZ2UnLCAndmlkZW8nXSxcclxuICAgICAgWydmb3JtdWxhJ10sXHJcbiAgICAgIFsnY2xlYW4nXSxcclxuICAgIF0sXHJcbiAgfSxcclxuaW1hZ2VSZXNpemU6IHtcclxuICBkaXNwbGF5U2l6ZTogdHJ1ZSxcclxuICBtb2R1bGVzOiBbJ1Jlc2l6ZScsICdEaXNwbGF5U2l6ZScsICdUb29sYmFyJ10sXHJcbiAgdG9vbGJhclN0eWxlczoge1xyXG4gICAgYmFja2dyb3VuZENvbG9yOiAnYmxhY2snLFxyXG4gICAgYm9yZGVyOiAnbm9uZScsXHJcbiAgICBjb2xvcjogJ3doaXRlJ1xyXG4gIH0sXHJcbiAgaGFuZGxlU3R5bGVzOiB7XHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdibGFjaycsXHJcbiAgICBib3JkZXI6ICdub25lJyxcclxuICAgIGNvbG9yOiAnd2hpdGUnXHJcbiAgfVxyXG59LFxyXG4gIG1lbnRpb246IHtcclxuICAgIGFsbG93ZWRDaGFyczogL15bQS1aYS16XFxzw4XDhMOWw6XDpMO2XSokLyxcclxuICAgIG1lbnRpb25EZW5vdGF0aW9uQ2hhcnM6IFsnQCcsICcjJ10sXHJcbiAgICBzb3VyY2U6IGZ1bmN0aW9uIChzZWFyY2hUZXJtOiBzdHJpbmcsIHJlbmRlckxpc3Q6IGFueSkge1xyXG4gICAgICBjb25zdCB2YWx1ZXMgPSBbXHJcbiAgICAgICAgeyBpZDogMSwgdmFsdWU6ICdVc2VyIDEnIH0sXHJcbiAgICAgICAgeyBpZDogMiwgdmFsdWU6ICdVc2VyIDInIH0sXHJcbiAgICAgIF07XHJcblxyXG4gICAgICBpZiAoc2VhcmNoVGVybS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZW5kZXJMaXN0KHZhbHVlcywgc2VhcmNoVGVybSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHZhbHVlcy5maWx0ZXIoKGl0ZW0pID0+XHJcbiAgICAgICAgICBpdGVtLnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmVuZGVyTGlzdChtYXRjaGVzLCBzZWFyY2hUZXJtKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9LFxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLXJpY2gtdGV4dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1yaWNoLXRleHQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1yaWNoLXRleHQuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tUmljaFRleHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7IFxyXG4gIEBJbnB1dCgpIHZhbHVlOiBhbnkgfCBhbnlbXSA9ICcnO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZXJyb3I6IGFueTtcclxuICBASW5wdXQoKSBxdWVzdGlvbjogYW55O1xyXG4gIEBJbnB1dCgpIHJvd3M6TnVtYmVyOyAvL1RoZSBudW1iZXIgb2YgdmlzaWJsZSB0ZXh0IGxpbmVzIGZvciB0aGUgY29udHJvbFxyXG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIHRleHRWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBASW5wdXQoKSBtaW5MZW5ndGg/OiBudW1iZXI7XHJcbiAgQElucHV0KCkgbWF4TGVuZ3RoPzogbnVtYmVyO1xyXG4gIC8vIEBJbnB1dCgpIHZhbHVlOiBhbnkgPSAnJzsgLy8gU2V0IGRlZmF1bHQgdmFsdWVcclxuXHJcbiAgcXVpbGxDb25maWd1cmF0aW9uOiBRdWlsbE1vZHVsZXMgPSBRdWlsbENvbmZpZ3VyYXRpb247XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247ICBcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnUmljaCBUZXh0IEluaXQ6Jywge1xyXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcclxuICAgICAgcXVlc3Rpb246IHRoaXMucXVlc3Rpb25cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgdGhpcy50ZXh0VmFsdWVDaGFuZ2UuZW1pdCgnJyk7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0aWFsaXplRGVwZW5kZW5jeSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gU2VwYXJhdGVkIGRlcGVuZGVuY3kgaW5pdGlhbGl6YXRpb24gZm9yIGJldHRlciBvcmdhbml6YXRpb25cclxuICBwcml2YXRlIGluaXRpYWxpemVEZXBlbmRlbmN5KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucXVlc3Rpb24/LnN1YlRleHQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnc3ViVGV4dDonLCB0aGlzLnF1ZXN0aW9uLnN1YlRleHQpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY3lPYmo6IERlcGVuZGVuY3lNZXRhID0gSlNPTi5wYXJzZSh0aGlzLnF1ZXN0aW9uLnN1YlRleHQpO1xyXG4gICAgICAgICAgICBpZiAoZGVwZW5kZW5jeU9iaj8uc291cmNlUXVlc3Rpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2UgVmFsdWU6JywgY2hhbmdlVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhbmdlVmFsdWUgJiYgY2hhbmdlVmFsdWUudmFsdWVPYmogJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkID09PSBkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjaGFuZ2VWYWx1ZS52YWx1ZU9ialtkZXBlbmRlbmN5T2JqLnZhbHVlRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0VmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuY29uZmlybUNoYW5nZShkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIHN1YlRleHQ6JywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuXHJcbm9uRWRpdG9yQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICBpZiAoZXZlbnQgJiYgZXZlbnQuaHRtbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLnRleHRWYWx1ZUNoYW5nZS5lbWl0KGV2ZW50Lmh0bWwpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnRleHRWYWx1ZUNoYW5nZS5lbWl0KCcnKTtcclxuICB9XHJcbn1cclxuICAvLyBBZGRlZCBuZ09uRGVzdHJveSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrc1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4iLCI8IS0tIFJTIDA2SkFOMjUgLS0+XHJcbjxkaXYgY2xhc3M9XCJyaWNoLXRleHQtY29udGFpbmVyXCIgPlxyXG4gIDxxdWlsbC1lZGl0b3JcclxuICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgIFttb2R1bGVzXT1cInF1aWxsQ29uZmlndXJhdGlvblwiXHJcbiAgICBbcmVhZE9ubHldPVwicmVhZE9ubHlcIlxyXG4gICAgKG9uQ29udGVudENoYW5nZWQpPVwib25FZGl0b3JDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICBbY2xhc3MuZXJyb3JdPVwiZXJyb3JcIj5cclxuICA8L3F1aWxsLWVkaXRvcj5cclxuICA8ZGl2ICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cclxuICAgIHt7IGVycm9yIH19XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==