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

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 (429) hide show
  1. package/_index.scss +18 -16
  2. package/bundles/mtna-web-form-angular.umd.js +6683 -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 +42 -0
  8. package/esm2015/lib/components/base-items/base-form-item.component.js +53 -0
  9. package/esm2015/lib/components/base-items/base-group-item.component.js +30 -0
  10. package/esm2015/lib/components/base-items/base-parent-value-item.component.js +43 -0
  11. package/esm2015/lib/components/base-items/base-section-item.component.js +29 -0
  12. package/esm2015/lib/components/base-items/base-single-selection-parent-value-item.component.js +62 -0
  13. package/esm2015/lib/components/base-items/base-value-item.component.js +41 -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 +128 -0
  22. package/esm2015/lib/components/form-item/form-item.module.js +42 -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 +34 -0
  31. package/esm2015/lib/components/form-item-impl/boolean/boolean.module.js +45 -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 +91 -0
  34. package/esm2015/lib/components/form-item-impl/checkbox/checkbox.module.js +65 -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 +23 -0
  52. package/esm2015/lib/components/form-item-impl/form-section/form-section.module.js +23 -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 +56 -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 +45 -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 +25 -0
  63. package/esm2015/lib/components/form-item-impl/multiple-choice/multiple-choice.module.js +49 -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 +57 -0
  72. package/esm2015/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.module.js +57 -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 +20 -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 +19 -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 +163 -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 +58 -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 +36 -0
  129. package/esm2015/lib/pipes/coerce-form-group.pipe.js +47 -0
  130. package/esm2015/lib/pipes/coerce-form-item.pipe.js +36 -0
  131. package/esm2015/lib/pipes/date-quarter.pipe.js +55 -0
  132. package/esm2015/lib/pipes/form-step-group.pipe.js +32 -0
  133. package/esm2015/lib/pipes/get-auto-complete.pipe.js +54 -0
  134. package/esm2015/lib/pipes/get-available-quarters.pipe.js +41 -0
  135. package/esm2015/lib/pipes/get-form-control-error.pipe.js +32 -0
  136. package/esm2015/lib/pipes/get-list-icon.pipe.js +65 -0
  137. package/esm2015/lib/pipes/get-object-type.pipe.js +29 -0
  138. package/esm2015/lib/pipes/get-selected-option.pipe.js +32 -0
  139. package/esm2015/lib/pipes/index.js +15 -0
  140. package/esm2015/lib/pipes/items-with-value.pipe.js +42 -0
  141. package/esm2015/lib/pipes/sanitize-html.pipe.js +35 -0
  142. package/esm2015/lib/services/api.service.js +67 -0
  143. package/esm2015/lib/services/dialog.service.js +47 -0
  144. package/esm2015/lib/services/form-manager.service.js +465 -0
  145. package/esm2015/lib/services/index.js +7 -0
  146. package/esm2015/lib/services/ng-form.service.js +150 -0
  147. package/esm2015/lib/services/resource-search-selection.service.js +24 -0
  148. package/esm2015/lib/services/ui.service.js +333 -0
  149. package/esm2015/lib/utilities/animations.js +8 -0
  150. package/esm2015/lib/utilities/find-form-control.js +29 -0
  151. package/esm2015/lib/utilities/find-form-item.js +25 -0
  152. package/esm2015/lib/utilities/flatten-steps.js +10 -0
  153. package/esm2015/lib/utilities/form-step.util.js +28 -0
  154. package/esm2015/lib/utilities/generate-form-steps.js +38 -0
  155. package/esm2015/lib/utilities/get-item-class-suffix.js +17 -0
  156. package/esm2015/lib/utilities/index.js +13 -0
  157. package/esm2015/lib/utilities/is-form-control.js +5 -0
  158. package/esm2015/lib/utilities/is-form-group.js +6 -0
  159. package/esm2015/lib/utilities/serializer-util.js +396 -0
  160. package/esm2015/lib/utilities/update-step-status.js +38 -0
  161. package/esm2015/lib/validators/index.js +3 -0
  162. package/esm2015/lib/validators/instant-validation-result-error-state-matcher.js +23 -0
  163. package/esm2015/lib/validators/validation-result-validator.js +19 -0
  164. package/esm2015/public-api.js +8 -10
  165. package/fesm2015/mtna-web-form-angular.js +4180 -3443
  166. package/fesm2015/mtna-web-form-angular.js.map +1 -1
  167. package/lib/components/acknowledge-dialog/acknowledge-dialog.component.d.ts +13 -0
  168. package/lib/components/acknowledge-dialog/acknowledge-dialog.module.d.ts +11 -0
  169. package/lib/components/acknowledge-dialog/index.d.ts +2 -0
  170. package/lib/components/base-items/base-form-item-control.component.d.ts +19 -0
  171. package/lib/components/base-items/base-form-item.component.d.ts +27 -0
  172. package/lib/components/base-items/base-group-item.component.d.ts +12 -0
  173. package/lib/components/base-items/base-parent-value-item.component.d.ts +17 -0
  174. package/lib/components/base-items/base-section-item.component.d.ts +13 -0
  175. package/lib/components/base-items/base-single-selection-parent-value-item.component.d.ts +19 -0
  176. package/lib/components/base-items/base-value-item.component.d.ts +17 -0
  177. package/lib/components/base-items/index.d.ts +6 -0
  178. package/lib/{form → components/form}/form.component.d.ts +2 -2
  179. package/lib/components/form/form.module.d.ts +16 -0
  180. package/lib/components/form/index.d.ts +2 -0
  181. package/lib/components/form-disabler/form-disabler.module.d.ts +8 -0
  182. package/lib/components/form-disabler/index.d.ts +2 -0
  183. package/lib/components/form-item/form-item.component.d.ts +54 -0
  184. package/lib/components/form-item/form-item.module.d.ts +13 -0
  185. package/lib/components/form-item/index.d.ts +2 -0
  186. package/lib/components/form-item-component-provider/form-item-component-provider.d.ts +4 -0
  187. package/lib/components/form-item-component-provider/form-item-injected-components.d.ts +2 -0
  188. package/lib/components/form-item-component-provider/index.d.ts +2 -0
  189. package/lib/components/form-item-dialog/form-item-dialog.component.d.ts +13 -0
  190. package/lib/components/form-item-dialog/form-item-dialog.module.d.ts +10 -0
  191. package/lib/components/form-item-dialog/index.d.ts +2 -0
  192. package/lib/components/form-item-impl/boolean/boolean.component.d.ts +18 -0
  193. package/lib/components/form-item-impl/boolean/boolean.module.d.ts +13 -0
  194. package/lib/components/form-item-impl/boolean/index.d.ts +2 -0
  195. package/lib/components/form-item-impl/checkbox/checkbox.component.d.ts +29 -0
  196. package/lib/components/form-item-impl/checkbox/checkbox.module.d.ts +18 -0
  197. package/lib/components/form-item-impl/checkbox/index.d.ts +2 -0
  198. package/lib/{form-item-controls → components/form-item-impl/date}/date.component.d.ts +8 -8
  199. package/lib/components/form-item-impl/date/date.module.d.ts +15 -0
  200. package/lib/components/form-item-impl/date/index.d.ts +2 -0
  201. package/lib/{form-item-controls → components/form-item-impl/date-range}/date-range.component.d.ts +2 -2
  202. package/lib/components/form-item-impl/date-range/date-range.module.d.ts +13 -0
  203. package/lib/components/form-item-impl/date-range/index.d.ts +2 -0
  204. package/lib/{form-item-controls → components/form-item-impl/dropdown}/dropdown.component.d.ts +2 -4
  205. package/lib/components/form-item-impl/dropdown/dropdown.module.d.ts +17 -0
  206. package/lib/components/form-item-impl/dropdown/index.d.ts +2 -0
  207. package/lib/components/form-item-impl/file-upload/file-upload.component.d.ts +19 -0
  208. package/lib/components/form-item-impl/file-upload/file-upload.module.d.ts +14 -0
  209. package/lib/{file-upload → components/form-item-impl/file-upload}/index.d.ts +1 -0
  210. package/lib/components/form-item-impl/form-group/form-group.component.d.ts +17 -0
  211. package/lib/components/form-item-impl/form-group/form-group.module.d.ts +14 -0
  212. package/lib/components/form-item-impl/form-group/index.d.ts +2 -0
  213. package/lib/components/form-item-impl/form-section/form-section.component.d.ts +7 -0
  214. package/lib/components/form-item-impl/form-section/form-section.module.d.ts +13 -0
  215. package/lib/components/form-item-impl/form-section/index.d.ts +2 -0
  216. package/lib/components/form-item-impl/i18n-input/i18n-input.component.d.ts +13 -0
  217. package/lib/components/form-item-impl/i18n-input/i18n-input.module.d.ts +15 -0
  218. package/lib/components/form-item-impl/i18n-input/index.d.ts +2 -0
  219. package/lib/components/form-item-impl/index.d.ts +21 -0
  220. package/lib/components/form-item-impl/input/index.d.ts +2 -0
  221. package/lib/components/form-item-impl/input/input.component.d.ts +12 -0
  222. package/lib/components/form-item-impl/input/input.module.d.ts +15 -0
  223. package/lib/components/form-item-impl/multiple-choice/index.d.ts +2 -0
  224. package/lib/components/form-item-impl/multiple-choice/multiple-choice.component.d.ts +7 -0
  225. package/lib/components/form-item-impl/multiple-choice/multiple-choice.module.d.ts +14 -0
  226. package/lib/components/form-item-impl/ordered-list/index.d.ts +2 -0
  227. package/lib/components/form-item-impl/ordered-list/ordered-list-item.component.d.ts +7 -0
  228. package/lib/components/form-item-impl/ordered-list/ordered-list-item.module.d.ts +10 -0
  229. package/lib/{groups → components/form-item-impl/repeatable-item}/index.d.ts +1 -1
  230. package/lib/components/form-item-impl/repeatable-item/repeatable-item.component.d.ts +5 -0
  231. package/lib/components/form-item-impl/repeatable-item/repeatable-item.module.d.ts +8 -0
  232. package/lib/components/form-item-impl/repeatable-item-container/index.d.ts +2 -0
  233. package/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.component.d.ts +14 -0
  234. package/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.module.d.ts +16 -0
  235. package/lib/components/form-item-impl/search/index.d.ts +2 -0
  236. package/lib/components/form-item-impl/search/resource-search.component.d.ts +16 -0
  237. package/lib/components/form-item-impl/search/resource-search.module.d.ts +12 -0
  238. package/lib/components/form-item-impl/table-item/index.d.ts +2 -0
  239. package/lib/components/form-item-impl/table-item/table-item.component.d.ts +9 -0
  240. package/lib/components/form-item-impl/table-item/table-item.module.d.ts +10 -0
  241. package/lib/components/form-item-impl/text/index.d.ts +2 -0
  242. package/lib/components/form-item-impl/text/text.component.d.ts +7 -0
  243. package/lib/components/form-item-impl/text/text.module.d.ts +10 -0
  244. package/lib/components/form-item-impl/title/_title-theme.scss +28 -0
  245. package/lib/components/form-item-impl/title/index.d.ts +2 -0
  246. package/lib/components/form-item-impl/title/title.component.d.ts +7 -0
  247. package/lib/components/form-item-impl/title/title.module.d.ts +10 -0
  248. package/lib/components/form-item-impl/unordered-list/index.d.ts +2 -0
  249. package/lib/components/form-item-impl/unordered-list/unordered-list-item.component.d.ts +7 -0
  250. package/lib/components/form-item-impl/unordered-list/unordered-list-item.module.d.ts +10 -0
  251. package/lib/components/form-item-impl/year-quarter/index.d.ts +2 -0
  252. package/lib/{form-item-controls → components/form-item-impl/year-quarter}/year-quarter.component.d.ts +9 -7
  253. package/lib/components/form-item-impl/year-quarter/year-quarter.module.d.ts +16 -0
  254. package/lib/components/form-item-impl/year-quarter-range/index.d.ts +2 -0
  255. package/lib/{form-item-controls → components/form-item-impl/year-quarter-range}/year-quarter-range.component.d.ts +6 -2
  256. package/lib/components/form-item-impl/year-quarter-range/year-quarter-range.module.d.ts +12 -0
  257. package/lib/components/form-item-injector/form-item-injector.component.d.ts +52 -0
  258. package/lib/components/form-item-injector/form-item-injector.module.d.ts +8 -0
  259. package/lib/components/form-item-injector/index.d.ts +2 -0
  260. package/lib/{form-stepper → components/form-stepper/form-step}/form-step.component.d.ts +1 -1
  261. package/lib/components/form-stepper/form-step/index.d.ts +1 -0
  262. package/lib/{form-stepper → components/form-stepper/form-step-group}/form-step-group.component.d.ts +1 -1
  263. package/lib/components/form-stepper/form-step-group/index.d.ts +1 -0
  264. package/lib/{form-stepper → components/form-stepper/form-stepper}/form-stepper.component.d.ts +1 -2
  265. package/lib/components/form-stepper/form-stepper/index.d.ts +1 -0
  266. package/lib/components/form-stepper/form-stepper.module.d.ts +18 -0
  267. package/lib/components/form-stepper/index.d.ts +4 -0
  268. package/lib/components/index.d.ts +12 -0
  269. package/lib/{item-header → components/item-header}/index.d.ts +1 -0
  270. package/lib/{item-header → components/item-header}/item-header.component.d.ts +3 -3
  271. package/lib/components/item-header/item-header.module.d.ts +9 -0
  272. package/lib/{step-card → components/step-card}/index.d.ts +1 -0
  273. package/lib/{step-card → components/step-card}/step-card.component.d.ts +1 -1
  274. package/lib/components/step-card/step-card.module.d.ts +13 -0
  275. package/lib/core/_all-color.scss +15 -15
  276. package/lib/core/_all-theme.scss +15 -18
  277. package/lib/core/_all-typography.scss +15 -15
  278. package/lib/core/_core-theme.scss +0 -18
  279. package/lib/{form-item-controls → directives}/base-single-selection-parent.directive.d.ts +1 -1
  280. package/lib/directives/index.d.ts +4 -0
  281. package/lib/models/index.d.ts +6 -0
  282. package/lib/models/toggle-form-item-data.model.d.ts +7 -0
  283. package/lib/pipes/coerce-date-item.pipe.d.ts +17 -0
  284. package/lib/pipes/coerce-form-control.pipe.d.ts +13 -0
  285. package/lib/{core/pipes → pipes}/coerce-form-group.pipe.d.ts +5 -0
  286. package/lib/pipes/coerce-form-item.pipe.d.ts +14 -0
  287. package/lib/pipes/date-quarter.pipe.d.ts +12 -0
  288. package/lib/{form-stepper → pipes}/form-step-group.pipe.d.ts +6 -1
  289. package/lib/pipes/get-auto-complete.pipe.d.ts +12 -0
  290. package/lib/{core/pipes → pipes}/get-available-quarters.pipe.d.ts +5 -0
  291. package/lib/pipes/get-form-control-error.pipe.d.ts +19 -0
  292. package/lib/pipes/get-list-icon.pipe.d.ts +12 -0
  293. package/lib/pipes/get-object-type.pipe.d.ts +12 -0
  294. package/lib/{core/pipes → pipes}/get-selected-option.pipe.d.ts +5 -0
  295. package/lib/pipes/index.d.ts +14 -0
  296. package/lib/{core/pipes → pipes}/items-with-value.pipe.d.ts +5 -0
  297. package/lib/{core/pipes → pipes}/sanitize-html.pipe.d.ts +5 -0
  298. package/lib/{core/services → services}/api.service.d.ts +1 -1
  299. package/lib/services/dialog.service.d.ts +21 -0
  300. package/lib/{core/services → services}/form-manager.service.d.ts +1 -1
  301. package/lib/{core/services → services}/index.d.ts +2 -0
  302. package/lib/services/resource-search-selection.service.d.ts +10 -0
  303. package/lib/{core/services → services}/ui.service.d.ts +1 -1
  304. package/lib/{core/utilities → utilities}/flatten-steps.d.ts +1 -1
  305. package/lib/{form-stepper → utilities}/form-step.util.d.ts +1 -1
  306. package/lib/{core/utilities → utilities}/generate-form-steps.d.ts +1 -1
  307. package/lib/utilities/get-item-class-suffix.d.ts +1 -0
  308. package/lib/{core/utilities → utilities}/index.d.ts +4 -0
  309. package/lib/utilities/is-form-control.d.ts +2 -0
  310. package/lib/{core/utilities → utilities}/update-step-status.d.ts +1 -1
  311. package/package.json +3 -1
  312. package/public-api.d.ts +7 -9
  313. package/esm2015/lib/core/animations.js +0 -8
  314. package/esm2015/lib/core/api-config.js +0 -3
  315. package/esm2015/lib/core/index.js +0 -7
  316. package/esm2015/lib/core/pipes/coerce-date-item.pipe.js +0 -23
  317. package/esm2015/lib/core/pipes/coerce-form-group.pipe.js +0 -35
  318. package/esm2015/lib/core/pipes/date-quarter.pipe.js +0 -43
  319. package/esm2015/lib/core/pipes/get-auto-complete.pipe.js +0 -42
  320. package/esm2015/lib/core/pipes/get-available-quarters.pipe.js +0 -29
  321. package/esm2015/lib/core/pipes/get-form-control-error.pipe.js +0 -20
  322. package/esm2015/lib/core/pipes/get-list-icon.pipe.js +0 -53
  323. package/esm2015/lib/core/pipes/get-object-type.pipe.js +0 -17
  324. package/esm2015/lib/core/pipes/get-selected-option.pipe.js +0 -20
  325. package/esm2015/lib/core/pipes/index.js +0 -71
  326. package/esm2015/lib/core/pipes/items-with-value.pipe.js +0 -30
  327. package/esm2015/lib/core/pipes/sanitize-html.pipe.js +0 -23
  328. package/esm2015/lib/core/services/api.service.js +0 -67
  329. package/esm2015/lib/core/services/form-manager.service.js +0 -465
  330. package/esm2015/lib/core/services/index.js +0 -5
  331. package/esm2015/lib/core/services/ng-form.service.js +0 -150
  332. package/esm2015/lib/core/services/ui.service.js +0 -333
  333. package/esm2015/lib/core/utilities/find-form-control.js +0 -29
  334. package/esm2015/lib/core/utilities/find-form-item.js +0 -25
  335. package/esm2015/lib/core/utilities/flatten-steps.js +0 -10
  336. package/esm2015/lib/core/utilities/generate-form-steps.js +0 -38
  337. package/esm2015/lib/core/utilities/index.js +0 -9
  338. package/esm2015/lib/core/utilities/is-form-group.js +0 -6
  339. package/esm2015/lib/core/utilities/serializer-util.js +0 -358
  340. package/esm2015/lib/core/utilities/update-step-status.js +0 -38
  341. package/esm2015/lib/core/validators/index.js +0 -3
  342. package/esm2015/lib/core/validators/instant-validation-result-error-state-matcher.js +0 -23
  343. package/esm2015/lib/core/validators/validation-result-validator.js +0 -19
  344. package/esm2015/lib/file-upload/file-upload.component.js +0 -66
  345. package/esm2015/lib/file-upload/index.js +0 -2
  346. package/esm2015/lib/form/base-form-item.model.js +0 -2
  347. package/esm2015/lib/form/form.component.js +0 -250
  348. package/esm2015/lib/form/form.module.js +0 -214
  349. package/esm2015/lib/form/index.js +0 -5
  350. package/esm2015/lib/form/white-list.model.js +0 -11
  351. package/esm2015/lib/form-item-controls/base-form-item-control.directive.js +0 -58
  352. package/esm2015/lib/form-item-controls/base-parent-item-control.directive.js +0 -42
  353. package/esm2015/lib/form-item-controls/base-single-selection-parent.directive.js +0 -53
  354. package/esm2015/lib/form-item-controls/date-range.component.js +0 -84
  355. package/esm2015/lib/form-item-controls/date.component.js +0 -134
  356. package/esm2015/lib/form-item-controls/dropdown.component.js +0 -109
  357. package/esm2015/lib/form-item-controls/index.js +0 -8
  358. package/esm2015/lib/form-item-controls/input.component.js +0 -149
  359. package/esm2015/lib/form-item-controls/year-quarter-range.component.js +0 -75
  360. package/esm2015/lib/form-item-controls/year-quarter.component.js +0 -228
  361. package/esm2015/lib/form-stepper/form-step-group.component.js +0 -95
  362. package/esm2015/lib/form-stepper/form-step-group.pipe.js +0 -20
  363. package/esm2015/lib/form-stepper/form-step.component.js +0 -110
  364. package/esm2015/lib/form-stepper/form-step.util.js +0 -28
  365. package/esm2015/lib/form-stepper/form-stepper.component.js +0 -115
  366. package/esm2015/lib/form-stepper/form-stepper.module.js +0 -53
  367. package/esm2015/lib/form-stepper/index.js +0 -8
  368. package/esm2015/lib/groups/group-components.js +0 -646
  369. package/esm2015/lib/groups/index.js +0 -3
  370. package/esm2015/lib/groups/repeatable-item.component.js +0 -23
  371. package/esm2015/lib/item-header/index.js +0 -2
  372. package/esm2015/lib/item-header/item-header.component.js +0 -108
  373. package/esm2015/lib/static-form-items/index.js +0 -3
  374. package/esm2015/lib/static-form-items/ordered-list-item.js +0 -50
  375. package/esm2015/lib/static-form-items/unordered-list-item.js +0 -52
  376. package/esm2015/lib/step-card/index.js +0 -2
  377. package/lib/_index.scss +0 -24
  378. package/lib/core/index.d.ts +0 -6
  379. package/lib/core/pipes/coerce-date-item.pipe.d.ts +0 -11
  380. package/lib/core/pipes/date-quarter.pipe.d.ts +0 -7
  381. package/lib/core/pipes/get-auto-complete.pipe.d.ts +0 -7
  382. package/lib/core/pipes/get-form-control-error.pipe.d.ts +0 -14
  383. package/lib/core/pipes/get-list-icon.pipe.d.ts +0 -7
  384. package/lib/core/pipes/get-object-type.pipe.d.ts +0 -7
  385. package/lib/core/pipes/index.d.ts +0 -28
  386. package/lib/file-upload/file-upload.component.d.ts +0 -23
  387. package/lib/form/form.module.d.ts +0 -52
  388. package/lib/form/index.d.ts +0 -4
  389. package/lib/form-item-controls/index.d.ts +0 -7
  390. package/lib/form-item-controls/input.component.d.ts +0 -14
  391. package/lib/form-stepper/form-stepper.module.d.ts +0 -18
  392. package/lib/form-stepper/index.d.ts +0 -7
  393. package/lib/groups/group-components.d.ts +0 -221
  394. package/lib/groups/repeatable-item.component.d.ts +0 -5
  395. package/lib/static-form-items/index.d.ts +0 -2
  396. package/lib/static-form-items/ordered-list-item.d.ts +0 -11
  397. package/lib/static-form-items/unordered-list-item.d.ts +0 -11
  398. /package/lib/{form → components/form-disabler}/form-disabler.component.d.ts +0 -0
  399. /package/lib/{groups → components/form-item-impl/checkbox}/_checkbox-theme.scss +0 -0
  400. /package/lib/{form-item-controls → components/form-item-impl/date}/_date-item-theme.scss +0 -0
  401. /package/lib/{groups → components/form-item-impl/form-group}/_form-group-theme.scss +0 -0
  402. /package/lib/{groups → components/form-item-impl/multiple-choice}/_multiple-choice-theme.scss +0 -0
  403. /package/lib/{groups/_repeatable-item-theme.scss → components/form-item-impl/repeatable-item-container/_repeatable-item-container-theme.scss} +0 -0
  404. /package/lib/{form-item-controls → components/form-item-impl/year-quarter}/_year-quarter-item-theme.scss +0 -0
  405. /package/lib/{form-stepper → components/form-stepper/form-step-group}/_form-step-group-theme.scss +0 -0
  406. /package/lib/{form-stepper → components/form-stepper/form-stepper}/_form-stepper-theme.scss +0 -0
  407. /package/lib/{item-header → components/item-header}/_item-header-theme.scss +0 -0
  408. /package/lib/{step-card → components/step-card}/_step-card-theme.scss +0 -0
  409. /package/lib/{form-item-controls → core}/_form-control-theme.scss +0 -0
  410. /package/lib/{form-item-controls → directives}/base-form-item-control.directive.d.ts +0 -0
  411. /package/lib/{form-item-controls → directives}/base-parent-item-control.directive.d.ts +0 -0
  412. /package/lib/{form → directives}/form-item.directive.d.ts +0 -0
  413. /package/lib/{core → models}/api-config.d.ts +0 -0
  414. /package/lib/{form → models}/base-form-item.model.d.ts +0 -0
  415. /package/lib/{groups → models}/form-item-dialog-data.model.d.ts +0 -0
  416. /package/lib/{form-stepper/models → models/form-stepper}/base-form-step.model.d.ts +0 -0
  417. /package/lib/{form-stepper/models → models/form-stepper}/form-step-group.model.d.ts +0 -0
  418. /package/lib/{form-stepper/models → models/form-stepper}/form-step.model.d.ts +0 -0
  419. /package/lib/{form-stepper/models → models/form-stepper}/index.d.ts +0 -0
  420. /package/lib/{form → models}/white-list.model.d.ts +0 -0
  421. /package/lib/{core/services → services}/ng-form.service.d.ts +0 -0
  422. /package/lib/{core → utilities}/animations.d.ts +0 -0
  423. /package/lib/{core/utilities → utilities}/find-form-control.d.ts +0 -0
  424. /package/lib/{core/utilities → utilities}/find-form-item.d.ts +0 -0
  425. /package/lib/{core/utilities → utilities}/is-form-group.d.ts +0 -0
  426. /package/lib/{core/utilities → utilities}/serializer-util.d.ts +0 -0
  427. /package/lib/{core/validators → validators}/index.d.ts +0 -0
  428. /package/lib/{core/validators → validators}/instant-validation-result-error-state-matcher.d.ts +0 -0
  429. /package/lib/{core/validators → validators}/validation-result-validator.d.ts +0 -0
