@piserve-tech/form-submission 1.3.317 → 1.3.319

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 (442) hide show
  1. package/environment/environment.d.ts +5 -0
  2. package/esm2022/environment/environment.mjs +6 -0
  3. package/esm2022/form-fields/aggregate-function/aggregate-function.component.mjs +146 -0
  4. package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +473 -0
  5. package/esm2022/form-fields/currency-fields/currency-fields.component.mjs +502 -0
  6. package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +608 -0
  7. package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +585 -0
  8. package/esm2022/form-fields/file-picker-fields/file-picker-fields.component.mjs +224 -0
  9. package/esm2022/form-fields/form-fields.module.mjs +174 -0
  10. package/esm2022/form-fields/hidden-field/hidden-field.component.mjs +137 -0
  11. package/esm2022/form-fields/iframe-fields/iframe-fields.component.mjs +198 -0
  12. package/esm2022/form-fields/location-fields/location-fields.component.mjs +85 -0
  13. package/esm2022/form-fields/mail-fields/mail-fields.component.mjs +131 -0
  14. package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +270 -0
  15. package/esm2022/form-fields/number-fields/number-fields.component.mjs +242 -0
  16. package/esm2022/form-fields/password-fields/password-fields.component.mjs +257 -0
  17. package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +346 -0
  18. package/esm2022/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.mjs +148 -0
  19. package/esm2022/form-fields/section-fields/section-fields.component.mjs +29 -0
  20. package/esm2022/form-fields/selection-matrix-fields/selection-matrix-fields.component.mjs +158 -0
  21. package/esm2022/form-fields/signature-fields/signature-fields.component.mjs +32 -0
  22. package/esm2022/form-fields/slider-fields/slider-fields.component.mjs +73 -0
  23. package/esm2022/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.mjs +66 -0
  24. package/esm2022/form-fields/text-area-fields/text-area-fields.component.mjs +159 -0
  25. package/esm2022/form-fields/text-fields/text-fields.component.mjs +245 -0
  26. package/esm2022/form-fields/toggle-switch-fields/toggle-switch-fields.component.mjs +85 -0
  27. package/esm2022/form-fields/url-fields/url-fields.component.mjs +124 -0
  28. package/esm2022/form-submission/form-submission.module.mjs +64 -0
  29. package/esm2022/form-submission/header/header.component.mjs +20 -0
  30. package/esm2022/form-submission/navigation-tabs/navigation-tabs.component.mjs +171 -0
  31. package/esm2022/form-submission/next-prev-navigation/next-prev-navigation.component.mjs +124 -0
  32. package/esm2022/form-submission/save-as-draft/saveDraftModalComponent .mjs +50 -0
  33. package/esm2022/form-submission/submission-container/submission-container.component.mjs +17 -0
  34. package/esm2022/form-submission/submit-form/submit-form.component.mjs +1610 -0
  35. package/esm2022/lib/form-submission.component.mjs +113 -0
  36. package/esm2022/lib/form-submission.module.mjs +56 -0
  37. package/esm2022/lib/form-submission.service.mjs +14 -0
  38. package/esm2022/models/aggregate.model.mjs +2 -0
  39. package/esm2022/models/answer.model.mjs +2 -0
  40. package/esm2022/models/appearance.model.mjs +2 -0
  41. package/esm2022/models/attachment.model.mjs +2 -0
  42. package/esm2022/models/defaultAnswerEntry.model.mjs +2 -0
  43. package/esm2022/models/defaultAnswersModel.model.mjs +2 -0
  44. package/esm2022/models/defaultQuestionAnswer.model.mjs +2 -0
  45. package/esm2022/models/elementOptionAPI.model.mjs +2 -0
  46. package/esm2022/models/elementOptionAPIData.model.mjs +2 -0
  47. package/esm2022/models/elementOptionDB.model.mjs +2 -0
  48. package/esm2022/models/elementOptionDBCriteria.model.mjs +2 -0
  49. package/esm2022/models/emitters.model.mjs +2 -0
  50. package/esm2022/models/enum/condition.enum.mjs +18 -0
  51. package/esm2022/models/enum/elementType .enum.mjs +24 -0
  52. package/esm2022/models/enum/entityType.enum.mjs +12 -0
  53. package/esm2022/models/formConfiguration.model.mjs +2 -0
  54. package/esm2022/models/formElement.model.mjs +2 -0
  55. package/esm2022/models/formElementType.model.mjs +2 -0
  56. package/esm2022/models/grid.model.mjs +2 -0
  57. package/esm2022/models/hiddenField.model.mjs +2 -0
  58. package/esm2022/models/iFrameProperties.model.mjs +2 -0
  59. package/esm2022/models/logic.model.mjs +2 -0
  60. package/esm2022/models/multifields.model.mjs +2 -0
  61. package/esm2022/models/option.model.mjs +2 -0
  62. package/esm2022/models/page.model.mjs +2 -0
  63. package/esm2022/models/publicForm.model.mjs +2 -0
  64. package/esm2022/models/question.model.mjs +2 -0
  65. package/esm2022/models/questionAnswer.model.mjs +2 -0
  66. package/esm2022/models/questionGroup.model.mjs +2 -0
  67. package/esm2022/models/row.model.mjs +2 -0
  68. package/esm2022/models/scoring.model.mjs +2 -0
  69. package/esm2022/models/section.model.mjs +2 -0
  70. package/esm2022/models/subForm.model.mjs +2 -0
  71. package/esm2022/models/subformConfiguration.model.mjs +2 -0
  72. package/esm2022/models/subformPropery.model.mjs +2 -0
  73. package/esm2022/models/submission.model.mjs +2 -0
  74. package/esm2022/models/submissionCopyConfig.mopdel.mjs +2 -0
  75. package/esm2022/models/terms&condition.model.mjs +2 -0
  76. package/esm2022/models/validation.model.mjs +2 -0
  77. package/esm2022/models/whenClause.model.mjs +2 -0
  78. package/esm2022/models/whenClauseCondition.model.mjs +2 -0
  79. package/esm2022/models/whenClauseElements.model.mjs +2 -0
  80. package/esm2022/piserve-tech-form-submission.mjs +5 -0
  81. package/esm2022/public-api.mjs +7 -0
  82. package/esm2022/question/card-subform/card-subform.component.mjs +354 -0
  83. package/esm2022/question/confirm-dialog/confirm-dialog.component.mjs +27 -0
  84. package/esm2022/question/form-elements/form-elements.component.mjs +62 -0
  85. package/esm2022/question/inline-multiple-subform/inline-multiple-subform.component.mjs +384 -0
  86. package/esm2022/question/multifields/multifields.component.mjs +54 -0
  87. package/esm2022/question/multiple-subform/multiple-subform.component.mjs +413 -0
  88. package/esm2022/question/question/question.component.mjs +145 -0
  89. package/esm2022/question/question-group/question-group.component.mjs +102 -0
  90. package/esm2022/question/recursive-logic/recursive-logic.component.mjs +49 -0
  91. package/esm2022/question/sub-form/sub-form.component.mjs +355 -0
  92. package/esm2022/services/aggregate.service.mjs +139 -0
  93. package/esm2022/services/countryService.mjs +89 -0
  94. package/esm2022/services/data.service.mjs +36 -0
  95. package/esm2022/services/element-tracker.service.mjs +27 -0
  96. package/esm2022/services/form-validation.service.mjs +128 -0
  97. package/esm2022/services/form.service.mjs +332 -0
  98. package/esm2022/services/mapper.service.mjs +519 -0
  99. package/esm2022/services/recaptcha.service.mjs +136 -0
  100. package/esm2022/services/score.service.mjs +268 -0
  101. package/esm2022/services/subform-copy.service.mjs +122 -0
  102. package/esm2022/services/validation.service.mjs +35 -0
  103. package/esm2022/services/whenClause.service.mjs +423 -0
  104. package/esm2022/shared/shared.module.mjs +97 -0
  105. package/esm2022/sub-form/submission-modal/submission-modal.component.mjs +133 -0
  106. package/fesm2022/piserve-tech-form-submission.mjs +11661 -0
  107. package/fesm2022/piserve-tech-form-submission.mjs.map +1 -0
  108. package/form-fields/aggregate-function/aggregate-function.component.d.ts +43 -0
  109. package/form-fields/check-box-fields/check-box-fields.component.d.ts +73 -0
  110. package/form-fields/currency-fields/currency-fields.component.d.ts +62 -0
  111. package/form-fields/date-time-fields/date-time-fields.component.d.ts +96 -0
  112. package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +88 -0
  113. package/form-fields/file-picker-fields/file-picker-fields.component.d.ts +72 -0
  114. package/form-fields/form-fields.module.d.ts +40 -0
  115. package/form-fields/hidden-field/hidden-field.component.d.ts +38 -0
  116. package/form-fields/iframe-fields/iframe-fields.component.d.ts +35 -0
  117. package/form-fields/location-fields/location-fields.component.d.ts +29 -0
  118. package/form-fields/mail-fields/mail-fields.component.d.ts +41 -0
  119. package/form-fields/mobile-fields/mobile-fields.component.d.ts +71 -0
  120. package/form-fields/number-fields/number-fields.component.d.ts +53 -0
  121. package/form-fields/password-fields/password-fields.component.d.ts +57 -0
  122. package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +70 -0
  123. package/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.d.ts +46 -0
  124. package/form-fields/section-fields/section-fields.component.d.ts +10 -0
  125. package/form-fields/selection-matrix-fields/selection-matrix-fields.component.d.ts +45 -0
  126. package/form-fields/signature-fields/signature-fields.component.d.ts +13 -0
  127. package/form-fields/slider-fields/slider-fields.component.d.ts +32 -0
  128. package/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.d.ts +26 -0
  129. package/form-fields/text-area-fields/text-area-fields.component.d.ts +49 -0
  130. package/form-fields/text-fields/text-fields.component.d.ts +49 -0
  131. package/form-fields/toggle-switch-fields/toggle-switch-fields.component.d.ts +29 -0
  132. package/form-fields/url-fields/url-fields.component.d.ts +41 -0
  133. package/form-submission/form-submission.module.d.ts +20 -0
  134. package/form-submission/header/header.component.d.ts +7 -0
  135. package/form-submission/navigation-tabs/navigation-tabs.component.d.ts +57 -0
  136. package/form-submission/next-prev-navigation/next-prev-navigation.component.d.ts +46 -0
  137. package/form-submission/save-as-draft/saveDraftModalComponent .d.ts +17 -0
  138. package/form-submission/submission-container/submission-container.component.d.ts +7 -0
  139. package/form-submission/submit-form/submit-form.component.d.ts +237 -0
  140. package/index.d.ts +5 -0
  141. package/lib/form-submission.component.d.ts +30 -0
  142. package/lib/form-submission.module.d.ts +16 -0
  143. package/lib/form-submission.service.d.ts +6 -0
  144. package/models/aggregate.model.d.ts +4 -0
  145. package/{src/models/answer.model.ts → models/answer.model.d.ts} +23 -25
  146. package/models/appearance.model.d.ts +64 -0
  147. package/{src/models/attachment.model.ts → models/attachment.model.d.ts} +6 -6
  148. package/{src/models/defaultAnswerEntry.model.ts → models/defaultAnswerEntry.model.d.ts} +5 -7
  149. package/{src/models/defaultAnswersModel.model.ts → models/defaultAnswersModel.model.d.ts} +4 -5
  150. package/{src/models/defaultQuestionAnswer.model.ts → models/defaultQuestionAnswer.model.d.ts} +6 -6
  151. package/models/elementOptionAPI.model.d.ts +12 -0
  152. package/models/elementOptionAPIData.model.d.ts +5 -0
  153. package/models/elementOptionDB.model.d.ts +8 -0
  154. package/models/elementOptionDBCriteria.model.d.ts +7 -0
  155. package/{src/models/emitters.model.ts → models/emitters.model.d.ts} +8 -8
  156. package/{src/models/enum/condition.enum.ts → models/enum/condition.enum.d.ts} +2 -2
  157. package/models/enum/elementType .enum.d.ts +22 -0
  158. package/models/enum/entityType.enum.d.ts +10 -0
  159. package/{src/models/formConfiguration.model.ts → models/formConfiguration.model.d.ts} +2 -2
  160. package/{src/models/formElement.model.ts → models/formElement.model.d.ts} +22 -22
  161. package/{src/models/formElementType.model.ts → models/formElementType.model.d.ts} +2 -3
  162. package/{src/models/grid.model.ts → models/grid.model.d.ts} +13 -14
  163. package/{src/models/hiddenField.model.ts → models/hiddenField.model.d.ts} +5 -5
  164. package/{src/models/iFrameProperties.model.ts → models/iFrameProperties.model.d.ts} +13 -13
  165. package/models/logic.model.d.ts +9 -0
  166. package/models/multifields.model.d.ts +11 -0
  167. package/{src/models/option.model.ts → models/option.model.d.ts} +5 -5
  168. package/models/page.model.d.ts +6 -0
  169. package/models/publicForm.model.d.ts +18 -0
  170. package/models/question.model.d.ts +26 -0
  171. package/models/questionAnswer.model.d.ts +7 -0
  172. package/models/questionGroup.model.d.ts +11 -0
  173. package/{src/models/row.model.ts → models/row.model.d.ts} +1 -2
  174. package/models/scoring.model.d.ts +10 -0
  175. package/models/section.model.d.ts +6 -0
  176. package/models/subForm.model.d.ts +24 -0
  177. package/models/subformConfiguration.model.d.ts +4 -0
  178. package/models/subformPropery.model.d.ts +7 -0
  179. package/{src/models/submission.model.ts → models/submission.model.d.ts} +14 -16
  180. package/{src/models/submissionCopyConfig.mopdel.ts → models/submissionCopyConfig.mopdel.d.ts} +4 -4
  181. package/{src/models/terms&condition.model.ts → models/terms&condition.model.d.ts} +1 -1
  182. package/models/validation.model.d.ts +48 -0
  183. package/models/whenClause.model.d.ts +6 -0
  184. package/{src/models/whenClauseCondition.model.ts → models/whenClauseCondition.model.d.ts} +6 -6
  185. package/{src/models/whenClauseElements.model.ts → models/whenClauseElements.model.d.ts} +5 -6
  186. package/package.json +46 -33
  187. package/{src/public-api.ts → public-api.d.ts} +0 -4
  188. package/question/card-subform/card-subform.component.d.ts +44 -0
  189. package/question/confirm-dialog/confirm-dialog.component.d.ts +12 -0
  190. package/question/form-elements/form-elements.component.d.ts +20 -0
  191. package/question/inline-multiple-subform/inline-multiple-subform.component.d.ts +47 -0
  192. package/question/multifields/multifields.component.d.ts +11 -0
  193. package/question/multiple-subform/multiple-subform.component.d.ts +39 -0
  194. package/question/question/question.component.d.ts +30 -0
  195. package/question/question-group/question-group.component.d.ts +29 -0
  196. package/question/recursive-logic/recursive-logic.component.d.ts +19 -0
  197. package/question/sub-form/sub-form.component.d.ts +70 -0
  198. package/services/aggregate.service.d.ts +29 -0
  199. package/services/countryService.d.ts +21 -0
  200. package/services/data.service.d.ts +19 -0
  201. package/services/element-tracker.service.d.ts +10 -0
  202. package/services/form-validation.service.d.ts +16 -0
  203. package/services/form.service.d.ts +27 -0
  204. package/services/mapper.service.d.ts +31 -0
  205. package/services/recaptcha.service.d.ts +46 -0
  206. package/services/score.service.d.ts +27 -0
  207. package/services/subform-copy.service.d.ts +10 -0
  208. package/services/validation.service.d.ts +14 -0
  209. package/services/whenClause.service.d.ts +45 -0
  210. package/shared/shared.module.d.ts +25 -0
  211. package/sub-form/submission-modal/submission-modal.component.d.ts +31 -0
  212. package/ng-package.json +0 -30
  213. package/src/environment/environment.ts +0 -6
  214. package/src/form-fields/aggregate-function/aggregate-function.component.html +0 -63
  215. package/src/form-fields/aggregate-function/aggregate-function.component.scss +0 -1
  216. package/src/form-fields/aggregate-function/aggregate-function.component.spec.ts +0 -21
  217. package/src/form-fields/aggregate-function/aggregate-function.component.ts +0 -148
  218. package/src/form-fields/check-box-fields/check-box-fields.component.html +0 -81
  219. package/src/form-fields/check-box-fields/check-box-fields.component.scss +0 -28
  220. package/src/form-fields/check-box-fields/check-box-fields.component.spec.ts +0 -21
  221. package/src/form-fields/check-box-fields/check-box-fields.component.ts +0 -538
  222. package/src/form-fields/currency-fields/currency-fields.component.html +0 -85
  223. package/src/form-fields/currency-fields/currency-fields.component.scss +0 -48
  224. package/src/form-fields/currency-fields/currency-fields.component.spec.ts +0 -21
  225. package/src/form-fields/currency-fields/currency-fields.component.ts +0 -589
  226. package/src/form-fields/date-time-fields/date-time-fields.component.html +0 -268
  227. package/src/form-fields/date-time-fields/date-time-fields.component.scss +0 -88
  228. package/src/form-fields/date-time-fields/date-time-fields.component.spec.ts +0 -21
  229. package/src/form-fields/date-time-fields/date-time-fields.component.ts +0 -693
  230. package/src/form-fields/drop-down-fields/drop-down-fields.component.html +0 -77
  231. package/src/form-fields/drop-down-fields/drop-down-fields.component.scss +0 -12
  232. package/src/form-fields/drop-down-fields/drop-down-fields.component.spec.ts +0 -21
  233. package/src/form-fields/drop-down-fields/drop-down-fields.component.ts +0 -698
  234. package/src/form-fields/file-picker-fields/file-picker-fields.component.html +0 -72
  235. package/src/form-fields/file-picker-fields/file-picker-fields.component.scss +0 -33
  236. package/src/form-fields/file-picker-fields/file-picker-fields.component.spec.ts +0 -21
  237. package/src/form-fields/file-picker-fields/file-picker-fields.component.ts +0 -256
  238. package/src/form-fields/form-fields.module.ts +0 -110
  239. package/src/form-fields/hidden-field/hidden-field.component.scss +0 -0
  240. package/src/form-fields/hidden-field/hidden-field.component.spec.ts +0 -21
  241. package/src/form-fields/hidden-field/hidden-field.component.ts +0 -156
  242. package/src/form-fields/iframe-fields/iframe-fields.component.html +0 -31
  243. package/src/form-fields/iframe-fields/iframe-fields.component.scss +0 -0
  244. package/src/form-fields/iframe-fields/iframe-fields.component.spec.ts +0 -21
  245. package/src/form-fields/iframe-fields/iframe-fields.component.ts +0 -225
  246. package/src/form-fields/location-fields/location-fields.component.html +0 -54
  247. package/src/form-fields/location-fields/location-fields.component.scss +0 -22
  248. package/src/form-fields/location-fields/location-fields.component.spec.ts +0 -21
  249. package/src/form-fields/location-fields/location-fields.component.ts +0 -83
  250. package/src/form-fields/mail-fields/mail-fields.component.html +0 -66
  251. package/src/form-fields/mail-fields/mail-fields.component.scss +0 -10
  252. package/src/form-fields/mail-fields/mail-fields.component.spec.ts +0 -21
  253. package/src/form-fields/mail-fields/mail-fields.component.ts +0 -127
  254. package/src/form-fields/mobile-fields/mobile-fields.component.html +0 -97
  255. package/src/form-fields/mobile-fields/mobile-fields.component.scss +0 -52
  256. package/src/form-fields/mobile-fields/mobile-fields.component.spec.ts +0 -21
  257. package/src/form-fields/mobile-fields/mobile-fields.component.ts +0 -310
  258. package/src/form-fields/number-fields/number-fields.component.html +0 -70
  259. package/src/form-fields/number-fields/number-fields.component.scss +0 -17
  260. package/src/form-fields/number-fields/number-fields.component.spec.ts +0 -21
  261. package/src/form-fields/number-fields/number-fields.component.ts +0 -256
  262. package/src/form-fields/password-fields/password-fields.component.html +0 -113
  263. package/src/form-fields/password-fields/password-fields.component.scss +0 -61
  264. package/src/form-fields/password-fields/password-fields.component.spec.ts +0 -21
  265. package/src/form-fields/password-fields/password-fields.component.ts +0 -273
  266. package/src/form-fields/radio-button-fields/radio-button-fields.component.html +0 -82
  267. package/src/form-fields/radio-button-fields/radio-button-fields.component.scss +0 -28
  268. package/src/form-fields/radio-button-fields/radio-button-fields.component.spec.ts +0 -21
  269. package/src/form-fields/radio-button-fields/radio-button-fields.component.ts +0 -391
  270. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.html +0 -67
  271. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.scss +0 -23
  272. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.spec.ts +0 -21
  273. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.ts +0 -145
  274. package/src/form-fields/section-fields/section-fields.component.html +0 -4
  275. package/src/form-fields/section-fields/section-fields.component.scss +0 -37
  276. package/src/form-fields/section-fields/section-fields.component.spec.ts +0 -21
  277. package/src/form-fields/section-fields/section-fields.component.ts +0 -25
  278. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.html +0 -93
  279. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.scss +0 -52
  280. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.spec.ts +0 -21
  281. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.ts +0 -155
  282. package/src/form-fields/signature-fields/signature-fields.component.html +0 -43
  283. package/src/form-fields/signature-fields/signature-fields.component.scss +0 -10
  284. package/src/form-fields/signature-fields/signature-fields.component.spec.ts +0 -21
  285. package/src/form-fields/signature-fields/signature-fields.component.ts +0 -25
  286. package/src/form-fields/slider-fields/slider-fields.component.html +0 -67
  287. package/src/form-fields/slider-fields/slider-fields.component.scss +0 -55
  288. package/src/form-fields/slider-fields/slider-fields.component.spec.ts +0 -21
  289. package/src/form-fields/slider-fields/slider-fields.component.ts +0 -63
  290. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.html +0 -52
  291. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.scss +0 -85
  292. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.spec.ts +0 -21
  293. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.ts +0 -62
  294. package/src/form-fields/text-area-fields/text-area-fields.component.html +0 -68
  295. package/src/form-fields/text-area-fields/text-area-fields.component.scss +0 -19
  296. package/src/form-fields/text-area-fields/text-area-fields.component.spec.ts +0 -21
  297. package/src/form-fields/text-area-fields/text-area-fields.component.ts +0 -166
  298. package/src/form-fields/text-fields/text-fields.component.html +0 -67
  299. package/src/form-fields/text-fields/text-fields.component.scss +0 -26
  300. package/src/form-fields/text-fields/text-fields.component.spec.ts +0 -21
  301. package/src/form-fields/text-fields/text-fields.component.ts +0 -248
  302. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.html +0 -70
  303. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.scss +0 -112
  304. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.spec.ts +0 -21
  305. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.ts +0 -74
  306. package/src/form-fields/url-fields/url-fields.component.html +0 -109
  307. package/src/form-fields/url-fields/url-fields.component.scss +0 -22
  308. package/src/form-fields/url-fields/url-fields.component.spec.ts +0 -21
  309. package/src/form-fields/url-fields/url-fields.component.ts +0 -123
  310. package/src/form-submission/form-submission.module.ts +0 -40
  311. package/src/form-submission/header/header.component.html +0 -6
  312. package/src/form-submission/header/header.component.scss +0 -26
  313. package/src/form-submission/header/header.component.spec.ts +0 -21
  314. package/src/form-submission/header/header.component.ts +0 -12
  315. package/src/form-submission/navigation-tabs/navigation-tabs.component.html +0 -134
  316. package/src/form-submission/navigation-tabs/navigation-tabs.component.scss +0 -200
  317. package/src/form-submission/navigation-tabs/navigation-tabs.component.spec.ts +0 -21
  318. package/src/form-submission/navigation-tabs/navigation-tabs.component.ts +0 -134
  319. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.html +0 -207
  320. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.scss +0 -208
  321. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.spec.ts +0 -21
  322. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.ts +0 -74
  323. package/src/form-submission/save-as-draft/saveDraftModalComponent .ts +0 -60
  324. package/src/form-submission/save-as-draft/saveDraftModalComponent.html +0 -33
  325. package/src/form-submission/save-as-draft/saveDraftModalComponent.scss +0 -195
  326. package/src/form-submission/submission-container/submission-container.component.html +0 -30
  327. package/src/form-submission/submission-container/submission-container.component.scss +0 -67
  328. package/src/form-submission/submission-container/submission-container.component.spec.ts +0 -21
  329. package/src/form-submission/submission-container/submission-container.component.ts +0 -14
  330. package/src/form-submission/submit-form/submit-form.component.html +0 -76
  331. package/src/form-submission/submit-form/submit-form.component.scss +0 -88
  332. package/src/form-submission/submit-form/submit-form.component.spec.ts +0 -21
  333. package/src/form-submission/submit-form/submit-form.component.ts +0 -1953
  334. package/src/lib/form-submission.component.html +0 -15
  335. package/src/lib/form-submission.component.scss +0 -1
  336. package/src/lib/form-submission.component.ts +0 -120
  337. package/src/lib/form-submission.module.ts +0 -31
  338. package/src/lib/form-submission.service.spec.ts +0 -16
  339. package/src/lib/form-submission.service.ts +0 -9
  340. package/src/models/aggregate.model.ts +0 -4
  341. package/src/models/appearance.model.ts +0 -64
  342. package/src/models/elementOptionAPI.model.ts +0 -13
  343. package/src/models/elementOptionAPIData.model.ts +0 -5
  344. package/src/models/elementOptionDB.model.ts +0 -9
  345. package/src/models/elementOptionDBCriteria.model.ts +0 -7
  346. package/src/models/enum/elementType .enum.ts +0 -22
  347. package/src/models/enum/entityType.enum.ts +0 -10
  348. package/src/models/logic.model.ts +0 -11
  349. package/src/models/multifields.model.ts +0 -12
  350. package/src/models/page.model.ts +0 -7
  351. package/src/models/publicForm.model.ts +0 -19
  352. package/src/models/question.model.ts +0 -27
  353. package/src/models/questionAnswer.model.ts +0 -8
  354. package/src/models/questionGroup.model.ts +0 -12
  355. package/src/models/response.model.ts +0 -9
  356. package/src/models/result.model.ts +0 -5
  357. package/src/models/scoring.model.ts +0 -10
  358. package/src/models/section.model.ts +0 -6
  359. package/src/models/subForm.model.ts +0 -25
  360. package/src/models/subformConfiguration.model.ts +0 -4
  361. package/src/models/subformPropery.model.ts +0 -8
  362. package/src/models/validation.model.ts +0 -48
  363. package/src/models/whenClause.model.ts +0 -7
  364. package/src/question/card-subform/card-subform.component.html +0 -282
  365. package/src/question/card-subform/card-subform.component.scss +0 -49
  366. package/src/question/card-subform/card-subform.component.spec.ts +0 -21
  367. package/src/question/card-subform/card-subform.component.ts +0 -407
  368. package/src/question/confirm-dialog/confirm-dialog.component.html +0 -32
  369. package/src/question/confirm-dialog/confirm-dialog.component.scss +0 -109
  370. package/src/question/confirm-dialog/confirm-dialog.component.spec.ts +0 -21
  371. package/src/question/confirm-dialog/confirm-dialog.component.ts +0 -24
  372. package/src/question/form-elements/form-elements.component.html +0 -28
  373. package/src/question/form-elements/form-elements.component.scss +0 -0
  374. package/src/question/form-elements/form-elements.component.spec.ts +0 -21
  375. package/src/question/form-elements/form-elements.component.ts +0 -41
  376. package/src/question/inline-multiple-subform/inline-multiple-subform.component.html +0 -321
  377. package/src/question/inline-multiple-subform/inline-multiple-subform.component.scss +0 -78
  378. package/src/question/inline-multiple-subform/inline-multiple-subform.component.spec.ts +0 -21
  379. package/src/question/inline-multiple-subform/inline-multiple-subform.component.ts +0 -425
  380. package/src/question/multifields/multifields.component.html +0 -78
  381. package/src/question/multifields/multifields.component.scss +0 -6
  382. package/src/question/multifields/multifields.component.spec.ts +0 -21
  383. package/src/question/multifields/multifields.component.ts +0 -27
  384. package/src/question/multiple-subform/multiple-subform.component.html +0 -185
  385. package/src/question/multiple-subform/multiple-subform.component.scss +0 -52
  386. package/src/question/multiple-subform/multiple-subform.component.spec.ts +0 -21
  387. package/src/question/multiple-subform/multiple-subform.component.ts +0 -481
  388. package/src/question/question/question.component.html +0 -51
  389. package/src/question/question/question.component.scss +0 -0
  390. package/src/question/question/question.component.spec.ts +0 -21
  391. package/src/question/question/question.component.ts +0 -129
  392. package/src/question/question-group/question-group.component.html +0 -147
  393. package/src/question/question-group/question-group.component.scss +0 -36
  394. package/src/question/question-group/question-group.component.spec.ts +0 -21
  395. package/src/question/question-group/question-group.component.ts +0 -94
  396. package/src/question/question.module.ts +0 -22
  397. package/src/question/recursive-logic/recursive-logic.component.html +0 -33
  398. package/src/question/recursive-logic/recursive-logic.component.scss +0 -0
  399. package/src/question/recursive-logic/recursive-logic.component.spec.ts +0 -21
  400. package/src/question/recursive-logic/recursive-logic.component.ts +0 -29
  401. package/src/question/sub-form/sub-form.component.html +0 -254
  402. package/src/question/sub-form/sub-form.component.scss +0 -83
  403. package/src/question/sub-form/sub-form.component.spec.ts +0 -21
  404. package/src/question/sub-form/sub-form.component.ts +0 -421
  405. package/src/services/aggregate.service.ts +0 -148
  406. package/src/services/countryService.ts +0 -92
  407. package/src/services/data.service.ts +0 -36
  408. package/src/services/element-tracker.service.spec.ts +0 -16
  409. package/src/services/element-tracker.service.ts +0 -24
  410. package/src/services/form-validation.service.ts +0 -151
  411. package/src/services/form.service.spec.ts +0 -16
  412. package/src/services/form.service.ts +0 -407
  413. package/src/services/mapper.service.ts +0 -625
  414. package/src/services/recaptcha.service.spec.ts +0 -16
  415. package/src/services/recaptcha.service.ts +0 -179
  416. package/src/services/score.service.ts +0 -352
  417. package/src/services/subform-copy.service.ts +0 -148
  418. package/src/services/validation.service.spec.ts +0 -16
  419. package/src/services/validation.service.ts +0 -33
  420. package/src/services/whenClause.service.ts +0 -502
  421. package/src/shared/shared.module.ts +0 -58
  422. package/src/styles/shared-style.scss +0 -86
  423. package/src/sub-form/sub-form.module.ts +0 -24
  424. package/src/sub-form/submission-modal/submission-modal.component.html +0 -160
  425. package/src/sub-form/submission-modal/submission-modal.component.scss +0 -54
  426. package/src/sub-form/submission-modal/submission-modal.component.spec.ts +0 -21
  427. package/src/sub-form/submission-modal/submission-modal.component.ts +0 -127
  428. package/tsconfig.lib.json +0 -14
  429. package/tsconfig.lib.prod.json +0 -10
  430. package/tsconfig.spec.json +0 -14
  431. /package/{src/assets → assets}/fonts/Garamond.woff2 +0 -0
  432. /package/{src/assets → assets}/fonts/Georgia.woff2 +0 -0
  433. /package/{src/assets → assets}/fonts/Poppins.woff2 +0 -0
  434. /package/{src/assets → assets}/fonts/Tahoma.woff2 +0 -0
  435. /package/{src/assets → assets}/fonts/Tajawal.woff2 +0 -0
  436. /package/{src/assets → assets}/fonts/Verdana.woff2 +0 -0
  437. /package/{src/assets → assets}/icons/close-sidebar-mark-icon.svg +0 -0
  438. /package/{src/assets → assets}/icons/copy-icon.svg +0 -0
  439. /package/{src/assets → assets}/icons/delete-icon.svg +0 -0
  440. /package/{src/assets → assets}/icons/delete-no-outline-icon.svg +0 -0
  441. /package/{src/assets → assets}/icons/left_arrow.svg +0 -0
  442. /package/{src/assets → assets}/icons/right_arrow.svg +0 -0
