@piserve-tech/form-submission 1.3.210 → 1.3.211

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 (158) hide show
  1. package/README.md +24 -24
  2. package/assets/icons/delete-icon.svg +8 -0
  3. package/assets/icons/left_arrow.svg +3 -0
  4. package/assets/icons/right_arrow.svg +3 -0
  5. package/esm2022/environment/environment.mjs +1 -1
  6. package/esm2022/form-fields/aggregate-function/aggregate-function.component.mjs +128 -0
  7. package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +93 -10
  8. package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +123 -15
  9. package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +88 -11
  10. package/esm2022/form-fields/file-picker-fields/file-picker-fields.component.mjs +66 -9
  11. package/esm2022/form-fields/form-fields.module.mjs +17 -12
  12. package/esm2022/form-fields/location-fields/location-fields.component.mjs +10 -4
  13. package/esm2022/form-fields/mail-fields/mail-fields.component.mjs +57 -11
  14. package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +68 -15
  15. package/esm2022/form-fields/number-fields/number-fields.component.mjs +92 -22
  16. package/esm2022/form-fields/password-fields/password-fields.component.mjs +46 -9
  17. package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +82 -10
  18. package/esm2022/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.mjs +82 -31
  19. package/esm2022/form-fields/section-fields/section-fields.component.mjs +3 -3
  20. package/esm2022/form-fields/selection-matrix-fields/selection-matrix-fields.component.mjs +48 -9
  21. package/esm2022/form-fields/signature-fields/signature-fields.component.mjs +6 -3
  22. package/esm2022/form-fields/slider-fields/slider-fields.component.mjs +11 -4
  23. package/esm2022/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.mjs +6 -3
  24. package/esm2022/form-fields/text-area-fields/text-area-fields.component.mjs +57 -13
  25. package/esm2022/form-fields/text-fields/text-fields.component.mjs +87 -35
  26. package/esm2022/form-fields/toggle-switch-fields/toggle-switch-fields.component.mjs +11 -4
  27. package/esm2022/form-fields/url-fields/url-fields.component.mjs +56 -10
  28. package/esm2022/form-submission/form-submission.module.mjs +3 -6
  29. package/esm2022/form-submission/header/header.component.mjs +7 -3
  30. package/esm2022/form-submission/navigation-tabs/navigation-tabs.component.mjs +76 -17
  31. package/esm2022/form-submission/next-prev-navigation/next-prev-navigation.component.mjs +28 -3
  32. package/esm2022/form-submission/submission-container/submission-container.component.mjs +3 -3
  33. package/esm2022/form-submission/submit-form/submit-form.component.mjs +636 -190
  34. package/esm2022/lib/form-submission.component.mjs +21 -4
  35. package/esm2022/lib/form-submission.module.mjs +1 -1
  36. package/esm2022/lib/form-submission.service.mjs +1 -1
  37. package/esm2022/models/aggregate.model.mjs +2 -0
  38. package/esm2022/models/answer.model.mjs +1 -1
  39. package/esm2022/models/appearance.model.mjs +1 -1
  40. package/esm2022/models/attachment.model.mjs +1 -1
  41. package/esm2022/models/defaultAnswerEntry.model.mjs +2 -0
  42. package/esm2022/models/defaultAnswersModel.model.mjs +2 -0
  43. package/esm2022/models/defaultQuestionAnswer.model.mjs +2 -0
  44. package/esm2022/models/elementOptionAPI.model.mjs +1 -1
  45. package/esm2022/models/elementOptionAPIData.model.mjs +1 -1
  46. package/esm2022/models/elementOptionDB.model.mjs +1 -1
  47. package/esm2022/models/elementOptionDBCriteria.model.mjs +1 -1
  48. package/esm2022/models/enum/condition.enum.mjs +1 -1
  49. package/esm2022/models/enum/elementType .enum.mjs +1 -1
  50. package/esm2022/models/enum/entityType.enum.mjs +1 -1
  51. package/esm2022/models/formConfiguration.model.mjs +1 -1
  52. package/esm2022/models/formElement.model.mjs +1 -1
  53. package/esm2022/models/formElementType.model.mjs +1 -1
  54. package/esm2022/models/grid.model.mjs +1 -1
  55. package/esm2022/models/logic.model.mjs +1 -1
  56. package/esm2022/models/multifields.model.mjs +2 -0
  57. package/esm2022/models/option.model.mjs +1 -1
  58. package/esm2022/models/page.model.mjs +1 -1
  59. package/esm2022/models/publicForm.model.mjs +1 -1
  60. package/esm2022/models/question.model.mjs +1 -1
  61. package/esm2022/models/questionAnswer.model.mjs +1 -1
  62. package/esm2022/models/questionGroup.model.mjs +1 -1
  63. package/esm2022/models/row.model.mjs +1 -1
  64. package/esm2022/models/section.model.mjs +1 -1
  65. package/esm2022/models/subForm.model.mjs +1 -1
  66. package/esm2022/models/subformConfiguration.model.mjs +2 -0
  67. package/esm2022/models/subformPropery.model.mjs +2 -0
  68. package/esm2022/models/submission.model.mjs +1 -1
  69. package/esm2022/models/terms&condition.model.mjs +1 -1
  70. package/esm2022/models/validation.model.mjs +1 -1
  71. package/esm2022/public-api.mjs +1 -1
  72. package/esm2022/question/card-subform/card-subform.component.mjs +225 -0
  73. package/esm2022/question/form-elements/form-elements.component.mjs +3 -3
  74. package/esm2022/question/inline-multiple-subform/inline-multiple-subform.component.mjs +190 -0
  75. package/esm2022/question/multifields/multifields.component.mjs +52 -0
  76. package/esm2022/question/multiple-subform/multiple-subform.component.mjs +16 -21
  77. package/esm2022/question/question/question.component.mjs +66 -7
  78. package/esm2022/question/question-group/question-group.component.mjs +44 -16
  79. package/esm2022/question/recursive-logic/recursive-logic.component.mjs +4 -3
  80. package/esm2022/question/sub-form/sub-form.component.mjs +28 -21
  81. package/esm2022/services/aggregate.service.mjs +139 -0
  82. package/esm2022/services/countryService.mjs +1 -1
  83. package/esm2022/services/data.service.mjs +1 -1
  84. package/esm2022/services/element-tracker.service.mjs +27 -0
  85. package/esm2022/services/form-validation.service.mjs +128 -0
  86. package/esm2022/services/form.service.mjs +3 -7
  87. package/esm2022/services/mapper.service.mjs +86 -17
  88. package/esm2022/services/recaptcha.service.mjs +13 -13
  89. package/esm2022/services/validation.service.mjs +35 -0
  90. package/esm2022/shared/shared.module.mjs +20 -5
  91. package/esm2022/sub-form/submission-modal/submission-modal.component.mjs +70 -37
  92. package/fesm2022/piserve-tech-form-submission.mjs +3165 -837
  93. package/fesm2022/piserve-tech-form-submission.mjs.map +1 -1
  94. package/form-fields/aggregate-function/aggregate-function.component.d.ts +36 -0
  95. package/form-fields/check-box-fields/check-box-fields.component.d.ts +17 -2
  96. package/form-fields/date-time-fields/date-time-fields.component.d.ts +19 -2
  97. package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +16 -3
  98. package/form-fields/file-picker-fields/file-picker-fields.component.d.ts +20 -1
  99. package/form-fields/form-fields.module.d.ts +8 -7
  100. package/form-fields/location-fields/location-fields.component.d.ts +4 -2
  101. package/form-fields/mail-fields/mail-fields.component.d.ts +17 -1
  102. package/form-fields/mobile-fields/mobile-fields.component.d.ts +18 -4
  103. package/form-fields/number-fields/number-fields.component.d.ts +22 -3
  104. package/form-fields/password-fields/password-fields.component.d.ts +15 -1
  105. package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +18 -2
  106. package/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.d.ts +21 -4
  107. package/form-fields/selection-matrix-fields/selection-matrix-fields.component.d.ts +16 -1
  108. package/form-fields/signature-fields/signature-fields.component.d.ts +2 -1
  109. package/form-fields/slider-fields/slider-fields.component.d.ts +4 -2
  110. package/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.d.ts +2 -1
  111. package/form-fields/text-area-fields/text-area-fields.component.d.ts +16 -2
  112. package/form-fields/text-fields/text-fields.component.d.ts +18 -9
  113. package/form-fields/toggle-switch-fields/toggle-switch-fields.component.d.ts +4 -1
  114. package/form-fields/url-fields/url-fields.component.d.ts +17 -2
  115. package/form-submission/form-submission.module.d.ts +6 -7
  116. package/form-submission/header/header.component.d.ts +2 -1
  117. package/form-submission/navigation-tabs/navigation-tabs.component.d.ts +18 -3
  118. package/form-submission/next-prev-navigation/next-prev-navigation.component.d.ts +9 -1
  119. package/form-submission/submit-form/submit-form.component.d.ts +59 -12
  120. package/lib/form-submission.component.d.ts +5 -1
  121. package/models/aggregate.model.d.ts +4 -0
  122. package/models/answer.model.d.ts +3 -1
  123. package/models/appearance.model.d.ts +1 -0
  124. package/models/attachment.model.d.ts +1 -0
  125. package/models/defaultAnswerEntry.model.d.ts +5 -0
  126. package/models/defaultAnswersModel.model.d.ts +4 -0
  127. package/models/defaultQuestionAnswer.model.d.ts +6 -0
  128. package/models/formElement.model.d.ts +2 -0
  129. package/models/grid.model.d.ts +2 -1
  130. package/models/multifields.model.d.ts +11 -0
  131. package/models/page.model.d.ts +1 -0
  132. package/models/question.model.d.ts +3 -0
  133. package/models/questionGroup.model.d.ts +1 -0
  134. package/models/section.model.d.ts +1 -0
  135. package/models/subForm.model.d.ts +5 -1
  136. package/models/subformConfiguration.model.d.ts +4 -0
  137. package/models/subformPropery.model.d.ts +5 -0
  138. package/models/submission.model.d.ts +2 -0
  139. package/package.json +5 -5
  140. package/question/card-subform/card-subform.component.d.ts +29 -0
  141. package/question/inline-multiple-subform/inline-multiple-subform.component.d.ts +38 -0
  142. package/question/multifields/multifields.component.d.ts +11 -0
  143. package/question/multiple-subform/multiple-subform.component.d.ts +2 -4
  144. package/question/question/question.component.d.ts +8 -1
  145. package/question/question-group/question-group.component.d.ts +12 -2
  146. package/question/sub-form/sub-form.component.d.ts +5 -6
  147. package/services/aggregate.service.d.ts +29 -0
  148. package/services/element-tracker.service.d.ts +10 -0
  149. package/services/form-validation.service.d.ts +16 -0
  150. package/services/form.service.d.ts +1 -1
  151. package/services/mapper.service.d.ts +8 -0
  152. package/services/validation.service.d.ts +14 -0
  153. package/shared/shared.module.d.ts +10 -7
  154. package/sub-form/submission-modal/submission-modal.component.d.ts +13 -2
  155. package/esm2022/form-submission/loader/loader.component.mjs +0 -17
  156. package/esm2022/services/submission-file-service.service.mjs +0 -68
  157. package/form-submission/loader/loader.component.d.ts +0 -6
  158. package/services/submission-file-service.service.d.ts +0 -19
