@mtna/web-form-angular 1.0.1 → 1.0.2-SNAPSHOT.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/_index.scss +17 -16
  2. package/bundles/mtna-web-form-angular.umd.js +6562 -4919
  3. package/bundles/mtna-web-form-angular.umd.js.map +1 -1
  4. package/esm2015/lib/components/acknowledge-dialog/acknowledge-dialog.component.js +30 -0
  5. package/esm2015/lib/components/acknowledge-dialog/acknowledge-dialog.module.js +21 -0
  6. package/esm2015/lib/components/acknowledge-dialog/index.js +3 -0
  7. package/esm2015/lib/components/base-items/base-form-item-control.component.js +40 -0
  8. package/esm2015/lib/components/base-items/base-form-item.component.js +50 -0
  9. package/esm2015/lib/components/base-items/base-group-item.component.js +29 -0
  10. package/esm2015/lib/components/base-items/base-parent-value-item.component.js +42 -0
  11. package/esm2015/lib/components/base-items/base-section-item.component.js +28 -0
  12. package/esm2015/lib/components/base-items/base-single-selection-parent-value-item.component.js +64 -0
  13. package/esm2015/lib/components/base-items/base-value-item.component.js +40 -0
  14. package/esm2015/lib/components/base-items/index.js +7 -0
  15. package/esm2015/lib/components/form/form.component.js +250 -0
  16. package/esm2015/lib/components/form/form.module.js +60 -0
  17. package/esm2015/lib/components/form/index.js +3 -0
  18. package/esm2015/lib/{form → components/form-disabler}/form-disabler.component.js +1 -1
  19. package/esm2015/lib/components/form-disabler/form-disabler.module.js +18 -0
  20. package/esm2015/lib/components/form-disabler/index.js +3 -0
  21. package/esm2015/lib/components/form-item/form-item.component.js +124 -0
  22. package/esm2015/lib/components/form-item/form-item.module.js +22 -0
  23. package/esm2015/lib/components/form-item/index.js +3 -0
  24. package/esm2015/lib/components/form-item-component-provider/form-item-component-provider.js +8 -0
  25. package/esm2015/lib/components/form-item-component-provider/form-item-injected-components.js +120 -0
  26. package/esm2015/lib/components/form-item-component-provider/index.js +3 -0
  27. package/esm2015/lib/components/form-item-dialog/form-item-dialog.component.js +29 -0
  28. package/esm2015/lib/components/form-item-dialog/form-item-dialog.module.js +20 -0
  29. package/esm2015/lib/components/form-item-dialog/index.js +3 -0
  30. package/esm2015/lib/components/form-item-impl/boolean/boolean.component.js +33 -0
  31. package/esm2015/lib/components/form-item-impl/boolean/boolean.module.js +22 -0
  32. package/esm2015/lib/components/form-item-impl/boolean/index.js +3 -0
  33. package/esm2015/lib/components/form-item-impl/checkbox/checkbox.component.js +92 -0
  34. package/esm2015/lib/components/form-item-impl/checkbox/checkbox.module.js +61 -0
  35. package/esm2015/lib/components/form-item-impl/checkbox/index.js +3 -0
  36. package/esm2015/lib/components/form-item-impl/date/date.component.js +92 -0
  37. package/esm2015/lib/components/form-item-impl/date/date.module.js +53 -0
  38. package/esm2015/lib/components/form-item-impl/date/index.js +3 -0
  39. package/esm2015/lib/components/form-item-impl/date-range/date-range.component.js +31 -0
  40. package/esm2015/lib/components/form-item-impl/date-range/date-range.module.js +45 -0
  41. package/esm2015/lib/components/form-item-impl/date-range/index.js +3 -0
  42. package/esm2015/lib/components/form-item-impl/dropdown/dropdown.component.js +29 -0
  43. package/esm2015/lib/components/form-item-impl/dropdown/dropdown.module.js +59 -0
  44. package/esm2015/lib/components/form-item-impl/dropdown/index.js +3 -0
  45. package/esm2015/lib/components/form-item-impl/file-upload/file-upload.component.js +56 -0
  46. package/esm2015/lib/components/form-item-impl/file-upload/file-upload.module.js +49 -0
  47. package/esm2015/lib/components/form-item-impl/file-upload/index.js +3 -0
  48. package/esm2015/lib/components/form-item-impl/form-group/form-group.component.js +50 -0
  49. package/esm2015/lib/components/form-item-impl/form-group/form-group.module.js +49 -0
  50. package/esm2015/lib/components/form-item-impl/form-group/index.js +3 -0
  51. package/esm2015/lib/components/form-item-impl/form-section/form-section.component.js +22 -0
  52. package/esm2015/lib/components/form-item-impl/form-section/form-section.module.js +22 -0
  53. package/esm2015/lib/components/form-item-impl/form-section/index.js +3 -0
  54. package/esm2015/lib/components/form-item-impl/i18n-input/i18n-input.component.js +51 -0
  55. package/esm2015/lib/components/form-item-impl/i18n-input/i18n-input.module.js +52 -0
  56. package/esm2015/lib/components/form-item-impl/i18n-input/index.js +3 -0
  57. package/esm2015/lib/components/form-item-impl/index.js +23 -0
  58. package/esm2015/lib/components/form-item-impl/input/index.js +3 -0
  59. package/esm2015/lib/components/form-item-impl/input/input.component.js +39 -0
  60. package/esm2015/lib/components/form-item-impl/input/input.module.js +52 -0
  61. package/esm2015/lib/components/form-item-impl/multiple-choice/index.js +3 -0
  62. package/esm2015/lib/components/form-item-impl/multiple-choice/multiple-choice.component.js +24 -0
  63. package/esm2015/lib/components/form-item-impl/multiple-choice/multiple-choice.module.js +45 -0
  64. package/esm2015/lib/components/form-item-impl/ordered-list/index.js +3 -0
  65. package/esm2015/lib/components/form-item-impl/ordered-list/ordered-list-item.component.js +21 -0
  66. package/esm2015/lib/components/form-item-impl/ordered-list/ordered-list-item.module.js +20 -0
  67. package/esm2015/lib/components/form-item-impl/repeatable-item/index.js +3 -0
  68. package/esm2015/lib/components/form-item-impl/repeatable-item/repeatable-item.component.js +23 -0
  69. package/esm2015/lib/components/form-item-impl/repeatable-item/repeatable-item.module.js +18 -0
  70. package/esm2015/lib/components/form-item-impl/repeatable-item-container/index.js +3 -0
  71. package/esm2015/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.component.js +56 -0
  72. package/esm2015/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.module.js +53 -0
  73. package/esm2015/lib/components/form-item-impl/search/index.js +3 -0
  74. package/esm2015/lib/components/form-item-impl/search/resource-search.component.js +56 -0
  75. package/esm2015/lib/components/form-item-impl/search/resource-search.module.js +22 -0
  76. package/esm2015/lib/components/form-item-impl/table-item/index.js +3 -0
  77. package/esm2015/lib/components/form-item-impl/table-item/table-item.component.js +27 -0
  78. package/esm2015/lib/components/form-item-impl/table-item/table-item.module.js +20 -0
  79. package/esm2015/lib/components/form-item-impl/text/index.js +3 -0
  80. package/esm2015/lib/components/form-item-impl/text/text.component.js +19 -0
  81. package/esm2015/lib/components/form-item-impl/text/text.module.js +20 -0
  82. package/esm2015/lib/components/form-item-impl/title/index.js +3 -0
  83. package/esm2015/lib/components/form-item-impl/title/title.component.js +18 -0
  84. package/esm2015/lib/components/form-item-impl/title/title.module.js +20 -0
  85. package/esm2015/lib/components/form-item-impl/unordered-list/index.js +3 -0
  86. package/esm2015/lib/components/form-item-impl/unordered-list/unordered-list-item.component.js +21 -0
  87. package/esm2015/lib/components/form-item-impl/unordered-list/unordered-list-item.module.js +20 -0
  88. package/esm2015/lib/components/form-item-impl/year-quarter/index.js +3 -0
  89. package/esm2015/lib/components/form-item-impl/year-quarter/year-quarter.component.js +166 -0
  90. package/esm2015/lib/components/form-item-impl/year-quarter/year-quarter.module.js +55 -0
  91. package/esm2015/lib/components/form-item-impl/year-quarter-range/index.js +3 -0
  92. package/esm2015/lib/components/form-item-impl/year-quarter-range/year-quarter-range.component.js +39 -0
  93. package/esm2015/lib/components/form-item-impl/year-quarter-range/year-quarter-range.module.js +22 -0
  94. package/esm2015/lib/components/form-item-injector/form-item-injector.component.js +158 -0
  95. package/esm2015/lib/components/form-item-injector/form-item-injector.module.js +18 -0
  96. package/esm2015/lib/components/form-item-injector/index.js +3 -0
  97. package/esm2015/lib/components/form-stepper/form-step/form-step.component.js +68 -0
  98. package/esm2015/lib/components/form-stepper/form-step/index.js +2 -0
  99. package/esm2015/lib/components/form-stepper/form-step-group/form-step-group.component.js +53 -0
  100. package/esm2015/lib/components/form-stepper/form-step-group/index.js +2 -0
  101. package/esm2015/lib/components/form-stepper/form-stepper/form-stepper.component.js +59 -0
  102. package/esm2015/lib/components/form-stepper/form-stepper/index.js +2 -0
  103. package/esm2015/lib/components/form-stepper/form-stepper.module.js +56 -0
  104. package/esm2015/lib/components/form-stepper/index.js +5 -0
  105. package/esm2015/lib/components/index.js +13 -0
  106. package/esm2015/lib/components/item-header/index.js +3 -0
  107. package/esm2015/lib/components/item-header/item-header.component.js +71 -0
  108. package/esm2015/lib/components/item-header/item-header.module.js +19 -0
  109. package/esm2015/lib/components/step-card/index.js +3 -0
  110. package/esm2015/lib/{step-card → components/step-card}/step-card.component.js +2 -2
  111. package/esm2015/lib/components/step-card/step-card.module.js +23 -0
  112. package/esm2015/lib/directives/base-form-item-control.directive.js +59 -0
  113. package/esm2015/lib/directives/base-parent-item-control.directive.js +42 -0
  114. package/esm2015/lib/directives/base-single-selection-parent.directive.js +53 -0
  115. package/esm2015/lib/{form → directives}/form-item.directive.js +1 -1
  116. package/esm2015/lib/directives/index.js +5 -0
  117. package/esm2015/lib/models/api-config.js +3 -0
  118. package/esm2015/lib/models/base-form-item.model.js +2 -0
  119. package/esm2015/lib/{groups → models}/form-item-dialog-data.model.js +1 -1
  120. package/esm2015/lib/{form-stepper/models → models/form-stepper}/base-form-step.model.js +1 -1
  121. package/esm2015/lib/{form-stepper/models → models/form-stepper}/form-step-group.model.js +1 -1
  122. package/esm2015/lib/{form-stepper/models → models/form-stepper}/form-step.model.js +1 -1
  123. package/esm2015/lib/{form-stepper/models → models/form-stepper}/index.js +1 -1
  124. package/esm2015/lib/models/index.js +7 -0
  125. package/esm2015/lib/models/toggle-form-item-data.model.js +2 -0
  126. package/esm2015/lib/models/white-list.model.js +11 -0
  127. package/esm2015/lib/pipes/coerce-date-item.pipe.js +37 -0
  128. package/esm2015/lib/pipes/coerce-form-control.pipe.js +38 -0
  129. package/esm2015/lib/pipes/coerce-form-group.pipe.js +47 -0
  130. package/esm2015/lib/pipes/date-quarter.pipe.js +55 -0
  131. package/esm2015/lib/pipes/form-step-group.pipe.js +32 -0
  132. package/esm2015/lib/pipes/get-auto-complete.pipe.js +54 -0
  133. package/esm2015/lib/pipes/get-available-quarters.pipe.js +41 -0
  134. package/esm2015/lib/pipes/get-form-control-error.pipe.js +32 -0
  135. package/esm2015/lib/pipes/get-list-icon.pipe.js +65 -0
  136. package/esm2015/lib/pipes/get-object-type.pipe.js +29 -0
  137. package/esm2015/lib/pipes/get-selected-option.pipe.js +32 -0
  138. package/esm2015/lib/pipes/index.js +14 -0
  139. package/esm2015/lib/pipes/items-with-value.pipe.js +42 -0
  140. package/esm2015/lib/pipes/sanitize-html.pipe.js +35 -0
  141. package/esm2015/lib/services/api.service.js +67 -0
  142. package/esm2015/lib/services/dialog.service.js +48 -0
  143. package/esm2015/lib/services/form-manager.service.js +465 -0
  144. package/esm2015/lib/services/index.js +7 -0
  145. package/esm2015/lib/services/ng-form.service.js +150 -0
  146. package/esm2015/lib/services/resource-search-selection.service.js +24 -0
  147. package/esm2015/lib/services/ui.service.js +333 -0
  148. package/esm2015/lib/utilities/animations.js +8 -0
  149. package/esm2015/lib/utilities/find-form-control.js +29 -0
  150. package/esm2015/lib/utilities/find-form-item.js +25 -0
  151. package/esm2015/lib/utilities/flatten-steps.js +10 -0
  152. package/esm2015/lib/utilities/form-step.util.js +28 -0
  153. package/esm2015/lib/utilities/generate-form-steps.js +38 -0
  154. package/esm2015/lib/utilities/get-item-class-suffix.js +17 -0
  155. package/esm2015/lib/utilities/index.js +13 -0
  156. package/esm2015/lib/utilities/is-form-control.js +5 -0
  157. package/esm2015/lib/utilities/is-form-group.js +6 -0
  158. package/esm2015/lib/utilities/serializer-util.js +391 -0
  159. package/esm2015/lib/utilities/update-step-status.js +38 -0
  160. package/esm2015/lib/validators/index.js +3 -0
  161. package/esm2015/lib/validators/instant-validation-result-error-state-matcher.js +23 -0
  162. package/esm2015/lib/validators/validation-result-validator.js +19 -0
  163. package/esm2015/public-api.js +8 -10
  164. package/fesm2015/mtna-web-form-angular.js +4516 -3887
  165. package/fesm2015/mtna-web-form-angular.js.map +1 -1
  166. package/lib/components/acknowledge-dialog/acknowledge-dialog.component.d.ts +13 -0
  167. package/lib/components/acknowledge-dialog/acknowledge-dialog.module.d.ts +11 -0
  168. package/lib/components/acknowledge-dialog/index.d.ts +2 -0
  169. package/lib/components/base-items/base-form-item-control.component.d.ts +17 -0
  170. package/lib/components/base-items/base-form-item.component.d.ts +25 -0
  171. package/lib/components/base-items/base-group-item.component.d.ts +12 -0
  172. package/lib/components/base-items/base-parent-value-item.component.d.ts +17 -0
  173. package/lib/components/base-items/base-section-item.component.d.ts +13 -0
  174. package/lib/components/base-items/base-single-selection-parent-value-item.component.d.ts +20 -0
  175. package/lib/components/base-items/base-value-item.component.d.ts +18 -0
  176. package/lib/components/base-items/index.d.ts +6 -0
  177. package/lib/{form → components/form}/form.component.d.ts +2 -2
  178. package/lib/components/form/form.module.d.ts +16 -0
  179. package/lib/components/form/index.d.ts +2 -0
  180. package/lib/components/form-disabler/form-disabler.module.d.ts +8 -0
  181. package/lib/components/form-disabler/index.d.ts +2 -0
  182. package/lib/components/form-item/form-item.component.d.ts +53 -0
  183. package/lib/components/form-item/form-item.module.d.ts +12 -0
  184. package/lib/components/form-item/index.d.ts +2 -0
  185. package/lib/components/form-item-component-provider/form-item-component-provider.d.ts +4 -0
  186. package/lib/components/form-item-component-provider/form-item-injected-components.d.ts +2 -0
  187. package/lib/components/form-item-component-provider/index.d.ts +2 -0
  188. package/lib/components/form-item-dialog/form-item-dialog.component.d.ts +13 -0
  189. package/lib/components/form-item-dialog/form-item-dialog.module.d.ts +10 -0
  190. package/lib/components/form-item-dialog/index.d.ts +2 -0
  191. package/lib/components/form-item-impl/boolean/boolean.component.d.ts +17 -0
  192. package/lib/components/form-item-impl/boolean/boolean.module.d.ts +12 -0
  193. package/lib/components/form-item-impl/boolean/index.d.ts +2 -0
  194. package/lib/components/form-item-impl/checkbox/checkbox.component.d.ts +29 -0
  195. package/lib/components/form-item-impl/checkbox/checkbox.module.d.ts +17 -0
  196. package/lib/components/form-item-impl/checkbox/index.d.ts +2 -0
  197. package/lib/{form-item-controls → components/form-item-impl/date}/date.component.d.ts +6 -6
  198. package/lib/components/form-item-impl/date/date.module.d.ts +15 -0
  199. package/lib/components/form-item-impl/date/index.d.ts +2 -0
  200. package/lib/{form-item-controls → components/form-item-impl/date-range}/date-range.component.d.ts +2 -2
  201. package/lib/components/form-item-impl/date-range/date-range.module.d.ts +13 -0
  202. package/lib/components/form-item-impl/date-range/index.d.ts +2 -0
  203. package/lib/{form-item-controls → components/form-item-impl/dropdown}/dropdown.component.d.ts +2 -4
  204. package/lib/components/form-item-impl/dropdown/dropdown.module.d.ts +17 -0
  205. package/lib/components/form-item-impl/dropdown/index.d.ts +2 -0
  206. package/lib/components/form-item-impl/file-upload/file-upload.component.d.ts +19 -0
  207. package/lib/components/form-item-impl/file-upload/file-upload.module.d.ts +14 -0
  208. package/lib/{file-upload → components/form-item-impl/file-upload}/index.d.ts +1 -0
  209. package/lib/components/form-item-impl/form-group/form-group.component.d.ts +17 -0
  210. package/lib/components/form-item-impl/form-group/form-group.module.d.ts +14 -0
  211. package/lib/components/form-item-impl/form-group/index.d.ts +2 -0
  212. package/lib/components/form-item-impl/form-section/form-section.component.d.ts +7 -0
  213. package/lib/components/form-item-impl/form-section/form-section.module.d.ts +12 -0
  214. package/lib/components/form-item-impl/form-section/index.d.ts +2 -0
  215. package/lib/components/form-item-impl/i18n-input/i18n-input.component.d.ts +15 -0
  216. package/lib/components/form-item-impl/i18n-input/i18n-input.module.d.ts +15 -0
  217. package/lib/components/form-item-impl/i18n-input/index.d.ts +2 -0
  218. package/lib/components/form-item-impl/index.d.ts +21 -0
  219. package/lib/components/form-item-impl/input/index.d.ts +2 -0
  220. package/lib/{form-item-controls → components/form-item-impl/input}/input.component.d.ts +2 -2
  221. package/lib/components/form-item-impl/input/input.module.d.ts +15 -0
  222. package/lib/components/form-item-impl/multiple-choice/index.d.ts +2 -0
  223. package/lib/components/form-item-impl/multiple-choice/multiple-choice.component.d.ts +7 -0
  224. package/lib/components/form-item-impl/multiple-choice/multiple-choice.module.d.ts +13 -0
  225. package/lib/components/form-item-impl/ordered-list/index.d.ts +2 -0
  226. package/lib/components/form-item-impl/ordered-list/ordered-list-item.component.d.ts +7 -0
  227. package/lib/components/form-item-impl/ordered-list/ordered-list-item.module.d.ts +10 -0
  228. package/lib/{groups → components/form-item-impl/repeatable-item}/index.d.ts +1 -1
  229. package/lib/components/form-item-impl/repeatable-item/repeatable-item.component.d.ts +5 -0
  230. package/lib/components/form-item-impl/repeatable-item/repeatable-item.module.d.ts +8 -0
  231. package/lib/components/form-item-impl/repeatable-item-container/index.d.ts +2 -0
  232. package/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.component.d.ts +13 -0
  233. package/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.module.d.ts +15 -0
  234. package/lib/components/form-item-impl/search/index.d.ts +2 -0
  235. package/lib/components/form-item-impl/search/resource-search.component.d.ts +15 -0
  236. package/lib/components/form-item-impl/search/resource-search.module.d.ts +12 -0
  237. package/lib/components/form-item-impl/table-item/index.d.ts +2 -0
  238. package/lib/components/form-item-impl/table-item/table-item.component.d.ts +9 -0
  239. package/lib/components/form-item-impl/table-item/table-item.module.d.ts +10 -0
  240. package/lib/components/form-item-impl/text/index.d.ts +2 -0
  241. package/lib/components/form-item-impl/text/text.component.d.ts +7 -0
  242. package/lib/components/form-item-impl/text/text.module.d.ts +10 -0
  243. package/lib/components/form-item-impl/title/index.d.ts +2 -0
  244. package/lib/components/form-item-impl/title/title.component.d.ts +7 -0
  245. package/lib/components/form-item-impl/title/title.module.d.ts +10 -0
  246. package/lib/components/form-item-impl/unordered-list/index.d.ts +2 -0
  247. package/lib/components/form-item-impl/unordered-list/unordered-list-item.component.d.ts +7 -0
  248. package/lib/components/form-item-impl/unordered-list/unordered-list-item.module.d.ts +10 -0
  249. package/lib/components/form-item-impl/year-quarter/index.d.ts +2 -0
  250. package/lib/{form-item-controls → components/form-item-impl/year-quarter}/year-quarter.component.d.ts +6 -4
  251. package/lib/components/form-item-impl/year-quarter/year-quarter.module.d.ts +16 -0
  252. package/lib/components/form-item-impl/year-quarter-range/index.d.ts +2 -0
  253. package/lib/{form-item-controls → components/form-item-impl/year-quarter-range}/year-quarter-range.component.d.ts +6 -2
  254. package/lib/components/form-item-impl/year-quarter-range/year-quarter-range.module.d.ts +12 -0
  255. package/lib/components/form-item-injector/form-item-injector.component.d.ts +48 -0
  256. package/lib/components/form-item-injector/form-item-injector.module.d.ts +8 -0
  257. package/lib/components/form-item-injector/index.d.ts +2 -0
  258. package/lib/{form-stepper → components/form-stepper/form-step}/form-step.component.d.ts +1 -1
  259. package/lib/components/form-stepper/form-step/index.d.ts +1 -0
  260. package/lib/{form-stepper → components/form-stepper/form-step-group}/form-step-group.component.d.ts +1 -1
  261. package/lib/components/form-stepper/form-step-group/index.d.ts +1 -0
  262. package/lib/{form-stepper → components/form-stepper/form-stepper}/form-stepper.component.d.ts +1 -2
  263. package/lib/components/form-stepper/form-stepper/index.d.ts +1 -0
  264. package/lib/components/form-stepper/form-stepper.module.d.ts +18 -0
  265. package/lib/components/form-stepper/index.d.ts +4 -0
  266. package/lib/components/index.d.ts +12 -0
  267. package/lib/{item-header → components/item-header}/index.d.ts +1 -0
  268. package/lib/{item-header → components/item-header}/item-header.component.d.ts +3 -3
  269. package/lib/components/item-header/item-header.module.d.ts +9 -0
  270. package/lib/{step-card → components/step-card}/index.d.ts +1 -0
  271. package/lib/{step-card → components/step-card}/step-card.component.d.ts +1 -1
  272. package/lib/components/step-card/step-card.module.d.ts +13 -0
  273. package/lib/core/_all-color.scss +13 -15
  274. package/lib/core/_all-theme.scss +13 -18
  275. package/lib/core/_all-typography.scss +13 -15
  276. package/lib/{form-item-controls → directives}/base-single-selection-parent.directive.d.ts +1 -1
  277. package/lib/directives/index.d.ts +4 -0
  278. package/lib/models/index.d.ts +6 -0
  279. package/lib/models/toggle-form-item-data.model.d.ts +7 -0
  280. package/lib/pipes/coerce-date-item.pipe.d.ts +17 -0
  281. package/lib/pipes/coerce-form-control.pipe.d.ts +13 -0
  282. package/lib/{core/pipes → pipes}/coerce-form-group.pipe.d.ts +5 -0
  283. package/lib/pipes/date-quarter.pipe.d.ts +12 -0
  284. package/lib/{form-stepper → pipes}/form-step-group.pipe.d.ts +6 -1
  285. package/lib/pipes/get-auto-complete.pipe.d.ts +12 -0
  286. package/lib/{core/pipes → pipes}/get-available-quarters.pipe.d.ts +5 -0
  287. package/lib/pipes/get-form-control-error.pipe.d.ts +19 -0
  288. package/lib/pipes/get-list-icon.pipe.d.ts +12 -0
  289. package/lib/pipes/get-object-type.pipe.d.ts +12 -0
  290. package/lib/{core/pipes → pipes}/get-selected-option.pipe.d.ts +5 -0
  291. package/lib/pipes/index.d.ts +13 -0
  292. package/lib/{core/pipes → pipes}/items-with-value.pipe.d.ts +5 -0
  293. package/lib/{core/pipes → pipes}/sanitize-html.pipe.d.ts +5 -0
  294. package/lib/{core/services → services}/api.service.d.ts +1 -1
  295. package/lib/services/dialog.service.d.ts +21 -0
  296. package/lib/{core/services → services}/form-manager.service.d.ts +1 -1
  297. package/lib/{core/services → services}/index.d.ts +2 -0
  298. package/lib/services/resource-search-selection.service.d.ts +10 -0
  299. package/lib/{core/services → services}/ui.service.d.ts +1 -1
  300. package/lib/{core/utilities → utilities}/flatten-steps.d.ts +1 -1
  301. package/lib/{form-stepper → utilities}/form-step.util.d.ts +1 -1
  302. package/lib/{core/utilities → utilities}/generate-form-steps.d.ts +1 -1
  303. package/lib/utilities/get-item-class-suffix.d.ts +1 -0
  304. package/lib/{core/utilities → utilities}/index.d.ts +4 -0
  305. package/lib/utilities/is-form-control.d.ts +2 -0
  306. package/lib/{core/utilities → utilities}/update-step-status.d.ts +1 -1
  307. package/package.json +4 -2
  308. package/public-api.d.ts +7 -9
  309. package/esm2015/lib/core/animations.js +0 -8
  310. package/esm2015/lib/core/api-config.js +0 -3
  311. package/esm2015/lib/core/index.js +0 -7
  312. package/esm2015/lib/core/pipes/coerce-date-item.pipe.js +0 -23
  313. package/esm2015/lib/core/pipes/coerce-form-group.pipe.js +0 -35
  314. package/esm2015/lib/core/pipes/date-quarter.pipe.js +0 -43
  315. package/esm2015/lib/core/pipes/get-auto-complete.pipe.js +0 -42
  316. package/esm2015/lib/core/pipes/get-available-quarters.pipe.js +0 -29
  317. package/esm2015/lib/core/pipes/get-form-control-error.pipe.js +0 -20
  318. package/esm2015/lib/core/pipes/get-list-icon.pipe.js +0 -53
  319. package/esm2015/lib/core/pipes/get-object-type.pipe.js +0 -17
  320. package/esm2015/lib/core/pipes/get-selected-option.pipe.js +0 -20
  321. package/esm2015/lib/core/pipes/index.js +0 -71
  322. package/esm2015/lib/core/pipes/items-with-value.pipe.js +0 -30
  323. package/esm2015/lib/core/pipes/sanitize-html.pipe.js +0 -23
  324. package/esm2015/lib/core/services/api.service.js +0 -67
  325. package/esm2015/lib/core/services/form-manager.service.js +0 -465
  326. package/esm2015/lib/core/services/index.js +0 -5
  327. package/esm2015/lib/core/services/ng-form.service.js +0 -150
  328. package/esm2015/lib/core/services/ui.service.js +0 -333
  329. package/esm2015/lib/core/utilities/find-form-control.js +0 -29
  330. package/esm2015/lib/core/utilities/find-form-item.js +0 -25
  331. package/esm2015/lib/core/utilities/flatten-steps.js +0 -10
  332. package/esm2015/lib/core/utilities/generate-form-steps.js +0 -38
  333. package/esm2015/lib/core/utilities/index.js +0 -9
  334. package/esm2015/lib/core/utilities/is-form-group.js +0 -6
  335. package/esm2015/lib/core/utilities/serializer-util.js +0 -358
  336. package/esm2015/lib/core/utilities/update-step-status.js +0 -38
  337. package/esm2015/lib/core/validators/index.js +0 -3
  338. package/esm2015/lib/core/validators/instant-validation-result-error-state-matcher.js +0 -23
  339. package/esm2015/lib/core/validators/validation-result-validator.js +0 -19
  340. package/esm2015/lib/file-upload/file-upload.component.js +0 -66
  341. package/esm2015/lib/file-upload/index.js +0 -2
  342. package/esm2015/lib/form/base-form-item.model.js +0 -2
  343. package/esm2015/lib/form/form.component.js +0 -250
  344. package/esm2015/lib/form/form.module.js +0 -214
  345. package/esm2015/lib/form/index.js +0 -5
  346. package/esm2015/lib/form/white-list.model.js +0 -11
  347. package/esm2015/lib/form-item-controls/base-form-item-control.directive.js +0 -58
  348. package/esm2015/lib/form-item-controls/base-parent-item-control.directive.js +0 -42
  349. package/esm2015/lib/form-item-controls/base-single-selection-parent.directive.js +0 -53
  350. package/esm2015/lib/form-item-controls/date-range.component.js +0 -84
  351. package/esm2015/lib/form-item-controls/date.component.js +0 -134
  352. package/esm2015/lib/form-item-controls/dropdown.component.js +0 -109
  353. package/esm2015/lib/form-item-controls/index.js +0 -8
  354. package/esm2015/lib/form-item-controls/input.component.js +0 -149
  355. package/esm2015/lib/form-item-controls/year-quarter-range.component.js +0 -75
  356. package/esm2015/lib/form-item-controls/year-quarter.component.js +0 -228
  357. package/esm2015/lib/form-stepper/form-step-group.component.js +0 -95
  358. package/esm2015/lib/form-stepper/form-step-group.pipe.js +0 -20
  359. package/esm2015/lib/form-stepper/form-step.component.js +0 -110
  360. package/esm2015/lib/form-stepper/form-step.util.js +0 -28
  361. package/esm2015/lib/form-stepper/form-stepper.component.js +0 -115
  362. package/esm2015/lib/form-stepper/form-stepper.module.js +0 -53
  363. package/esm2015/lib/form-stepper/index.js +0 -8
  364. package/esm2015/lib/groups/group-components.js +0 -646
  365. package/esm2015/lib/groups/index.js +0 -3
  366. package/esm2015/lib/groups/repeatable-item.component.js +0 -23
  367. package/esm2015/lib/item-header/index.js +0 -2
  368. package/esm2015/lib/item-header/item-header.component.js +0 -108
  369. package/esm2015/lib/static-form-items/index.js +0 -3
  370. package/esm2015/lib/static-form-items/ordered-list-item.js +0 -50
  371. package/esm2015/lib/static-form-items/unordered-list-item.js +0 -52
  372. package/esm2015/lib/step-card/index.js +0 -2
  373. package/lib/_index.scss +0 -24
  374. package/lib/core/index.d.ts +0 -6
  375. package/lib/core/pipes/coerce-date-item.pipe.d.ts +0 -11
  376. package/lib/core/pipes/date-quarter.pipe.d.ts +0 -7
  377. package/lib/core/pipes/get-auto-complete.pipe.d.ts +0 -7
  378. package/lib/core/pipes/get-form-control-error.pipe.d.ts +0 -14
  379. package/lib/core/pipes/get-list-icon.pipe.d.ts +0 -7
  380. package/lib/core/pipes/get-object-type.pipe.d.ts +0 -7
  381. package/lib/core/pipes/index.d.ts +0 -28
  382. package/lib/file-upload/file-upload.component.d.ts +0 -23
  383. package/lib/form/form.module.d.ts +0 -52
  384. package/lib/form/index.d.ts +0 -4
  385. package/lib/form-item-controls/index.d.ts +0 -7
  386. package/lib/form-stepper/form-stepper.module.d.ts +0 -18
  387. package/lib/form-stepper/index.d.ts +0 -7
  388. package/lib/groups/group-components.d.ts +0 -221
  389. package/lib/groups/repeatable-item.component.d.ts +0 -5
  390. package/lib/static-form-items/index.d.ts +0 -2
  391. package/lib/static-form-items/ordered-list-item.d.ts +0 -11
  392. package/lib/static-form-items/unordered-list-item.d.ts +0 -11
  393. /package/lib/{form → components/form-disabler}/form-disabler.component.d.ts +0 -0
  394. /package/lib/{groups → components/form-item-impl/checkbox}/_checkbox-theme.scss +0 -0
  395. /package/lib/{form-item-controls → components/form-item-impl/date}/_date-item-theme.scss +0 -0
  396. /package/lib/{groups → components/form-item-impl/form-group}/_form-group-theme.scss +0 -0
  397. /package/lib/{groups → components/form-item-impl/multiple-choice}/_multiple-choice-theme.scss +0 -0
  398. /package/lib/{groups/_repeatable-item-theme.scss → components/form-item-impl/repeatable-item-container/_repeatable-item-container-theme.scss} +0 -0
  399. /package/lib/{form-item-controls → components/form-item-impl/year-quarter}/_year-quarter-item-theme.scss +0 -0
  400. /package/lib/{form-stepper → components/form-stepper/form-step-group}/_form-step-group-theme.scss +0 -0
  401. /package/lib/{form-stepper → components/form-stepper/form-stepper}/_form-stepper-theme.scss +0 -0
  402. /package/lib/{item-header → components/item-header}/_item-header-theme.scss +0 -0
  403. /package/lib/{step-card → components/step-card}/_step-card-theme.scss +0 -0
  404. /package/lib/{form-item-controls → core}/_form-control-theme.scss +0 -0
  405. /package/lib/{form-item-controls → directives}/base-form-item-control.directive.d.ts +0 -0
  406. /package/lib/{form-item-controls → directives}/base-parent-item-control.directive.d.ts +0 -0
  407. /package/lib/{form → directives}/form-item.directive.d.ts +0 -0
  408. /package/lib/{core → models}/api-config.d.ts +0 -0
  409. /package/lib/{form → models}/base-form-item.model.d.ts +0 -0
  410. /package/lib/{groups → models}/form-item-dialog-data.model.d.ts +0 -0
  411. /package/lib/{form-stepper/models → models/form-stepper}/base-form-step.model.d.ts +0 -0
  412. /package/lib/{form-stepper/models → models/form-stepper}/form-step-group.model.d.ts +0 -0
  413. /package/lib/{form-stepper/models → models/form-stepper}/form-step.model.d.ts +0 -0
  414. /package/lib/{form-stepper/models → models/form-stepper}/index.d.ts +0 -0
  415. /package/lib/{form → models}/white-list.model.d.ts +0 -0
  416. /package/lib/{core/services → services}/ng-form.service.d.ts +0 -0
  417. /package/lib/{core → utilities}/animations.d.ts +0 -0
  418. /package/lib/{core/utilities → utilities}/find-form-control.d.ts +0 -0
  419. /package/lib/{core/utilities → utilities}/find-form-item.d.ts +0 -0
  420. /package/lib/{core/utilities → utilities}/is-form-group.d.ts +0 -0
  421. /package/lib/{core/utilities → utilities}/serializer-util.d.ts +0 -0
  422. /package/lib/{core/validators → validators}/index.d.ts +0 -0
  423. /package/lib/{core/validators → validators}/instant-validation-result-error-state-matcher.d.ts +0 -0
  424. /package/lib/{core/validators → validators}/validation-result-validator.d.ts +0 -0