@@ -0,0 +1,150 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { skipWhile, take } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ export class MtnaWfNgFormService {
6
+ constructor() {
7
+ this.unsavedChanges$ = new BehaviorSubject(false);
8
+ }
9
+ /**
10
+ * Informs a caller when the MtnaForm is dirty and has unsaved changes.
11
+ */
12
+ get unsavedChanges() {
13
+ return this.unsavedChanges$.asObservable();
14
+ }
15
+ /**
16
+ * Add a control from the ngForm
17
+ * @param controlId id of the control being added
18
+ * @param parentIds array of ids representing the path to the parent control
19
+ * @param newControl the new form control to be added
20
+ */
21
+ addControl(controlId, parentIds, newControl) {
22
+ if (!this.ngForm) {
23
+ return;
24
+ }
25
+ const parentControl = this.ngForm.get(parentIds);
26
+ parentControl.addControl(controlId, newControl);
27
+ parentControl.markAsTouched();
28
+ parentControl.markAsDirty();
29
+ this.forceUnsavedChange();
30
+ }
31
+ /**
32
+ * Remove a control from the ngForm.
33
+ *
34
+ * @param controlId is of the control to remove
35
+ * @param parentIds rray of ids representing the path to the parent control
36
+ */
37
+ removeControl(controlId, parentIds) {
38
+ if (!this.ngForm) {
39
+ return;
40
+ }
41
+ const parentControl = this.ngForm.get(parentIds);
42
+ parentControl.removeControl(controlId);
43
+ parentControl.markAsTouched();
44
+ parentControl.markAsDirty();
45
+ this.forceUnsavedChange();
46
+ }
47
+ /**
48
+ * Get the form if it exists
49
+ * @returns the angular form or null
50
+ */
51
+ getForm() {
52
+ return this.ngForm;
53
+ }
54
+ /**
55
+ * Returns a JSON representation of form values
56
+ */
57
+ getFormValue() {
58
+ var _a;
59
+ // This includes values for disabled controls.
60
+ // We loop through MtnaForm to insert values,
61
+ // so we need the disabled controls to ensure no info loss.
62
+ return (_a = this.ngForm) === null || _a === void 0 ? void 0 : _a.getRawValue();
63
+ }
64
+ /**
65
+ * @returns Whether a form has been set on this service
66
+ */
67
+ hasForm() {
68
+ return !!this.ngForm;
69
+ }
70
+ /**
71
+ * @returns Whether the form is dirty.
72
+ */
73
+ isFormDirty() {
74
+ return !!this.ngForm && this.ngForm.dirty;
75
+ }
76
+ /**
77
+ * Unsubscribes from value changes & sets the ngForm to null.
78
+ * Should be called when any component using an MtnaForm is destroyed.
79
+ */
80
+ disposeForm() {
81
+ this.unsubscribeValueChanges();
82
+ this.ngForm = undefined;
83
+ }
84
+ /**
85
+ * Forces the unsavedChanges observable to emit true.
86
+ * Use with care, one example is when repeatable items are added/removed from the form.
87
+ */
88
+ forceUnsavedChange() {
89
+ this.unsubscribeValueChanges();
90
+ this.unsavedChanges$.next(true);
91
+ }
92
+ /**
93
+ * Marks ngForm as pristine & untouched.
94
+ */
95
+ markAsPristineAndUntouched() {
96
+ if (this.ngForm) {
97
+ this.ngForm.markAsPristine();
98
+ this.ngForm.markAsUntouched();
99
+ this.unsavedChanges$.next(this.ngForm.dirty);
100
+ this.observeNgFormChanges();
101
+ }
102
+ }
103
+ /**
104
+ * Resets the ngForm.
105
+ */
106
+ resetForm() {
107
+ if (this.ngForm) {
108
+ this.ngForm.reset();
109
+ this.unsavedChanges$.next(this.ngForm.dirty);
110
+ this.observeNgFormChanges();
111
+ }
112
+ }
113
+ /**
114
+ * Sets a FormGroup on the service so an external source may observe changes.
115
+ * @param ngForm FormGroup to be registered.
116
+ */
117
+ setForm(ngForm) {
118
+ this.ngForm = ngForm;
119
+ this.unsavedChanges$.next(this.ngForm.dirty);
120
+ if (this.ngForm.pristine) {
121
+ this.observeNgFormChanges();
122
+ }
123
+ }
124
+ /**
125
+ * Subscribes to ngForm status changes & updates the unsavedChanges observable
126
+ */
127
+ observeNgFormChanges() {
128
+ this.unsubscribeValueChanges();
129
+ if (this.ngForm) {
130
+ this.valueChangeSubscription = this.ngForm.valueChanges
131
+ .pipe(skipWhile(() => (this.ngForm ? this.ngForm.pristine : true)), take(1))
132
+ .subscribe(() => { var _a; return this.unsavedChanges$.next((_a = this.ngForm) === null || _a === void 0 ? void 0 : _a.dirty); });
133
+ }
134
+ }
135
+ /**
136
+ * Removes the ngForm status change subscription.
137
+ */
138
+ unsubscribeValueChanges() {
139
+ if (!!this.valueChangeSubscription && !this.valueChangeSubscription.closed) {
140
+ this.valueChangeSubscription.unsubscribe();
141
+ }
142
+ }
143
+ }
144
+ MtnaWfNgFormService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfNgFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
145
+ MtnaWfNgFormService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfNgFormService, providedIn: 'root' });
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfNgFormService, decorators: [{
147
+ type: Injectable,
148
+ args: [{ providedIn: 'root' }]
149
+ }] });
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL25nLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxlQUFlLEVBQXFDLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBR2pELE1BQU0sT0FBTyxtQkFBbUI7SUFEaEM7UUFHVSxvQkFBZSxHQUFxQixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztLQTBKakY7SUF2SkM7O09BRUc7SUFDSCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBQyxTQUFpQixFQUFFLFNBQW1CLEVBQUUsVUFBMkI7UUFDNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFjLENBQUM7UUFDOUQsYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEQsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlCLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxhQUFhLENBQUMsU0FBaUIsRUFBRSxTQUFtQjtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixPQUFP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QSxTQUFTLENBQUMsR0FBRyxFQUFFLFdBQUMsT0FBQSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLEtBQUssQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDO1NBQ25FO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUU7WUFDMUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzVDO0lBQ0gsQ0FBQzs7aUhBM0pVLG1CQUFtQjtxSEFBbkIsbUJBQW1CLGNBRE4sTUFBTTs0RkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2tpcFdoaWxlLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE10bmFXZk5nRm9ybVNlcnZpY2Uge1xuICBwcml2YXRlIG5nRm9ybTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHVuc2F2ZWRDaGFuZ2VzJDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluZm9ybXMgYSBjYWxsZXIgd2hlbiB0aGUgTXRuYUZvcm0gaXMgZGlydHkgYW5kIGhhcyB1bnNhdmVkIGNoYW5nZXMuXG4gICAqL1xuICBnZXQgdW5zYXZlZENoYW5nZXMoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMudW5zYXZlZENoYW5nZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNvbnRyb2wgZnJvbSB0aGUgbmdGb3JtXG4gICAqIEBwYXJhbSBjb250cm9sSWQgaWQgb2YgdGhlIGNvbnRyb2wgYmVpbmcgYWRkZWRcbiAgICogQHBhcmFtIHBhcmVudElkcyBhcnJheSBvZiBpZHMgcmVwcmVzZW50aW5nIHRoZSBwYXRoIHRvIHRoZSBwYXJlbnQgY29udHJvbFxuICAgKiBAcGFyYW0gbmV3Q29udHJvbCB0aGUgbmV3IGZvcm0gY29udHJvbCB0byBiZSBhZGRlZFxuICAgKi9cbiAgYWRkQ29udHJvbChjb250cm9sSWQ6IHN0cmluZywgcGFyZW50SWRzOiBzdHJpbmdbXSwgbmV3Q29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgaWYgKCF0aGlzLm5nRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudENvbnRyb2wgPSB0aGlzLm5nRm9ybS5nZXQocGFyZW50SWRzKSBhcyBGb3JtR3JvdXA7XG4gICAgcGFyZW50Q29udHJvbC5hZGRDb250cm9sKGNvbnRyb2xJZCwgbmV3Q29udHJvbCk7XG4gICAgcGFyZW50Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgcGFyZW50Q29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuZm9yY2VVbnNhdmVkQ2hhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgY29udHJvbCBmcm9tIHRoZSBuZ0Zvcm0uXG4gICAqXG4gICAqIEBwYXJhbSBjb250cm9sSWQgaXMgb2YgdGhlIGNvbnRyb2wgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSBwYXJlbnRJZHMgcnJheSBvZiBpZHMgcmVwcmVzZW50aW5nIHRoZSBwYXRoIHRvIHRoZSBwYXJlbnQgY29udHJvbFxuICAgKi9cbiAgcmVtb3ZlQ29udHJvbChjb250cm9sSWQ6IHN0cmluZywgcGFyZW50SWRzOiBzdHJpbmdbXSkge1xuICAgIGlmICghdGhpcy5uZ0Zvcm0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRDb250cm9sID0gdGhpcy5uZ0Zvcm0uZ2V0KHBhcmVudElkcykgYXMgRm9ybUdyb3VwO1xuICAgIHBhcmVudENvbnRyb2wucmVtb3ZlQ29udHJvbChjb250cm9sSWQpO1xuICAgIHBhcmVudENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIHBhcmVudENvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICB0aGlzLmZvcmNlVW5zYXZlZENoYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZm9ybSBpZiBpdCBleGlzdHNcbiAgICogQHJldHVybnMgdGhlIGFuZ3VsYXIgZm9ybSBvciBudWxsXG4gICAqL1xuICBnZXRGb3JtKCk6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubmdGb3JtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGZvcm0gdmFsdWVzXG4gICAqL1xuICBnZXRGb3JtVmFsdWUoKSB7XG4gICAgLy8gVGhpcyBpbmNsdWRlcyB2YWx1ZXMgZm9yIGRpc2FibGVkIGNvbnRyb2xzLlxuICAgIC8vIFdlIGxvb3AgdGhyb3VnaCBNdG5hRm9ybSB0byBpbnNlcnQgdmFsdWVzLFxuICAgIC8vIHNvIHdlIG5lZWQgdGhlIGRpc2FibGVkIGNvbnRyb2xzIHRvIGVuc3VyZSBubyBpbmZvIGxvc3MuXG4gICAgcmV0dXJuIHRoaXMubmdGb3JtPy5nZXRSYXdWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgYSBmb3JtIGhhcyBiZWVuIHNldCBvbiB0aGlzIHNlcnZpY2VcbiAgICovXG4gIGhhc0Zvcm0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5uZ0Zvcm07XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgZm9ybSBpcyBkaXJ0eS5cbiAgICovXG4gIGlzRm9ybURpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMubmdGb3JtICYmIHRoaXMubmdGb3JtLmRpcnR5O1xuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlcyBmcm9tIHZhbHVlIGNoYW5nZXMgJiBzZXRzIHRoZSBuZ0Zvcm0gdG8gbnVsbC5cbiAgICogU2hvdWxkIGJlIGNhbGxlZCB3aGVuIGFueSBjb21wb25lbnQgdXNpbmcgYW4gTXRuYUZvcm0gaXMgZGVzdHJveWVkLlxuICAgKi9cbiAgZGlzcG9zZUZvcm0oKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVZhbHVlQ2hhbmdlcygpO1xuICAgIHRoaXMubmdGb3JtID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlcyB0aGUgdW5zYXZlZENoYW5nZXMgb2JzZXJ2YWJsZSB0byBlbWl0IHRydWUuXG4gICAqIFVzZSB3aXRoIGNhcmUsIG9uZSBleGFtcGxlIGlzIHdoZW4gcmVwZWF0YWJsZSBpdGVtcyBhcmUgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBmb3JtLlxuICAgKi9cbiAgZm9yY2VVbnNhdmVkQ2hhbmdlKCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmVWYWx1ZUNoYW5nZXMoKTtcbiAgICB0aGlzLnVuc2F2ZWRDaGFuZ2VzJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIG5nRm9ybSBhcyBwcmlzdGluZSAmIHVudG91Y2hlZC5cbiAgICovXG4gIG1hcmtBc1ByaXN0aW5lQW5kVW50b3VjaGVkKCkge1xuICAgIGlmICh0aGlzLm5nRm9ybSkge1xuICAgICAgdGhpcy5uZ0Zvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIHRoaXMubmdGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgdGhpcy51bnNhdmVkQ2hhbmdlcyQubmV4dCh0aGlzLm5nRm9ybS5kaXJ0eSk7XG4gICAgICB0aGlzLm9ic2VydmVOZ0Zvcm1DaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgbmdGb3JtLlxuICAgKi9cbiAgcmVzZXRGb3JtKCkge1xuICAgIGlmICh0aGlzLm5nRm9ybSkge1xuICAgICAgdGhpcy5uZ0Zvcm0ucmVzZXQoKTtcbiAgICAgIHRoaXMudW5zYXZlZENoYW5nZXMkLm5leHQodGhpcy5uZ0Zvcm0uZGlydHkpO1xuICAgICAgdGhpcy5vYnNlcnZlTmdGb3JtQ2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgRm9ybUdyb3VwIG9uIHRoZSBzZXJ2aWNlIHNvIGFuIGV4dGVybmFsIHNvdXJjZSBtYXkgb2JzZXJ2ZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gbmdGb3JtIEZvcm1Hcm91cCB0byBiZSByZWdpc3RlcmVkLlxuICAgKi9cbiAgc2V0Rm9ybShuZ0Zvcm06IEZvcm1Hcm91cCkge1xuICAgIHRoaXMubmdGb3JtID0gbmdGb3JtO1xuICAgIHRoaXMudW5zYXZlZENoYW5nZXMkLm5leHQodGhpcy5uZ0Zvcm0uZGlydHkpO1xuICAgIGlmICh0aGlzLm5nRm9ybS5wcmlzdGluZSkge1xuICAgICAgdGhpcy5vYnNlcnZlTmdGb3JtQ2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIG5nRm9ybSBzdGF0dXMgY2hhbmdlcyAmIHVwZGF0ZXMgdGhlIHVuc2F2ZWRDaGFuZ2VzIG9ic2VydmFibGVcbiAgICovXG4gIHByaXZhdGUgb2JzZXJ2ZU5nRm9ybUNoYW5nZXMoKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVZhbHVlQ2hhbmdlcygpO1xuICAgIGlmICh0aGlzLm5nRm9ybSkge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMubmdGb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBza2lwV2hpbGUoKCkgPT4gKHRoaXMubmdGb3JtID8gdGhpcy5uZ0Zvcm0ucHJpc3RpbmUgOiB0cnVlKSksXG4gICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51bnNhdmVkQ2hhbmdlcyQubmV4dCh0aGlzLm5nRm9ybT8uZGlydHkpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgbmdGb3JtIHN0YXR1cyBjaGFuZ2Ugc3Vic2NyaXB0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZVZhbHVlQ2hhbmdlcygpIHtcbiAgICBpZiAoISF0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uICYmICF0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,24 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { MtnaSearchSelectionService } from '@mtna/search-manager-angular';
3
+ import * as i0 from "@angular/core";
4
+ export class MtnaWfResourceSearchSelectionService extends MtnaSearchSelectionService {
5
+ getModelFromResult(result) {
6
+ var _a, _b;
7
+ const referenceDetails = {
8
+ // FIXME these need to come from the item.
9
+ uri: ((_a = result.getFieldByName('uri')) === null || _a === void 0 ? void 0 : _a.value) || '',
10
+ display: ((_b = result.getFieldByName('title')) === null || _b === void 0 ? void 0 : _b.value) || '',
11
+ };
12
+ return referenceDetails;
13
+ }
14
+ modelIsResult(model, result) {
15
+ var _a;
16
+ return model.uri === ((_a = result.getFieldByName('uri')) === null || _a === void 0 ? void 0 : _a.value);
17
+ }
18
+ }
19
+ MtnaWfResourceSearchSelectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfResourceSearchSelectionService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
20
+ MtnaWfResourceSearchSelectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfResourceSearchSelectionService });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfResourceSearchSelectionService, decorators: [{
22
+ type: Injectable
23
+ }] });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2Utc2VhcmNoLXNlbGVjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL3Jlc291cmNlLXNlYXJjaC1zZWxlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQUcxRSxNQUFNLE9BQU8sb0NBQXFDLFNBQVEsMEJBQTZDO0lBQ3JHLGtCQUFrQixDQUFDLE1BQWM7O1FBQy9CLE1BQU0sZ0JBQWdCLEdBQXNCO1lBQzFDLDBDQUEwQztZQUMxQyxHQUFHLEVBQUUsQ0FBQSxNQUFBLE1BQU0sQ0FBQyxjQUFjLENBQVMsS0FBSyxDQUFDLDBDQUFFLEtBQUssS0FBSSxFQUFFO1lBQ3RELE9BQU8sRUFBRSxDQUFBLE1BQUEsTUFBTSxDQUFDLGNBQWMsQ0FBUyxPQUFPLENBQUMsMENBQUUsS0FBSyxLQUFJLEVBQUU7U0FDN0QsQ0FBQztRQUNGLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUF3QixFQUFFLE1BQWM7O1FBQ3BELE9BQU8sS0FBSyxDQUFDLEdBQUcsTUFBSyxNQUFBLE1BQU0sQ0FBQyxjQUFjLENBQVMsS0FBSyxDQUFDLDBDQUFFLEtBQUssQ0FBQSxDQUFDO0lBQ25FLENBQUM7O2tJQVpVLG9DQUFvQztzSUFBcEMsb0NBQW9DOzRGQUFwQyxvQ0FBb0M7a0JBRGhELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXNvdXJjZVJlZmVyZW5jZSB9IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gJ0BtdG5hL3NlYXJjaC1tYW5hZ2VyLXRzJztcbmltcG9ydCB7IE10bmFTZWFyY2hTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnQG10bmEvc2VhcmNoLW1hbmFnZXItYW5ndWxhcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNdG5hV2ZSZXNvdXJjZVNlYXJjaFNlbGVjdGlvblNlcnZpY2UgZXh0ZW5kcyBNdG5hU2VhcmNoU2VsZWN0aW9uU2VydmljZTxSZXNvdXJjZVJlZmVyZW5jZT4ge1xuICBnZXRNb2RlbEZyb21SZXN1bHQocmVzdWx0OiBSZXN1bHQpOiBSZXNvdXJjZVJlZmVyZW5jZSB7XG4gICAgY29uc3QgcmVmZXJlbmNlRGV0YWlsczogUmVzb3VyY2VSZWZlcmVuY2UgPSB7XG4gICAgICAvLyBGSVhNRSB0aGVzZSBuZWVkIHRvIGNvbWUgZnJvbSB0aGUgaXRlbS5cbiAgICAgIHVyaTogcmVzdWx0LmdldEZpZWxkQnlOYW1lPHN0cmluZz4oJ3VyaScpPy52YWx1ZSB8fCAnJyxcbiAgICAgIGRpc3BsYXk6IHJlc3VsdC5nZXRGaWVsZEJ5TmFtZTxzdHJpbmc+KCd0aXRsZScpPy52YWx1ZSB8fCAnJyxcbiAgICB9O1xuICAgIHJldHVybiByZWZlcmVuY2VEZXRhaWxzO1xuICB9XG5cbiAgbW9kZWxJc1Jlc3VsdChtb2RlbDogUmVzb3VyY2VSZWZlcmVuY2UsIHJlc3VsdDogUmVzdWx0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1vZGVsLnVyaSA9PT0gcmVzdWx0LmdldEZpZWxkQnlOYW1lPHN0cmluZz4oJ3VyaScpPy52YWx1ZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,333 @@
1
+ import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { isPresent, isType } from '@mtna/core-ts';
4
+ import { isConditionalItem, isOptionGroupItemImpl, isOptionItemImpl } from '@mtna/web-form-ts';
5
+ import { BehaviorSubject } from 'rxjs';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/dialog";
8
+ /** List of default error messages to display */
9
+ export const DEFAULT_ERROR_MESSAGES = {
10
+ email: 'This field must include a valid email format.',
11
+ max: (item) => !isPresent(item) || !isPresent(item === null || item === void 0 ? void 0 : item.maxValue)
12
+ ? `This field's value must be less.`
13
+ : `${isPresent(item === null || item === void 0 ? void 0 : item.minValue) ? `Min value: ${item === null || item === void 0 ? void 0 : item.minValue} - ` : ''}Max value: ${item === null || item === void 0 ? void 0 : item.minValue}`,
14
+ maxlength: 'This field has exceeded the allowed maximum.',
15
+ maxSelected: null,
16
+ min: (item) => !isPresent(item) || !isPresent(item === null || item === void 0 ? void 0 : item.minValue)
17
+ ? `This field's value must be greater.`
18
+ : `Min value: ${item === null || item === void 0 ? void 0 : item.minValue}${!isPresent(item === null || item === void 0 ? void 0 : item.maxValue) ? '' : ` - Max value: ${item === null || item === void 0 ? void 0 : item.maxValue}`}`,
19
+ minlength: 'This field has not met the required minimum.',
20
+ minSelected: null,
21
+ nonDigit: `This field's value must be numeric.`,
22
+ pattern: `This field's input does not meet the accepted pattern.`,
23
+ positive: `This field's value cannot be negative.`,
24
+ required: 'This field is required.',
25
+ requiredTrue: `This field's value must be 'true'.`,
26
+ wholeNumber: `This field cannot contain a decimal.`,
27
+ matDatepickerParse: `This field's value is not an accepted format.`,
28
+ };
29
+ export const WEB_FORM_CUSTOM_ERRORS = new InjectionToken('mtnaWebFormCustomFormErrors');
30
+ export class MtnaWfUIService {
31
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
+ constructor(dialog, errors) {
33
+ this.dialog = dialog;
34
+ /** Map of annotation counts for each annotatable item */
35
+ this.annotations = {};
36
+ /** Map of components in the MtnaForm */
37
+ this.components = {};
38
+ /** Map of item.disabled values that have changed */
39
+ this.disabledState = {};
40
+ /** Map of toggler ID's for components that have multiple togglers */
41
+ this.multipleEnablers = {};
42
+ // Workaround for: Metadata collected contains an error that will be reported at runtime: Could not resolve type CustomErrors.
43
+ // see https://stackoverflow.com/questions/49513359/could-not-resolve-type-document-in-angular5/53715642#53715642
44
+ this.errors = errors;
45
+ }
46
+ getDisabledStates() {
47
+ return Object.assign({}, this.disabledState);
48
+ }
49
+ /**
50
+ * Returns an error message matching the error id
51
+ * @param errorId Id of the error, to find the associated error message
52
+ * @param item FormItem to pass to ValidationErrors that are functions. For instance,
53
+ * this is useful for 'min' & 'max' value limits to display more helpful messages
54
+ */
55
+ getError(errorId, item) {
56
+ // default when no custom message exists
57
+ let error = DEFAULT_ERROR_MESSAGES[errorId];
58
+ if (!!this.errors && !!item) {
59
+ // check for instance specific, via instanceId
60
+ if (isPresent(this.errors[item.instanceId]) && isPresent(this.errors[item.instanceId][errorId])) {
61
+ error = this.errors[item.instanceId][errorId];
62
+ // check for item specific, via itemId
63
+ }
64
+ else if (isPresent(this.errors[item.itemId]) && isPresent(this.errors[item.itemId][errorId])) {
65
+ error = this.errors[item.itemId][errorId];
66
+ }
67
+ }
68
+ return typeof error === 'function' ? error(item) : error;
69
+ }
70
+ /**
71
+ * Get a registered component by intance id.
72
+ * @param id the instanceId
73
+ * @returns the {@link FormItemComponent} that represents that ID or undefined if not registered.
74
+ */
75
+ getItem(id) {
76
+ return this.components[id];
77
+ }
78
+ /**
79
+ * Sets the initial map of annotation counts, and/or pushes the new count onto the component observable stream
80
+ * @param map AnnotatableNumberMap of counts mapped to their annotatableIds
81
+ */
82
+ registerAnnotations(map) {
83
+ for (const id in map) {
84
+ if (Object.prototype.hasOwnProperty.call(map, id)) {
85
+ if (!this.annotations[id]) {
86
+ this.annotations[id] = new BehaviorSubject(map[id]);
87
+ }
88
+ else {
89
+ this.annotations[id].next(map[id]);
90
+ }
91
+ }
92
+ }
93
+ }
94
+ /**
95
+ * Maps a component to its items instanceId.
96
+ * @param component component calling this method, i.e. 'this'
97
+ */
98
+ registerSelf(component) {
99
+ this.components[component.item.instanceId] = component;
100
+ if (!!component.item.annotatableId && component.item.annotationEnabled) {
101
+ if (!this.annotations[component.item.annotatableId]) {
102
+ this.annotations[component.item.annotatableId] = new BehaviorSubject(null);
103
+ }
104
+ component.annotations$ = this.annotations[component.item.annotatableId].asObservable();
105
+ }
106
+ }
107
+ /**
108
+ * Toggles a FormItem's visiblity and enable/disable state
109
+ *
110
+ * @param enabledItemIds array of component IDs for enabled items.
111
+ * @param disabledItemIds array of component IDs for disabled items.
112
+ * @param enabled Whether the enabledItemIds are enabled.
113
+ * @param callerId instanceId of the item invoking this function
114
+ * @param reset Whether to reset the multiple enabler map of the toggled item
115
+ */
116
+ toggleFormItems(enabledItemIds, disabledItemIds, enabled, callerId, reset = false) {
117
+ if ((!enabledItemIds || !enabledItemIds.length) && (!disabledItemIds || !disabledItemIds.length)) {
118
+ return;
119
+ }
120
+ const allIds = [enabledItemIds, disabledItemIds];
121
+ for (let i = 0; i < allIds.length; i++) {
122
+ const itemIds = allIds[i];
123
+ const isEnabled = i === 0 ? enabled : !enabled;
124
+ for (const id of itemIds) {
125
+ const component = this.components[id];
126
+ // If component is registered, toggle it
127
+ if (component) {
128
+ const item = component.item;
129
+ const hasMultipleEnablers = isConditionalItem(item) && item.condition ? item.condition.itemIds.length > 1 : false;
130
+ // If item has more than 1 enabler, handle multiple enablers
131
+ if (hasMultipleEnablers) {
132
+ if (reset) {
133
+ this.multipleEnablers[item.instanceId] = null;
134
+ }
135
+ // If a map has not been registered, then build up a map to register
136
+ // Should only happen the first time an item is toggled.
137
+ if (!this.multipleEnablers[item.instanceId] && isConditionalItem(item)) {
138
+ this.multipleEnablers[item.instanceId] = this._registerCurrentEnablers(item);
139
+ }
140
+ // handle Multiple Enablers
141
+ this._handleMultipleEnablers(component, isEnabled, callerId);
142
+ }
143
+ else {
144
+ // Not multiple enablers
145
+ this._toggleDisabledStateAndControl(component, isEnabled);
146
+ }
147
+ }
148
+ else {
149
+ console.error('[toggleFormItems] component has not been registerd', id, enabled, callerId);
150
+ }
151
+ }
152
+ }
153
+ }
154
+ /**
155
+ * Generates map of all IDs currently influencing an item.
156
+ * @param toggledItem item being toggled
157
+ */
158
+ _registerCurrentEnablers(toggledItem) {
159
+ var _a;
160
+ const enablers = {};
161
+ const allIds = ((_a = toggledItem.condition) === null || _a === void 0 ? void 0 : _a.itemIds) || [];
162
+ for (const id of allIds) {
163
+ const component = this.components[id];
164
+ if (component) {
165
+ if (this._isCurrentlyToggling(component, toggledItem.instanceId)) {
166
+ enablers[component.item.instanceId] = component.item.instanceId;
167
+ }
168
+ }
169
+ else {
170
+ console.error('[registerCurrentEnablers] component has not been registered.', id);
171
+ }
172
+ }
173
+ return enablers;
174
+ }
175
+ /**
176
+ * Resets the map of components. This should be called by the form when
177
+ * it is destroyed.
178
+ */
179
+ resetComponentMap() {
180
+ this.annotations = {};
181
+ this.components = {};
182
+ this.disabledState = {};
183
+ this.multipleEnablers = {};
184
+ }
185
+ /**
186
+ * Determines if an influencer is currently toggling the specified toggledItemId.
187
+ * @param influencer Item to check whether it's currently influencing the toggledItemId
188
+ * @param toggledId InstanceId of the item being toggled
189
+ * @returns Whether the influencer is currently toggling the toggled item
190
+ */
191
+ _isCurrentlyToggling(influencer, toggledId) {
192
+ var _a, _b, _c;
193
+ const item = influencer.item;
194
+ // Item has single option property, so check if selected, or item.value is 'true'
195
+ if (isOptionItemImpl(item)) {
196
+ return item.option.selected || !!item.value || !!((_a = influencer.control) === null || _a === void 0 ? void 0 : _a.value);
197
+ }
198
+ else if (isOptionGroupItemImpl(item)) {
199
+ const value = (_c = (_b = influencer.control) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : item.value;
200
+ if (Array.isArray(value)) {
201
+ // find the index of options that contain the 'toggledId' in their enabledItems
202
+ // & check if at least 1 is selected, or its 'true' in the value
203
+ const optionIndexes = item.options.map((o, i) => (o.enabledItems.some((id) => id === toggledId) ? i : null)).filter(isPresent);
204
+ return optionIndexes.some((i) => !!value[i]);
205
+ }
206
+ else if (typeof value === 'string' && value.length) {
207
+ // if the value is a single value, get the enabling option ids and check for the value in them
208
+ return item.options.some((o) => o.option.id === value && o.enabledItems.some((id) => id === toggledId));
209
+ }
210
+ }
211
+ return false;
212
+ }
213
+ /**
214
+ * Handles component visibility for a FormItem with multiple enablers in its condition
215
+ * @param component FormItemComponent being toggled
216
+ * @param enabled Whether the component is being enabled
217
+ * @param callerId ID of the caller toggling this component
218
+ */
219
+ _handleMultipleEnablers(component, enabled, callerId) {
220
+ var _a;
221
+ const item = component.item;
222
+ const enablers = Object.assign({}, this.multipleEnablers[item.instanceId]);
223
+ let isEnabled;
224
+ if (enabled) {
225
+ enablers[callerId] = callerId;
226
+ isEnabled =
227
+ isConditionalItem(item) &&
228
+ !!item.condition &&
229
+ (!item.condition.allRequired || item.condition.itemIds.every((id) => !!enablers[id]));
230
+ }
231
+ else {
232
+ delete enablers[callerId];
233
+ isEnabled = !((isConditionalItem(item) && ((_a = item.condition) === null || _a === void 0 ? void 0 : _a.allRequired)) || !Object.keys(enablers).length);
234
+ }
235
+ // If enabled === disabled, then the state has changed
236
+ if (this._isDisabled(item) === isEnabled) {
237
+ this._toggleDisabledStateAndControl(component, isEnabled);
238
+ }
239
+ // set the new enabler map
240
+ this.multipleEnablers[item.instanceId] = enablers;
241
+ }
242
+ /**
243
+ * Enables or disables the control on a FormItemComponent
244
+ * @param component FormItemComponent to enable or disable its control
245
+ * @param enabled whether to enable the control
246
+ */
247
+ _toggleControlState(component, enabled) {
248
+ var _a, _b, _c;
249
+ if (enabled && !((_a = component.control) === null || _a === void 0 ? void 0 : _a.enabled)) {
250
+ // Enable the control if it isn't already
251
+ if (component.control instanceof FormGroup) {
252
+ this._enableIndividualControls(component);
253
+ }
254
+ else {
255
+ (_b = component.control) === null || _b === void 0 ? void 0 : _b.enable();
256
+ }
257
+ }
258
+ else if (!enabled && ((_c = component.control) === null || _c === void 0 ? void 0 : _c.enabled)) {
259
+ // Disable the control if it isn't already
260
+ component.control.disable();
261
+ }
262
+ }
263
+ /**
264
+ * Toggles both the component visiblity and the control's enable/disable status
265
+ * @param component FormItemComponent to show or hide and enable or disable
266
+ * @param enabled whether to show the component and whether to enable the component
267
+ */
268
+ _toggleDisabledStateAndControl(component, enabled) {
269
+ this.disabledState[component.item.instanceId] = !enabled;
270
+ this._toggleControlState(component, enabled);
271
+ if (isConditionalItem(component.item) && component.item.hideOnDisable) {
272
+ component.visible = enabled;
273
+ }
274
+ }
275
+ /**
276
+ * Enables controls individually using recursion.
277
+ * FormGroups should only exist for items with 'items' arrays, or
278
+ * if the component is a BaseParentItemControl
279
+ * @param comp FormItemComponent
280
+ */
281
+ _enableIndividualControls(comp) {
282
+ const group = comp.control;
283
+ if (isOptionItemImpl(comp.item) || isOptionGroupItemImpl(comp.item)) {
284
+ const map = comp.item.optionItemMap;
285
+ const self = group.get(comp.item.instanceId);
286
+ self === null || self === void 0 ? void 0 : self.enable();
287
+ for (const optionId in map) {
288
+ if (Object.prototype.hasOwnProperty.call(map, optionId)) {
289
+ const childComp = this.components[map[optionId].instanceId];
290
+ if (!this._isDisabled(childComp.item)) {
291
+ this._toggleControlState(childComp, true);
292
+ }
293
+ }
294
+ }
295
+ }
296
+ else if (isType(comp.item, 'items') && comp.item.items.length) {
297
+ // Item must have 'items' array
298
+ for (const item of comp.item.items) {
299
+ const childComp = this.components[item.instanceId];
300
+ if (!this._isDisabled(item)) {
301
+ this._toggleControlState(childComp, true);
302
+ }
303
+ }
304
+ }
305
+ group.updateValueAndValidity();
306
+ }
307
+ /**
308
+ * Determines if a component is disabled. Prioritizes the disabledState value,
309
+ * if it exists, otherwise returns the item's previous disabled value
310
+ * @param item item to check for its disabled state
311
+ */
312
+ _isDisabled(item) {
313
+ const existsInDisabledStatMap = isPresent(this.disabledState[item.instanceId]);
314
+ if (!existsInDisabledStatMap) {
315
+ return isConditionalItem(item) ? item.disabled : false;
316
+ }
317
+ else {
318
+ return this.disabledState[item.instanceId];
319
+ }
320
+ }
321
+ }
322
+ MtnaWfUIService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfUIService, deps: [{ token: i1.MatDialog }, { token: WEB_FORM_CUSTOM_ERRORS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
323
+ MtnaWfUIService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfUIService, providedIn: 'root' });
324
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfUIService, decorators: [{
325
+ type: Injectable,
326
+ args: [{ providedIn: 'root' }]
327
+ }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: undefined, decorators: [{
328
+ type: Optional
329
+ }, {
330
+ type: Inject,
331
+ args: [WEB_FORM_CUSTOM_ERRORS]
332
+ }] }]; } });
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQTJDLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBbUJ2QyxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQXFCO0lBQ3RELEtBQUssRUFBRSwrQ0FBK0M7SUFDdEQsR0FBRyxFQUFFLENBQUMsSUFBb0UsRUFBRSxFQUFFLENBQzVFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLENBQUM7UUFDNUMsQ0FBQyxDQUFDLGtDQUFrQztRQUNwQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLEVBQUU7SUFDekcsU0FBUyxFQUFFLDhDQUE4QztJQUN6RCxXQUFXLEVB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QyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQzs7NkdBcFNVLGVBQWUsMkNBWWlDLHNCQUFzQjtpSEFadEUsZUFBZSxjQURGLE1BQU07NEZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFhUSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgaXNQcmVzZW50LCBpc1R5cGUgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7IEFubm90YXRhYmxlTnVtYmVyTWFwIH0gZnJvbSAnQG10bmEvcG9qby1zb2NpYWwtYW5ndWxhcic7XG5pbXBvcnQgeyBDb25kaXRpb25hbEl0ZW0sIEZvcm1JdGVtLCBGb3JtSXRlbUltcGwsIGlzQ29uZGl0aW9uYWxJdGVtLCBpc09wdGlvbkdyb3VwSXRlbUltcGwsIGlzT3B0aW9uSXRlbUltcGwgfSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2Zvcm0taXRlbS9mb3JtLWl0ZW0uY29tcG9uZW50JztcblxuLyoqIFJlZ2lzdHJ5IG9mIGN1c3RvbSBlcnJvciBtZXNzYWdlcyBmb3IgYSBzcGVjaWZpYyBmb3JtIGl0ZW0uIEEgY3VzdG9tIGVycm9yIGNhbiBhbHNvXG4gKiBiZSBhIGZ1bmN0aW9uIHJldHVybmluZyBhIHN0cmluZy4gVGhlIEZvcm1JdGVtIG9iamVjdCBpcyBwYXNzZWQgdG8gYW55IFZhbGlkYXRpb25FcnJvcnNcbiAqIHRoYXQgYXJlIGZ1bmN0aW9ucywgc28gaXRlbSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBjYW4gYmUgcHJvdmlkZWQuXG4gKiBAZXhhbXBsZSB7XG4gKiBtYXg6IGBUaGlzIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBsZXNzLmAsXG4gKiBtaW46IChpdGVtOiBGb3JtSXRlbUltcGw8YW55PikgPT4gaW5zdGFuY2VvZldob2xlTnVtYmVySXRlbShpdGVtKVxuICogPyBgVGhpcyBmaWVsZCdzIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICR7aXRlbS5taW5WYWx1ZX0uYFxuICogOiBgVGhpcyBmaWVsZCdzIHZhbHVlIG11c3QgYmUgZ3JlYXRlci5gXG4gKiB9XG4gKi9cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTppbnRlcmZhY2Utb3Zlci10eXBlLWxpdGVyYWxcbmV4cG9ydCB0eXBlIEN1c3RvbUVycm9ycyA9IHtcbiAgW2lkOiBzdHJpbmddOiBWYWxpZGF0aW9uRXJyb3JzO1xufTtcblxuLyoqIExpc3Qgb2YgZGVmYXVsdCBlcnJvciBtZXNzYWdlcyB0byBkaXNwbGF5ICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FUlJPUl9NRVNTQUdFUzogVmFsaWRhdGlvbkVycm9ycyA9IHtcbiAgZW1haWw6ICdUaGlzIGZpZWxkIG11c3QgaW5jbHVkZSBhIHZhbGlkIGVtYWlsIGZvcm1hdC4nLFxuICBtYXg6IChpdGVtPzogRm9ybUl0ZW1JbXBsPG51bWJlcj4gJiB7IG1heFZhbHVlOiBudW1iZXI7IG1pblZhbHVlOiBudW1iZXIgfSkgPT5cbiAgICAhaXNQcmVzZW50KGl0ZW0pIHx8ICFpc1ByZXNlbnQoaXRlbT8ubWF4VmFsdWUpXG4gICAgICA/IGBUaGlzIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBsZXNzLmBcbiAgICAgIDogYCR7aXNQcmVzZW50KGl0ZW0/Lm1pblZhbHVlKSA/IGBNaW4gdmFsdWU6ICR7aXRlbT8ubWluVmFsdWV9IC0gYCA6ICcnfU1heCB2YWx1ZTogJHtpdGVtPy5taW5WYWx1ZX1gLFxuICBtYXhsZW5ndGg6ICdUaGlzIGZpZWxkIGhhcyBleGNlZWRlZCB0aGUgYWxsb3dlZCBtYXhpbXVtLicsXG4gIG1heFNlbGVjdGVkOiBudWxsLFxuICBtaW46IChpdGVtPzogRm9ybUl0ZW1JbXBsPG51bWJlcj4gJiB7IG1heFZhbHVlOiBudW1iZXI7IG1pblZhbHVlOiBudW1iZXIgfSkgPT5cbiAgICAhaXNQcmVzZW50KGl0ZW0pIHx8ICFpc1ByZXNlbnQoaXRlbT8ubWluVmFsdWUpXG4gICAgICA/IGBUaGlzIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBncmVhdGVyLmBcbiAgICAgIDogYE1pbiB2YWx1ZTogJHtpdGVtPy5taW5WYWx1ZX0keyFpc1ByZXNlbnQoaXRlbT8ubWF4VmFsdWUpID8gJycgOiBgIC0gTWF4IHZhbHVlOiAke2l0ZW0/Lm1heFZhbHVlfWB9YCxcbiAgbWlubGVuZ3RoOiAnVGhpcyBmaWVsZCBoYXMgbm90IG1ldCB0aGUgcmVxdWlyZWQgbWluaW11bS4nLFxuICBtaW5TZWxlY3RlZDogbnVsbCxcbiAgbm9uRGlnaXQ6IGBUaGlzIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBudW1lcmljLmAsXG4gIHBhdHRlcm46IGBUaGlzIGZpZWxkJ3MgaW5wdXQgZG9lcyBub3QgbWVldCB0aGUgYWNjZXB0ZWQgcGF0dGVybi5gLFxuICBwb3NpdGl2ZTogYFRoaXMgZmllbGQncyB2YWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuYCxcbiAgcmVxdWlyZWQ6ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicsXG4gIHJlcXVpcmVkVHJ1ZTogYFRoaXMgZmllbGQncyB2YWx1ZSBtdXN0IGJlICd0cnVlJy5gLFxuICB3aG9sZU51bWJlcjogYFRoaXMgZmllbGQgY2Fubm90IGNvbnRhaW4gYSBkZWNpbWFsLmAsXG4gIG1hdERhdGVwaWNrZXJQYXJzZTogYFRoaXMgZmllbGQncyB2YWx1ZSBpcyBub3QgYW4gYWNjZXB0ZWQgZm9ybWF0LmAsXG59O1xuXG5leHBvcnQgY29uc3QgV0VCX0ZPUk1fQ1VTVE9NX0VSUk9SUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDdXN0b21FcnJvcnM+KCdtdG5hV2ViRm9ybUN1c3RvbUZvcm1FcnJvcnMnKTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZVSVNlcnZpY2Uge1xuICAvKiogTWFwIG9mIGFubm90YXRpb24gY291bnRzIGZvciBlYWNoIGFubm90YXRhYmxlIGl0ZW0gKi9cbiAgcHJpdmF0ZSBhbm5vdGF0aW9uczogeyBbaWQ6IHN0cmluZ106IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCBudWxsPiB9ID0ge307XG4gIC8qKiBNYXAgb2YgY29tcG9uZW50cyBpbiB0aGUgTXRuYUZvcm0gKi9cbiAgcHJpdmF0ZSBjb21wb25lbnRzOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCB9ID0ge307XG4gIC8qKiBNYXAgb2YgaXRlbS5kaXNhYmxlZCB2YWx1ZXMgdGhhdCBoYXZlIGNoYW5nZWQgKi9cbiAgcHJpdmF0ZSBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbiAgLyoqIE1hcCBvZiB0b2dnbGVyIElEJ3MgZm9yIGNvbXBvbmVudHMgdGhhdCBoYXZlIG11bHRpcGxlIHRvZ2dsZXJzICovXG4gIHByaXZhdGUgbXVsdGlwbGVFbmFibGVyczogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogeyBbdG9nZ2xlcklkOiBzdHJpbmddOiBzdHJpbmcgfSB8IG51bGwgfSA9IHt9O1xuICBwcml2YXRlIGVycm9yczogQ3VzdG9tRXJyb3JzO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csIEBPcHRpb25hbCgpIEBJbmplY3QoV0VCX0ZPUk1fQ1VTVE9NX0VSUk9SUykgZXJyb3JzPzogYW55KSB7XG4gICAgLy8gV29ya2Fyb3VuZCBmb3I6IE1ldGFkYXRhIGNvbGxlY3RlZCBjb250YWlucyBhbiBlcnJvciB0aGF0IHdpbGwgYmUgcmVwb3J0ZWQgYXQgcnVudGltZTogQ291bGQgbm90IHJlc29sdmUgdHlwZSBDdXN0b21FcnJvcnMuXG4gICAgLy8gc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5NTEzMzU5L2NvdWxkLW5vdC1yZXNvbHZlLXR5cGUtZG9jdW1lbnQtaW4tYW5ndWxhcjUvNTM3MTU2NDIjNTM3MTU2NDJcbiAgICB0aGlzLmVycm9ycyA9IGVycm9ycyBhcyBDdXN0b21FcnJvcnM7XG4gIH1cblxuICBnZXREaXNhYmxlZFN0YXRlcygpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmRpc2FibGVkU3RhdGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UgbWF0Y2hpbmcgdGhlIGVycm9yIGlkXG4gICAqIEBwYXJhbSBlcnJvcklkIElkIG9mIHRoZSBlcnJvciwgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBlcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRvIHBhc3MgdG8gVmFsaWRhdGlvbkVycm9ycyB0aGF0IGFyZSBmdW5jdGlvbnMuIEZvciBpbnN0YW5jZSxcbiAgICogdGhpcyBpcyB1c2VmdWwgZm9yICdtaW4nICYgJ21heCcgdmFsdWUgbGltaXRzIHRvIGRpc3BsYXkgbW9yZSBoZWxwZnVsIG1lc3NhZ2VzXG4gICAqL1xuICBnZXRFcnJvcihlcnJvcklkOiBzdHJpbmcsIGl0ZW0/OiBGb3JtSXRlbUltcGw8dW5rbm93bj4pOiBzdHJpbmcge1xuICAgIC8vIGRlZmF1bHQgd2hlbiBubyBjdXN0b20gbWVzc2FnZSBleGlzdHNcbiAgICBsZXQgZXJyb3IgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTW2Vycm9ySWRdO1xuICAgIGlmICghIXRoaXMuZXJyb3JzICYmICEhaXRlbSkge1xuICAgICAgLy8gY2hlY2sgZm9yIGluc3RhbmNlIHNwZWNpZmljLCB2aWEgaW5zdGFuY2VJZFxuICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmVycm9yc1tpdGVtLmluc3RhbmNlSWRdKSAmJiBpc1ByZXNlbnQodGhpcy5lcnJvcnNbaXRlbS5pbnN0YW5jZUlkXVtlcnJvcklkXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0aGlzLmVycm9yc1tpdGVtLmluc3RhbmNlSWRdW2Vycm9ySWRdO1xuICAgICAgICAvLyBjaGVjayBmb3IgaXRlbSBzcGVjaWZpYywgdmlhIGl0ZW1JZFxuICAgICAgfSBlbHNlIGlmIChpc1ByZXNlbnQodGhpcy5lcnJvcnNbaXRlbS5pdGVtSWRdKSAmJiBpc1ByZXNlbnQodGhpcy5lcnJvcnNbaXRlbS5pdGVtSWRdW2Vycm9ySWRdKSkge1xuICAgICAgICBlcnJvciA9IHRoaXMuZXJyb3JzW2l0ZW0uaXRlbUlkXVtlcnJvcklkXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gJ2Z1bmN0aW9uJyA/IGVycm9yKGl0ZW0pIDogZXJyb3I7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcmVnaXN0ZXJlZCBjb21wb25lbnQgYnkgaW50YW5jZSBpZC5cbiAgICogQHBhcmFtIGlkIHRoZSBpbnN0YW5jZUlkXG4gICAqIEByZXR1cm5zIHRoZSB7QGxpbmsgRm9ybUl0ZW1Db21wb25lbnR9IHRoYXQgcmVwcmVzZW50cyB0aGF0IElEIG9yIHVuZGVmaW5lZCBpZiBub3QgcmVnaXN0ZXJlZC5cbiAgICovXG4gIGdldEl0ZW0oaWQ6IHN0cmluZyk6IE10bmFXZkZvcm1JdGVtQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRzW2lkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbml0aWFsIG1hcCBvZiBhbm5vdGF0aW9uIGNvdW50cywgYW5kL29yIHB1c2hlcyB0aGUgbmV3IGNvdW50IG9udG8gdGhlIGNvbXBvbmVudCBvYnNlcnZhYmxlIHN0cmVhbVxuICAgKiBAcGFyYW0gbWFwIEFubm90YXRhYmxlTnVtYmVyTWFwIG9mIGNvdW50cyBtYXBwZWQgdG8gdGhlaXIgYW5ub3RhdGFibGVJZHNcbiAgICovXG4gIHJlZ2lzdGVyQW5ub3RhdGlvbnMobWFwOiBBbm5vdGF0YWJsZU51bWJlck1hcCkge1xuICAgIGZvciAoY29uc3QgaWQgaW4gbWFwKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgaWQpKSB7XG4gICAgICAgIGlmICghdGhpcy5hbm5vdGF0aW9uc1tpZF0pIHtcbiAgICAgICAgICB0aGlzLmFubm90YXRpb25zW2lkXSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obWFwW2lkXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hbm5vdGF0aW9uc1tpZF0ubmV4dChtYXBbaWRdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGEgY29tcG9uZW50IHRvIGl0cyBpdGVtcyBpbnN0YW5jZUlkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IGNvbXBvbmVudCBjYWxsaW5nIHRoaXMgbWV0aG9kLCBpLmUuICd0aGlzJ1xuICAgKi9cbiAgcmVnaXN0ZXJTZWxmKGNvbXBvbmVudDogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQpIHtcbiAgICB0aGlzLmNvbXBvbmVudHNbY29tcG9uZW50Lml0ZW0uaW5zdGFuY2VJZF0gPSBjb21wb25lbnQ7XG4gICAgaWYgKCEhY29tcG9uZW50Lml0ZW0uYW5ub3RhdGFibGVJZCAmJiBjb21wb25lbnQuaXRlbS5hbm5vdGF0aW9uRW5hYmxlZCkge1xuICAgICAgaWYgKCF0aGlzLmFubm90YXRpb25zW2NvbXBvbmVudC5pdGVtLmFubm90YXRhYmxlSWRdKSB7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbnNbY29tcG9uZW50Lml0ZW0uYW5ub3RhdGFibGVJZF0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuICAgICAgfVxuICAgICAgY29tcG9uZW50LmFubm90YXRpb25zJCA9IHRoaXMuYW5ub3RhdGlvbnNbY29tcG9uZW50Lml0ZW0uYW5ub3RhdGFibGVJZF0uYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgYSBGb3JtSXRlbSdzIHZpc2libGl0eSBhbmQgZW5hYmxlL2Rpc2FibGUgc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIGVuYWJsZWRJdGVtSWRzIGFycmF5IG9mIGNvbXBvbmVudCBJRHMgZm9yIGVuYWJsZWQgaXRlbXMuXG4gICAqIEBwYXJhbSBkaXNhYmxlZEl0ZW1JZHMgYXJyYXkgb2YgY29tcG9uZW50IElEcyBmb3IgZGlzYWJsZWQgaXRlbXMuXG4gICAqIEBwYXJhbSBlbmFibGVkIFdoZXRoZXIgdGhlIGVuYWJsZWRJdGVtSWRzIGFyZSBlbmFibGVkLlxuICAgKiBAcGFyYW0gY2FsbGVySWQgaW5zdGFuY2VJZCBvZiB0aGUgaXRlbSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSByZXNldCBXaGV0aGVyIHRvIHJlc2V0IHRoZSBtdWx0aXBsZSBlbmFibGVyIG1hcCBvZiB0aGUgdG9nZ2xlZCBpdGVtXG4gICAqL1xuICB0b2dnbGVGb3JtSXRlbXMoZW5hYmxlZEl0ZW1JZHM6IEFycmF5PHN0cmluZz4sIGRpc2FibGVkSXRlbUlkczogQXJyYXk8c3RyaW5nPiwgZW5hYmxlZDogYm9vbGVhbiwgY2FsbGVySWQ6IHN0cmluZywgcmVzZXQgPSBmYWxzZSkge1xuICAgIGlmICgoIWVuYWJsZWRJdGVtSWRzIHx8ICFlbmFibGVkSXRlbUlkcy5sZW5ndGgpICYmICghZGlzYWJsZWRJdGVtSWRzIHx8ICFkaXNhYmxlZEl0ZW1JZHMubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhbGxJZHMgPSBbZW5hYmxlZEl0ZW1JZHMsIGRpc2FibGVkSXRlbUlkc107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW1JZHMgPSBhbGxJZHNbaV07XG4gICAgICBjb25zdCBpc0VuYWJsZWQgPSBpID09PSAwID8gZW5hYmxlZCA6ICFlbmFibGVkO1xuICAgICAgZm9yIChjb25zdCBpZCBvZiBpdGVtSWRzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c1tpZF07XG4gICAgICAgIC8vIElmIGNvbXBvbmVudCBpcyByZWdpc3RlcmVkLCB0b2dnbGUgaXRcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjb21wb25lbnQuaXRlbTtcbiAgICAgICAgICBjb25zdCBoYXNNdWx0aXBsZUVuYWJsZXJzID0gaXNDb25kaXRpb25hbEl0ZW0oaXRlbSkgJiYgaXRlbS5jb25kaXRpb24gPyBpdGVtLmNvbmRpdGlvbi5pdGVtSWRzLmxlbmd0aCA+IDEgOiBmYWxzZTtcbiAgICAgICAgICAvLyBJZiBpdGVtIGhhcyBtb3JlIHRoYW4gMSBlbmFibGVyLCBoYW5kbGUgbXVsdGlwbGUgZW5hYmxlcnNcbiAgICAgICAgICBpZiAoaGFzTXVsdGlwbGVFbmFibGVycykge1xuICAgICAgICAgICAgaWYgKHJlc2V0KSB7XG4gICAgICAgICAgICAgIHRoaXMubXVsdGlwbGVFbmFibGVyc1tpdGVtLmluc3RhbmNlSWRdID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIGEgbWFwIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLCB0aGVuIGJ1aWxkIHVwIGEgbWFwIHRvIHJlZ2lzdGVyXG4gICAgICAgICAgICAvLyBTaG91bGQgb25seSBoYXBwZW4gdGhlIGZpcnN0IHRpbWUgYW4gaXRlbSBpcyB0b2dnbGVkLlxuICAgICAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSAmJiBpc0NvbmRpdGlvbmFsSXRlbShpdGVtKSkge1xuICAgICAgICAgICAgICB0aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSA9IHRoaXMuX3JlZ2lzdGVyQ3VycmVudEVuYWJsZXJzKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGFuZGxlIE11bHRpcGxlIEVuYWJsZXJzXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVNdWx0aXBsZUVuYWJsZXJzKGNvbXBvbmVudCwgaXNFbmFibGVkLCBjYWxsZXJJZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vdCBtdWx0aXBsZSBlbmFibGVyc1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlRGlzYWJsZWRTdGF0ZUFuZENvbnRyb2woY29tcG9uZW50LCBpc0VuYWJsZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdG9nZ2xlRm9ybUl0ZW1zXSBjb21wb25lbnQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZCcsIGlkLCBlbmFibGVkLCBjYWxsZXJJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIG1hcCBvZiBhbGwgSURzIGN1cnJlbnRseSBpbmZsdWVuY2luZyBhbiBpdGVtLlxuICAgKiBAcGFyYW0gdG9nZ2xlZEl0ZW0gaXRlbSBiZWluZyB0b2dnbGVkXG4gICAqL1xuICBwcml2YXRlIF9yZWdpc3RlckN1cnJlbnRFbmFibGVycyh0b2dnbGVkSXRlbTogQ29uZGl0aW9uYWxJdGVtKTogeyBbY2FsbGVySWQ6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCBlbmFibGVyczogeyBbY2FsbGVySWQ6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgY29uc3QgYWxsSWRzID0gdG9nZ2xlZEl0ZW0uY29uZGl0aW9uPy5pdGVtSWRzIHx8IFtdO1xuXG4gICAgZm9yIChjb25zdCBpZCBvZiBhbGxJZHMpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c1tpZF07XG4gICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0N1cnJlbnRseVRvZ2dsaW5nKGNvbXBvbmVudCwgdG9nZ2xlZEl0ZW0uaW5zdGFuY2VJZCkpIHtcbiAgICAgICAgICBlbmFibGVyc1tjb21wb25lbnQuaXRlbS5pbnN0YW5jZUlkXSA9IGNvbXBvbmVudC5pdGVtLmluc3RhbmNlSWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tyZWdpc3RlckN1cnJlbnRFbmFibGVyc10gY29tcG9uZW50IGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLicsIGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW5hYmxlcnM7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBtYXAgb2YgY29tcG9uZW50cy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSBmb3JtIHdoZW5cbiAgICogaXQgaXMgZGVzdHJveWVkLlxuICAgKi9cbiAgcmVzZXRDb21wb25lbnRNYXAoKSB7XG4gICAgdGhpcy5hbm5vdGF0aW9ucyA9IHt9O1xuICAgIHRoaXMuY29tcG9uZW50cyA9IHt9O1xuICAgIHRoaXMuZGlzYWJsZWRTdGF0ZSA9IHt9O1xuICAgIHRoaXMubXVsdGlwbGVFbmFibGVycyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYW4gaW5mbHVlbmNlciBpcyBjdXJyZW50bHkgdG9nZ2xpbmcgdGhlIHNwZWNpZmllZCB0b2dnbGVkSXRlbUlkLlxuICAgKiBAcGFyYW0gaW5mbHVlbmNlciBJdGVtIHRvIGNoZWNrIHdoZXRoZXIgaXQncyBjdXJyZW50bHkgaW5mbHVlbmNpbmcgdGhlIHRvZ2dsZWRJdGVtSWRcbiAgICogQHBhcmFtIHRvZ2dsZWRJZCBJbnN0YW5jZUlkIG9mIHRoZSBpdGVtIGJlaW5nIHRvZ2dsZWRcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgaW5mbHVlbmNlciBpcyBjdXJyZW50bHkgdG9nZ2xpbmcgdGhlIHRvZ2dsZWQgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBfaXNDdXJyZW50bHlUb2dnbGluZyhpbmZsdWVuY2VyOiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCwgdG9nZ2xlZElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpdGVtID0gaW5mbHVlbmNlci5pdGVtO1xuICAgIC8vIEl0ZW0gaGFzIHNpbmdsZSBvcHRpb24gcHJvcGVydHksIHNvIGNoZWNrIGlmIHNlbGVjdGVkLCBvciBpdGVtLnZhbHVlIGlzICd0cnVlJ1xuICAgIGlmIChpc09wdGlvbkl0ZW1JbXBsKGl0ZW0pKSB7XG4gICAgICByZXR1cm4gaXRlbS5vcHRpb24uc2VsZWN0ZWQgfHwgISFpdGVtLnZhbHVlIHx8ICEhaW5mbHVlbmNlci5jb250cm9sPy52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGlzT3B0aW9uR3JvdXBJdGVtSW1wbChpdGVtKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbmZsdWVuY2VyLmNvbnRyb2w/LnZhbHVlID8/IGl0ZW0udmFsdWU7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gZmluZCB0aGUgaW5kZXggb2Ygb3B0aW9ucyB0aGF0IGNvbnRhaW4gdGhlICd0b2dnbGVkSWQnIGluIHRoZWlyIGVuYWJsZWRJdGVtc1xuICAgICAgICAvLyAmIGNoZWNrIGlmIGF0IGxlYXN0IDEgaXMgc2VsZWN0ZWQsIG9yIGl0cyAndHJ1ZScgaW4gdGhlIHZhbHVlXG4gICAgICAgIGNvbnN0IG9wdGlvbkluZGV4ZXMgPSBpdGVtLm9wdGlvbnMubWFwKChvLCBpKSA9PiAoby5lbmFibGVkSXRlbXMuc29tZSgoaWQpID0+IGlkID09PSB0b2dnbGVkSWQpID8gaSA6IG51bGwpKS5maWx0ZXIoaXNQcmVzZW50KTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbkluZGV4ZXMuc29tZSgoaSkgPT4gISF2YWx1ZVtpXSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBhIHNpbmdsZSB2YWx1ZSwgZ2V0IHRoZSBlbmFibGluZyBvcHRpb24gaWRzIGFuZCBjaGVjayBmb3IgdGhlIHZhbHVlIGluIHRoZW1cbiAgICAgICAgcmV0dXJuIGl0ZW0ub3B0aW9ucy5zb21lKChvKSA9PiBvLm9wdGlvbi5pZCA9PT0gdmFsdWUgJiYgby5lbmFibGVkSXRlbXMuc29tZSgoaWQpID0+IGlkID09PSB0b2dnbGVkSWQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY29tcG9uZW50IHZpc2liaWxpdHkgZm9yIGEgRm9ybUl0ZW0gd2l0aCBtdWx0aXBsZSBlbmFibGVycyBpbiBpdHMgY29uZGl0aW9uXG4gICAqIEBwYXJhbSBjb21wb25lbnQgRm9ybUl0ZW1Db21wb25lbnQgYmVpbmcgdG9nZ2xlZFxuICAgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZW5hYmxlZFxuICAgKiBAcGFyYW0gY2FsbGVySWQgSUQgb2YgdGhlIGNhbGxlciB0b2dnbGluZyB0aGlzIGNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBfaGFuZGxlTXVsdGlwbGVFbmFibGVycyhjb21wb25lbnQ6IE10bmFXZkZvcm1JdGVtQ29tcG9uZW50LCBlbmFibGVkOiBib29sZWFuLCBjYWxsZXJJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgaXRlbSA9IGNvbXBvbmVudC5pdGVtO1xuICAgIGNvbnN0IGVuYWJsZXJzID0geyAuLi50aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSB9O1xuICAgIGxldCBpc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIGVuYWJsZXJzW2NhbGxlcklkXSA9IGNhbGxlcklkO1xuICAgICAgaXNFbmFibGVkID1cbiAgICAgICAgaXNDb25kaXRpb25hbEl0ZW0oaXRlbSkgJiZcbiAgICAgICAgISFpdGVtLmNvbmRpdGlvbiAmJlxuICAgICAgICAoIWl0ZW0uY29uZGl0aW9uLmFsbFJlcXVpcmVkIHx8IGl0ZW0uY29uZGl0aW9uLml0ZW1JZHMuZXZlcnkoKGlkKSA9PiAhIWVuYWJsZXJzW2lkXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgZW5hYmxlcnNbY2FsbGVySWRdO1xuICAgICAgaXNFbmFibGVkID0gISgoaXNDb25kaXRpb25hbEl0ZW0oaXRlbSkgJiYgaXRlbS5jb25kaXRpb24/LmFsbFJlcXVpcmVkKSB8fCAhT2JqZWN0LmtleXMoZW5hYmxlcnMpLmxlbmd0aCk7XG4gICAgfVxuICAgIC8vIElmIGVuYWJsZWQgPT09IGRpc2FibGVkLCB0aGVuIHRoZSBzdGF0ZSBoYXMgY2hhbmdlZFxuICAgIGlmICh0aGlzLl9pc0Rpc2FibGVkKGl0ZW0pID09PSBpc0VuYWJsZWQpIHtcbiAgICAgIHRoaXMuX3RvZ2dsZURpc2FibGVkU3RhdGVBbmRDb250cm9sKGNvbXBvbmVudCwgaXNFbmFibGVkKTtcbiAgICB9XG4gICAgLy8gc2V0IHRoZSBuZXcgZW5hYmxlciBtYXBcbiAgICB0aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSA9IGVuYWJsZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGNvbnRyb2wgb24gYSBGb3JtSXRlbUNvbXBvbmVudFxuICAgKiBAcGFyYW0gY29tcG9uZW50IEZvcm1JdGVtQ29tcG9uZW50IHRvIGVuYWJsZSBvciBkaXNhYmxlIGl0cyBjb250cm9sXG4gICAqIEBwYXJhbSBlbmFibGVkIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBjb250cm9sXG4gICAqL1xuICBwcml2YXRlIF90b2dnbGVDb250cm9sU3RhdGUoY29tcG9uZW50OiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCwgZW5hYmxlZDogYm9vbGVhbikge1xuICAgIGlmIChlbmFibGVkICYmICFjb21wb25lbnQuY29udHJvbD8uZW5hYmxlZCkge1xuICAgICAgLy8gRW5hYmxlIHRoZSBjb250cm9sIGlmIGl0IGlzbid0IGFscmVhZHlcbiAgICAgIGlmIChjb21wb25lbnQuY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLl9lbmFibGVJbmRpdmlkdWFsQ29udHJvbHMoY29tcG9uZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBvbmVudC5jb250cm9sPy5lbmFibGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFlbmFibGVkICYmIGNvbXBvbmVudC5jb250cm9sPy5lbmFibGVkKSB7XG4gICAgICAvLyBEaXNhYmxlIHRoZSBjb250cm9sIGlmIGl0IGlzbid0IGFscmVhZHlcbiAgICAgIGNvbXBvbmVudC5jb250cm9sLmRpc2FibGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBib3RoIHRoZSBjb21wb25lbnQgdmlzaWJsaXR5IGFuZCB0aGUgY29udHJvbCdzIGVuYWJsZS9kaXNhYmxlIHN0YXR1c1xuICAgKiBAcGFyYW0gY29tcG9uZW50IEZvcm1JdGVtQ29tcG9uZW50IHRvIHNob3cgb3IgaGlkZSBhbmQgZW5hYmxlIG9yIGRpc2FibGVcbiAgICogQHBhcmFtIGVuYWJsZWQgd2hldGhlciB0byBzaG93IHRoZSBjb21wb25lbnQgYW5kIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgX3RvZ2dsZURpc2FibGVkU3RhdGVBbmRDb250cm9sKGNvbXBvbmVudDogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQsIGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkU3RhdGVbY29tcG9uZW50Lml0ZW0uaW5zdGFuY2VJZF0gPSAhZW5hYmxlZDtcbiAgICB0aGlzLl90b2dnbGVDb250cm9sU3RhdGUoY29tcG9uZW50LCBlbmFibGVkKTtcbiAgICBpZiAoaXNDb25kaXRpb25hbEl0ZW0oY29tcG9uZW50Lml0ZW0pICYmIGNvbXBvbmVudC5pdGVtLmhpZGVPbkRpc2FibGUpIHtcbiAgICAgIGNvbXBvbmVudC52aXNpYmxlID0gZW5hYmxlZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBjb250cm9scyBpbmRpdmlkdWFsbHkgdXNpbmcgcmVjdXJzaW9uLlxuICAgKiBGb3JtR3JvdXBzIHNob3VsZCBvbmx5IGV4aXN0IGZvciBpdGVtcyB3aXRoICdpdGVtcycgYXJyYXlzLCBvclxuICAgKiBpZiB0aGUgY29tcG9uZW50IGlzIGEgQmFzZVBhcmVudEl0ZW1Db250cm9sXG4gICAqIEBwYXJhbSBjb21wIEZvcm1JdGVtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIF9lbmFibGVJbmRpdmlkdWFsQ29udHJvbHMoY29tcDogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQpIHtcbiAgICBjb25zdCBncm91cCA9IGNvbXAuY29udHJvbCBhcyBGb3JtR3JvdXA7XG5cbiAgICBpZiAoaXNPcHRpb25JdGVtSW1wbChjb21wLml0ZW0pIHx8IGlzT3B0aW9uR3JvdXBJdGVtSW1wbChjb21wLml0ZW0pKSB7XG4gICAgICBjb25zdCBtYXAgPSBjb21wLml0ZW0ub3B0aW9uSXRlbU1hcDtcbiAgICAgIGNvbnN0IHNlbGYgPSBncm91cC5nZXQoY29tcC5pdGVtLmluc3RhbmNlSWQpO1xuICAgICAgc2VsZj8uZW5hYmxlKCk7XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbklkIGluIG1hcCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgb3B0aW9uSWQpKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRDb21wID0gdGhpcy5jb21wb25lbnRzW21hcFtvcHRpb25JZF0uaW5zdGFuY2VJZF07XG4gICAgICAgICAgaWYgKCF0aGlzLl9pc0Rpc2FibGVkKGNoaWxkQ29tcC5pdGVtKSkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQ29udHJvbFN0YXRlKGNoaWxkQ29tcCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1R5cGU8eyBpdGVtczogRm9ybUl0ZW1JbXBsPHVua25vd24+W10gfT4oY29tcC5pdGVtLCAnaXRlbXMnKSAmJiBjb21wLml0ZW0uaXRlbXMubGVuZ3RoKSB7XG4gICAgICAvLyBJdGVtIG11c3QgaGF2ZSAnaXRlbXMnIGFycmF5XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29tcC5pdGVtLml0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkQ29tcCA9IHRoaXMuY29tcG9uZW50c1tpdGVtLmluc3RhbmNlSWRdO1xuICAgICAgICBpZiAoIXRoaXMuX2lzRGlzYWJsZWQoaXRlbSkpIHtcbiAgICAgICAgICB0aGlzLl90b2dnbGVDb250cm9sU3RhdGUoY2hpbGRDb21wLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBncm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIGNvbXBvbmVudCBpcyBkaXNhYmxlZC4gUHJpb3JpdGl6ZXMgdGhlIGRpc2FibGVkU3RhdGUgdmFsdWUsXG4gICAqIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIHJldHVybnMgdGhlIGl0ZW0ncyBwcmV2aW91cyBkaXNhYmxlZCB2YWx1ZVxuICAgKiBAcGFyYW0gaXRlbSBpdGVtIHRvIGNoZWNrIGZvciBpdHMgZGlzYWJsZWQgc3RhdGVcbiAgICovXG4gIHByaXZhdGUgX2lzRGlzYWJsZWQoaXRlbTogQ29uZGl0aW9uYWxJdGVtIHwgRm9ybUl0ZW0pOiBib29sZWFuIHtcbiAgICBjb25zdCBleGlzdHNJbkRpc2FibGVkU3RhdE1hcCA9IGlzUHJlc2VudCh0aGlzLmRpc2FibGVkU3RhdGVbaXRlbS5pbnN0YW5jZUlkXSk7XG4gICAgaWYgKCFleGlzdHNJbkRpc2FibGVkU3RhdE1hcCkge1xuICAgICAgcmV0dXJuIGlzQ29uZGl0aW9uYWxJdGVtKGl0ZW0pID8gaXRlbS5kaXNhYmxlZCA6IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFN0YXRlW2l0ZW0uaW5zdGFuY2VJZF07XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,8 @@
1
+ import { animate, state, style, transition, trigger } from '@angular/animations';
2
+ export const COMPLEX_STANDARD = '300ms cubic-bezier(0.4, 0.0, 0.2, 1)';
3
+ export const MTNA_WF_EXPAND_COLLAPSE = trigger('mtnaWfExpandCollapse', [
4
+ state('1', style({ height: '*', marginTop: '*', marginBottom: '*', opacity: 1 })),
5
+ state('0', style({ height: 0, marginTop: 0, marginBottom: 0, opacity: 0, overflow: 'hidden', visibility: 'hidden' })),
6
+ transition('1 <=> 0', [animate(COMPLEX_STANDARD)]),
7
+ ]);
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi91dGlsaXRpZXMvYW5pbWF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLHNDQUFzQyxDQUFDO0FBRXZFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRTtJQUNyRSxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3JILFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0NBQ25ELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgQ09NUExFWF9TVEFOREFSRCA9ICczMDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknO1xuXG5leHBvcnQgY29uc3QgTVROQV9XRl9FWFBBTkRfQ09MTEFQU0UgPSB0cmlnZ2VyKCdtdG5hV2ZFeHBhbmRDb2xsYXBzZScsIFtcbiAgc3RhdGUoJzEnLCBzdHlsZSh7IGhlaWdodDogJyonLCBtYXJnaW5Ub3A6ICcqJywgbWFyZ2luQm90dG9tOiAnKicsIG9wYWNpdHk6IDEgfSkpLFxuICBzdGF0ZSgnMCcsIHN0eWxlKHsgaGVpZ2h0OiAwLCBtYXJnaW5Ub3A6IDAsIG1hcmdpbkJvdHRvbTogMCwgb3BhY2l0eTogMCwgb3ZlcmZsb3c6ICdoaWRkZW4nLCB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSksXG4gIHRyYW5zaXRpb24oJzEgPD0+IDAnLCBbYW5pbWF0ZShDT01QTEVYX1NUQU5EQVJEKV0pLFxuXSk7XG4iXX0=
@@ -0,0 +1,29 @@
1
+ import { isFormGroup } from './is-form-group';
2
+ /**
3
+ * Recursively find a form control by name in a form group.
4
+ * Depth first search down the tree of form groups to find a control.
5
+ *
6
+ * @note This will only work if the entire form has unique form control names.
7
+ * @param name The unique name of the form cotrol to find.
8
+ * @param group The {@link FormGroup} to search through.
9
+ * @returns the found control or null
10
+ */
11
+ export function findFormControl(name, group) {
12
+ for (const key in group.controls) {
13
+ if (Object.prototype.hasOwnProperty.call(group.controls, key)) {
14
+ const control = group.controls[key];
15
+ if (key === name) {
16
+ return control;
17
+ }
18
+ // Recurse down if it's a FormGroup
19
+ if (isFormGroup(control)) {
20
+ const found = findFormControl(name, control);
21
+ if (found) {
22
+ return found;
23
+ }
24
+ }
25
+ }
26
+ }
27
+ return null;
28
+ }
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1mb3JtLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvdXRpbGl0aWVzL2ZpbmQtZm9ybS1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5Qzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWSxFQUFFLEtBQWdCO0lBQzVELEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtRQUNoQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzdELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO2dCQUNoQixPQUFPLE9BQU8sQ0FBQzthQUNoQjtZQUVELG1DQUFtQztZQUNuQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDeEIsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7YUFDRjtTQUNGO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgaXNGb3JtR3JvdXAgfSBmcm9tICcuL2lzLWZvcm0tZ3JvdXAnO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGZpbmQgYSBmb3JtIGNvbnRyb2wgYnkgbmFtZSBpbiBhIGZvcm0gZ3JvdXAuXG4gKiBEZXB0aCBmaXJzdCBzZWFyY2ggZG93biB0aGUgdHJlZSBvZiBmb3JtIGdyb3VwcyB0byBmaW5kIGEgY29udHJvbC5cbiAqXG4gKiBAbm90ZSBUaGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBlbnRpcmUgZm9ybSBoYXMgdW5pcXVlIGZvcm0gY29udHJvbCBuYW1lcy5cbiAqIEBwYXJhbSBuYW1lIFRoZSB1bmlxdWUgbmFtZSBvZiB0aGUgZm9ybSBjb3Ryb2wgdG8gZmluZC5cbiAqIEBwYXJhbSBncm91cCBUaGUge0BsaW5rIEZvcm1Hcm91cH0gdG8gc2VhcmNoIHRocm91Z2guXG4gKiBAcmV0dXJucyB0aGUgZm91bmQgY29udHJvbCBvciBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRm9ybUNvbnRyb2wobmFtZTogc3RyaW5nLCBncm91cDogRm9ybUdyb3VwKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gIGZvciAoY29uc3Qga2V5IGluIGdyb3VwLmNvbnRyb2xzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChncm91cC5jb250cm9scywga2V5KSkge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmNvbnRyb2xzW2tleV07XG4gICAgICBpZiAoa2V5ID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiBjb250cm9sO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWN1cnNlIGRvd24gaWYgaXQncyBhIEZvcm1Hcm91cFxuICAgICAgaWYgKGlzRm9ybUdyb3VwKGNvbnRyb2wpKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gZmluZEZvcm1Db250cm9sKG5hbWUsIGNvbnRyb2wpO1xuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0=