package/README.md CHANGED
@@ -1,24 +1,24 @@
1
- # FormSubmission
2
-
3
- This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0.
4
-
5
- ## Code scaffolding
6
-
7
- Run `ng generate component component-name --project formSubmission` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project formSubmission`.
8
- > Note: Don't forget to add `--project formSubmission` or else it will be added to the default project in your `angular.json` file.
9
-
10
- ## Build
11
-
12
- Run `ng build formSubmission` to build the project. The build artifacts will be stored in the `dist/` directory.
13
-
14
- ## Publishing
15
-
16
- After building your library with `ng build formSubmission`, go to the dist folder `cd dist/form-submission` and run `npm publish`.
17
-
18
- ## Running unit tests
19
-
20
- Run `ng test formSubmission` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
-
22
- ## Further help
23
-
24
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
1
+ # FormSubmission
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project formSubmission` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project formSubmission`.
8
+ > Note: Don't forget to add `--project formSubmission` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build formSubmission` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build formSubmission`, go to the dist folder `cd dist/form-submission` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test formSubmission` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,8 @@
1
+ <svg viewBox="0 0 38 36" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="35px" height="35px" stroke="#D8D8D8" fill="white" x="0.5" y="0.5" rx="5.5"/>
3
+ <path d="M11.4165 12.2142H26.5832" stroke="#084FFF" stroke-linecap="round" stroke-linejoin="round"/>
4
+ <path stroke="#084FFF" stroke-linecap="round" stroke-linejoin="round" d="M25.5 12.2139V23.597C25.5 24.7404 24.5304 25.6666 23.3333 25.6666H14.6667C13.4696 25.6666 12.5 24.7404 12.5 23.597V12.2139"/>
5
+ <path stroke="#084FFF" stroke-linecap="round" stroke-linejoin="round" d="M22.25 8.85091H15.75"/>
6
+ <path stroke="#084FFF" stroke-linecap="round" stroke-linejoin="round" d="M16.8332 16.3535V21.5276"/>
7
+ <path stroke="#084FFF" stroke-linecap="round" stroke-linejoin="round" d="M21.1667 16.3535V21.5276"/>
8
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="7" height="9" viewBox="0 0 7 9" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M5.61426 0.769531L1.72218 4.41345L5.67398 7.99251" stroke="#8E9AA0" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="7" height="9" viewBox="0 0 7 9" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M1.7666 8.03125L5.64422 4.37194L1.67827 0.808564" stroke="#8E9AA0" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -3,4 +3,4 @@ export let environment = {
3
3
  googleRecaptchaSiteKey: '',