@@ -0,0 +1,391 @@
1
+ import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
2
+ import { isNullOrUndefined, isPresent, isType } from '@mtna/core-ts';
3
+ import { CHECKBOX_ITEM_ID, DECIMAL_ANSWER_ITEM_ID, I18N_PARAGRAPH_ANSWER_ITEM_ID, I18N_SHORT_ANSWER_ITEM_ID, isForm, isFormItemGroupImpl, isOffsetDateRangeItem, isRepeatableItem, isSection, isTableItem, isWholeNumberItem, isYearQuarterRangeItem, PARAGRAPH_ANSWER_ITEM_ID, SHORT_ANSWER_ITEM_ID, WHOLE_NUMBER_ANSWER_ITEM_ID, } from '@mtna/web-form-ts';
4
+ import { validationResultValidator } from '../validators';
5
+ /** RegEx to validate number items contain only negative, digits, or decimals */
6
+ const numOnlyWithoutComma = /^-?\d+(\.\d*)?$/;
7
+ /** RegEx to validate number items contain only negative, digits, or decimals in comma format */
8
+ const numOnlyWithComma = /^-?\d{1,3}(,\d{3})*(\.\d*)?$/;
9
+ /** RegEx to validate 'positive only' item conains non-negative characters */
10
+ const posOnly = /^[^-]*$/;
11
+ /** RegEx to validate 'whole number' item contains only negative, digits, or comma format */
12
+ const wholeNumber = /^-?\d+(,\d{3})*$/;
13
+ //#region FormControl Generation
14
+ /**
15
+ * Generates a new FormGroup with FormControls & possible nested FormGroups
16
+ * @param formItem WebForm, Section, Group, or RepeatableItem used to create a FormGroup
17
+ * @param customFormItemConditional boolean function for any custom FormItems
18
+ * @param customControlGenerator FormControl generator function for any custom FormItems
19
+ */
20
+ export function serializeFormItems(formItem, managerService, customFormItemConditional = () => false, customControlGenerator) {
21
+ const form = {};
22
+ for (const item of formItem.items) {
23
+ const control = determineSerializeFunctionToUse(item, managerService, customFormItemConditional, customControlGenerator);
24
+ if (control) {
25
+ form[item.instanceId] = control;
26
+ }
27
+ }
28
+ const required = isForm(formItem) ? true : formItem.required;
29
+ const group = required ? new FormGroup(form, Validators.required) : new FormGroup(form);
30
+ if ('disabled' in formItem && formItem.disabled) {
31
+ group.disable({ onlySelf: true, emitEvent: false });
32
+ }
33
+ return group;
34
+ }
35
+ /**
36
+ * Returns a tailored FormControl with validators for a FormItem
37
+ * @param formItem The FormItem requesting a tailored FormControl
38
+ * @internal Creating the form control and then calling setValidators force a validation pass,
39
+ * see https://github.com/angular/angular/issues/19622#issuecomment-341547884
40
+ * Better to gather the validators and put them in the constructor of the form control.
41
+ */
42
+ export function serializeFormItem(formItem, managerService) {
43
+ const validators = new Array(validationResultValidator(formItem.instanceId, managerService));
44
+ if (formItem.required) {
45
+ validators.push(Validators.required);
46
+ }
47
+ switch (formItem.itemId) {
48
+ case CHECKBOX_ITEM_ID:
49
+ const checkboxItem = formItem;
50
+ const value = checkboxItem.value || [];
51
+ validators.push(numCheckboxesValidator('MIN', checkboxItem.minSelections), numCheckboxesValidator('MAX', checkboxItem.maxSelections));
52
+ const arr = new FormArray(checkboxItem.options.map((o) => new FormControl({
53
+ value: o.selected || value.some((v) => v === o.option.id),
54
+ disabled: checkboxItem.disabled,
55
+ })), Validators.compose(validators));
56
+ return arr;
57
+ case DECIMAL_ANSWER_ITEM_ID:
58
+ case WHOLE_NUMBER_ANSWER_ITEM_ID:
59
+ const item = formItem;
60
+ validators.push(numericalValueCheck());
61
+ if (isWholeNumberItem(item)) {
62
+ validators.push(wholeNumberPattern());
63
+ }
64
+ if (item.positiveOnly) {
65
+ validators.push(positiveNumberPattern());
66
+ }
67
+ if (!isNullOrUndefined(item.minValue)) {
68
+ validators.push(numValueLimit('min', item.minValue));
69
+ }
70
+ if (!isNullOrUndefined(item.maxValue)) {
71
+ validators.push(numValueLimit('max', item.maxValue));
72
+ }
73
+ break;
74
+ case PARAGRAPH_ANSWER_ITEM_ID:
75
+ case SHORT_ANSWER_ITEM_ID:
76
+ const shortAnswerItem = formItem;
77
+ validators.push(...getNumericValidator('minLength', shortAnswerItem.minCharCount));
78
+ validators.push(...getNumericValidator('maxLength', shortAnswerItem.maxCharCount));
79
+ break;
80
+ case I18N_PARAGRAPH_ANSWER_ITEM_ID:
81
+ case I18N_SHORT_ANSWER_ITEM_ID:
82
+ const i18nItem = formItem;
83
+ const group = new FormGroup({}, Validators.compose(validators));
84
+ for (const language of i18nItem.languageTags) {
85
+ // FIXME if there is nothign there in the value should I set a new internationalized string?
86
+ group.controls[language] = new FormControl(formItem.value);
87
+ }
88
+ if (i18nItem.disabled) {
89
+ group.disable({ onlySelf: true, emitEvent: false });
90
+ }
91
+ return group;
92
+ default:
93
+ break;
94
+ }
95
+ return new FormControl({ value: formItem.value, disabled: !!formItem.disabled }, Validators.compose(validators));
96
+ }
97
+ /**
98
+ * Builds controls for any form items nested inside a parent items options
99
+ * @param formItem The FormItem with an 'options' property
100
+ * @param customFormItemConditional conditional function from parent 'serializeFormItems' function
101
+ * @param customControlGenerator FormControl generator from parent 'serializeFormItems' function
102
+ */
103
+ export function serializeNestedOptionFormItems(formItem, managerService, customFormItemConditional = () => false, customControlGenerator) {
104
+ const controls = {};
105
+ for (const id in formItem.optionItemMap) {
106
+ if (Object.prototype.hasOwnProperty.call(formItem.optionItemMap, id)) {
107
+ const subItem = formItem.optionItemMap[id];
108
+ const control = determineSerializeFunctionToUse(subItem, managerService, customFormItemConditional, customControlGenerator);
109
+ if (control) {
110
+ controls[subItem.instanceId] = control;
111
+ }
112
+ }
113
+ }
114
+ controls[formItem.instanceId] = serializeFormItem(formItem, managerService);
115
+ const group = formItem.required ? new FormGroup(controls, Validators.required) : new FormGroup(controls);
116
+ if (formItem.disabled) {
117
+ group.disable({ onlySelf: true, emitEvent: false });
118
+ }
119
+ return group;
120
+ }
121
+ /**
122
+ * Build FormControls for a TableItem
123
+ * @param item TableItem requiring FormControls
124
+ * @param customFormItemConditional Conditional function for custom any FormItems
125
+ * @param customControlGenerator FormControl generator for custom any FormItems
126
+ */
127
+ export function serializeTableItem(item, managerService, customFormItemConditional = () => false, customControlGenerator) {
128
+ const tableControl = {};
129
+ for (const row of item.tableRows) {
130
+ for (const rowItem of row.items.filter((i) => !!i)) {
131
+ const control = determineSerializeFunctionToUse(rowItem, managerService, customFormItemConditional, customControlGenerator);
132
+ if (control) {
133
+ tableControl[rowItem.instanceId] = control;
134
+ }
135
+ }
136
+ }
137
+ const group = item.required ? new FormGroup(tableControl, Validators.required) : new FormGroup(tableControl);
138
+ if (item.disabled) {
139
+ group.disable({ onlySelf: true, emitEvent: false });
140
+ }
141
+ return group;
142
+ }
143
+ /**
144
+ * Returns the appropriate function for the caller to use.
145
+ *
146
+ * @param formItem FormItem requiring serialization
147
+ * @param customFormItemConditional Conditional for a custom FormItem
148
+ * @param customControlGenerator Serializer for a custom FormItem
149
+ */
150
+ export function determineSerializeFunctionToUse(formItem, managerService, customFormItemConditional = () => false, customControlGenerator) {
151
+ if (isForm(formItem) || isRepeatableItem(formItem) || isSection(formItem) || isFormItemGroupImpl(formItem)) {
152
+ return serializeFormItems(formItem, managerService, customFormItemConditional, customControlGenerator);
153
+ }
154
+ else if (isTableItem(formItem)) {
155
+ return serializeTableItem(formItem, managerService, customFormItemConditional, customControlGenerator);
156
+ }
157
+ else if (customFormItemConditional(formItem) && !!customControlGenerator) {
158
+ return customControlGenerator(formItem);
159
+ }
160
+ else if (hasNestedFormItems(formItem)) {
161
+ return serializeNestedOptionFormItems(formItem, managerService);
162
+ }
163
+ else if (isOffsetDateRangeItem(formItem) || isYearQuarterRangeItem(formItem)) {
164
+ return serializeRangeItem(formItem);
165
+ }
166
+ else {
167
+ return serializeFormItem(formItem, managerService);
168
+ }
169
+ }
170
+ /**
171
+ * Builds a FormGroup for a range item
172
+ * @param formItem FormItem for a DateRange of Date | YearQuarter
173
+ */
174
+ export function serializeRangeItem(formItem) {
175
+ const validators = new Array();
176
+ if (formItem.required) {
177
+ validators.push(Validators.required);
178
+ }
179
+ const group = new FormGroup({
180
+ start: new FormControl(formItem.value ? formItem.value.start : null),
181
+ end: new FormControl(formItem.value ? formItem.value.end : null),
182
+ }, Validators.compose(validators));
183
+ if (formItem.disabled) {
184
+ group.disable({ onlySelf: true, emitEvent: false });
185
+ }
186
+ return group;
187
+ }
188
+ /**
189
+ * Returns a Validator with a numeric value for a FormItem;
190
+ * Returns as an array of length 1 or 0
191
+ * @param param0 `type` - type of validator, e.g. 'minLength';
192
+ * `value` - parameter for the validator, e.g. 'minLength(value)'
193
+ */
194
+ function getNumericValidator(type, value) {
195
+ return !isNullOrUndefined(value) ? [Validators[type](value)] : [];
196
+ }
197
+ //#endregion
198
+ //#region MtnaForm value insertion
199
+ /**
200
+ * Returns an array of Formitems with new values inserted.
201
+ *
202
+ * @param section The old Form or Form Section
203
+ * @param ngFormValue ngForm JSON values
204
+ * @param customFormItemConditional boolean function for any custom FormItems
205
+ * @param customFormItemBuilder function to handle custom FormItems
206
+ * @returns new FormItem array
207
+ */
208
+ export function insertFormItemValues(section, ngFormValue, disabledState, customFormItemConditional = () => false, customFormItemBuilder) {
209
+ return section.items
210
+ .map((item) => determineInsertFunctionToUse(item, ngFormValue[item.instanceId], disabledState, customFormItemConditional, customFormItemBuilder, section))
211
+ .filter(isPresent);
212
+ }
213
+ /**
214
+ * Returns a copied TableItem, with each row FormItem having new inserted values.
215
+ * @param item TableItem to insert values
216
+ * @param ngFormValue ngForm value of the TableItem
217
+ * @param customFormItemConditional boolean function for any custom FormItem
218
+ * @param customFormItemBuilder function to handle custom FormItem value insertion
219
+ */
220
+ export function insertTableItemValues(item, ngFormValue, disabledState, customFormItemConditional = () => false, customFormItemBuilder) {
221
+ const tableRows = item.tableRows.map((row) => (Object.assign(Object.assign({}, row), { items: row.items
222
+ .filter(isPresent)
223
+ .map((formItem) => {
224
+ return determineInsertFunctionToUse(formItem, ngFormValue[formItem.instanceId], disabledState, customFormItemConditional, customFormItemBuilder);
225
+ })
226
+ .filter(isPresent) })));
227
+ return Object.assign(Object.assign({}, item), { tableRows, disabled: _isDisabled(item, disabledState) });
228
+ }
229
+ /**
230
+ * Returns a new FormItem after determining the appropriate function to use.
231
+ * @param formItem FormItem requiring value insertion
232
+ * @param ngFormValue ngForm value
233
+ * @param customFormItemConditional Conditional for a custom FormItem
234
+ * @param customFormItemBuilder Value insertion function for a custom FormItem
235
+ * @param disabledState Map of items' disabled state
236
+ * @param parent Parent of the FormItem, used to pass to the customFormItemBuilder
237
+ */
238
+ function determineInsertFunctionToUse(formItem, ngFormValue, disabledState, customFormItemConditional = () => false, customFormItemBuilder, parent) {
239
+ if (isSection(formItem) || isFormItemGroupImpl(formItem) || isRepeatableItem(formItem)) {
240
+ const items = insertFormItemValues(formItem, ngFormValue, disabledState, customFormItemConditional, customFormItemBuilder);
241
+ return Object.assign(Object.assign({}, formItem), { items, disabled: _isDisabled(formItem, disabledState) });
242
+ }
243
+ else if (isTableItem(formItem)) {
244
+ return insertTableItemValues(formItem, ngFormValue, disabledState, customFormItemConditional, customFormItemBuilder);
245
+ }
246
+ else if (customFormItemConditional(formItem) && !!customFormItemBuilder) {
247
+ return customFormItemBuilder(parent, formItem, ngFormValue, disabledState);
248
+ }
249
+ else if (hasNestedFormItems(formItem)) {
250
+ return insertNestedFormItemValues(formItem, ngFormValue, disabledState, customFormItemConditional, customFormItemBuilder);
251
+ }
252
+ else if (isOffsetDateRangeItem(formItem) || isYearQuarterRangeItem(formItem)) {
253
+ const start = isType(ngFormValue, 'start') ? ngFormValue.start : undefined;
254
+ const end = isType(ngFormValue, 'end') ? ngFormValue.end : undefined;
255
+ return Object.assign(Object.assign({}, formItem), { value: { start, end }, disabled: _isDisabled(formItem, disabledState) });
256
+ }
257
+ else {
258
+ return Object.assign(Object.assign({}, formItem), { value: findItemValue(formItem, ngFormValue), disabled: _isDisabled(formItem, disabledState) });
259
+ }
260
+ }
261
+ /**
262
+ * Returns ngForm value for a FormItem.
263
+ *
264
+ * @param formItem FormItem requiring a value
265
+ * @param ngFormValue ngForm value
266
+ */
267
+ function findItemValue(formItem, ngFormValue) {
268
+ const itemId = formItem.itemId.split('.').pop();
269
+ switch (itemId === null || itemId === void 0 ? void 0 : itemId.toUpperCase()) {
270
+ // FIXME: can we put these IDs in constants and refer to them instead?
271
+ case 'DATEITEM':
272
+ return !!ngFormValue && typeof ngFormValue !== 'string' ? ngFormValue.toISOString() : ngFormValue;
273
+ case 'CHECKBOXITEM':
274
+ if (!isNullOrUndefined(ngFormValue) && Array.isArray(ngFormValue)) {
275
+ const arr = ngFormValue;
276
+ return formItem.options.filter((o, index) => !!arr[index]).map((o) => o.option.id);
277
+ }
278
+ return [];
279
+ case 'INTERNATIONALIZEDPARAGRAPHANSWERITEM':
280
+ case 'INTERNATIONALIZEDSHORTANSWERITEM':
281
+ const languages = (itemId === null || itemId === void 0 ? void 0 : itemId.toUpperCase()) === 'INTERNATIONALIZEDPARAGRAPHANSWERITEM'
282
+ ? formItem.languageTags
283
+ : formItem.languageTags;
284
+ const value = languages.reduce((value, language) => {
285
+ if (ngFormValue && typeof ngFormValue === 'object' && language in ngFormValue) {
286
+ const input = ngFormValue[language];
287
+ if (input) {
288
+ value.push({ value: input, facetId: language });
289
+ }
290
+ }
291
+ return value;
292
+ }, []);
293
+ return value;
294
+ default:
295
+ return ngFormValue;
296
+ }
297
+ }
298
+ function insertNestedFormItemValues(formItem, ngFormValue, disabledState, customFormItemConditional = () => false, customFormItemBuilder) {
299
+ const optionItemMap = {};
300
+ for (const id in formItem.optionItemMap) {
301
+ if (Object.prototype.hasOwnProperty.call(formItem.optionItemMap, id)) {
302
+ const subItem = formItem.optionItemMap[id];
303
+ optionItemMap[id] = determineInsertFunctionToUse(subItem, ngFormValue[subItem.instanceId], disabledState, customFormItemConditional, customFormItemBuilder);
304
+ }
305
+ }
306
+ return Object.assign(Object.assign({}, formItem), { optionItemMap, value: findItemValue(formItem, ngFormValue[formItem.instanceId]), disabled: _isDisabled(formItem, disabledState) });
307
+ }
308
+ //#endregion
309
+ /**
310
+ * Determines if a FormItem has an OptionItemMap with at least 1 item, which require their own FormControl(s)
311
+ * @param formItem FormItem to check
312
+ */
313
+ export function hasNestedFormItems(formItem) {
314
+ return (isType(formItem, 'optionItemMap') && Object.keys(formItem.optionItemMap).length > 0);
315
+ }
316
+ /**
317
+ * Function for validating min/max selections limits
318
+ * @param typeCheck Which limit to validate. 'MIN' | 'MAX'
319
+ * @param limit upper or lower limit to check against
320
+ */
321
+ function numCheckboxesValidator(typeCheck, limit = 1) {
322
+ return (control) => {
323
+ let totalSelected = 0;
324
+ if (isFormArray(control)) {
325
+ totalSelected = control.controls.map((c) => c.value).reduce((total, next) => (next ? total + next : total), 0);
326
+ }
327
+ switch (typeCheck) {
328
+ case 'MIN':
329
+ return totalSelected >= limit ? null : { minSelected: `Select at least ${limit}` };
330
+ case 'MAX':
331
+ return totalSelected <= limit ? null : { maxSelected: `Select no more than ${limit}` };
332
+ }
333
+ };
334
+ }
335
+ function isFormArray(control) {
336
+ return isType(control, 'controls');
337
+ }
338
+ function _isDisabled(item, disabledState) {
339
+ const disabled = disabledState[item.instanceId];
340
+ return isNullOrUndefined(disabled) ? item.disabled : disabled;
341
+ }
342
+ function wholeNumberPattern() {
343
+ return (control) => {
344
+ if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
345
+ return null;
346
+ }
347
+ return wholeNumber.test(control.value) ? null : { wholeNumber: true };
348
+ };
349
+ }
350
+ function numericalValueCheck() {
351
+ return (control) => {
352
+ if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
353
+ return null;
354
+ }
355
+ return numOnlyWithoutComma.test(control.value) || numOnlyWithComma.test(control.value) ? null : { nonDigit: true };
356
+ };
357
+ }
358
+ function positiveNumberPattern() {
359
+ return (control) => {
360
+ if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
361
+ return null;
362
+ }
363
+ return posOnly.test(control.value) ? null : { positive: true };
364
+ };
365
+ }
366
+ /**
367
+ * This works as a combination of the angular 'min'/'max' Validators. Using the built-in validators
368
+ * appears to take precedence over custom validators, regardless of order in the array. Using this function
369
+ * ensures validators set before this one maintain priority. For instance, the input value failing numerical validation
370
+ * is more important than the value being within min-max range.
371
+ */
372
+ function numValueLimit(type, limit) {
373
+ return (control) => {
374
+ if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
375
+ return null;
376
+ }
377
+ const value = parseFloat(control.value);
378
+ return !isNaN(value) && (type === 'min' ? value < limit : value > limit)
379
+ ? {
380
+ [type]: {
381
+ [type]: limit,
382
+ actual: control.value,
383
+ },
384
+ }
385
+ : null;
386
+ };
387
+ }
388
+ function isEmptyString(value) {
389
+ return typeof value === 'string' && !value.length;
390
+ }
391
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy9zZXJpYWxpemVyLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBaUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUNMLGdCQUFnQixFQUloQixzQkFBc0IsRUFNdEIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUd6QixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsc0JBQXNCLEVBR3RCLHdCQUF3QixFQUd4QixvQkFBb0IsRUFLcEIsMkJBQTJCLEdBRzVCLE1BQU0sbUJBQW1CLENBQUM7QUFJM0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTFELGdGQUFnRjtBQUNoRixNQUFNLG1CQUFtQixHQUFHLGlCQUFpQixDQUFDO0FBQzlDLGdHQUFnRztBQUNoRyxNQUFNLGdCQUFnQixHQUFHLDhCQUE4QixDQUFDO0FBQ3hELDZFQUE2RTtBQUM3RSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDMUIsNEZBQTRGO0FBQzVGLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDO0FBRXZDLGdDQUFnQztBQUVoQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsUUFBa0QsRUFDbEQsY0FBb0MsRUFDcEMsNEJBQXlELEdBQUcsRUFBRSxDQUFDLEtBQUssRUFDcEUsc0JBQW1FO0lBRW5FLE1BQU0sSUFBSSxHQUF1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QUFLLENBQUMsQ0FBQztRQUN4QyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUN0RSxDQUFDLENBQUM7Z0JBQ0UsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDTixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUs7b0JBQ2IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLO2lCQUN0QjthQUNGO1lBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxLQUFjO0lBQ25DLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW50ZXJuYXRpb25hbGl6ZWRTdHJpbmcgfSBmcm9tICdAbXRuYS9jb3JlLWkxOG4tdHMnO1xuaW1wb3J0IHsgaXNOdWxsT3JVbmRlZmluZWQsIGlzUHJlc2VudCwgaXNUeXBlIH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5pbXBvcnQge1xuICBDSEVDS0JPWF9JVEVNX0lELFxuICBDaGVja2JveEl0ZW0sXG4gIENvbmRpdGlvbmFsSXRlbSxcbiAgRGF0ZVJhbmdlLFxuICBERUNJTUFMX0FOU1dFUl9JVEVNX0lELFxuICBEZWNpbWFsQW5zd2VySXRlbSxcbiAgRm9ybSBhcyBXZWJGb3JtLFxuICBGb3JtSXRlbSxcbiAgRm9ybUl0ZW1Hcm91cCxcbiAgRm9ybUl0ZW1JbXBsLFxuICBJMThOX1BBUkFHUkFQSF9BTlNXRVJfSVRFTV9JRCxcbiAgSTE4Tl9TSE9SVF9BTlNXRVJfSVRFTV9JRCxcbiAgSW50ZXJuYXRpb25hbGl6ZWRQYXJhZ3JhcGhBbnN3ZXJJdGVtLFxuICBJbnRlcm5hdGlvbmFsaXplZFNob3J0QW5zd2VySXRlbSxcbiAgaXNGb3JtLFxuICBpc0Zvcm1JdGVtR3JvdXBJbXBsLFxuICBpc09mZnNldERhdGVSYW5nZUl0ZW0sXG4gIGlzUmVwZWF0YWJsZUl0ZW0sXG4gIGlzU2VjdGlvbixcbiAgaXNUYWJsZUl0ZW0sXG4gIGlzV2hvbGVOdW1iZXJJdGVtLFxuICBpc1llYXJRdWFydGVyUmFuZ2VJdGVtLFxuICBPcHRpb24sXG4gIE9wdGlvbkdyb3VwSXRlbUltcGwsXG4gIFBBUkFHUkFQSF9BTlNXRVJfSVRFTV9JRCxcbiAgUGFyYWdyYXBoQW5zd2VySXRlbSxcbiAgUmVwZWF0YWJsZUl0ZW0sXG4gIFNIT1JUX0FOU1dFUl9JVEVNX0lELFxuICBTaG9ydEFuc3dlckl0ZW0sXG4gIFRhYmxlSXRlbSxcbiAgVGFibGVSb3dJdGVtLFxuICBWYWx1ZUl0ZW0sXG4gIFdIT0xFX05VTUJFUl9BTlNXRVJfSVRFTV9JRCxcbiAgV2hvbGVOdW1iZXJBbnN3ZXJJdGVtLFxuICBZZWFyUXVhcnRlcixcbn0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgTXRuYVdmTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyB2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdG9ycyc7XG5cbi8qKiBUeXBlcyBvZiBWYWxpZGF0b3JzIHRoYXQgY2FuIGJlIHNldCBvbiBhIEZvcm1Db250cm9sICovXG5leHBvcnQgdHlwZSBWYWxpZGF0b3JUeXBlID0gJ3JlcXVpcmVkJyB8ICdyZXF1aXJlZFRydWUnIHwgJ2VtYWlsJztcbmV4cG9ydCB0eXBlIFZhbGlkYXRvcldpdGhOdW1iZXJUeXBlID0gJ21pbkxlbmd0aCcgfCAnbWF4TGVuZ3RoJyB8ICdtaW4nIHwgJ21heCc7XG5cbi8qKiBSZWdFeCB0byB2YWxpZGF0ZSBudW1iZXIgaXRlbXMgY29udGFpbiBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGRlY2ltYWxzICovXG5jb25zdCBudW1Pbmx5V2l0aG91dENvbW1hID0gL14tP1xcZCsoXFwuXFxkKik/JC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgbnVtYmVyIGl0ZW1zIGNvbnRhaW4gb25seSBuZWdhdGl2ZSwgZGlnaXRzLCBvciBkZWNpbWFscyBpbiBjb21tYSBmb3JtYXQgKi9cbmNvbnN0IG51bU9ubHlXaXRoQ29tbWEgPSAvXi0/XFxkezEsM30oLFxcZHszfSkqKFxcLlxcZCopPyQvO1xuLyoqIFJlZ0V4IHRvIHZhbGlkYXRlICdwb3NpdGl2ZSBvbmx5JyBpdGVtIGNvbmFpbnMgbm9uLW5lZ2F0aXZlIGNoYXJhY3RlcnMgKi9cbmNvbnN0IHBvc09ubHkgPSAvXlteLV0qJC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgJ3dob2xlIG51bWJlcicgaXRlbSBjb250YWlucyBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGNvbW1hIGZvcm1hdCAqL1xuY29uc3Qgd2hvbGVOdW1iZXIgPSAvXi0/XFxkKygsXFxkezN9KSokLztcblxuLy8jcmVnaW9uIEZvcm1Db250cm9sIEdlbmVyYXRpb25cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBuZXcgRm9ybUdyb3VwIHdpdGggRm9ybUNvbnRyb2xzICYgcG9zc2libGUgbmVzdGVkIEZvcm1Hcm91cHNcbiAqIEBwYXJhbSBmb3JtSXRlbSBXZWJGb3JtLCBTZWN0aW9uLCBHcm91cCwgb3IgUmVwZWF0YWJsZUl0ZW0gdXNlZCB0byBjcmVhdGUgYSBGb3JtR3JvdXBcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIGJvb2xlYW4gZnVuY3Rpb24gZm9yIGFueSBjdXN0b20gRm9ybUl0ZW1zXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZnVuY3Rpb24gZm9yIGFueSBjdXN0b20gRm9ybUl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGb3JtSXRlbXMoXG4gIGZvcm1JdGVtOiBXZWJGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBGb3JtR3JvdXAge1xuICBjb25zdCBmb3JtOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGZvcm1JdGVtLml0ZW1zKSB7XG4gICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gICAgICBpdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPixcbiAgICAgIG1hbmFnZXJTZXJ2aWNlLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3JcbiAgICApO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICBmb3JtW2l0ZW0uaW5zdGFuY2VJZF0gPSBjb250cm9sO1xuICAgIH1cbiAgfVxuICBjb25zdCByZXF1aXJlZCA9IGlzRm9ybShmb3JtSXRlbSkgPyB0cnVlIDogZm9ybUl0ZW0ucmVxdWlyZWQ7XG4gIGNvbnN0IGdyb3VwID0gcmVxdWlyZWQgPyBuZXcgRm9ybUdyb3VwKGZvcm0sIFZhbGlkYXRvcnMucmVxdWlyZWQpIDogbmV3IEZvcm1Hcm91cChmb3JtKTtcbiAgaWYgKCdkaXNhYmxlZCcgaW4gZm9ybUl0ZW0gJiYgZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB0YWlsb3JlZCBGb3JtQ29udHJvbCB3aXRoIHZhbGlkYXRvcnMgZm9yIGEgRm9ybUl0ZW1cbiAqIEBwYXJhbSBmb3JtSXRlbSBUaGUgRm9ybUl0ZW0gcmVxdWVzdGluZyBhIHRhaWxvcmVkIEZvcm1Db250cm9sXG4gKiBAaW50ZXJuYWwgQ3JlYXRpbmcgdGhlIGZvcm0gY29udHJvbCBhbmQgdGhlbiBjYWxsaW5nIHNldFZhbGlkYXRvcnMgZm9yY2UgYSB2YWxpZGF0aW9uIHBhc3MsXG4gKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTk2MjIjaXNzdWVjb21tZW50LTM0MTU0Nzg4NFxuICogQmV0dGVyIHRvIGdhdGhlciB0aGUgdmFsaWRhdG9ycyBhbmQgcHV0IHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBmb3JtIGNvbnRyb2wuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbTogRm9ybUl0ZW1JbXBsPHVua25vd24+LCBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UpOiBBYnN0cmFjdENvbnRyb2wge1xuICBjb25zdCB2YWxpZGF0b3JzID0gbmV3IEFycmF5PFZhbGlkYXRvckZuPih2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yKGZvcm1JdGVtLmluc3RhbmNlSWQsIG1hbmFnZXJTZXJ2aWNlKSk7XG4gIGlmIChmb3JtSXRlbS5yZXF1aXJlZCkge1xuICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfVxuICBzd2l0Y2ggKGZvcm1JdGVtLml0ZW1JZCkge1xuICAgIGNhc2UgQ0hFQ0tCT1hfSVRFTV9JRDpcbiAgICAgIGNvbnN0IGNoZWNrYm94SXRlbSA9IGZvcm1JdGVtIGFzIENoZWNrYm94SXRlbTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2hlY2tib3hJdGVtLnZhbHVlIHx8IFtdO1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKG51bUNoZWNrYm94ZXNWYWxpZGF0b3IoJ01JTicsIGNoZWNrYm94SXRlbS5taW5TZWxlY3Rpb25zKSwgbnVtQ2hlY2tib3hlc1ZhbGlkYXRvcignTUFYJywgY2hlY2tib3hJdGVtLm1heFNlbGVjdGlvbnMpKTtcbiAgICAgIGNvbnN0IGFyciA9IG5ldyBGb3JtQXJyYXkoXG4gICAgICAgIGNoZWNrYm94SXRlbS5vcHRpb25zLm1hcChcbiAgICAgICAgICAobykgPT5cbiAgICAgICAgICAgIG5ldyBGb3JtQ29udHJvbCh7XG4gICAgICAgICAgICAgIHZhbHVlOiBvLnNlbGVjdGVkIHx8IHZhbHVlLnNvbWUoKHYpID0+IHYgPT09IG8ub3B0aW9uLmlkKSxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNoZWNrYm94SXRlbS5kaXNhYmxlZCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgY2FzZSBERUNJTUFMX0FOU1dFUl9JVEVNX0lEOlxuICAgIGNhc2UgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX0lEOlxuICAgICAgY29uc3QgaXRlbSA9IGZvcm1JdGVtIGFzIERlY2ltYWxBbnN3ZXJJdGVtIHwgV2hvbGVOdW1iZXJBbnN3ZXJJdGVtO1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKG51bWVyaWNhbFZhbHVlQ2hlY2soKSk7XG4gICAgICBpZiAoaXNXaG9sZU51bWJlckl0ZW0oaXRlbSkpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHdob2xlTnVtYmVyUGF0dGVybigpKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLnBvc2l0aXZlT25seSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2gocG9zaXRpdmVOdW1iZXJQYXR0ZXJuKCkpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVtLm1pblZhbHVlKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2gobnVtVmFsdWVMaW1pdCgnbWluJywgaXRlbS5taW5WYWx1ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVtLm1heFZhbHVlKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2gobnVtVmFsdWVMaW1pdCgnbWF4JywgaXRlbS5tYXhWYWx1ZSkpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBQQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBTSE9SVF9BTlNXRVJfSVRFTV9JRDpcbiAgICAgIGNvbnN0IHNob3J0QW5zd2VySXRlbSA9IGZvcm1JdGVtIGFzIFNob3J0QW5zd2VySXRlbSB8IFBhcmFncmFwaEFuc3dlckl0ZW07XG4gICAgICB2YWxpZGF0b3JzLnB1c2goLi4uZ2V0TnVtZXJpY1ZhbGlkYXRvcignbWluTGVuZ3RoJywgc2hvcnRBbnN3ZXJJdGVtLm1pbkNoYXJDb3VudCkpO1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKC4uLmdldE51bWVyaWNWYWxpZGF0b3IoJ21heExlbmd0aCcsIHNob3J0QW5zd2VySXRlbS5tYXhDaGFyQ291bnQpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgSTE4Tl9QQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBJMThOX1NIT1JUX0FOU1dFUl9JVEVNX0lEOlxuICAgICAgY29uc3QgaTE4bkl0ZW0gPSBmb3JtSXRlbSBhcyBJbnRlcm5hdGlvbmFsaXplZFBhcmFncmFwaEFuc3dlckl0ZW0gfCBJbnRlcm5hdGlvbmFsaXplZFNob3J0QW5zd2VySXRlbTtcbiAgICAgIGNvbnN0IGdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSwgVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpKTtcbiAgICAgIGZvciAoY29uc3QgbGFuZ3VhZ2Ugb2YgaTE4bkl0ZW0ubGFuZ3VhZ2VUYWdzKSB7XG4gICAgICAgIC8vIEZJWE1FIGlmIHRoZXJlIGlzIG5vdGhpZ24gdGhlcmUgaW4gdGhlIHZhbHVlIHNob3VsZCBJIHNldCBhIG5ldyBpbnRlcm5hdGlvbmFsaXplZCBzdHJpbmc/XG4gICAgICAgIGdyb3VwLmNvbnRyb2xzW2xhbmd1YWdlXSA9IG5ldyBGb3JtQ29udHJvbChmb3JtSXRlbS52YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoaTE4bkl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGZvcm1JdGVtLnZhbHVlLCBkaXNhYmxlZDogISFmb3JtSXRlbS5kaXNhYmxlZCB9LCBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBjb250cm9scyBmb3IgYW55IGZvcm0gaXRlbXMgbmVzdGVkIGluc2lkZSBhIHBhcmVudCBpdGVtcyBvcHRpb25zXG4gKiBAcGFyYW0gZm9ybUl0ZW0gVGhlIEZvcm1JdGVtIHdpdGggYW4gJ29wdGlvbnMnIHByb3BlcnR5XG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBjb25kaXRpb25hbCBmdW5jdGlvbiBmcm9tIHBhcmVudCAnc2VyaWFsaXplRm9ybUl0ZW1zJyBmdW5jdGlvblxuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgRm9ybUNvbnRyb2wgZ2VuZXJhdG9yIGZyb20gcGFyZW50ICdzZXJpYWxpemVGb3JtSXRlbXMnIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVOZXN0ZWRPcHRpb25Gb3JtSXRlbXMoXG4gIGZvcm1JdGVtOiBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3I/OiAoaXRlbTogRm9ybUl0ZW0pID0+IEFic3RyYWN0Q29udHJvbCB8IG51bGxcbik6IEZvcm1Hcm91cCB7XG4gIGNvbnN0IGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG4gIGZvciAoY29uc3QgaWQgaW4gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCwgaWQpKSB7XG4gICAgICBjb25zdCBzdWJJdGVtID0gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcFtpZF0gYXMgRm9ybUl0ZW1JbXBsPHVua25vd24+O1xuICAgICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2Uoc3ViSXRlbSwgbWFuYWdlclNlcnZpY2UsIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpO1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29udHJvbHNbc3ViSXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29udHJvbHNbZm9ybUl0ZW0uaW5zdGFuY2VJZF0gPSBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UpO1xuICBjb25zdCBncm91cCA9IGZvcm1JdGVtLnJlcXVpcmVkID8gbmV3IEZvcm1Hcm91cChjb250cm9scywgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgRm9ybUdyb3VwKGNvbnRyb2xzKTtcbiAgaWYgKGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBCdWlsZCBGb3JtQ29udHJvbHMgZm9yIGEgVGFibGVJdGVtXG4gKiBAcGFyYW0gaXRlbSBUYWJsZUl0ZW0gcmVxdWlyaW5nIEZvcm1Db250cm9sc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwgZnVuY3Rpb24gZm9yIGN1c3RvbSBhbnkgRm9ybUl0ZW1zXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZm9yIGN1c3RvbSBhbnkgRm9ybUl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVUYWJsZUl0ZW0oXG4gIGl0ZW06IFRhYmxlSXRlbSxcbiAgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlLFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tQ29udHJvbEdlbmVyYXRvcj86IChpdGVtOiBGb3JtSXRlbSkgPT4gQWJzdHJhY3RDb250cm9sIHwgbnVsbFxuKTogRm9ybUdyb3VwIHtcbiAgY29uc3QgdGFibGVDb250cm9sOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG4gIGZvciAoY29uc3Qgcm93IG9mIGl0ZW0udGFibGVSb3dzKSB7XG4gICAgZm9yIChjb25zdCByb3dJdGVtIG9mIHJvdy5pdGVtcy5maWx0ZXIoKGkpID0+ICEhaSkpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBkZXRlcm1pbmVTZXJpYWxpemVGdW5jdGlvblRvVXNlKFxuICAgICAgICByb3dJdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPixcbiAgICAgICAgbWFuYWdlclNlcnZpY2UsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICAgIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3JcbiAgICAgICk7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICB0YWJsZUNvbnRyb2xbcm93SXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGdyb3VwID0gaXRlbS5yZXF1aXJlZCA/IG5ldyBGb3JtR3JvdXAodGFibGVDb250cm9sLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSA6IG5ldyBGb3JtR3JvdXAodGFibGVDb250cm9sKTtcbiAgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIGZvciB0aGUgY2FsbGVyIHRvIHVzZS5cbiAqXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gcmVxdWlyaW5nIHNlcmlhbGl6YXRpb25cbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIENvbmRpdGlvbmFsIGZvciBhIGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgU2VyaWFsaXplciBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gIGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8dW5rbm93bj4gfCBXZWJGb3JtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcbiAgaWYgKGlzRm9ybShmb3JtSXRlbSkgfHwgaXNSZXBlYXRhYmxlSXRlbShmb3JtSXRlbSkgfHwgaXNTZWN0aW9uKGZvcm1JdGVtKSB8fCBpc0Zvcm1JdGVtR3JvdXBJbXBsKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBzZXJpYWxpemVGb3JtSXRlbXMoZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlLCBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLCBjdXN0b21Db250cm9sR2VuZXJhdG9yKTtcbiAgfSBlbHNlIGlmIChpc1RhYmxlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplVGFibGVJdGVtKGZvcm1JdGVtLCBtYW5hZ2VyU2VydmljZSwgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCwgY3VzdG9tQ29udHJvbEdlbmVyYXRvcik7XG4gIH0gZWxzZSBpZiAoY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbChmb3JtSXRlbSkgJiYgISFjdXN0b21Db250cm9sR2VuZXJhdG9yKSB7XG4gICAgcmV0dXJuIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IoZm9ybUl0ZW0pO1xuICB9IGVsc2UgaWYgKGhhc05lc3RlZEZvcm1JdGVtcyhmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplTmVzdGVkT3B0aW9uRm9ybUl0ZW1zKGZvcm1JdGVtIGFzIE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PiwgbWFuYWdlclNlcnZpY2UpO1xuICB9IGVsc2UgaWYgKGlzT2Zmc2V0RGF0ZVJhbmdlSXRlbShmb3JtSXRlbSkgfHwgaXNZZWFyUXVhcnRlclJhbmdlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplUmFuZ2VJdGVtKGZvcm1JdGVtKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc2VyaWFsaXplRm9ybUl0ZW0oZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIEZvcm1Hcm91cCBmb3IgYSByYW5nZSBpdGVtXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gZm9yIGEgRGF0ZVJhbmdlIG9mIERhdGUgfCBZZWFyUXVhcnRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplUmFuZ2VJdGVtKGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8RGF0ZVJhbmdlPERhdGUgfCBZZWFyUXVhcnRlcj4+KTogRm9ybUdyb3VwIHtcbiAgY29uc3QgdmFsaWRhdG9ycyA9IG5ldyBBcnJheTxWYWxpZGF0b3JGbj4oKTtcbiAgaWYgKGZvcm1JdGVtLnJlcXVpcmVkKSB7XG4gICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICB9XG4gIGNvbnN0IGdyb3VwID0gbmV3IEZvcm1Hcm91cChcbiAgICB7XG4gICAgICBzdGFydDogbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlID8gZm9ybUl0ZW0udmFsdWUuc3RhcnQgOiBudWxsKSxcbiAgICAgIGVuZDogbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlID8gZm9ybUl0ZW0udmFsdWUuZW5kIDogbnVsbCksXG4gICAgfSxcbiAgICBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycylcbiAgKTtcbiAgaWYgKGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgVmFsaWRhdG9yIHdpdGggYSBudW1lcmljIHZhbHVlIGZvciBhIEZvcm1JdGVtO1xuICogUmV0dXJucyBhcyBhbiBhcnJheSBvZiBsZW5ndGggMSBvciAwXG4gKiBAcGFyYW0gcGFyYW0wIGB0eXBlYCAtIHR5cGUgb2YgdmFsaWRhdG9yLCBlLmcuICdtaW5MZW5ndGgnO1xuICogYHZhbHVlYCAtIHBhcmFtZXRlciBmb3IgdGhlIHZhbGlkYXRvciwgZS5nLiAnbWluTGVuZ3RoKHZhbHVlKSdcbiAqL1xuZnVuY3Rpb24gZ2V0TnVtZXJpY1ZhbGlkYXRvcih0eXBlOiBWYWxpZGF0b3JXaXRoTnVtYmVyVHlwZSwgdmFsdWU6IG51bWJlcik6IFZhbGlkYXRvckZuW10ge1xuICByZXR1cm4gIWlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IFtWYWxpZGF0b3JzW3R5cGVdKHZhbHVlKV0gOiBbXTtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiBNdG5hRm9ybSB2YWx1ZSBpbnNlcnRpb25cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIEZvcm1pdGVtcyB3aXRoIG5ldyB2YWx1ZXMgaW5zZXJ0ZWQuXG4gKlxuICogQHBhcmFtIHNlY3Rpb24gVGhlIG9sZCBGb3JtIG9yIEZvcm0gU2VjdGlvblxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSBKU09OIHZhbHVlc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgYm9vbGVhbiBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbXNcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIgZnVuY3Rpb24gdG8gaGFuZGxlIGN1c3RvbSBGb3JtSXRlbXNcbiAqIEByZXR1cm5zIG5ldyBGb3JtSXRlbSBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsXG4pOiBBcnJheTxGb3JtSXRlbT4ge1xuICByZXR1cm4gc2VjdGlvbi5pdGVtc1xuICAgIC5tYXAoKGl0ZW0pID0+XG4gICAgICBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICAgICAgICBpdGVtLFxuICAgICAgICBuZ0Zvcm1WYWx1ZVtpdGVtLmluc3RhbmNlSWRdLFxuICAgICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIsXG4gICAgICAgIHNlY3Rpb25cbiAgICAgIClcbiAgICApXG4gICAgLmZpbHRlcihpc1ByZXNlbnQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjb3BpZWQgVGFibGVJdGVtLCB3aXRoIGVhY2ggcm93IEZvcm1JdGVtIGhhdmluZyBuZXcgaW5zZXJ0ZWQgdmFsdWVzLlxuICogQHBhcmFtIGl0ZW0gVGFibGVJdGVtIHRvIGluc2VydCB2YWx1ZXNcbiAqIEBwYXJhbSBuZ0Zvcm1WYWx1ZSBuZ0Zvcm0gdmFsdWUgb2YgdGhlIFRhYmxlSXRlbVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgYm9vbGVhbiBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQnVpbGRlciBmdW5jdGlvbiB0byBoYW5kbGUgY3VzdG9tIEZvcm1JdGVtIHZhbHVlIGluc2VydGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0VGFibGVJdGVtVmFsdWVzKFxuICBpdGVtOiBUYWJsZUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsXG4pOiBUYWJsZUl0ZW0ge1xuICBjb25zdCB0YWJsZVJvd3MgPSBpdGVtLnRhYmxlUm93cy5tYXAoKHJvdzogVGFibGVSb3dJdGVtKSA9PiAoe1xuICAgIC4uLnJvdyxcbiAgICBpdGVtczogcm93Lml0ZW1zXG4gICAgICAuZmlsdGVyKGlzUHJlc2VudClcbiAgICAgIC5tYXAoKGZvcm1JdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICAgICAgICAgIGZvcm1JdGVtLFxuICAgICAgICAgIG5nRm9ybVZhbHVlW2Zvcm1JdGVtLmluc3RhbmNlSWRdLFxuICAgICAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGlzUHJlc2VudCksXG4gIH0pKTtcbiAgcmV0dXJuIHsgLi4uaXRlbSwgdGFibGVSb3dzLCBkaXNhYmxlZDogX2lzRGlzYWJsZWQoaXRlbSwgZGlzYWJsZWRTdGF0ZSkgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IEZvcm1JdGVtIGFmdGVyIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gcmVxdWlyaW5nIHZhbHVlIGluc2VydGlvblxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwgZm9yIGEgY3VzdG9tIEZvcm1JdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1CdWlsZGVyIFZhbHVlIGluc2VydGlvbiBmdW5jdGlvbiBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqIEBwYXJhbSBkaXNhYmxlZFN0YXRlIE1hcCBvZiBpdGVtcycgZGlzYWJsZWQgc3RhdGVcbiAqIEBwYXJhbSBwYXJlbnQgUGFyZW50IG9mIHRoZSBGb3JtSXRlbSwgdXNlZCB0byBwYXNzIHRvIHRoZSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lSW5zZXJ0RnVuY3Rpb25Ub1VzZShcbiAgZm9ybUl0ZW06IEZvcm1JdGVtLFxuICBuZ0Zvcm1WYWx1ZTogdW5rbm93bixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsLFxuICBwYXJlbnQ/OiBXZWJGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtXG4pOiBGb3JtSXRlbSB8IG51bGwge1xuICBpZiAoaXNTZWN0aW9uKGZvcm1JdGVtKSB8fCBpc0Zvcm1JdGVtR3JvdXBJbXBsKGZvcm1JdGVtKSB8fCBpc1JlcGVhdGFibGVJdGVtKGZvcm1JdGVtKSkge1xuICAgIGNvbnN0IGl0ZW1zID0gaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gICAgICBmb3JtSXRlbSxcbiAgICAgIG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICApO1xuICAgIHJldHVybiB7IC4uLmZvcm1JdGVtLCBpdGVtcywgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtLCBkaXNhYmxlZFN0YXRlKSB9IGFzIEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbTtcbiAgfSBlbHNlIGlmIChpc1RhYmxlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gaW5zZXJ0VGFibGVJdGVtVmFsdWVzKFxuICAgICAgZm9ybUl0ZW0sXG4gICAgICBuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgKTtcbiAgfSBlbHNlIGlmIChjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsKGZvcm1JdGVtKSAmJiAhIWN1c3RvbUZvcm1JdGVtQnVpbGRlcikge1xuICAgIHJldHVybiBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIocGFyZW50LCBmb3JtSXRlbSwgbmdGb3JtVmFsdWUsIGRpc2FibGVkU3RhdGUpO1xuICB9IGVsc2UgaWYgKGhhc05lc3RlZEZvcm1JdGVtcyhmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gaW5zZXJ0TmVzdGVkRm9ybUl0ZW1WYWx1ZXMoXG4gICAgICBmb3JtSXRlbSBhcyBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gICAgICBuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc09mZnNldERhdGVSYW5nZUl0ZW0oZm9ybUl0ZW0pIHx8IGlzWWVhclF1YXJ0ZXJSYW5nZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpc1R5cGU8eyBzdGFydDogWWVhclF1YXJ0ZXIgfCBEYXRlIH0+KG5nRm9ybVZhbHVlLCAnc3RhcnQnKSA/IG5nRm9ybVZhbHVlLnN0YXJ0IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVuZCA9IGlzVHlwZTx7IGVuZDogWWVhclF1YXJ0ZXIgfCBEYXRlIH0+KG5nRm9ybVZhbHVlLCAnZW5kJykgPyBuZ0Zvcm1WYWx1ZS5lbmQgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgLi4uZm9ybUl0ZW0sIHZhbHVlOiB7IHN0YXJ0LCBlbmQgfSwgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtLCBkaXNhYmxlZFN0YXRlKSB9IGFzIEZvcm1JdGVtSW1wbDxcbiAgICAgIERhdGVSYW5nZTxEYXRlIHwgWWVhclF1YXJ0ZXI+XG4gICAgPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZm9ybUl0ZW0sXG4gICAgICB2YWx1ZTogZmluZEl0ZW1WYWx1ZShmb3JtSXRlbSwgbmdGb3JtVmFsdWUpLFxuICAgICAgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPiwgZGlzYWJsZWRTdGF0ZSksXG4gICAgfSBhcyBGb3JtSXRlbTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgbmdGb3JtIHZhbHVlIGZvciBhIEZvcm1JdGVtLlxuICpcbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSByZXF1aXJpbmcgYSB2YWx1ZVxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZVxuICovXG5mdW5jdGlvbiBmaW5kSXRlbVZhbHVlKGZvcm1JdGVtOiBGb3JtSXRlbSwgbmdGb3JtVmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgY29uc3QgaXRlbUlkID0gZm9ybUl0ZW0uaXRlbUlkLnNwbGl0KCcuJykucG9wKCk7XG4gIHN3aXRjaCAoaXRlbUlkPy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgLy8gRklYTUU6IGNhbiB3ZSBwdXQgdGhlc2UgSURzIGluIGNvbnN0YW50cyBhbmQgcmVmZXIgdG8gdGhlbSBpbnN0ZWFkP1xuICAgIGNhc2UgJ0RBVEVJVEVNJzpcbiAgICAgIHJldHVybiAhIW5nRm9ybVZhbHVlICYmIHR5cGVvZiBuZ0Zvcm1WYWx1ZSAhPT0gJ3N0cmluZycgPyAobmdGb3JtVmFsdWUgYXMgTW9tZW50KS50b0lTT1N0cmluZygpIDogKG5nRm9ybVZhbHVlIGFzIHN0cmluZyk7XG4gICAgY2FzZSAnQ0hFQ0tCT1hJVEVNJzpcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQobmdGb3JtVmFsdWUpICYmIEFycmF5LmlzQXJyYXkobmdGb3JtVmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IG5nRm9ybVZhbHVlIGFzIEFycmF5PGJvb2xlYW4+O1xuICAgICAgICByZXR1cm4gKGZvcm1JdGVtIGFzIENoZWNrYm94SXRlbSkub3B0aW9ucy5maWx0ZXIoKG8sIGluZGV4KSA9PiAhIWFycltpbmRleF0pLm1hcCgobykgPT4gby5vcHRpb24uaWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIGNhc2UgJ0lOVEVSTkFUSU9OQUxJWkVEUEFSQUdSQVBIQU5TV0VSSVRFTSc6XG4gICAgY2FzZSAnSU5URVJOQVRJT05BTElaRURTSE9SVEFOU1dFUklURU0nOlxuICAgICAgY29uc3QgbGFuZ3VhZ2VzID1cbiAgICAgICAgaXRlbUlkPy50b1VwcGVyQ2FzZSgpID09PSAnSU5URVJOQVRJT05BTElaRURQQVJBR1JBUEhBTlNXRVJJVEVNJ1xuICAgICAgICAgID8gKGZvcm1JdGVtIGFzIEludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VySXRlbSkubGFuZ3VhZ2VUYWdzXG4gICAgICAgICAgOiAoZm9ybUl0ZW0gYXMgSW50ZXJuYXRpb25hbGl6ZWRTaG9ydEFuc3dlckl0ZW0pLmxhbmd1YWdlVGFncztcblxuICAgICAgY29uc3QgdmFsdWUgPSBsYW5ndWFnZXMucmVkdWNlKCh2YWx1ZTogSW50ZXJuYXRpb25hbGl6ZWRTdHJpbmdbXSwgbGFuZ3VhZ2UpID0+IHtcbiAgICAgICAgaWYgKG5nRm9ybVZhbHVlICYmIHR5cGVvZiBuZ0Zvcm1WYWx1ZSA9PT0gJ29iamVjdCcgJiYgbGFuZ3VhZ2UgaW4gbmdGb3JtVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IChuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbGFuZ3VhZ2VdO1xuICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgdmFsdWUucHVzaCh7IHZhbHVlOiBpbnB1dCBhcyBzdHJpbmcsIGZhY2V0SWQ6IGxhbmd1YWdlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LCBbXSk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZ0Zvcm1WYWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnROZXN0ZWRGb3JtSXRlbVZhbHVlcyhcbiAgZm9ybUl0ZW06IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IEZvcm1JdGVtIHtcbiAgY29uc3Qgb3B0aW9uSXRlbU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBpZCBpbiBmb3JtSXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmb3JtSXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgIGNvbnN0IHN1Ykl0ZW0gPSBmb3JtSXRlbS5vcHRpb25JdGVtTWFwW2lkXTtcbiAgICAgIG9wdGlvbkl0ZW1NYXBbaWRdID0gZGV0ZXJtaW5lSW5zZXJ0RnVuY3Rpb25Ub1VzZShcbiAgICAgICAgc3ViSXRlbSxcbiAgICAgICAgbmdGb3JtVmFsdWVbc3ViSXRlbS5pbnN0YW5jZUlkXSxcbiAgICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmZvcm1JdGVtLFxuICAgIG9wdGlvbkl0ZW1NYXAsXG4gICAgdmFsdWU6IGZpbmRJdGVtVmFsdWUoZm9ybUl0ZW0sIG5nRm9ybVZhbHVlW2Zvcm1JdGVtLmluc3RhbmNlSWRdKSxcbiAgICBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0sIGRpc2FibGVkU3RhdGUpLFxuICB9IGFzIE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+Pjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIEZvcm1JdGVtIGhhcyBhbiBPcHRpb25JdGVtTWFwIHdpdGggYXQgbGVhc3QgMSBpdGVtLCB3aGljaCByZXF1aXJlIHRoZWlyIG93biBGb3JtQ29udHJvbChzKVxuICogQHBhcmFtIGZvcm1JdGVtIEZvcm1JdGVtIHRvIGNoZWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRGb3JtSXRlbXMoZm9ybUl0ZW06IHVua25vd24pOiBmb3JtSXRlbSBpcyB7IG9wdGlvbkl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0ge1xuICByZXR1cm4gKFxuICAgIGlzVHlwZTx7XG4gICAgICBvcHRpb25JdGVtTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB9Pihmb3JtSXRlbSwgJ29wdGlvbkl0ZW1NYXAnKSAmJiBPYmplY3Qua2V5cyhmb3JtSXRlbS5vcHRpb25JdGVtTWFwKS5sZW5ndGggPiAwXG4gICk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gZm9yIHZhbGlkYXRpbmcgbWluL21heCBzZWxlY3Rpb25zIGxpbWl0c1xuICogQHBhcmFtIHR5cGVDaGVjayBXaGljaCBsaW1pdCB0byB2YWxpZGF0ZS4gJ01JTicgfCAnTUFYJ1xuICogQHBhcmFtIGxpbWl0IHVwcGVyIG9yIGxvd2VyIGxpbWl0IHRvIGNoZWNrIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gbnVtQ2hlY2tib3hlc1ZhbGlkYXRvcih0eXBlQ2hlY2s6ICdNSU4nIHwgJ01BWCcsIGxpbWl0ID0gMSk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICBsZXQgdG90YWxTZWxlY3RlZCA9IDA7XG4gICAgaWYgKGlzRm9ybUFycmF5KGNvbnRyb2wpKSB7XG4gICAgICB0b3RhbFNlbGVjdGVkID0gY29udHJvbC5jb250cm9scy5tYXAoKGMpID0+IGMudmFsdWUpLnJlZHVjZSgodG90YWwsIG5leHQpID0+IChuZXh0ID8gdG90YWwgKyBuZXh0IDogdG90YWwpLCAwKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGVDaGVjaykge1xuICAgICAgY2FzZSAnTUlOJzpcbiAgICAgICAgcmV0dXJuIHRvdGFsU2VsZWN0ZWQgPj0gbGltaXQgPyBudWxsIDogeyBtaW5TZWxlY3RlZDogYFNlbGVjdCBhdCBsZWFzdCAke2xpbWl0fWAgfTtcbiAgICAgIGNhc2UgJ01BWCc6XG4gICAgICAgIHJldHVybiB0b3RhbFNlbGVjdGVkIDw9IGxpbWl0ID8gbnVsbCA6IHsgbWF4U2VsZWN0ZWQ6IGBTZWxlY3Qgbm8gbW9yZSB0aGFuICR7bGltaXR9YCB9O1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNGb3JtQXJyYXkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogY29udHJvbCBpcyBGb3JtQXJyYXkge1xuICByZXR1cm4gaXNUeXBlPEZvcm1BcnJheT4oY29udHJvbCwgJ2NvbnRyb2xzJyk7XG59XG5cbmZ1bmN0aW9uIF9pc0Rpc2FibGVkKGl0ZW06IENvbmRpdGlvbmFsSXRlbSwgZGlzYWJsZWRTdGF0ZTogeyBbaWQ6IHN0cmluZ106IGJvb2xlYW4gfSk6IGJvb2xlYW4ge1xuICBjb25zdCBkaXNhYmxlZCA9IGRpc2FibGVkU3RhdGVbaXRlbS5pbnN0YW5jZUlkXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGRpc2FibGVkKSA/IGl0ZW0uZGlzYWJsZWQgOiBkaXNhYmxlZDtcbn1cblxuZnVuY3Rpb24gd2hvbGVOdW1iZXJQYXR0ZXJuKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzRW1wdHlTdHJpbmcoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB3aG9sZU51bWJlci50ZXN0KGNvbnRyb2wudmFsdWUpID8gbnVsbCA6IHsgd2hvbGVOdW1iZXI6IHRydWUgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbnVtZXJpY2FsVmFsdWVDaGVjaygpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChjb250cm9sLnZhbHVlKSB8fCBpc0VtcHR5U3RyaW5nKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bU9ubHlXaXRob3V0Q29tbWEudGVzdChjb250cm9sLnZhbHVlKSB8fCBudW1Pbmx5V2l0aENvbW1hLnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBub25EaWdpdDogdHJ1ZSB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBwb3NpdGl2ZU51bWJlclBhdHRlcm4oKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwb3NPbmx5LnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBwb3NpdGl2ZTogdHJ1ZSB9O1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgd29ya3MgYXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgYW5ndWxhciAnbWluJy8nbWF4JyBWYWxpZGF0b3JzLiBVc2luZyB0aGUgYnVpbHQtaW4gdmFsaWRhdG9yc1xuICogYXBwZWFycyB0byB0YWtlIHByZWNlZGVuY2Ugb3ZlciBjdXN0b20gdmFsaWRhdG9ycywgcmVnYXJkbGVzcyBvZiBvcmRlciBpbiB0aGUgYXJyYXkuIFVzaW5nIHRoaXMgZnVuY3Rpb25cbiAqIGVuc3VyZXMgdmFsaWRhdG9ycyBzZXQgYmVmb3JlIHRoaXMgb25lIG1haW50YWluIHByaW9yaXR5LiBGb3IgaW5zdGFuY2UsIHRoZSBpbnB1dCB2YWx1ZSBmYWlsaW5nIG51bWVyaWNhbCB2YWxpZGF0aW9uXG4gKiBpcyBtb3JlIGltcG9ydGFudCB0aGFuIHRoZSB2YWx1ZSBiZWluZyB3aXRoaW4gbWluLW1heCByYW5nZS5cbiAqL1xuZnVuY3Rpb24gbnVtVmFsdWVMaW1pdCh0eXBlOiAnbWluJyB8ICdtYXgnLCBsaW1pdDogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChjb250cm9sLnZhbHVlKTtcbiAgICByZXR1cm4gIWlzTmFOKHZhbHVlKSAmJiAodHlwZSA9PT0gJ21pbicgPyB2YWx1ZSA8IGxpbWl0IDogdmFsdWUgPiBsaW1pdClcbiAgICAgID8ge1xuICAgICAgICAgIFt0eXBlXToge1xuICAgICAgICAgICAgW3R5cGVdOiBsaW1pdCxcbiAgICAgICAgICAgIGFjdHVhbDogY29udHJvbC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHlTdHJpbmcodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXZhbHVlLmxlbmd0aDtcbn1cbiJdfQ==
@@ -0,0 +1,38 @@
1
+ import { isType } from '@mtna/core-ts';
2
+ import { findFormItem } from './find-form-item';
3
+ /**
4
+ * Update a {@link FormStep}'s `status`.
5
+ * The server side form validation errors will trump the provided `status`.
6
+ *
7
+ * @param instanceId the instanceId of the step to update, otherwise return the original step
8
+ * @param step the step to check
9
+ * @param status the new status to apply to the step
10
+ * @param form the containing form
11
+ * @returns an updated step with the correct status
12
+ */
13
+ export function updateStepStatus(instanceId, step, status, form) {
14
+ var _a;
15
+ if (instanceId !== step.instanceId) {
16
+ // These aren't the droids you're looking for.
17
+ // Return unmodified step.
18
+ return step;
19
+ }
20
+ // A server validation error will trump the provided status
21
+ if ((_a = form === null || form === void 0 ? void 0 : form.validationResult) === null || _a === void 0 ? void 0 : _a.formItemValidationResults.length) {
22
+ // Get the FormGroup that represents the step
23
+ const group = findFormItem(step.instanceId, form);
24
+ if (isType(group, 'items')) {
25
+ for (const error of form.validationResult.formItemValidationResults) {
26
+ const itemWithError = findFormItem(error.id, group);
27
+ // If the invalid item is within the step group,
28
+ // show an error state
29
+ if (itemWithError) {
30
+ return Object.assign(Object.assign({}, step), { status: 'ERROR' });
31
+ }
32
+ }
33
+ }
34
+ }
35
+ // There were no server side validation errors, just update the status
36
+ return Object.assign(Object.assign({}, step), { status });
37
+ }
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXN0ZXAtc3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy91cGRhdGUtc3RlcC1zdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUl2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsSUFBYyxFQUFFLE1BQW9CLEVBQUUsSUFBVzs7SUFDcEcsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNsQyw4Q0FBOEM7UUFDOUMsMEJBQTBCO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCwyREFBMkQ7SUFDM0QsSUFBSSxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxnQkFBZ0IsMENBQUUseUJBQXlCLENBQUMsTUFBTSxFQUFFO1FBQzVELDZDQUE2QztRQUM3QyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxJQUFJLE1BQU0sQ0FBZ0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ3pDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixFQUFFO2dCQUNuRSxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDcEQsZ0RBQWdEO2dCQUNoRCxzQkFBc0I7Z0JBQ3RCLElBQUksYUFBYSxFQUFFO29CQUNqQix1Q0FBWSxJQUFJLEtBQUUsTUFBTSxFQUFFLE9BQU8sSUFBRztpQkFDckM7YUFDRjtTQUNGO0tBQ0Y7SUFFRCxzRUFBc0U7SUFDdEUsdUNBQVksSUFBSSxLQUFFLE1BQU0sSUFBRztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2lyY2xlU3RhdHVzIH0gZnJvbSAnQG10bmEvY29yZS1hbmd1bGFyJztcbmltcG9ydCB7IGlzVHlwZSB9IGZyb20gJ0BtdG5hL2NvcmUtdHMnO1xuaW1wb3J0IHsgRm9ybSwgRm9ybUl0ZW1Hcm91cCB9IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcblxuaW1wb3J0IHsgRm9ybVN0ZXAgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgZmluZEZvcm1JdGVtIH0gZnJvbSAnLi9maW5kLWZvcm0taXRlbSc7XG5cbi8qKlxuICogVXBkYXRlIGEge0BsaW5rIEZvcm1TdGVwfSdzIGBzdGF0dXNgLlxuICogVGhlIHNlcnZlciBzaWRlIGZvcm0gdmFsaWRhdGlvbiBlcnJvcnMgd2lsbCB0cnVtcCB0aGUgcHJvdmlkZWQgYHN0YXR1c2AuXG4gKlxuICogQHBhcmFtIGluc3RhbmNlSWQgdGhlIGluc3RhbmNlSWQgb2YgdGhlIHN0ZXAgdG8gdXBkYXRlLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBvcmlnaW5hbCBzdGVwXG4gKiBAcGFyYW0gc3RlcCAgdGhlIHN0ZXAgdG8gY2hlY2tcbiAqIEBwYXJhbSBzdGF0dXMgdGhlIG5ldyBzdGF0dXMgdG8gYXBwbHkgdG8gdGhlIHN0ZXBcbiAqIEBwYXJhbSBmb3JtIHRoZSBjb250YWluaW5nIGZvcm1cbiAqIEByZXR1cm5zIGFuIHVwZGF0ZWQgc3RlcCB3aXRoIHRoZSBjb3JyZWN0IHN0YXR1c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RlcFN0YXR1cyhpbnN0YW5jZUlkOiBzdHJpbmcsIHN0ZXA6IEZvcm1TdGVwLCBzdGF0dXM6IENpcmNsZVN0YXR1cywgZm9ybT86IEZvcm0pOiBGb3JtU3RlcCB7XG4gIGlmIChpbnN0YW5jZUlkICE9PSBzdGVwLmluc3RhbmNlSWQpIHtcbiAgICAvLyBUaGVzZSBhcmVuJ3QgdGhlIGRyb2lkcyB5b3UncmUgbG9va2luZyBmb3IuXG4gICAgLy8gUmV0dXJuIHVubW9kaWZpZWQgc3RlcC5cbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuXG4gIC8vIEEgc2VydmVyIHZhbGlkYXRpb24gZXJyb3Igd2lsbCB0cnVtcCB0aGUgcHJvdmlkZWQgc3RhdHVzXG4gIGlmIChmb3JtPy52YWxpZGF0aW9uUmVzdWx0Py5mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzLmxlbmd0aCkge1xuICAgIC8vIEdldCB0aGUgRm9ybUdyb3VwIHRoYXQgcmVwcmVzZW50cyB0aGUgc3RlcFxuICAgIGNvbnN0IGdyb3VwID0gZmluZEZvcm1JdGVtKHN0ZXAuaW5zdGFuY2VJZCwgZm9ybSk7XG4gICAgaWYgKGlzVHlwZTxGb3JtSXRlbUdyb3VwPihncm91cCwgJ2l0ZW1zJykpIHtcbiAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZm9ybS52YWxpZGF0aW9uUmVzdWx0LmZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgY29uc3QgaXRlbVdpdGhFcnJvciA9IGZpbmRGb3JtSXRlbShlcnJvci5pZCwgZ3JvdXApO1xuICAgICAgICAvLyBJZiB0aGUgaW52YWxpZCBpdGVtIGlzIHdpdGhpbiB0aGUgc3RlcCBncm91cCxcbiAgICAgICAgLy8gc2hvdyBhbiBlcnJvciBzdGF0ZVxuICAgICAgICBpZiAoaXRlbVdpdGhFcnJvcikge1xuICAgICAgICAgIHJldHVybiB7IC4uLnN0ZXAsIHN0YXR1czogJ0VSUk9SJyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlcmUgd2VyZSBubyBzZXJ2ZXIgc2lkZSB2YWxpZGF0aW9uIGVycm9ycywganVzdCB1cGRhdGUgdGhlIHN0YXR1c1xuICByZXR1cm4geyAuLi5zdGVwLCBzdGF0dXMgfTtcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './instant-validation-result-error-state-matcher';
2
+ export * from './validation-result-validator';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvdmFsaWRhdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2luc3RhbnQtdmFsaWRhdGlvbi1yZXN1bHQtZXJyb3Itc3RhdGUtbWF0Y2hlcic7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRpb24tcmVzdWx0LXZhbGlkYXRvcic7XG4iXX0=
@@ -0,0 +1,23 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { ErrorStateMatcher } from '@angular/material/core';
3
+ import { isKey } from '@mtna/core-ts';
4
+ import { MTNA_WF_FORM_ITEM_VALIDATION_RESULT_ERROR_NAME } from './validation-result-validator';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Custom {@link ErrorStateMatcher} that will immediately show {@link FormValidationResult} errors.
8
+ * Theses errors are calcualted on the server and need to always show.
9
+ * Regular form validation will use the default error matcher strategy.
10
+ */
11
+ export class MtnaWfInstantValidationResultErrorStateMatcher extends ErrorStateMatcher {
12
+ isErrorState(control, form) {
13
+ const hasValidationResultError = isKey(control === null || control === void 0 ? void 0 : control.errors, MTNA_WF_FORM_ITEM_VALIDATION_RESULT_ERROR_NAME);
14
+ return hasValidationResultError || super.isErrorState(control, form);
15
+ }
16
+ }
17
+ MtnaWfInstantValidationResultErrorStateMatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfInstantValidationResultErrorStateMatcher, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
18
+ MtnaWfInstantValidationResultErrorStateMatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfInstantValidationResultErrorStateMatcher, providedIn: 'root' });
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfInstantValidationResultErrorStateMatcher, decorators: [{
20
+ type: Injectable,
21
+ args: [{ providedIn: 'root' }]
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFudC12YWxpZGF0aW9uLXJlc3VsdC1lcnJvci1zdGF0ZS1tYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3ZhbGlkYXRvcnMvaW5zdGFudC12YWxpZGF0aW9uLXJlc3VsdC1lcnJvci1zdGF0ZS1tYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0QyxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFFL0Y7Ozs7R0FJRztBQUVILE1BQU0sT0FBTyw4Q0FBK0MsU0FBUSxpQkFBaUI7SUFDMUUsWUFBWSxDQUFDLE9BQTJCLEVBQUUsSUFBd0M7UUFDekYsTUFBTSx3QkFBd0IsR0FBRyxLQUFLLENBQUMsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE1BQU0sRUFBRSw4Q0FBOEMsQ0FBQyxDQUFDO1FBQ3hHLE9BQU8sd0JBQXdCLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkUsQ0FBQzs7NElBSlUsOENBQThDO2dKQUE5Qyw4Q0FBOEMsY0FEakMsTUFBTTs0RkFDbkIsOENBQThDO2tCQUQxRCxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbmltcG9ydCB7IGlzS2V5IH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5cbmltcG9ydCB7IE1UTkFfV0ZfRk9STV9JVEVNX1ZBTElEQVRJT05fUkVTVUxUX0VSUk9SX05BTUUgfSBmcm9tICcuL3ZhbGlkYXRpb24tcmVzdWx0LXZhbGlkYXRvcic7XG5cbi8qKlxuICogQ3VzdG9tIHtAbGluayBFcnJvclN0YXRlTWF0Y2hlcn0gdGhhdCB3aWxsIGltbWVkaWF0ZWx5IHNob3cge0BsaW5rIEZvcm1WYWxpZGF0aW9uUmVzdWx0fSBlcnJvcnMuXG4gKiBUaGVzZXMgZXJyb3JzIGFyZSBjYWxjdWFsdGVkIG9uIHRoZSBzZXJ2ZXIgYW5kIG5lZWQgdG8gYWx3YXlzIHNob3cuXG4gKiBSZWd1bGFyIGZvcm0gdmFsaWRhdGlvbiB3aWxsIHVzZSB0aGUgZGVmYXVsdCBlcnJvciBtYXRjaGVyIHN0cmF0ZWd5LlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE10bmFXZkluc3RhbnRWYWxpZGF0aW9uUmVzdWx0RXJyb3JTdGF0ZU1hdGNoZXIgZXh0ZW5kcyBFcnJvclN0YXRlTWF0Y2hlciB7XG4gIG92ZXJyaWRlIGlzRXJyb3JTdGF0ZShjb250cm9sOiBGb3JtQ29udHJvbCB8IG51bGwsIGZvcm06IEZvcm1Hcm91cERpcmVjdGl2ZSB8IE5nRm9ybSB8IG51bGwpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNWYWxpZGF0aW9uUmVzdWx0RXJyb3IgPSBpc0tleShjb250cm9sPy5lcnJvcnMsIE1UTkFfV0ZfRk9STV9JVEVNX1ZBTElEQVRJT05fUkVTVUxUX0VSUk9SX05BTUUpO1xuICAgIHJldHVybiBoYXNWYWxpZGF0aW9uUmVzdWx0RXJyb3IgfHwgc3VwZXIuaXNFcnJvclN0YXRlKGNvbnRyb2wsIGZvcm0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,19 @@
1
+ export const MTNA_WF_FORM_ITEM_VALIDATION_RESULT_ERROR_NAME = 'formItemValidationResult';
2
+ /**
3
+ * Valitator function that will check the root level {@link FormValidationResult} on
4
+ * the MTNA {@link Form} and see if there are any errors for a particular control.
5
+ *
6
+ * @param instanceId The instanceId of the form item for a particular control
7
+ * @param managerService The manager service that holds a reference to the MTNA {@link Form} and it's {@link FormValidationResult}
8
+ * @returns A validator function that will throw an error if there is a matching {@link FormItemValidationResult} for the specified item.
9
+ */
10
+ export function validationResultValidator(instanceId, managerService) {
11
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
+ return (control) => {
13
+ const formItemValidationResult = managerService.getFormItemValidationResults()[instanceId];
14
+ return formItemValidationResult
15
+ ? { [MTNA_WF_FORM_ITEM_VALIDATION_RESULT_ERROR_NAME]: formItemValidationResult.validationMessage }
16
+ : null;
17
+ };
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1yZXN1bHQtdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3ZhbGlkYXRvcnMvdmFsaWRhdGlvbi1yZXN1bHQtdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE1BQU0sQ0FBQyxNQUFNLDhDQUE4QyxHQUFHLDBCQUEwQixDQUFDO0FBRXpGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsVUFBa0IsRUFBRSxjQUFvQztJQUNoRyw2REFBNkQ7SUFDN0QsT0FBTyxDQUFDLE9BQXdCLEVBQTJCLEVBQUU7UUFDM0QsTUFBTSx3QkFBd0IsR0FBeUMsY0FBYyxDQUFDLDRCQUE0QixFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakksT0FBTyx3QkFBd0I7WUFDN0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyw4Q0FBOEMsQ0FBQyxFQUFFLHdCQUF3QixDQUFDLGlCQUFpQixFQUFFO1lBQ2xHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgRm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuXG5pbXBvcnQgeyBNdG5hV2ZNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm0tbWFuYWdlci5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IE1UTkFfV0ZfRk9STV9JVEVNX1ZBTElEQVRJT05fUkVTVUxUX0VSUk9SX05BTUUgPSAnZm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0JztcblxuLyoqXG4gKiBWYWxpdGF0b3IgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIHRoZSByb290IGxldmVsIHtAbGluayBGb3JtVmFsaWRhdGlvblJlc3VsdH0gb25cbiAqIHRoZSBNVE5BIHtAbGluayBGb3JtfSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3JzIGZvciBhIHBhcnRpY3VsYXIgY29udHJvbC5cbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2VJZCBUaGUgaW5zdGFuY2VJZCBvZiB0aGUgZm9ybSBpdGVtIGZvciBhIHBhcnRpY3VsYXIgY29udHJvbFxuICogQHBhcmFtIG1hbmFnZXJTZXJ2aWNlIFRoZSBtYW5hZ2VyIHNlcnZpY2UgdGhhdCBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgTVROQSB7QGxpbmsgRm9ybX0gYW5kIGl0J3Mge0BsaW5rIEZvcm1WYWxpZGF0aW9uUmVzdWx0fVxuICogQHJldHVybnMgQSB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCB3aWxsIHRocm93IGFuIGVycm9yIGlmIHRoZXJlIGlzIGEgbWF0Y2hpbmcge0BsaW5rIEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdH0gZm9yIHRoZSBzcGVjaWZpZWQgaXRlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRpb25SZXN1bHRWYWxpZGF0b3IoaW5zdGFuY2VJZDogc3RyaW5nLCBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UpOiBWYWxpZGF0b3JGbiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgZm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0OiBGb3JtSXRlbVZhbGlkYXRpb25SZXN1bHQgfCB1bmRlZmluZWQgPSBtYW5hZ2VyU2VydmljZS5nZXRGb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzKClbaW5zdGFuY2VJZF07XG4gICAgcmV0dXJuIGZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdFxuICAgICAgPyB7IFtNVE5BX1dGX0ZPUk1fSVRFTV9WQUxJREFUSU9OX1JFU1VMVF9FUlJPUl9OQU1FXTogZm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlIH1cbiAgICAgIDogbnVsbDtcbiAgfTtcbn1cbiJdfQ==
@@ -1,10 +1,8 @@
1
- export * from './lib/core';
2
- export * from './lib/file-upload';
3
- export * from './lib/form';
4
- export * from './lib/form-item-controls';
5
- export * from './lib/form-stepper';
6
- export * from './lib/groups';
7
- export * from './lib/item-header';
8
- export * from './lib/static-form-items';
9
- export * from './lib/step-card';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpbGUtdXBsb2FkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Zvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZm9ybS1pdGVtLWNvbnRyb2xzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Zvcm0tc3RlcHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ncm91cHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaXRlbS1oZWFkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RhdGljLWZvcm0taXRlbXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RlcC1jYXJkJztcbiJdfQ==
1
+ export * from './lib/components/index';
2
+ export * from './lib/directives/index';
3
+ export * from './lib/models/index';
4
+ export * from './lib/pipes/index';
5
+ export * from './lib/services/index';
6
+ export * from './lib/utilities/index';
7
+ export * from './lib/validators/index';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbGl0aWVzL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZhbGlkYXRvcnMvaW5kZXgnO1xuIl19