@@ -0,0 +1,139 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class AggregationFunctionService {
5
+ constructor() {
6
+ // New structure: { [rowId]: Map<fieldId, fieldData> }
7
+ this.aggregateFieldsMap = new Map();
8
+ this.numberFieldsMap = new Map();
9
+ this.aggregateFieldResultsSubject = new BehaviorSubject(null);
10
+ this.aggregateFieldResults$ = this.aggregateFieldResultsSubject.asObservable();
11
+ }
12
+ /**
13
+ * Store or update an aggregate field in the map
14
+ */
15
+ setAggregateField(rowId, fieldId, operation, formula) {
16
+ if (!this.aggregateFieldsMap.has(rowId)) {
17
+ this.aggregateFieldsMap.set(rowId, new Map());
18
+ }
19
+ this.aggregateFieldsMap.get(rowId).set(fieldId, { id: fieldId, operation, formula });
20
+ }
21
+ /**
22
+ * Store or update a number field in the map
23
+ */
24
+ setNumberField(rowId, fieldId, answer) {
25
+ if (!this.numberFieldsMap.has(rowId)) {
26
+ this.numberFieldsMap.set(rowId, new Map());
27
+ }
28
+ this.numberFieldsMap.get(rowId).set(fieldId, { id: fieldId, answer });
29
+ this.checkAndEvaluateFormulas(rowId);
30
+ }
31
+ emitAggregateResult(id, result, evaluated) {
32
+ this.aggregateFieldResultsSubject.next({ id, result, evaluated });
33
+ }
34
+ evaluateCustomFormula(rowId, formula) {
35
+ const rowNumberFields = this.numberFieldsMap.get(rowId);
36
+ if (!formula || !rowNumberFields)
37
+ return null;
38
+ const uuidRegex = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}/g;
39
+ /[0-9a-fA-F\-]{36}/g;
40
+ const uuidMatches = formula.match(uuidRegex) || [];
41
+ const allHaveAnswers = uuidMatches.every(uuid => {
42
+ const field = rowNumberFields.get(uuid);
43
+ return field !== undefined &&
44
+ field.answer !== undefined &&
45
+ field.answer !== null &&
46
+ String(field.answer).trim() !== '';
47
+ });
48
+ if (!allHaveAnswers)
49
+ return null;
50
+ const replacedFormula = formula.replace(uuidRegex, (match) => {
51
+ const field = rowNumberFields.get(match);
52
+ return field?.answer?.toString() || '0';
53
+ });
54
+ try {
55
+ return new Function(`return ${replacedFormula};`)();
56
+ }
57
+ catch (error) {
58
+ console.error('Error evaluating formula:', error);
59
+ return null;
60
+ }
61
+ }
62
+ evaluatePredefinedOperation(rowId, operation, formula) {
63
+ const rowNumberFields = this.numberFieldsMap.get(rowId);
64
+ if (!rowNumberFields)
65
+ return null;
66
+ const uuidList = formula.split(',').map(id => id.trim());
67
+ const values = [];
68
+ let hasAnyAnswer = false;
69
+ for (const uuid of uuidList) {
70
+ const field = rowNumberFields.get(uuid);
71
+ const val = field?.answer;
72
+ // If the field doesn't exist or value is invalid, push 0 as default
73
+ if (val !== undefined && val !== null && String(val).trim() !== '') {
74
+ hasAnyAnswer = true;
75
+ values.push(Number(val));
76
+ }
77
+ else {
78
+ values.push(0); // Still push 0 to keep array length, but flag stays false unless at least one answer exists
79
+ }
80
+ }
81
+ if (!hasAnyAnswer)
82
+ return null;
83
+ let result = 0;
84
+ switch (operation) {
85
+ case 'SUM':
86
+ result = values.reduce((acc, val) => acc + val, 0);
87
+ break;
88
+ case 'SUBTRACTION':
89
+ result = values.reduce((acc, val) => acc - val);
90
+ break;
91
+ case 'MULTIPLICATION':
92
+ result = values.reduce((acc, val) => acc * val, 1);
93
+ break;
94
+ default:
95
+ console.warn(`Unsupported operation: ${operation}`);
96
+ return null;
97
+ }
98
+ return result;
99
+ }
100
+ checkAndEvaluateFormulas(rowId) {
101
+ const aggregateFields = this.aggregateFieldsMap.get(rowId);
102
+ if (!aggregateFields)
103
+ return;
104
+ aggregateFields.forEach((aggregateField, id) => {
105
+ let result = null;
106
+ if (aggregateField.operation === 'CUSTOM') {
107
+ result = this.evaluateCustomFormula(rowId, aggregateField.formula);
108
+ }
109
+ else {
110
+ result = this.evaluatePredefinedOperation(rowId, aggregateField.operation, aggregateField.formula);
111
+ }
112
+ if (result !== null) {
113
+ aggregateField.result = result;
114
+ this.aggregateFieldsMap.get(rowId).set(id, aggregateField);
115
+ this.emitAggregateResult(`${rowId}:${id}`, result, true);
116
+ }
117
+ else {
118
+ this.emitAggregateResult(`${rowId}:${id}`, 0, false);
119
+ }
120
+ });
121
+ }
122
+ clearAll() {
123
+ this.aggregateFieldsMap.clear();
124
+ this.numberFieldsMap.clear();
125
+ this.aggregateFieldResultsSubject.next(null);
126
+ }
127
+ ngOnDestroy() {
128
+ this.clearAll();
129
+ }
130
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AggregationFunctionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
131
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AggregationFunctionService, providedIn: 'root' }); }
132
+ }
133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AggregationFunctionService, decorators: [{
134
+ type: Injectable,
135
+ args: [{
136
+ providedIn: 'root',
137
+ }]
138
+ }], ctorParameters: function () { return []; } });
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3NlcnZpY2VzL2FnZ3JlZ2F0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFNbkQsTUFBTSxPQUFPLDBCQUEwQjtJQVNyQztRQVBBLHNEQUFzRDtRQUNoRCx1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBNEYsQ0FBQztRQUN6SCxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUF1RCxDQUFDO1FBRS9FLGlDQUE0QixHQUFHLElBQUksZUFBZSxDQUEwRCxJQUFJLENBQUMsQ0FBQztRQUMxSCwyQkFBc0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFM0QsQ0FBQztJQUVoQjs7T0FFRztJQUNILGlCQUFpQixDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsU0FBaUIsRUFBRSxPQUFlO1FBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztTQUMvQztRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsTUFBYztRQUMzRCxJQUFJLENBQUMsSUFBSSxD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QUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQzsrR0EzSVUsMEJBQTBCO21IQUExQiwwQkFBMEIsY0FGekIsTUFBTTs7NEZBRVAsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWdncmVnYXRpb25GdW5jdGlvblNlcnZpY2Uge1xyXG5cclxuICAvLyBOZXcgc3RydWN0dXJlOiB7IFtyb3dJZF06IE1hcDxmaWVsZElkLCBmaWVsZERhdGE+IH1cclxucHJpdmF0ZSBhZ2dyZWdhdGVGaWVsZHNNYXAgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgeyBpZDogc3RyaW5nOyBvcGVyYXRpb246IHN0cmluZzsgZm9ybXVsYTogc3RyaW5nOyByZXN1bHQ/OiBudW1iZXIgfT4+KCk7XHJcbnByaXZhdGUgbnVtYmVyRmllbGRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHsgaWQ6IHN0cmluZzsgYW5zd2VyOiBudW1iZXIgfT4+KCk7XHJcblxyXG4gIHByaXZhdGUgYWdncmVnYXRlRmllbGRSZXN1bHRzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBpZDogc3RyaW5nOyByZXN1bHQ6IG51bWJlcixldmFsdWF0ZWQ6Ym9vbGVhbiB9IHwgbnVsbD4obnVsbCk7XHJcbiAgYWdncmVnYXRlRmllbGRSZXN1bHRzJCA9IHRoaXMuYWdncmVnYXRlRmllbGRSZXN1bHRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSBvciB1cGRhdGUgYW4gYWdncmVnYXRlIGZpZWxkIGluIHRoZSBtYXBcclxuICAgKi9cclxuICBzZXRBZ2dyZWdhdGVGaWVsZChyb3dJZDogc3RyaW5nLCBmaWVsZElkOiBzdHJpbmcsIG9wZXJhdGlvbjogc3RyaW5nLCBmb3JtdWxhOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hZ2dyZWdhdGVGaWVsZHNNYXAuaGFzKHJvd0lkKSkge1xyXG4gICAgICB0aGlzLmFnZ3JlZ2F0ZUZpZWxkc01hcC5zZXQocm93SWQsIG5ldyBNYXAoKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZUZpZWxkc01hcC5nZXQocm93SWQpIS5zZXQoZmllbGRJZCwgeyBpZDogZmllbGRJZCwgb3BlcmF0aW9uLCBmb3JtdWxhIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgb3IgdXBkYXRlIGEgbnVtYmVyIGZpZWxkIGluIHRoZSBtYXBcclxuICAgKi9cclxuICBzZXROdW1iZXJGaWVsZChyb3dJZDogc3RyaW5nLCBmaWVsZElkOiBzdHJpbmcsIGFuc3dlcjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubnVtYmVyRmllbGRzTWFwLmhhcyhyb3dJZCkpIHtcclxuICAgICAgdGhpcy5udW1iZXJGaWVsZHNNYXAuc2V0KHJvd0lkLCBuZXcgTWFwKCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5udW1iZXJGaWVsZHNNYXAuZ2V0KHJvd0lkKSEuc2V0KGZpZWxkSWQsIHsgaWQ6IGZpZWxkSWQsIGFuc3dlciB9KTtcclxuICAgIHRoaXMuY2hlY2tBbmRFdmFsdWF0ZUZvcm11bGFzKHJvd0lkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdEFnZ3JlZ2F0ZVJlc3VsdChpZDogc3RyaW5nLCByZXN1bHQ6IG51bWJlcixldmFsdWF0ZWQ6Ym9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5hZ2dyZWdhdGVGaWVsZFJlc3VsdHNTdWJqZWN0Lm5leHQoeyBpZCwgcmVzdWx0LGV2YWx1YXRlZCB9KTtcclxuICB9XHJcblxyXG5cclxuICBldmFsdWF0ZUN1c3RvbUZvcm11bGEocm93SWQ6IHN0cmluZywgZm9ybXVsYTogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBcclxuICAgIGNvbnN0IHJvd051bWJlckZpZWxkcyA9IHRoaXMubnVtYmVyRmllbGRzTWFwLmdldChyb3dJZCk7XHJcbiAgICBpZiAoIWZvcm11bGEgfHwgIXJvd051bWJlckZpZWxkcykgcmV0dXJuIG51bGw7XHJcbiAgXHJcbiAgICBjb25zdCB1dWlkUmVnZXggPSAvWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtNV1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfS9nOy9bMC05YS1mQS1GXFwtXXszNn0vZztcclxuICAgIGNvbnN0IHV1aWRNYXRjaGVzID0gZm9ybXVsYS5tYXRjaCh1dWlkUmVnZXgpIHx8IFtdO1xyXG4gIFxyXG4gICAgY29uc3QgYWxsSGF2ZUFuc3dlcnMgPSB1dWlkTWF0Y2hlcy5ldmVyeSh1dWlkID0+IHtcclxuICAgICAgY29uc3QgZmllbGQgPSByb3dOdW1iZXJGaWVsZHMuZ2V0KHV1aWQpO1xyXG4gICAgICByZXR1cm4gZmllbGQgIT09IHVuZGVmaW5lZCAmJiBcclxuICAgICAgICAgICAgIGZpZWxkLmFuc3dlciAhPT0gdW5kZWZpbmVkICYmIFxyXG4gICAgICAgICAgICAgZmllbGQuYW5zd2VyICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICBTdHJpbmcoZmllbGQuYW5zd2VyKS50cmltKCkgIT09ICcnO1xyXG4gICAgfSk7XHJcbiAgXHJcbiAgICBpZiAoIWFsbEhhdmVBbnN3ZXJzKSByZXR1cm4gbnVsbDtcclxuICBcclxuICAgIGNvbnN0IHJlcGxhY2VkRm9ybXVsYSA9IGZvcm11bGEucmVwbGFjZSh1dWlkUmVnZXgsIChtYXRjaCkgPT4ge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IHJvd051bWJlckZpZWxkcy5nZXQobWF0Y2gpO1xyXG4gICAgICByZXR1cm4gZmllbGQ/LmFuc3dlcj8udG9TdHJpbmcoKSB8fCAnMCc7XHJcbiAgICB9KTtcclxuICBcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oYHJldHVybiAke3JlcGxhY2VkRm9ybXVsYX07YCkoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGV2YWx1YXRpbmcgZm9ybXVsYTonLCBlcnJvcik7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBldmFsdWF0ZVByZWRlZmluZWRPcGVyYXRpb24ocm93SWQ6IHN0cmluZywgb3BlcmF0aW9uOiBzdHJpbmcsIGZvcm11bGE6IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xyXG4gICAgY29uc3Qgcm93TnVtYmVyRmllbGRzID0gdGhpcy5udW1iZXJGaWVsZHNNYXAuZ2V0KHJvd0lkKTtcclxuICAgIGlmICghcm93TnVtYmVyRmllbGRzKSByZXR1cm4gbnVsbDtcclxuICBcclxuICAgIGNvbnN0IHV1aWRMaXN0ID0gZm9ybXVsYS5zcGxpdCgnLCcpLm1hcChpZCA9PiBpZC50cmltKCkpO1xyXG4gICAgY29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgbGV0IGhhc0FueUFuc3dlciA9IGZhbHNlO1xyXG5cclxuICAgIGZvciAoY29uc3QgdXVpZCBvZiB1dWlkTGlzdCkge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IHJvd051bWJlckZpZWxkcy5nZXQodXVpZCk7XHJcbiAgICAgIGNvbnN0IHZhbCA9IGZpZWxkPy5hbnN3ZXI7XHJcbiAgXHJcbiAgICAgIC8vIElmIHRoZSBmaWVsZCBkb2Vzbid0IGV4aXN0IG9yIHZhbHVlIGlzIGludmFsaWQsIHB1c2ggMCBhcyBkZWZhdWx0XHJcbiAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgU3RyaW5nKHZhbCkudHJpbSgpICE9PSAnJykge1xyXG4gICAgICAgIGhhc0FueUFuc3dlciA9IHRydWU7XHJcbiAgICAgICAgdmFsdWVzLnB1c2goTnVtYmVyKHZhbCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbHVlcy5wdXNoKDApOyAvLyBTdGlsbCBwdXNoIDAgdG8ga2VlcCBhcnJheSBsZW5ndGgsIGJ1dCBmbGFnIHN0YXlzIGZhbHNlIHVubGVzcyBhdCBsZWFzdCBvbmUgYW5zd2VyIGV4aXN0c1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWhhc0FueUFuc3dlcikgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzdWx0ID0gMDtcclxuICAgIHN3aXRjaCAob3BlcmF0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ1NVTSc6XHJcbiAgICAgICAgcmVzdWx0ID0gdmFsdWVzLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1NVQlRSQUNUSU9OJzpcclxuICAgICAgICByZXN1bHQgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjIC0gdmFsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnTVVMVElQTElDQVRJT04nOlxyXG4gICAgICAgIHJlc3VsdCA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKiB2YWwsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAke29wZXJhdGlvbn1gKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICBcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBjaGVja0FuZEV2YWx1YXRlRm9ybXVsYXMocm93SWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgYWdncmVnYXRlRmllbGRzID0gdGhpcy5hZ2dyZWdhdGVGaWVsZHNNYXAuZ2V0KHJvd0lkKTtcclxuICAgIGlmICghYWdncmVnYXRlRmllbGRzKSByZXR1cm47XHJcbiAgXHJcbiAgICBhZ2dyZWdhdGVGaWVsZHMuZm9yRWFjaCgoYWdncmVnYXRlRmllbGQsIGlkKSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIFxyXG4gICAgICBpZiAoYWdncmVnYXRlRmllbGQub3BlcmF0aW9uID09PSAnQ1VTVE9NJykge1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZXZhbHVhdGVDdXN0b21Gb3JtdWxhKHJvd0lkLCBhZ2dyZWdhdGVGaWVsZC5mb3JtdWxhKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQgPSB0aGlzLmV2YWx1YXRlUHJlZGVmaW5lZE9wZXJhdGlvbihyb3dJZCwgYWdncmVnYXRlRmllbGQub3BlcmF0aW9uLCBhZ2dyZWdhdGVGaWVsZC5mb3JtdWxhKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgYWdncmVnYXRlRmllbGQucmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuYWdncmVnYXRlRmllbGRzTWFwLmdldChyb3dJZCkhLnNldChpZCwgYWdncmVnYXRlRmllbGQpO1xyXG4gICAgICAgIHRoaXMuZW1pdEFnZ3JlZ2F0ZVJlc3VsdChgJHtyb3dJZH06JHtpZH1gLCByZXN1bHQsdHJ1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbWl0QWdncmVnYXRlUmVzdWx0KGAke3Jvd0lkfToke2lkfWAsIDAsZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyQWxsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZ2dyZWdhdGVGaWVsZHNNYXAuY2xlYXIoKTtcclxuICAgIHRoaXMubnVtYmVyRmllbGRzTWFwLmNsZWFyKCk7XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZUZpZWxkUmVzdWx0c1N1YmplY3QubmV4dChudWxsKTtcclxuICB9XHJcbiAgXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyQWxsKCk7XHJcbiAgfVxyXG59Il19
@@ -0,0 +1,89 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common/http";
4
+ import * as i2 from "./data.service";
5
+ export class CountryService {
6
+ constructor(http, dataService) {
7
+ this.http = http;
8
+ this.dataService = dataService;
9
+ this.apiUrl = '';
10
+ this.header = {};
11
+ this.dataService.apiUrl$.subscribe((data) => {
12
+ this.apiUrl = data;
13
+ });
14
+ }
15
+ loadCountryDetails(questionId, page, size, searchKey) {
16
+ return this.http.get(`${this.apiUrl}/api/public/json/country?page=${page}&size=${size}&searchKey=${encodeURIComponent(searchKey)}`);
17
+ }
18
+ processCountryDetails(data, displayFlag, displayCode, showCountryName) {
19
+ const countryDetails = [];
20
+ data.forEach((country) => {
21
+ const flag = displayFlag && country.flag ? country.flag : '';
22
+ const name = showCountryName ? country.name || '' : '';
23
+ const isdRoot = country.isd?.root || '';
24
+ const isdSuffixes = country.isd?.suffixes || [];
25
+ if (isdRoot && isdSuffixes.length > 0) {
26
+ isdSuffixes.forEach((suffix) => {
27
+ const isdCode = `${isdRoot}${suffix}`;
28
+ // Special case: Only flag should be displayed, but value must have ISD code
29
+ if (displayFlag && !displayCode && !showCountryName) {
30
+ countryDetails.push({
31
+ value: isdCode,
32
+ label: '',
33
+ image: flag, // Only flag should be displayed
34
+ });
35
+ }
36
+ else {
37
+ // Handle all other cases
38
+ let label = '';
39
+ if (showCountryName)
40
+ label += name;
41
+ if (displayCode)
42
+ label += (label ? ' ' : '') + isdCode;
43
+ if (!label)
44
+ label = isdCode; // Ensure label is not empty
45
+ countryDetails.push({
46
+ value: isdCode,
47
+ label: label.trim(),
48
+ image: flag,
49
+ });
50
+ }
51
+ });
52
+ }
53
+ else {
54
+ const fallbackCode = isdRoot || country.code || ''; // Fallback if no suffixes
55
+ if (displayFlag && !displayCode && !showCountryName) {
56
+ countryDetails.push({
57
+ value: fallbackCode,
58
+ label: '',
59
+ image: flag,
60
+ });
61
+ }
62
+ else {
63
+ let label = '';
64
+ if (showCountryName)
65
+ label += name;
66
+ if (displayCode)
67
+ label += (label ? ' ' : '') + fallbackCode;
68
+ if (!label)
69
+ label = fallbackCode;
70
+ countryDetails.push({
71
+ value: fallbackCode,
72
+ label: label.trim(),
73
+ image: flag,
74
+ });
75
+ }
76
+ }
77
+ });
78
+ return countryDetails;
79
+ }
80
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CountryService, deps: [{ token: i1.HttpClient }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Injectable }); }
81
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CountryService, providedIn: 'root' }); }
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CountryService, decorators: [{
84
+ type: Injectable,
85
+ args: [{
86
+ providedIn: 'root',
87
+ }]
88
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.DataService }]; } });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3NlcnZpY2VzL2NvdW50cnlTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFjM0MsTUFBTSxPQUFPLGNBQWM7SUFJekIsWUFBb0IsSUFBZ0IsRUFBVSxXQUF3QjtRQUFsRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFIOUQsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQUM1QixXQUFNLEdBQVEsRUFBRSxDQUFDO1FBR2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBa0IsRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLFNBQWlCO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxpQ0FBaUMsSUFBSSxTQUFTLElBQUksY0FBYyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0ksQ0FBQztJQUVELHFCQUFxQixDQUNuQixJQUFXLEVBQ1gsV0FBb0IsRUFDcEIsV0FBb0IsRUFDcEIsZUFBd0I7UUFFeEIsTUFBTSxjQUFjLEdBQWtCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEdBQUcsV0FBVyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FB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XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLnNlcnZpY2UnO1xyXG5cclxuaW50ZXJmYWNlIENvdW50cnlEYXRhIHtcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgaW1hZ2U6IHN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvdW50cnlTZXJ2aWNlIHtcclxuICBwcml2YXRlIGFwaVVybDogc3RyaW5nID0gJyc7XHJcbiAgaGVhZGVyOiBhbnkgPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSkge1xyXG4gICAgdGhpcy5kYXRhU2VydmljZS5hcGlVcmwkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmFwaVVybCA9IGRhdGE7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRDb3VudHJ5RGV0YWlscyhxdWVzdGlvbklkOiBzdHJpbmcsIHBhZ2U6IG51bWJlciwgc2l6ZTogbnVtYmVyLCBzZWFyY2hLZXk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYXBpVXJsfS9hcGkvcHVibGljL2pzb24vY291bnRyeT9wYWdlPSR7cGFnZX0mc2l6ZT0ke3NpemV9JnNlYXJjaEtleT0ke2VuY29kZVVSSUNvbXBvbmVudChzZWFyY2hLZXkpfWApO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0NvdW50cnlEZXRhaWxzKFxyXG4gICAgZGF0YTogYW55W10sXHJcbiAgICBkaXNwbGF5RmxhZzogYm9vbGVhbixcclxuICAgIGRpc3BsYXlDb2RlOiBib29sZWFuLFxyXG4gICAgc2hvd0NvdW50cnlOYW1lOiBib29sZWFuXHJcbiAgKTogQ291bnRyeURhdGFbXSB7XHJcbiAgICBjb25zdCBjb3VudHJ5RGV0YWlsczogQ291bnRyeURhdGFbXSA9IFtdO1xyXG4gICAgZGF0YS5mb3JFYWNoKChjb3VudHJ5KSA9PiB7XHJcbiAgICAgIGNvbnN0IGZsYWcgPSBkaXNwbGF5RmxhZyAmJiBjb3VudHJ5LmZsYWcgPyBjb3VudHJ5LmZsYWcgOiAnJztcclxuICAgICAgY29uc3QgbmFtZSA9IHNob3dDb3VudHJ5TmFtZSA/IGNvdW50cnkubmFtZSB8fCAnJyA6ICcnO1xyXG4gICAgICBjb25zdCBpc2RSb290ID0gY291bnRyeS5pc2Q/LnJvb3QgfHwgJyc7XHJcbiAgICAgIGNvbnN0IGlzZFN1ZmZpeGVzID0gY291bnRyeS5pc2Q/LnN1ZmZpeGVzIHx8IFtdO1xyXG4gIFxyXG4gICAgICBpZiAoaXNkUm9vdCAmJiBpc2RTdWZmaXhlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaXNkU3VmZml4ZXMuZm9yRWFjaCgoc3VmZml4OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGlzZENvZGUgPSBgJHtpc2RSb290fSR7c3VmZml4fWA7XHJcbiAgXHJcbiAgICAgICAgICAvLyBTcGVjaWFsIGNhc2U6IE9ubHkgZmxhZyBzaG91bGQgYmUgZGlzcGxheWVkLCBidXQgdmFsdWUgbXVzdCBoYXZlIElTRCBjb2RlXHJcbiAgICAgICAgICBpZiAoZGlzcGxheUZsYWcgJiYgIWRpc3BsYXlDb2RlICYmICFzaG93Q291bnRyeU5hbWUpIHtcclxuICAgICAgICAgICAgY291bnRyeURldGFpbHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgdmFsdWU6IGlzZENvZGUsICAvLyBLZWVwIElTRCBjb2RlIGluIHZhbHVlXHJcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLCAgICAgICAvLyBObyB0ZXh0IGluIGxhYmVsXHJcbiAgICAgICAgICAgICAgaW1hZ2U6IGZsYWcsICAgICAvLyAgT25seSBmbGFnIHNob3VsZCBiZSBkaXNwbGF5ZWRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBIYW5kbGUgYWxsIG90aGVyIGNhc2VzXHJcbiAgICAgICAgICAgIGxldCBsYWJlbCA9ICcnO1xyXG4gICAgICAgICAgICBpZiAoc2hvd0NvdW50cnlOYW1lKSBsYWJlbCArPSBuYW1lO1xyXG4gICAgICAgICAgICBpZiAoZGlzcGxheUNvZGUpIGxhYmVsICs9IChsYWJlbCA/ICcgJyA6ICcnKSArIGlzZENvZGU7XHJcbiAgICAgICAgICAgIGlmICghbGFiZWwpIGxhYmVsID0gaXNkQ29kZTsgLy8gRW5zdXJlIGxhYmVsIGlzIG5vdCBlbXB0eVxyXG4gIFxyXG4gICAgICAgICAgICBjb3VudHJ5RGV0YWlscy5wdXNoKHtcclxuICAgICAgICAgICAgICB2YWx1ZTogaXNkQ29kZSxcclxuICAgICAgICAgICAgICBsYWJlbDogbGFiZWwudHJpbSgpLFxyXG4gICAgICAgICAgICAgIGltYWdlOiBmbGFnLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBmYWxsYmFja0NvZGUgPSBpc2RSb290IHx8IGNvdW50cnkuY29kZSB8fCAnJzsgLy8gRmFsbGJhY2sgaWYgbm8gc3VmZml4ZXNcclxuICBcclxuICAgICAgICBpZiAoZGlzcGxheUZsYWcgJiYgIWRpc3BsYXlDb2RlICYmICFzaG93Q291bnRyeU5hbWUpIHtcclxuICAgICAgICAgIGNvdW50cnlEZXRhaWxzLnB1c2goe1xyXG4gICAgICAgICAgICB2YWx1ZTogZmFsbGJhY2tDb2RlLFxyXG4gICAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICAgIGltYWdlOiBmbGFnLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBsYWJlbCA9ICcnO1xyXG4gICAgICAgICAgaWYgKHNob3dDb3VudHJ5TmFtZSkgbGFiZWwgKz0gbmFtZTtcclxuICAgICAgICAgIGlmIChkaXNwbGF5Q29kZSkgbGFiZWwgKz0gKGxhYmVsID8gJyAnIDogJycpICsgZmFsbGJhY2tDb2RlO1xyXG4gICAgICAgICAgaWYgKCFsYWJlbCkgbGFiZWwgPSBmYWxsYmFja0NvZGU7XHJcbiAgXHJcbiAgICAgICAgICBjb3VudHJ5RGV0YWlscy5wdXNoKHtcclxuICAgICAgICAgICAgdmFsdWU6IGZhbGxiYWNrQ29kZSxcclxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsLnRyaW0oKSxcclxuICAgICAgICAgICAgaW1hZ2U6IGZsYWcsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNvdW50cnlEZXRhaWxzO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class DataService {
5
+ constructor() {
6
+ this.dataSubject = new BehaviorSubject('');
7
+ this.apiUrl$ = this.dataSubject.asObservable();
8
+ this.headerSubject = new BehaviorSubject({});
9
+ this.header$ = this.headerSubject.asObservable();
10
+ this.subformSubject = new BehaviorSubject({});
11
+ this.subform$ = this.subformSubject.asObservable();
12
+ this.parentQuestionsSubject = new BehaviorSubject(null);
13
+ this.parentQuestions$ = this.parentQuestionsSubject.asObservable();
14
+ }
15
+ setApiUrl(data) {
16
+ this.dataSubject.next(data);
17
+ }
18
+ setHeader(data) {
19
+ this.headerSubject.next(data);
20
+ }
21
+ setParentQuestions(data) {
22
+ this.parentQuestionsSubject.next(data);
23
+ }
24
+ setSubformData(data) {
25
+ this.subformSubject.next(data);
26
+ }
27
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
28
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataService, providedIn: 'root' }); }
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataService, decorators: [{
31
+ type: Injectable,
32
+ args: [{
33
+ providedIn: 'root',
34
+ }]
35
+ }], ctorParameters: function () { return []; } });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOztBQUtuRCxNQUFNLE9BQU8sV0FBVztJQUN0QjtRQUVRLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDL0MsWUFBTyxHQUF1QixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDOUMsWUFBTyxHQUFvQixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTVELG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDL0MsYUFBUSxHQUFvQixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTlELDJCQUFzQixHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO1FBQ3pELHFCQUFnQixHQUFvQixJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFYdkUsQ0FBQztJQWFoQixTQUFTLENBQUMsSUFBWTtRQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVM7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVM7UUFDMUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQzsrR0E1QlUsV0FBVzttSEFBWCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIHByaXZhdGUgZGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gIHB1YmxpYyBhcGlVcmwkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLmRhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHByaXZhdGUgaGVhZGVyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XHJcbiAgcHVibGljIGhlYWRlciQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuaGVhZGVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBzdWJmb3JtU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XHJcbiAgcHVibGljIHN1YmZvcm0kOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnN1YmZvcm1TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIHBhcmVudFF1ZXN0aW9uc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcbiAgcHVibGljIHBhcmVudFF1ZXN0aW9ucyQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMucGFyZW50UXVlc3Rpb25zU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2V0QXBpVXJsKGRhdGE6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhU3ViamVjdC5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVhZGVyKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5oZWFkZXJTdWJqZWN0Lm5leHQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYXJlbnRRdWVzdGlvbnMoZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnBhcmVudFF1ZXN0aW9uc1N1YmplY3QubmV4dChkYXRhKTtcclxuICB9XHJcblxyXG4gIHNldFN1YmZvcm1EYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5zdWJmb3JtU3ViamVjdC5uZXh0KGRhdGEpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,27 @@
1
+ // element-tracker.service.ts
2
+ import { Injectable } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class ElementTrackerService {
5
+ constructor() {
6
+ this.elementIds = new Set();
7
+ }
8
+ registerElement(id) {
9
+ this.elementIds.add(id);
10
+ }
11
+ unregisterElement(id) {
12
+ this.elementIds.delete(id);
13
+ }
14
+ getAllElementIds() {
15
+ return Array.from(this.elementIds);
16
+ }
17
+ clear() {
18
+ this.elementIds.clear();
19
+ }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElementTrackerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
21
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElementTrackerService, providedIn: 'root' }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElementTrackerService, decorators: [{
24
+ type: Injectable,
25
+ args: [{ providedIn: 'root' }]
26
+ }] });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC10cmFja2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3NlcnZpY2VzL2VsZW1lbnQtdHJhY2tlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUkzQyxNQUFNLE9BQU8scUJBQXFCO0lBRGxDO1FBRVUsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7S0FpQnhDO0lBZkMsZUFBZSxDQUFDLEVBQVU7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQVU7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7K0dBakJVLHFCQUFxQjttSEFBckIscUJBQXFCLGNBRFIsTUFBTTs7NEZBQ25CLHFCQUFxQjtrQkFEakMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlbGVtZW50LXRyYWNrZXIuc2VydmljZS50c1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRWxlbWVudFRyYWNrZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBlbGVtZW50SWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgcmVnaXN0ZXJFbGVtZW50KGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVsZW1lbnRJZHMuYWRkKGlkKTtcbiAgfVxuXG4gIHVucmVnaXN0ZXJFbGVtZW50KGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVsZW1lbnRJZHMuZGVsZXRlKGlkKTtcbiAgfVxuXG4gIGdldEFsbEVsZW1lbnRJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZWxlbWVudElkcyk7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmVsZW1lbnRJZHMuY2xlYXIoKTtcbiAgfVxufSJdfQ==
@@ -0,0 +1,128 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./validation.service";
4
+ export class FormValidationService {
5
+ constructor(validationService) {
6
+ this.validationService = validationService;
7
+ }
8
+ /**
9
+ * Validate all required questions on a page.
10
+ * Assumes your `page` object has a `pageIndex: number` property.
11
+ */
12
+ validateRequiredQuestions(page) {
13
+ // clear any previous errors for this page
14
+ // this.validationService.clearAll();
15
+ const validateQuestions = (formElements, submissionContext = null) => {
16
+ for (let element of formElements) {
17
+ if (element.entityType === 'QUESTION') {
18
+ const question = element.element;
19
+ const required = question.required;
20
+ const questionId = question.id;
21
+ const elementType = question.formElement?.elementType;
22
+ // pick up the answer (either in a subform or normal)
23
+ let answer;
24
+ if (submissionContext?.isInMultipleSubform) {
25
+ const { submission } = submissionContext;
26
+ answer = submission.answers.find((a) => a.questionId === questionId)?.answer;
27
+ }
28
+ else {
29
+ answer = question.answer;
30
+ }
31
+ const isEmpty = answer === null ||
32
+ answer === undefined ||
33
+ (typeof answer === 'string' && answer.trim() === '') ||
34
+ (typeof answer === 'object' && Object.keys(answer).length === 0);
35
+ if (required && isEmpty) {
36
+ const message = submissionContext?.isInMultipleSubform
37
+ ? `Required question ${question.questionNumber} is not answered in a subform.`
38
+ : `Required question ${question.questionNumber} is not answered.`;
39
+ // register the invalid question
40
+ this.validationService.setInvalid(questionId, message, page.pageIndex ?? 0);
41
+ return { isValid: false, message };
42
+ }
43
+ // recurse into child logics
44
+ if (question.childLogics) {
45
+ for (let logic of question.childLogics) {
46
+ if (!logic.showLogic)
47
+ continue;
48
+ for (let row of logic.rows) {
49
+ const result = validateQuestions(row.grid, submissionContext);
50
+ if (!result.isValid)
51
+ return result;
52
+ }
53
+ }
54
+ }
55
+ }
56
+ else if (element.entityType === 'SUBFORM') {
57
+ const subform = element.element;
58
+ if (subform.property?.subFormStructure === 'multiple') {
59
+ const submissions = subform.submissions || [];
60
+ if (submissions.length > 0) {
61
+ const hasRequired = subform.rows.some((r) => r.grid.some((f) => f.entityType === 'QUESTION' && f.element.required));
62
+ if (hasRequired && submissions.length === 0) {
63
+ const message = `Subform "${subform.title || 'Untitled'}" is missing required submissions.`;
64
+ this.validationService.setInvalid(subform.id, message, page.pageIndex ?? 0);
65
+ return { isValid: false, message };
66
+ }
67
+ // map questions and validate only if more than one submission
68
+ const questionMap = new Map();
69
+ subform.rows.forEach((r) => r.grid.forEach((f) => {
70
+ if (f.entityType === 'QUESTION') {
71
+ questionMap.set(f.element.id, f.element);
72
+ }
73
+ }));
74
+ for (let submission of submissions) {
75
+ for (let row of subform.rows) {
76
+ const result = validateQuestions(row.grid, {
77
+ isInMultipleSubform: true,
78
+ submission,
79
+ questionMap,
80
+ });
81
+ if (!result.isValid)
82
+ return result;
83
+ }
84
+ }
85
+ }
86
+ }
87
+ else {
88
+ // single‐entry subform
89
+ for (let row of subform.rows || []) {
90
+ const result = validateQuestions(row.grid);
91
+ if (!result.isValid)
92
+ return result;
93
+ }
94
+ }
95
+ }
96
+ else if ((element.entityType === 'QUESTION_GROUP' ||
97
+ element.entityType === 'MULTIFIELD') &&
98
+ element.element.rows) {
99
+ for (let row of element.element.rows) {
100
+ const result = validateQuestions(row.grid, submissionContext);
101
+ if (!result.isValid)
102
+ return result;
103
+ }
104
+ }
105
+ }
106
+ return { isValid: true, message: 'All required questions are answered.' };
107
+ };
108
+ // start validation
109
+ for (const row of page.rows) {
110
+ const result = validateQuestions(row.grid);
111
+ if (!result.isValid) {
112
+ // we already called setInvalid above
113
+ return result;
114
+ }
115
+ }
116
+ // if we get here, everything passed
117
+ return { isValid: true, message: 'All required questions are answered.' };
118
+ }
119
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormValidationService, deps: [{ token: i1.ValidationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
120
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormValidationService, providedIn: 'root' }); }
121
+ }
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormValidationService, decorators: [{
123
+ type: Injectable,
124
+ args: [{
125
+ providedIn: 'root',
126
+ }]
127
+ }], ctorParameters: function () { return [{ type: i1.ValidationService }]; } });
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWxpZGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3NlcnZpY2VzL2Zvcm0tdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU0zQyxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLFlBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQUcsQ0FBQztJQUU1RDs7O09BR0c7SUFDSCx5QkFBeUIsQ0FBQyxJQUFTO1FBQ2pDLDBDQUEwQztRQUMxQyxxQ0FBcUM7UUFFckMsTUFBTSxpQkFBaUIsR0FBRyxDQUN4QixZQUFtQixFQUNuQixvQkFBeUIsSUFBSSxFQUNVLEVBQUU7WUFDekMsS0FBSyxJQUFJLE9BQU8sSUFBSSxZQUFZLEVBQUU7Z0JBQ2hDLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7b0JBQ3JDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7b0JBQ2pDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7b0JBQ25DLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQy9CLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO29CQUV0RCxxREFBcUQ7b0JBQ3JELElBQUksTUFBVyxDQUFDO29CQUNoQixJQUFJLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFO3dCQUMxQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsaUJBQWlCLENBQUM7d0JBQ3pDLE1BQU0sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDOUIsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUN4QyxFQUFFLE1BQU0sQ0FBQztxQkFDWDt5QkFBTTt3QkFDTCxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztxQkFDMUI7b0JBRUQsTUFBTSxPQUFPLEdBQ1gsTUFBTSxLQUFLLElBQUk7d0JBQ2YsTUFBTSxLQUFLLFNBQVM7d0JBQ3BCLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7d0JBQ3BELENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUVuRSxJQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUU7d0JBQ3ZCLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixFQUFFLG1CQUFtQjs0QkFDcEQsQ0FBQyxDQUFDLHFCQUFxQixRQUFRLENBQUMsY0FBYyxnQ0FBZ0M7NEJBQzlFLENBQUMsQ0FBQyxxQkFBcUIsUUFBUSxDQUFDLGNBQWMsbUJBQW1CLENBQUM7d0JBRXBFLGdDQUFnQzt3QkFDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FDL0IsVUFBVSxFQUNWLE9BQU8sRUFDUCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FDcEIsQ0FBQzt3QkFFRixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztxQkFDcEM7b0JBRUQsNEJBQTRCO29CQUM1QixJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUU7d0JBQ3hCLEtBQUssSUFBSSxLQUFLLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTs0QkFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO2dDQUFFLFNBQVM7NEJBQy9CLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtnQ0FDMUIsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dDQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87b0NBQUUsT0FBTyxNQUFNLENBQUM7NkJBQ3BDO3lCQUNGO3FCQUNGO2lCQUNGO3FCQUFNLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7b0JBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7b0JBRWhDLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsS0FBSyxVQUFVLEVBQUU7d0JBQ3JELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO3dCQUU5QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUMxQixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNULENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FDOUQsQ0FDRixDQUFDOzRCQUVGLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dDQUMzQyxNQUFNLE9BQU8sR0FBRyxZQUNkLE9BQU8sQ0FBQyxLQUFLLElBQUksVUFDbkIsb0NBQW9DLENBQUM7Z0NBQ3JDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQy9CLE9BQU8sQ0FBQyxFQUFFLEVBQ1YsT0FBTyxFQUNQLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUNwQixDQUFDO2dDQUNGLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDOzZCQUNwQzs0QkFFRCw4REFBOEQ7NEJBQzlELE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7NEJBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQ0FDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtvQ0FDL0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7aUNBQzFDOzRCQUNILENBQUMsQ0FBQyxDQUNILENBQUM7NEJBRUYsS0FBSyxJQUFJLFVBQVUsSUFBSSxXQUFXLEVBQUU7Z0NBQ2xDLEtBQUssSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksRUFBRTtvQ0FDNUIsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRTt3Q0FDekMsbUJBQW1CLEVBQUUsSUFBSTt3Q0FDekIsVUFBVTt3Q0FDVixXQUFXO3FDQUNaLENBQUMsQ0FBQztvQ0FDSCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87d0NBQUUsT0FBTyxNQUFNLENBQUM7aUNBQ3BDOzZCQUNGO3lCQUNGO3FCQUNGO3lCQUFNO3dCQUNMLHVCQUF1Qjt3QkFDdkIsS0FBSyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRTs0QkFDbEMsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Z0NBQUUsT0FBTyxNQUFNLENBQUM7eUJBQ3BDO3FCQUNGO2lCQUNGO3FCQUFNLElBQ0wsQ0FBQyxPQUFPLENBQUMsVUFBVSxLQUFLLGdCQUFnQjtvQkFDdEMsT0FBTyxDQUFDLFVBQVUsS0FBSyxZQUFZLENBQUM7b0JBQ3RDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUNwQjtvQkFDQSxLQUFLLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO3dCQUNwQyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7d0JBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTzs0QkFBRSxPQUFPLE1BQU0sQ0FBQztxQkFDcEM7aUJBQ0Y7YUFDRjtZQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxDQUFDO1FBQzVFLENBQUMsQ0FBQztRQUVGLG1CQUFtQjtRQUNuQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDM0IsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNuQixxQ0FBcUM7Z0JBQ3JDLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7U0FDRjtRQUVELG9DQUFvQztRQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQztJQUM1RSxDQUFDOytHQS9JVSxxQkFBcUI7bUhBQXJCLHFCQUFxQixjQUZwQixNQUFNOzs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vdmFsaWRhdGlvbi5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtVmFsaWRhdGlvblNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSBhbGwgcmVxdWlyZWQgcXVlc3Rpb25zIG9uIGEgcGFnZS5cclxuICAgKiBBc3N1bWVzIHlvdXIgYHBhZ2VgIG9iamVjdCBoYXMgYSBgcGFnZUluZGV4OiBudW1iZXJgIHByb3BlcnR5LlxyXG4gICAqL1xyXG4gIHZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMocGFnZTogYW55KTogeyBpc1ZhbGlkOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSB7XHJcbiAgICAvLyBjbGVhciBhbnkgcHJldmlvdXMgZXJyb3JzIGZvciB0aGlzIHBhZ2VcclxuICAgIC8vIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJBbGwoKTtcclxuXHJcbiAgICBjb25zdCB2YWxpZGF0ZVF1ZXN0aW9ucyA9IChcclxuICAgICAgZm9ybUVsZW1lbnRzOiBhbnlbXSxcclxuICAgICAgc3VibWlzc2lvbkNvbnRleHQ6IGFueSA9IG51bGxcclxuICAgICk6IHsgaXNWYWxpZDogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0gPT4ge1xyXG4gICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGZvcm1FbGVtZW50cykge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gZWxlbWVudC5lbGVtZW50O1xyXG4gICAgICAgICAgY29uc3QgcmVxdWlyZWQgPSBxdWVzdGlvbi5yZXF1aXJlZDtcclxuICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uSWQgPSBxdWVzdGlvbi5pZDtcclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gcXVlc3Rpb24uZm9ybUVsZW1lbnQ/LmVsZW1lbnRUeXBlO1xyXG5cclxuICAgICAgICAgIC8vIHBpY2sgdXAgdGhlIGFuc3dlciAoZWl0aGVyIGluIGEgc3ViZm9ybSBvciBub3JtYWwpXHJcbiAgICAgICAgICBsZXQgYW5zd2VyOiBhbnk7XHJcbiAgICAgICAgICBpZiAoc3VibWlzc2lvbkNvbnRleHQ/LmlzSW5NdWx0aXBsZVN1YmZvcm0pIHtcclxuICAgICAgICAgICAgY29uc3QgeyBzdWJtaXNzaW9uIH0gPSBzdWJtaXNzaW9uQ29udGV4dDtcclxuICAgICAgICAgICAgYW5zd2VyID0gc3VibWlzc2lvbi5hbnN3ZXJzLmZpbmQoXHJcbiAgICAgICAgICAgICAgKGE6IGFueSkgPT4gYS5xdWVzdGlvbklkID09PSBxdWVzdGlvbklkXHJcbiAgICAgICAgICAgICk/LmFuc3dlcjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFuc3dlciA9IHF1ZXN0aW9uLmFuc3dlcjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBpc0VtcHR5ID1cclxuICAgICAgICAgICAgYW5zd2VyID09PSBudWxsIHx8XHJcbiAgICAgICAgICAgIGFuc3dlciA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICh0eXBlb2YgYW5zd2VyID09PSAnc3RyaW5nJyAmJiBhbnN3ZXIudHJpbSgpID09PSAnJykgfHxcclxuICAgICAgICAgICAgKHR5cGVvZiBhbnN3ZXIgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKGFuc3dlcikubGVuZ3RoID09PSAwKTtcclxuXHJcbiAgICAgICAgICBpZiAocmVxdWlyZWQgJiYgaXNFbXB0eSkge1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gc3VibWlzc2lvbkNvbnRleHQ/LmlzSW5NdWx0aXBsZVN1YmZvcm1cclxuICAgICAgICAgICAgICA/IGBSZXF1aXJlZCBxdWVzdGlvbiAke3F1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyfSBpcyBub3QgYW5zd2VyZWQgaW4gYSBzdWJmb3JtLmBcclxuICAgICAgICAgICAgICA6IGBSZXF1aXJlZCBxdWVzdGlvbiAke3F1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyfSBpcyBub3QgYW5zd2VyZWQuYDtcclxuXHJcbiAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBpbnZhbGlkIHF1ZXN0aW9uXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZChcclxuICAgICAgICAgICAgICBxdWVzdGlvbklkLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgcGFnZS5wYWdlSW5kZXggPz8gMFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIG1lc3NhZ2UgfTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyByZWN1cnNlIGludG8gY2hpbGQgbG9naWNzXHJcbiAgICAgICAgICBpZiAocXVlc3Rpb24uY2hpbGRMb2dpY3MpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgbG9naWMgb2YgcXVlc3Rpb24uY2hpbGRMb2dpY3MpIHtcclxuICAgICAgICAgICAgICBpZiAoIWxvZ2ljLnNob3dMb2dpYykgY29udGludWU7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGxvZ2ljLnJvd3MpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkLCBzdWJtaXNzaW9uQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScpIHtcclxuICAgICAgICAgIGNvbnN0IHN1YmZvcm0gPSBlbGVtZW50LmVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgaWYgKHN1YmZvcm0ucHJvcGVydHk/LnN1YkZvcm1TdHJ1Y3R1cmUgPT09ICdtdWx0aXBsZScpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3VibWlzc2lvbnMgPSBzdWJmb3JtLnN1Ym1pc3Npb25zIHx8IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN1Ym1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBoYXNSZXF1aXJlZCA9IHN1YmZvcm0ucm93cy5zb21lKChyOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICByLmdyaWQuc29tZShcclxuICAgICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmIGYuZWxlbWVudC5yZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChoYXNSZXF1aXJlZCAmJiBzdWJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgU3ViZm9ybSBcIiR7XHJcbiAgICAgICAgICAgICAgICAgIHN1YmZvcm0udGl0bGUgfHwgJ1VudGl0bGVkJ1xyXG4gICAgICAgICAgICAgICAgfVwiIGlzIG1pc3NpbmcgcmVxdWlyZWQgc3VibWlzc2lvbnMuYDtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZChcclxuICAgICAgICAgICAgICAgICAgc3ViZm9ybS5pZCxcclxuICAgICAgICAgICAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgcGFnZS5wYWdlSW5kZXggPz8gMFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBtZXNzYWdlIH07XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyBtYXAgcXVlc3Rpb25zIGFuZCB2YWxpZGF0ZSBvbmx5IGlmIG1vcmUgdGhhbiBvbmUgc3VibWlzc2lvblxyXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuICAgICAgICAgICAgICBzdWJmb3JtLnJvd3MuZm9yRWFjaCgocjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgci5ncmlkLmZvckVhY2goKGY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZi5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25NYXAuc2V0KGYuZWxlbWVudC5pZCwgZi5lbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKGxldCBzdWJtaXNzaW9uIG9mIHN1Ym1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2Ygc3ViZm9ybS5yb3dzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNJbk11bHRpcGxlU3ViZm9ybTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uTWFwLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHNpbmdsZeKAkGVudHJ5IHN1YmZvcm1cclxuICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIHN1YmZvcm0ucm93cyB8fCBbXSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcclxuICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTl9HUk9VUCcgfHxcclxuICAgICAgICAgICAgZWxlbWVudC5lbnRpdHlUeXBlID09PSAnTVVMVElGSUVMRCcpICYmXHJcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93c1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZm9yIChsZXQgcm93IG9mIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkLCBzdWJtaXNzaW9uQ29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBtZXNzYWdlOiAnQWxsIHJlcXVpcmVkIHF1ZXN0aW9ucyBhcmUgYW5zd2VyZWQuJyB9O1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBzdGFydCB2YWxpZGF0aW9uXHJcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBwYWdlLnJvd3MpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xyXG4gICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSB7XHJcbiAgICAgICAgLy8gd2UgYWxyZWFkeSBjYWxsZWQgc2V0SW52YWxpZCBhYm92ZVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiB3ZSBnZXQgaGVyZSwgZXZlcnl0aGluZyBwYXNzZWRcclxuICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIG1lc3NhZ2U6ICdBbGwgcmVxdWlyZWQgcXVlc3Rpb25zIGFyZSBhbnN3ZXJlZC4nIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==