4
4
  htmlDirection: 'ltr'
5
5
  };
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Vudmlyb25tZW50L2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxJQUFJLFdBQVcsR0FBRztJQUNyQixVQUFVLEVBQUUsS0FBSztJQUNqQixzQkFBc0IsRUFBRSxFQUFFO0lBQ3pCLGFBQWEsRUFBRSxLQUFLO0NBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgbGV0IGVudmlyb25tZW50ID0ge1xyXG4gICAgcHJvZHVjdGlvbjogZmFsc2UsXHJcbiAgICBnb29nbGVSZWNhcHRjaGFTaXRlS2V5OiAnJyxcclxuICAgICBodG1sRGlyZWN0aW9uOiAnbHRyJ1xyXG4gIH07XHJcbiAgIl19
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Vudmlyb25tZW50L2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxJQUFJLFdBQVcsR0FBRztJQUNyQixVQUFVLEVBQUUsS0FBSztJQUNqQixzQkFBc0IsRUFBRSxFQUFFO0lBQ3pCLGFBQWEsRUFBRSxLQUFLO0NBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgbGV0IGVudmlyb25tZW50ID0ge1xuICAgIHByb2R1Y3Rpb246IGZhbHNlLFxuICAgIGdvb2dsZVJlY2FwdGNoYVNpdGVLZXk6ICcnLFxuICAgICBodG1sRGlyZWN0aW9uOiAnbHRyJ1xuICB9O1xuICAiXX0=
@@ -0,0 +1,128 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/validation.service";
4
+ import * as i2 from "../../services/element-tracker.service";
5
+ import * as i3 from "../../services/aggregate.service";
6
+ import * as i4 from "@angular/common";
7
+ import * as i5 from "@angular/forms";
8
+ export class AggregateFunctionComponent {
9
+ constructor(validationService, tracker, aggregateService, cdr) {
10
+ this.validationService = validationService;
11
+ this.tracker = tracker;
12
+ this.aggregateService = aggregateService;
13
+ this.cdr = cdr;
14
+ this.question = {};
15
+ this.inLine = false;
16
+ this.answerChange = new EventEmitter();
17
+ this.answer = '';
18
+ this.count = 0;
19
+ this.required = false;
20
+ this.hint = '';
21
+ this.placeholder = '';
22
+ this.validationFailed = false;
23
+ this.validationMessage = '';
24
+ this.elementId = '';
25
+ this.result = 0;
26
+ }
27
+ ngOnInit() {
28
+ this.valueAssigned();
29
+ this.aggregateService.setAggregateField(this.rowId, this.question.id, this.question.formElement.aggregateFunction.aggregateOperation, this.question.formElement.aggregateFunction.formula);
30
+ this.subscription = this.aggregateService.aggregateFieldResults$.subscribe(update => {
31
+ if (update && update.id === `${this.rowId}:${this.question.id}`) { // include rowId
32
+ if (update.evaluated) {
33
+ this.result = update.result;
34
+ this.question.answer = String(this.result);
35
+ this.answerChange.emit(this.question.answer);
36
+ this.validationService.clearInvalid(this.question.id);
37
+ }
38
+ else {
39
+ this.result = 0;
40
+ this.question.answer = '';
41
+ this.answerChange.emit(this.question.answer);
42
+ }
43
+ }
44
+ });
45
+ }
46
+ valueAssigned() {
47
+ this.count = this.question?.count;
48
+ this.required = this.question?.required;
49
+ this.hint = this.question?.hint;
50
+ this.placeholder = this.question.formElement?.appearance?.placeholder || '';
51
+ if (this.question.answer !== null &&
52
+ this.question.answer !== undefined &&
53
+ ((typeof this.question.answer === 'string' &&
54
+ this.question.answer.trim() !== '') ||
55
+ (Array.isArray(this.question.answer) &&
56
+ this.question.answer.length > 0) ||
57
+ (typeof this.question.answer === 'object' &&
58
+ Object.keys(this.question.answer).length > 0))) {
59
+ this.result = this.question.answer;
60
+ }
61
+ }
62
+ clearAnswersRecursively(logic) {
63
+ if (!logic || !logic.rows)
64
+ return;
65
+ logic.rows.forEach((row) => {
66
+ row.grid.forEach((item) => {
67
+ const element = item.element;
68
+ if (item.entityType === 'QUESTION' && element) {
69
+ // Clear answer if present
70
+ if ('answer' in element) {
71
+ element.answer = '';
72
+ }
73
+ // Recursively clear childLogics if any
74
+ if (element.childLogics && element.childLogics.length > 0) {
75
+ element.childLogics.forEach((childLogic) => {
76
+ this.clearAnswersRecursively(childLogic);
77
+ });
78
+ }
79
+ }
80
+ if (item.entityType === 'SUBFORM' && element && element.rows) {
81
+ // SUBFORM contains its own rows structure like a form
82
+ this.clearAnswersRecursively({ rows: element.rows });
83
+ }
84
+ });
85
+ });
86
+ }
87
+ handleValidation(isValid, message = 'This field is required') {
88
+ if (isValid) {
89
+ this.validationService.clearInvalid(this.question.id);
90
+ }
91
+ else {
92
+ // this.validationService.setInvalid(this.question.id, message);
93
+ }
94
+ }
95
+ get isInvalid() {
96
+ return !!this.validationService.getErrorMessage(this.question.id);
97
+ }
98
+ get errorMessage() {
99
+ return this.validationService.getErrorMessage(this.question.id);
100
+ }
101
+ ngAfterViewInit() {
102
+ this.elementId = `question-${this.question.id}`;
103
+ this.tracker.registerElement(this.elementId);
104
+ }
105
+ ngOnDestroy() {
106
+ if (this.elementId) {
107
+ this.tracker.unregisterElement(this.elementId);
108
+ }
109
+ if (this.subscription) {
110
+ this.subscription.unsubscribe();
111
+ }
112
+ }
113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AggregateFunctionComponent, deps: [{ token: i1.ValidationService }, { token: i2.ElementTrackerService }, { token: i3.AggregationFunctionService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
114
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AggregateFunctionComponent, selector: "lib-aggregate-function", inputs: { question: "question", inLine: "inLine", rowId: "rowId" }, outputs: { answerChange: "answerChange" }, ngImport: i0, template: "<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n >&nbsp;\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <input\n type=\"text\"\n class=\"form-control mb-2 height\"\n [placeholder]=\"placeholder\"\n [(ngModel)]=\"result\"\n readonly\n [class.invalid-question]=\"isInvalid && (!inLine || !result)\"\n [id]=\"question.id\"\n />\n <div *ngIf=\"isInvalid && (!inLine || !result)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n</div>\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}::ng-deep html lib-formSubmission{font-family:var(--library-font-family)!important;font-size:var(--library-font-size)!important}::ng-deep .timepicker-overlay{z-index:1000!important}::ng-deep .timepicker-backdrop-overlay{z-index:1000!important}.space{width:5px}.error-message{color:#f44336;font-size:.8em;margin-top:4px;padding:0 8px}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: 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"] }] }); }
115
+ }
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AggregateFunctionComponent, decorators: [{
117
+ type: Component,
118
+ args: [{ selector: 'lib-aggregate-function', template: "<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n >&nbsp;\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <input\n type=\"text\"\n class=\"form-control mb-2 height\"\n [placeholder]=\"placeholder\"\n [(ngModel)]=\"result\"\n readonly\n [class.invalid-question]=\"isInvalid && (!inLine || !result)\"\n [id]=\"question.id\"\n />\n <div *ngIf=\"isInvalid && (!inLine || !result)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger\">\n <svg\n class=\"validationSvg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\n fill=\"#FF0000\"\n stroke=\"#FF0000\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12 12.75L12 7.75\"\n stroke=\"white\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n {{ validationMessage }}\n </div>\n</div>\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}::ng-deep html lib-formSubmission{font-family:var(--library-font-family)!important;font-size:var(--library-font-size)!important}::ng-deep .timepicker-overlay{z-index:1000!important}::ng-deep .timepicker-backdrop-overlay{z-index:1000!important}.space{width:5px}.error-message{color:#f44336;font-size:.8em;margin-top:4px;padding:0 8px}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}\n"] }]
119
+ }], ctorParameters: function () { return [{ type: i1.ValidationService }, { type: i2.ElementTrackerService }, { type: i3.AggregationFunctionService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { question: [{
120
+ type: Input
121
+ }], inLine: [{
122
+ type: Input
123
+ }], answerChange: [{
124
+ type: Output
125
+ }], rowId: [{
126
+ type: Input
127
+ }] } });
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlLWZ1bmN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0tc3VibWlzc2lvbi9zcmMvZm9ybS1maWVsZHMvYWdncmVnYXRlLWZ1bmN0aW9uL2FnZ3JlZ2F0ZS1mdW5jdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2FnZ3JlZ2F0ZS1mdW5jdGlvbi9hZ2dyZWdhdGUtZnVuY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFXekcsTUFBTSxPQUFPLDBCQUEwQjtJQWdCcEMsWUFDYSxpQkFBb0MsRUFDcEMsT0FBOEIsRUFDOUIsZ0JBQTJDLEVBQzNDLEdBQXNCO1FBSHRCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsWUFBTyxHQUFQLE9BQU8sQ0FBdUI7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEyQjtRQUMzQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQW5CM0IsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUNuQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3ZCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVqRCxXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFDdkIsY0FBUyxHQUFTLEVBQUUsQ0FB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LENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZEO2FBQU07WUFDTCxnRUFBZ0U7U0FDakU7SUFDSCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzsrR0F6SFUsMEJBQTBCO21HQUExQiwwQkFBMEIsNktDWHZDLHkxR0E4RkE7OzRGRG5GYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0Usd0JBQXdCO3FOQUt6QixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNFLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWxlbWVudFRyYWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxlbWVudC10cmFja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWdncmVnYXRpb25GdW5jdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hZ2dyZWdhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWFnZ3JlZ2F0ZS1mdW5jdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZ2dyZWdhdGUtZnVuY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hZ2dyZWdhdGUtZnVuY3Rpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBBZ2dyZWdhdGVGdW5jdGlvbkNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgaW5MaW5lOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBhbnN3ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgcm93SWQ6IGFueSA7XG4gIGFuc3dlcjogc3RyaW5nID0gJyc7XG4gIGNvdW50OiBudW1iZXIgPSAwO1xuICByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBoaW50OiBzdHJpbmcgPSAnJztcbiAgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICB2YWxpZGF0aW9uRmFpbGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBlbGVtZW50SWQ6IHN0cmluZz0nJztcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHJlc3VsdDpudW1iZXI9MDtcbiAgICBcbiAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFja2VyOiBFbGVtZW50VHJhY2tlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWdncmVnYXRlU2VydmljZTpBZ2dyZWdhdGlvbkZ1bmN0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgICApICB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnZhbHVlQXNzaWduZWQoKTtcbiAgICB0aGlzLmFnZ3JlZ2F0ZVNlcnZpY2Uuc2V0QWdncmVnYXRlRmllbGQodGhpcy5yb3dJZCx0aGlzLnF1ZXN0aW9uLmlkLHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYWdncmVnYXRlRnVuY3Rpb24uYWdncmVnYXRlT3BlcmF0aW9uLHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYWdncmVnYXRlRnVuY3Rpb24uZm9ybXVsYSk7XG4gICAgXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmFnZ3JlZ2F0ZVNlcnZpY2UuYWdncmVnYXRlRmllbGRSZXN1bHRzJC5zdWJzY3JpYmUodXBkYXRlID0+IHtcbiAgICAgIGlmICh1cGRhdGUgJiYgdXBkYXRlLmlkID09PSBgJHt0aGlzLnJvd0lkfToke3RoaXMucXVlc3Rpb24uaWR9YCkgeyAvLyBpbmNsdWRlIHJvd0lkXG4gICAgICAgIGlmKHVwZGF0ZS5ldmFsdWF0ZWQpe1xuICAgICAgICAgIHRoaXMucmVzdWx0ID0gdXBkYXRlLnJlc3VsdDtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciA9IFN0cmluZyh0aGlzLnJlc3VsdCk7XG4gICAgICAgICAgdGhpcy5hbnN3ZXJDaGFuZ2UuZW1pdCh0aGlzLnF1ZXN0aW9uLmFuc3dlcik7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5xdWVzdGlvbi5pZCk7XG4gICAgICAgIH0gZWxzZXtcbiAgICAgICAgICB0aGlzLnJlc3VsdCA9IDA7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXIgPSAnJztcbiAgICAgICAgICB0aGlzLmFuc3dlckNoYW5nZS5lbWl0KHRoaXMucXVlc3Rpb24uYW5zd2VyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIFxuXG4gIHZhbHVlQXNzaWduZWQoKSB7XG4gICAgdGhpcy5jb3VudCA9IHRoaXMucXVlc3Rpb24/LmNvdW50O1xuICAgIHRoaXMucmVxdWlyZWQgPSB0aGlzLnF1ZXN0aW9uPy5yZXF1aXJlZDtcbiAgICB0aGlzLmhpbnQgPSB0aGlzLnF1ZXN0aW9uPy5oaW50O1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Py5hcHBlYXJhbmNlPy5wbGFjZWhvbGRlciB8fCAnJztcbiAgICBpZiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciAhPT0gbnVsbCAmJlxuICAgICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKCh0eXBlb2YgdGhpcy5xdWVzdGlvbi5hbnN3ZXIgPT09ICdzdHJpbmcnICYmXG4gICAgICAgIHRoaXMucXVlc3Rpb24uYW5zd2VyLnRyaW0oKSAhPT0gJycpIHx8XG4gICAgICAgIChBcnJheS5pc0FycmF5KHRoaXMucXVlc3Rpb24uYW5zd2VyKSAmJlxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uYW5zd2VyLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICh0eXBlb2YgdGhpcy5xdWVzdGlvbi5hbnN3ZXIgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVzdGlvbi5hbnN3ZXIpLmxlbmd0aCA+IDApKVxuICAgICkge1xuICAgICAgdGhpcy5yZXN1bHQgPSB0aGlzLnF1ZXN0aW9uLmFuc3dlcjtcbiAgICB9XG4gIH1cbiBcblxuICBjbGVhckFuc3dlcnNSZWN1cnNpdmVseShsb2dpYzogYW55KSB7XG4gICAgaWYgKCFsb2dpYyB8fCAhbG9naWMucm93cykgcmV0dXJuO1xuICBcbiAgICBsb2dpYy5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICByb3cuZ3JpZC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGl0ZW0uZWxlbWVudDtcbiAgXG4gICAgICAgIGlmIChpdGVtLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiYgZWxlbWVudCkge1xuICAgICAgICAgIC8vIENsZWFyIGFuc3dlciBpZiBwcmVzZW50XG4gICAgICAgICAgaWYgKCdhbnN3ZXInIGluIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuYW5zd2VyID0gJyc7XG4gICAgICAgICAgfVxuICBcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBjbGVhciBjaGlsZExvZ2ljcyBpZiBhbnlcbiAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZExvZ2ljcyAmJiBlbGVtZW50LmNoaWxkTG9naWNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRMb2dpY3MuZm9yRWFjaCgoY2hpbGRMb2dpYzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkoY2hpbGRMb2dpYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGlmIChpdGVtLmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyAmJiBlbGVtZW50ICYmIGVsZW1lbnQucm93cykge1xuICAgICAgICAgIC8vIFNVQkZPUk0gY29udGFpbnMgaXRzIG93biByb3dzIHN0cnVjdHVyZSBsaWtlIGEgZm9ybVxuICAgICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkoeyByb3dzOiBlbGVtZW50LnJvd3MgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlVmFsaWRhdGlvbihpc1ZhbGlkOiBib29sZWFuLCBtZXNzYWdlOiBzdHJpbmcgPSAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcpIHtcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5xdWVzdGlvbi5pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZCh0aGlzLnF1ZXN0aW9uLmlkLCBtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKHRoaXMucXVlc3Rpb24uaWQpO1xuICB9XG5cbiAgZ2V0IGVycm9yTWVzc2FnZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRFcnJvck1lc3NhZ2UodGhpcy5xdWVzdGlvbi5pZCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5lbGVtZW50SWQgPSBgcXVlc3Rpb24tJHt0aGlzLnF1ZXN0aW9uLmlkfWA7XG4gICAgdGhpcy50cmFja2VyLnJlZ2lzdGVyRWxlbWVudCh0aGlzLmVsZW1lbnRJZCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5lbGVtZW50SWQpIHtcbiAgICAgIHRoaXMudHJhY2tlci51bnJlZ2lzdGVyRWxlbWVudCh0aGlzLmVsZW1lbnRJZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgW25nQ2xhc3NdPVwieyAnbWItNCc6ICFpbkxpbmUgfVwiXG4gIGNsYXNzPVwicHgtM1wiXG4gIFtpZF09XCIncXVlc3Rpb24tJyArIHF1ZXN0aW9uLmlkXCJcbiAgW2F0dHIubmFtZV09XCJxdWVzdGlvbi50ZXN0RWxlbWVudE5hbWVcIlxuPlxuICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlciBtYi0yXCIgKm5nSWY9XCIhaW5MaW5lXCI+XG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyXCIgW2lubmVySFRNTF09XCJxdWVzdGlvbi5xdWVzdGlvbk51bWJlclwiPjwvZGl2PlxuICAgIDxzcGFuICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25OdW1iZXJcIiBjbGFzcz1cInNwYWNlXCI+PC9zcGFuPiA8bGFiZWw+e3sgcXVlc3Rpb24ucXVlc3Rpb24gfX08L2xhYmVsXG4gICAgPiZuYnNwO1xuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInN2Zy13cmFwcGVyIG1iLTIgaGludEljb25cIlxuICAgICAgW2F0dHIuZGF0YS10aXRsZV09XCJoaW50XCJcbiAgICAgICpuZ0lmPVwiaGludFwiXG4gICAgPlxuICAgICAgPHN2Z1xuICAgICAgICBjbGFzcz1cImhpbnRTdmdcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDMwIDMwXCJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICA+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgZD1cIk0xNSAyNi4yNVYyNi4yNUM4Ljc4NjI1IDI2LjI1IDMuNzUgMjEuMjEzOCAzLjc1IDE1VjE1QzMuNzUgOC43ODYyNSA4Ljc4NjI1IDMuNzUgMTUgMy43NVYzLjc1QzIxLjIxMzggMy43NSAyNi4yNSA4Ljc4NjI1IDI2LjI1IDE1VjE1QzI2LjI1IDIxLjIxMzggMjEuMjEzOCAyNi4yNSAxNSAyNi4yNVpcIlxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTUgMTYuNTYyM1YxNi4yNDk4QzE1IDE1LjIyODUgMTUuNjMxMiAxNC42NzQ4IDE2LjI2MzcgMTQuMjQ5OEMxNi44ODEyIDEzLjgzMzUgMTcuNSAxMy4yOTEgMTcuNSAxMi4yOTFDMTcuNSAxMC45MDk4IDE2LjM4MTMgOS43OTEwMiAxNSA5Ljc5MTAyQzEzLjYxODcgOS43OTEwMiAxMi41IDEwLjkwOTggMTIuNSAxMi4yOTFcIlxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTQuOTk4OCAyMEMxNC44MjYzIDIwIDE0LjY4NjMgMjAuMTQgMTQuNjg3NSAyMC4zMTI1QzE0LjY4NzUgMjAuNDg1IDE0LjgyNzUgMjAuNjI1IDE1IDIwLjYyNUMxNS4xNzI1IDIwLjYyNSAxNS4zMTI1IDIwLjQ4NSAxNS4zMTI1IDIwLjMxMjVDMTUuMzEyNSAyMC4xNCAxNS4xNzI1IDIwIDE0Ljk5ODggMjBcIlxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8aW5wdXRcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWItMiBoZWlnaHRcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgWyhuZ01vZGVsKV09XCJyZXN1bHRcIlxuICAgIHJlYWRvbmx5XG4gICAgW2NsYXNzLmludmFsaWQtcXVlc3Rpb25dPVwiaXNJbnZhbGlkICYmICghaW5MaW5lIHx8ICFyZXN1bHQpXCJcbiAgICBbaWRdPVwicXVlc3Rpb24uaWRcIlxuICAvPlxuICA8ZGl2ICpuZ0lmPVwiaXNJbnZhbGlkICYmICghaW5MaW5lIHx8ICFyZXN1bHQpXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+XG4gICAge3sgZXJyb3JNZXNzYWdlIH19XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwidmFsaWRhdGlvbkZhaWxlZCAmJiAhaXNJbnZhbGlkXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPlxuICAgIDxzdmdcbiAgICAgIGNsYXNzPVwidmFsaWRhdGlvblN2Z1wiXG4gICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgID5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMTIuMDAxIDE2Ljc1QzEyLjEzOSAxNi43NSAxMi4yNTEgMTYuNjM4IDEyLjI1IDE2LjVDMTIuMjUgMTYuMzYyIDEyLjEzOCAxNi4yNSAxMiAxNi4yNUMxMS44NjIgMTYuMjUgMTEuNzUgMTYuMzYyIDExLjc1IDE2LjVDMTEuNzUgMTYuNjM4IDExLjg2MiAxNi43NSAxMi4wMDEgMTYuNzVcIlxuICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAvPlxuICAgICAgPHBhdGhcbiAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBkPVwiTTEyIDIxQzcuMDI5IDIxIDMgMTYuOTcxIDMgMTJDMyA3LjAyOSA3LjAyOSAzIDEyIDNDMTYuOTcxIDMgMjEgNy4wMjkgMjEgMTJDMjEgMTYuOTcxIDE2Ljk3MSAyMSAxMiAyMVpcIlxuICAgICAgICBmaWxsPVwiI0ZGMDAwMFwiXG4gICAgICAgIHN0cm9rZT1cIiNGRjAwMDBcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMTIgMTIuNzVMMTIgNy43NVwiXG4gICAgICAgIHN0cm9rZT1cIndoaXRlXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjE2XCIgcj1cIjFcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgIDwvc3ZnPlxuICAgIHt7IHZhbGlkYXRpb25NZXNzYWdlIH19XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=