@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
@@ -1,19 +0,0 @@
1
- export const MTNA_WF_FORM_ITEM_VALIDATION_RESULT_ERROR_NAME = 'formItemValidationResult';
2
- /**
3
- * Valitator function that will check the root level {@link FormValidationResult} on
4
- * the MTNA {@link Form} and see if there are any errors for a particular control.
5
- *
6
- * @param instanceId The instanceId of the form item for a particular control
7
- * @param managerService The manager service that holds a reference to the MTNA {@link Form} and it's {@link FormValidationResult}
8
- * @returns A validator function that will throw an error if there is a matching {@link FormItemValidationResult} for the specified item.
9
- */
10
- export function validationResultValidator(instanceId, managerService) {
11
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
- return (control) => {
13
- const formItemValidationResult = managerService.getFormItemValidationResults()[instanceId];
14
- return formItemValidationResult
15
- ? { [MTNA_WF_FORM_ITEM_VALIDATION_RESULT_ERROR_NAME]: formItemValidationResult.validationMessage }
16
- : null;
17
- };
18
- }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1yZXN1bHQtdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL2NvcmUvdmFsaWRhdG9ycy92YWxpZGF0aW9uLXJlc3VsdC12YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxDQUFDLE1BQU0sOENBQThDLEdBQUcsMEJBQTBCLENBQUM7QUFFekY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxVQUFrQixFQUFFLGNBQW9DO0lBQ2hHLDZEQUE2RDtJQUM3RCxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtRQUMzRCxNQUFNLHdCQUF3QixHQUF5QyxjQUFjLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqSSxPQUFPLHdCQUF3QjtZQUM3QixDQUFDLENBQUMsRUFBRSxDQUFDLDhDQUE4QyxDQUFDLEVBQUUsd0JBQXdCLENBQUMsaUJBQWlCLEVBQUU7WUFDbEcsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBGb3JtSXRlbVZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5cbmltcG9ydCB7IE10bmFXZk1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9ybS1tYW5hZ2VyLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgTVROQV9XRl9GT1JNX0lURU1fVkFMSURBVElPTl9SRVNVTFRfRVJST1JfTkFNRSA9ICdmb3JtSXRlbVZhbGlkYXRpb25SZXN1bHQnO1xuXG4vKipcbiAqIFZhbGl0YXRvciBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgdGhlIHJvb3QgbGV2ZWwge0BsaW5rIEZvcm1WYWxpZGF0aW9uUmVzdWx0fSBvblxuICogdGhlIE1UTkEge0BsaW5rIEZvcm19IGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBlcnJvcnMgZm9yIGEgcGFydGljdWxhciBjb250cm9sLlxuICpcbiAqIEBwYXJhbSBpbnN0YW5jZUlkIFRoZSBpbnN0YW5jZUlkIG9mIHRoZSBmb3JtIGl0ZW0gZm9yIGEgcGFydGljdWxhciBjb250cm9sXG4gKiBAcGFyYW0gbWFuYWdlclNlcnZpY2UgVGhlIG1hbmFnZXIgc2VydmljZSB0aGF0IGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBNVE5BIHtAbGluayBGb3JtfSBhbmQgaXQncyB7QGxpbmsgRm9ybVZhbGlkYXRpb25SZXN1bHR9XG4gKiBAcmV0dXJucyBBIHZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IHdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlcmUgaXMgYSBtYXRjaGluZyB7QGxpbmsgRm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0fSBmb3IgdGhlIHNwZWNpZmllZCBpdGVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGlvblJlc3VsdFZhbGlkYXRvcihpbnN0YW5jZUlkOiBzdHJpbmcsIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSk6IFZhbGlkYXRvckZuIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBjb25zdCBmb3JtSXRlbVZhbGlkYXRpb25SZXN1bHQ6IEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdCB8IHVuZGVmaW5lZCA9IG1hbmFnZXJTZXJ2aWNlLmdldEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMoKVtpbnN0YW5jZUlkXTtcbiAgICByZXR1cm4gZm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0XG4gICAgICA/IHsgW01UTkFfV0ZfRk9STV9JVEVNX1ZBTElEQVRJT05fUkVTVUxUX0VSUk9SX05BTUVdOiBmb3JtSXRlbVZhbGlkYXRpb25SZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2UgfVxuICAgICAgOiBudWxsO1xuICB9O1xufVxuIl19
@@ -1,66 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@mtna/file-manager-angular";
4
- import * as i2 from "@angular/material/button";
5
- import * as i3 from "@angular/material/icon";
6
- import * as i4 from "@angular/material/progress-spinner";
7
- import * as i5 from "@angular/common";
8
- import * as i6 from "@mtna/core-angular";
9
- export class MtnaWfFileUploadComponent {
10
- constructor(fileService) {
11
- this.fileService = fileService;
12
- this.header = null;
13
- this.indicatorStatus = 'INACTIVE';
14
- this.readonly = false;
15
- this.file = new EventEmitter();
16
- this.loading = false;
17
- }
18
- fileToUpload(file) {
19
- this.loading = true;
20
- this.fileService.uploadFile(file).subscribe((fileInfo) => {
21
- this.loading = false;
22
- this.fileInfo = fileInfo;
23
- this.file.emit(fileInfo);
24
- });
25
- }
26
- handleDownload(template) {
27
- this.fileService.downloadFileGET(template.key, template.fileName, template.contentType);
28
- }
29
- ngOnInit() {
30
- var _a;
31
- if ((_a = this.item) === null || _a === void 0 ? void 0 : _a.value) {
32
- this.fileInfo = this.item.value;
33
- }
34
- }
35
- removeFile() {
36
- if (this.fileInfo) {
37
- this.loading = true;
38
- this.fileService.deleteFile(this.fileInfo).subscribe(() => {
39
- this.loading = false;
40
- this.fileInfo = undefined;
41
- this.file.emit(undefined);
42
- });
43
- }
44
- }
45
- }
46
- MtnaWfFileUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFileUploadComponent, deps: [{ token: i1.FileService }], target: i0.ɵɵFactoryTarget.Component });
47
- MtnaWfFileUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfFileUploadComponent, selector: "mtna-wf-file-upload-item", inputs: { header: "header", indicatorStatus: "indicatorStatus", item: "item", readonly: "readonly" }, outputs: { file: "file" }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"header\"></ng-container>\n\n<div class=\"content\" [mtnaHighlight]=\"indicatorStatus === 'ACTIVE' && !item?.questionText && !item?.descriptiveText\">\n <ng-container *ngIf=\"!readonly; else readOnly\">\n <ng-container *ngIf=\"!loading; else loader\">\n <mtna-file-download\n *ngIf=\"!!fileInfo; else fileUpload\"\n [fileInfo]=\"fileInfo\"\n [canRemove]=\"true\"\n color=\"primary\"\n [canDownload]=\"true\"\n (download)=\"handleDownload($event)\"\n (remove)=\"removeFile()\"\n ></mtna-file-download>\n\n <ng-template #fileUpload>\n <mtna-file-upload\n [automaticUpload]=\"false\"\n color=\"primary\"\n [buttonText]=\"'CHOOSE A FILE'\"\n (fileToUpload)=\"fileToUpload($event)\"\n ></mtna-file-upload>\n </ng-template>\n </ng-container>\n </ng-container>\n\n <!-- READONLY -->\n <ng-template #readOnly>\n <!-- anchor being used, due to <fieldset disabled> blocking a <button>'s click event -->\n <a\n *ngIf=\"!!item && !!item.value\"\n class=\"single-icon-button\"\n color=\"primary\"\n mat-stroked-button\n role=\"button\"\n (click)=\"handleDownload(item.value)\"\n >\n <mat-icon color=\"primary\">file_download</mat-icon>\n {{ (item!.value!.fileName ? item!.value!.fileName : '') | uppercase }}\n </a>\n </ng-template>\n</div>\n\n<!-- PROGRESS SPINNER -->\n<ng-template #loader>\n <mat-spinner diameter=\"125\" strokeWidth=\"10\" mode=\"indeterminate\"></mat-spinner>\n</ng-template>\n", styles: [":host{display:block;margin:1rem 0}mtna-file-download{margin:37px 0}mat-spinner{margin:0 87.5px}\n"], components: [{ type: i1.MtnaFileDownloadComponent, selector: "mtna-file-download", inputs: ["color", "canDownload", "canRemove", "fileInfo", "loading"], outputs: ["download", "remove"] }, { type: i1.MtnaFileUploadComponent, selector: "mtna-file-upload", inputs: ["automaticUpload", "buttonText", "buttonColor", "disabled", "fileUploadUrl", "isProd", "maxUploadSize", "uploading"], outputs: ["uploaded", "fileToUpload", "uploadStatus"] }, { type: i2.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.MtnaHighlightDirective, selector: "[mtnaHighlight]", inputs: ["mtnaHighlight", "mtnaHighlightColor"], exportAs: ["mtnaHighlight"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "uppercase": i5.UpperCasePipe } });
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFileUploadComponent, decorators: [{
49
- type: Component,
50
- args: [{
51
- selector: 'mtna-wf-file-upload-item',
52
- templateUrl: './file-upload.component.html',
53
- styleUrls: ['./file-upload.component.scss'],
54
- }]
55
- }], ctorParameters: function () { return [{ type: i1.FileService }]; }, propDecorators: { header: [{
56
- type: Input
57
- }], indicatorStatus: [{
58
- type: Input
59
- }], item: [{
60
- type: Input
61
- }], readonly: [{
62
- type: Input
63
- }], file: [{
64
- type: Output
65
- }] } });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVk1RixNQUFNLE9BQU8seUJBQXlCO0lBV3BDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBVm5DLFdBQU0sR0FBZ0MsSUFBSSxDQUFDO1FBQzNDLG9CQUFlLEdBQThCLFVBQVUsQ0FBQztRQUV4RCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWhCLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBK0IsQ0FBQztRQUdqRSxZQUFPLEdBQUcsS0FBSyxDQUFDO0lBRStCLENBQUM7SUFFaEQsWUFBWSxDQUFDLElBQWM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBeUIsRUFBRSxFQUFFO1lBQ3hFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUF5QjtRQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxRQUFROztRQUNOLElBQUksTUFBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxLQUFLLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUN4RCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzt1SEF6Q1UseUJBQXlCOzJHQUF6Qix5QkFBeUIsaU1DWnRDLG9rREErQ0E7NEZEbkNhLHlCQUF5QjtrQkFMckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxXQUFXLEVBQUUsOEJBQThCO29CQUMzQyxTQUFTLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztpQkFDNUM7a0dBRVUsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksSUFBSTtzQkFBYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRmlsZUluZm9ybWF0aW9uIH0gZnJvbSAnQG10bmEvZmlsZS1tYW5hZ2VyLXRzJztcbmltcG9ydCB7IEZpbGVTZXJ2aWNlIH0gZnJvbSAnQG10bmEvZmlsZS1tYW5hZ2VyLWFuZ3VsYXInO1xuaW1wb3J0IHsgQW5ub3RhdGlvbkluZGljYXRvclN0YXR1cywgSW5kaWNhdG9yU3RhdHVzUmVwZWF0ZXIgfSBmcm9tICdAbXRuYS9wb2pvLXNvY2lhbC1hbmd1bGFyJztcbmltcG9ydCB7IEZpbGVVcGxvYWRJdGVtIH0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdG5hLXdmLWZpbGUtdXBsb2FkLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZGaWxlVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgSW5kaWNhdG9yU3RhdHVzUmVwZWF0ZXIsIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGhlYWRlcjogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgaW5kaWNhdG9yU3RhdHVzOiBBbm5vdGF0aW9uSW5kaWNhdG9yU3RhdHVzID0gJ0lOQUNUSVZFJztcbiAgQElucHV0KCkgaXRlbTogRmlsZVVwbG9hZEl0ZW0gfCB1bmRlZmluZWQgfCBudWxsO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBmaWxlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlSW5mb3JtYXRpb24gfCB1bmRlZmluZWQ+KCk7XG5cbiAgZmlsZUluZm8/OiBGaWxlSW5mb3JtYXRpb247XG4gIGxvYWRpbmcgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZpbGVTZXJ2aWNlOiBGaWxlU2VydmljZSkge31cblxuICBmaWxlVG9VcGxvYWQoZmlsZTogRmlsZUxpc3QpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsZVNlcnZpY2UudXBsb2FkRmlsZShmaWxlKS5zdWJzY3JpYmUoKGZpbGVJbmZvOiBGaWxlSW5mb3JtYXRpb24pID0+IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5maWxlSW5mbyA9IGZpbGVJbmZvO1xuICAgICAgdGhpcy5maWxlLmVtaXQoZmlsZUluZm8pO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlRG93bmxvYWQodGVtcGxhdGU6IEZpbGVJbmZvcm1hdGlvbikge1xuICAgIHRoaXMuZmlsZVNlcnZpY2UuZG93bmxvYWRGaWxlR0VUKHRlbXBsYXRlLmtleSwgdGVtcGxhdGUuZmlsZU5hbWUsIHRlbXBsYXRlLmNvbnRlbnRUeXBlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLml0ZW0/LnZhbHVlKSB7XG4gICAgICB0aGlzLmZpbGVJbmZvID0gdGhpcy5pdGVtLnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUZpbGUoKSB7XG4gICAgaWYgKHRoaXMuZmlsZUluZm8pIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmZpbGVTZXJ2aWNlLmRlbGV0ZUZpbGUodGhpcy5maWxlSW5mbykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsZUluZm8gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZmlsZS5lbWl0KHVuZGVmaW5lZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJcIj48L25nLWNvbnRhaW5lcj5cblxuPGRpdiBjbGFzcz1cImNvbnRlbnRcIiBbbXRuYUhpZ2hsaWdodF09XCJpbmRpY2F0b3JTdGF0dXMgPT09ICdBQ1RJVkUnICYmICFpdGVtPy5xdWVzdGlvblRleHQgJiYgIWl0ZW0/LmRlc2NyaXB0aXZlVGV4dFwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlYWRvbmx5OyBlbHNlIHJlYWRPbmx5XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIGxvYWRlclwiPlxuICAgICAgPG10bmEtZmlsZS1kb3dubG9hZFxuICAgICAgICAqbmdJZj1cIiEhZmlsZUluZm87IGVsc2UgZmlsZVVwbG9hZFwiXG4gICAgICAgIFtmaWxlSW5mb109XCJmaWxlSW5mb1wiXG4gICAgICAgIFtjYW5SZW1vdmVdPVwidHJ1ZVwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFtjYW5Eb3dubG9hZF09XCJ0cnVlXCJcbiAgICAgICAgKGRvd25sb2FkKT1cImhhbmRsZURvd25sb2FkKCRldmVudClcIlxuICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUZpbGUoKVwiXG4gICAgICA+PC9tdG5hLWZpbGUtZG93bmxvYWQ+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZmlsZVVwbG9hZD5cbiAgICAgICAgPG10bmEtZmlsZS11cGxvYWRcbiAgICAgICAgICBbYXV0b21hdGljVXBsb2FkXT1cImZhbHNlXCJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgIFtidXR0b25UZXh0XT1cIidDSE9PU0UgQSBGSUxFJ1wiXG4gICAgICAgICAgKGZpbGVUb1VwbG9hZCk9XCJmaWxlVG9VcGxvYWQoJGV2ZW50KVwiXG4gICAgICAgID48L210bmEtZmlsZS11cGxvYWQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIFJFQURPTkxZIC0tPlxuICA8bmctdGVtcGxhdGUgI3JlYWRPbmx5PlxuICAgIDwhLS0gYW5jaG9yIGJlaW5nIHVzZWQsIGR1ZSB0byA8ZmllbGRzZXQgZGlzYWJsZWQ+IGJsb2NraW5nIGEgPGJ1dHRvbj4ncyBjbGljayBldmVudCAtLT5cbiAgICA8YVxuICAgICAgKm5nSWY9XCIhIWl0ZW0gJiYgISFpdGVtLnZhbHVlXCJcbiAgICAgIGNsYXNzPVwic2luZ2xlLWljb24tYnV0dG9uXCJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZURvd25sb2FkKGl0ZW0udmFsdWUpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XG4gICAgICB7eyAoaXRlbSEudmFsdWUhLmZpbGVOYW1lID8gaXRlbSEudmFsdWUhLmZpbGVOYW1lIDogJycpIHwgdXBwZXJjYXNlIH19XG4gICAgPC9hPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjwhLS0gUFJPR1JFU1MgU1BJTk5FUiAtLT5cbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxuICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCIxMjVcIiBzdHJva2VXaWR0aD1cIjEwXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1zcGlubmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export * from './file-upload.component';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvZmlsZS11cGxvYWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZmlsZS11cGxvYWQuY29tcG9uZW50JztcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWl0ZW0ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvZm9ybS9iYXNlLWZvcm0taXRlbS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBGb3JtSXRlbSB9IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcblxuLyoqXG4gKiBUaGUgQmFzaWMgc2V0dXAgZm9yIGEgRm9ybUl0ZW0uIEFueSBkeW5hbWljIGNvbXBvbmVudHMgdG8gYmUgcmVuZGVyZWQgc2hvdWxkXG4gKiBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UgdG8gZW5zdXJlIHRoZXkgY29udGFpbiB0aGUgbmVjZXNzYXJ5IGlucHV0cy5cbiAqXG4gKiBAcHJvcCBjb250cm9sIC0gQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAqIEBwcm9wIGl0ZW0gLSBGb3JtSXRlbVxuICogQHByb3AgcmVhZG9ubHkgLSBib29sZWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUZvcm1JdGVtIHtcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgaXRlbTogRm9ybUl0ZW07XG4gIHJlYWRvbmx5OiBib29sZWFuO1xufVxuIl19
@@ -1,250 +0,0 @@
1
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation, } from '@angular/core';
3
- import { mixinDestroyNotifier } from '@mtna/core-angular';
4
- import { BehaviorSubject, Subscription } from 'rxjs';
5
- import { distinctUntilChanged, skipWhile, takeUntil } from 'rxjs/operators';
6
- import { findFormControl } from '../core/utilities/find-form-control';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../core/services";
9
- import * as i2 from "./form-disabler.component";
10
- import * as i3 from "../groups/group-components";
11
- import * as i4 from "@angular/common";
12
- import * as i5 from "@angular/forms";
13
- export class MtnaWfFormComponent extends mixinDestroyNotifier(class {
14
- }) {
15
- constructor(mtnaFormManager, ngFormService, uiService) {
16
- super();
17
- this.mtnaFormManager = mtnaFormManager;
18
- this.ngFormService = ngFormService;
19
- this.uiService = uiService;
20
- this._emitStatusOnMtnaFormChange = false;
21
- this.readonly$ = new BehaviorSubject(true);
22
- /**
23
- * Emitted every time a form control's validation status changes.
24
- * The `id` is the form control's name and the `status` is the new validation status for the control.
25
- */
26
- this.status = new EventEmitter();
27
- this.focusedSection = new EventEmitter();
28
- this.mtnaFormChange = new EventEmitter();
29
- this.componentIds = [];
30
- this._hasPreviousForm = false;
31
- this._initialStatusEmitted = false;
32
- this._constructionDate = new Date();
33
- // Initialize the subscription to observe input changes
34
- this._subscribeAndEmitMtnaFormChanges();
35
- }
36
- set annotations(map) {
37
- this.uiService.registerAnnotations(map);
38
- }
39
- /** Whether to emit the status of each step each time the {@link mtnaForm} is set to a new value. Defaults to false.*/
40
- get emitStatusOnMtnaFormChange() {
41
- return this._emitStatusOnMtnaFormChange;
42
- }
43
- set emitStatusOnMtnaFormChange(emitStatusOnMtnaFormChange) {
44
- this._emitStatusOnMtnaFormChange = coerceBooleanProperty(emitStatusOnMtnaFormChange);
45
- }
46
- get mtnaForm() {
47
- return this._mtnaForm;
48
- }
49
- set mtnaForm(form) {
50
- if (!!form && !this.ngForm) {
51
- // serialize the form when input is set the first time
52
- this._handleFormSerialization(form);
53
- this._checkAndSubscribeToFormStatus();
54
- }
55
- this._mtnaForm = form;
56
- if (form) {
57
- this.mtnaFormManager.setMtnaForm(form);
58
- // If indicated, re-emit the status of each step when there is a new form
59
- if (this.emitStatusOnMtnaFormChange && this.ngForm) {
60
- for (const key in this._steps) {
61
- if (Object.prototype.hasOwnProperty.call(this._steps, key)) {
62
- this._emitFormControlStatus(key);
63
- }
64
- }
65
- }
66
- }
67
- }
68
- /**
69
- * The form can contain sections not included in the steps.
70
- * To avoid misalignment of steps-to-sections, we map each step to
71
- * its instanceId
72
- */
73
- set steps(newSteps) {
74
- if (!!newSteps && !!newSteps.length) {
75
- if (!this._steps) {
76
- this._steps = {};
77
- }
78
- for (const step of newSteps) {
79
- this._steps[step.instanceId] = step;
80
- }
81
- this._checkAndSubscribeToFormStatus();
82
- }
83
- }
84
- get readonly() {
85
- return this.readonly$.value;
86
- }
87
- set readonly(r) {
88
- const newValue = coerceBooleanProperty(r);
89
- if (newValue !== this.readonly$.value) {
90
- this.readonly$.next(r);
91
- }
92
- }
93
- ngAfterViewInit() {
94
- const afterViewInitDate = new Date();
95
- const secondsToRender = (afterViewInitDate.getTime() - this._constructionDate.getTime()) / 1000;
96
- console.warn('[MtnaFormComponent] afterViewInit - took ', secondsToRender, ' to render');
97
- }
98
- ngOnDestroy() {
99
- super.ngOnDestroy();
100
- this.uiService.resetComponentMap();
101
- }
102
- _trackByInstanceId(index, formItem) {
103
- return formItem.instanceId;
104
- }
105
- /** Subscribe and emit form status changes for the steps. */
106
- _checkAndSubscribeToFormStatus() {
107
- // Only subscribe once both the steps and the angular have been initialized
108
- if (this.ngForm && this._steps) {
109
- // Update form status subscriptions anytime the readonly input changes
110
- this.readonly$.pipe(takeUntil(this.destroyed$), distinctUntilChanged()).subscribe((readonly) => {
111
- if (readonly) {
112
- // Don't emit statuses while form is in readonly
113
- this._unsubscribeFromNgFormChanges();
114
- }
115
- else if (!this._ngFormStatusChangeSub || this._ngFormStatusChangeSub.closed) {
116
- // For performance, subscribe should only trigger again if the subscription didn't previously exist
117
- this._emitInitialStepsStatusAndSubscribeToChanges(!this._initialStatusEmitted);
118
- this._initialStatusEmitted = true;
119
- }
120
- });
121
- }
122
- }
123
- /**
124
- * Find a form control with the given name, then emit it's status.
125
- *
126
- * @param name — The unique name of the form cotrol to find and emit the status for.
127
- */
128
- _emitFormControlStatus(name) {
129
- if (this.ngForm) {
130
- const control = findFormControl(name, this.ngForm);
131
- if (control) {
132
- this.status.emit({
133
- id: name,
134
- status: control.status,
135
- });
136
- }
137
- }
138
- }
139
- /**
140
- * @param emitInitialValues Whether to emit initial step values or just listen for future changes
141
- */
142
- _emitInitialStepsStatusAndSubscribeToChanges(emitInitialValues) {
143
- if (this._steps && this.ngForm) {
144
- this._unsubscribeFromNgFormChanges();
145
- this._ngFormStatusChangeSub = new Subscription();
146
- // Find the form control for each step and only subscribe to those.
147
- for (const key in this._steps) {
148
- if (Object.prototype.hasOwnProperty.call(this._steps, key)) {
149
- const control = findFormControl(key, this.ngForm);
150
- if (control) {
151
- if (emitInitialValues) {
152
- this.status.emit({
153
- id: key,
154
- // Angular introduced this status in v13, once we update, this type cast can be removed.
155
- status: control.status,
156
- });
157
- }
158
- // Subscribe to status changes of each step & emit on change
159
- this._ngFormStatusChangeSub.add(control.statusChanges
160
- .pipe(takeUntil(this.destroyed$), distinctUntilChanged())
161
- .subscribe((status) => this.status.emit({ id: key, status })));
162
- }
163
- }
164
- }
165
- }
166
- }
167
- /**
168
- * Observes input changes for readOnly, in order to handle internal change subscriptions.
169
- * When the form is not readonly, we subscribe to form status & form item changes, so we can emit them.
170
- * When the form is readonly, we do not want to emit any changes, so we unsubscribe.
171
- */
172
- _subscribeAndEmitMtnaFormChanges() {
173
- this.readonly$
174
- .pipe(takeUntil(this.destroyed$),
175
- // we don't want to create subscriptions until we have a form to subscribe to
176
- skipWhile(() => !this.mtnaForm), distinctUntilChanged())
177
- .subscribe((readonly) => {
178
- if (readonly) {
179
- this._unsubscribeFromMtnaFormChanges();
180
- }
181
- else if (!this._mtnaFormItemChangeSub || this._mtnaFormItemChangeSub.closed) {
182
- // For performance, subscribe should only trigger again if one of the subscriptions didn't previously exist
183
- this._subscribeToMtnaFormItemChanges();
184
- }
185
- });
186
- }
187
- _handleFormSerialization(form) {
188
- // Get the registered form from the service if it exists
189
- this._hasPreviousForm = this.ngFormService.hasForm();
190
- if (this._hasPreviousForm) {
191
- this.ngForm = this.ngFormService.getForm();
192
- // FIXME this is necessary because the initial visiblity is based on the mtnaForm item's disable property
193
- // If the user changes a value, goes to another tab (destroying form) and comes back, the initial values are incorrect
194
- this.mtnaForm = this.mtnaFormManager.insertNewValues(form, this.ngFormService.getFormValue());
195
- }
196
- else {
197
- this.ngForm = this.mtnaFormManager.serializeMtnaFormItem(form);
198
- this.ngFormService.setForm(this.ngForm);
199
- }
200
- }
201
- /**
202
- * Adds or removes a FormItem whenever a new MtnaWfFormItemChange occurs,
203
- * and emits a new MtnaForm.
204
- */
205
- _subscribeToMtnaFormItemChanges() {
206
- this._unsubscribeFromMtnaFormChanges();
207
- this._mtnaFormItemChangeSub = this.mtnaFormManager.formChanges
208
- .pipe(takeUntil(this.destroyed$), skipWhile((change) => !change))
209
- .subscribe((newForm) => this.mtnaFormChange.emit(newForm));
210
- }
211
- _unsubscribeFromNgFormChanges() {
212
- if (!!this._ngFormStatusChangeSub && !this._ngFormStatusChangeSub.closed) {
213
- this._ngFormStatusChangeSub.unsubscribe();
214
- }
215
- }
216
- _unsubscribeFromMtnaFormChanges() {
217
- if (!!this._mtnaFormItemChangeSub && !this._mtnaFormItemChangeSub.closed) {
218
- this._mtnaFormItemChangeSub.unsubscribe();
219
- }
220
- }
221
- }
222
- MtnaWfFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormComponent, deps: [{ token: i1.MtnaWfManagerService }, { token: i1.MtnaWfNgFormService }, { token: i1.MtnaWfUIService }], target: i0.ɵɵFactoryTarget.Component });
223
- MtnaWfFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfFormComponent, selector: "mtna-form", inputs: { annotations: "annotations", emitStatusOnMtnaFormChange: "emitStatusOnMtnaFormChange", mtnaForm: "mtnaForm", steps: "steps", readonly: "readonly" }, outputs: { status: "status", focusedSection: "focusedSection", mtnaFormChange: "mtnaFormChange" }, usesInheritance: true, ngImport: i0, template: "<form *ngIf=\"ngForm\" [formGroup]=\"ngForm\" [formDisabled]=\"readonly\">\n <mtna-wf-item\n *ngFor=\"let item of mtnaForm?.items; let index = index; trackBy: _trackByInstanceId\"\n [item]=\"item\"\n [control]=\"ngForm.controls[item.instanceId]\"\n [readonly]=\"readonly\"\n [parentIds]=\"componentIds\"\n [step]=\"_steps?.[item.instanceId]\"\n (focusedSection)=\"focusedSection.emit($event)\"\n ></mtna-wf-item>\n</form>\n", styles: ["mtna-form form{display:block}mtna-form form .mtna-wf-section{display:block;margin:32px 0}mtna-form form fieldset[disabled] .mtna-wf-item .mtna-wf-date-item .mat-form-field.mat-form-field-appearance-outline .mat-form-field-flex:hover .mat-form-field-outline{opacity:0}mtna-form form fieldset[disabled] .mtna-wf-item .mtna-wf-date-item .mat-form-field.mat-form-field-appearance-outline .mat-form-field-flex:hover .mat-form-field-outline-thick{opacity:1}mtna-form form fieldset[disabled] .mtna-wf-item .mtna-wf-date-item .mat-form-field.mat-form-field-appearance-outline .mat-form-field-flex:hover .mat-form-field-outline-thick .mat-form-field-outline-end,mtna-form form fieldset[disabled] .mtna-wf-item .mtna-wf-date-item .mat-form-field.mat-form-field-appearance-outline .mat-form-field-flex:hover .mat-form-field-outline-thick .mat-form-field-outline-gap,mtna-form form fieldset[disabled] .mtna-wf-item .mtna-wf-date-item .mat-form-field.mat-form-field-appearance-outline .mat-form-field-flex:hover .mat-form-field-outline-thick .mat-form-field-outline-start{border-width:1px}mtna-form form fieldset[disabled] .mtna-wf-item .mtna-wf-date-item .mat-form-field.mat-form-field-appearance-outline .mat-form-field-suffix .mat-datepicker-toggle .mat-icon-button{cursor:default}mtna-form .mtna-wf-item,mtna-form .mtna-wf-title{margin-top:1rem}mtna-form .mtna-wf-text{margin:.5rem 0;font-size:.9rem}mtna-form .mtna-wf-title-item,mtna-form .mtna-wf-text-item{margin:0}mtna-form mtna-annotations-indicator+mtna-wf-value-item .mtna-wf-title-item,mtna-form mtna-annotations-indicator+mtna-wf-value-item .mtna-wf-text-item{padding-right:24px}\n"], components: [{ type: i2.MtnaWfFormDisablerComponent, selector: "[formDisabled]", inputs: ["formDisabled"] }, { type: i3.MtnaWfFormItemComponent, selector: "mtna-wf-item", inputs: ["item", "readonly", "control", "parentIds", "step"], outputs: ["focusedSection"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormComponent, decorators: [{
225
- type: Component,
226
- args: [{
227
- selector: 'mtna-form',
228
- templateUrl: './form.component.html',
229
- styleUrls: ['./form.component.scss'],
230
- changeDetection: ChangeDetectionStrategy.OnPush,
231
- encapsulation: ViewEncapsulation.None,
232
- }]
233
- }], ctorParameters: function () { return [{ type: i1.MtnaWfManagerService }, { type: i1.MtnaWfNgFormService }, { type: i1.MtnaWfUIService }]; }, propDecorators: { annotations: [{
234
- type: Input
235
- }], emitStatusOnMtnaFormChange: [{
236
- type: Input
237
- }], mtnaForm: [{
238
- type: Input
239
- }], steps: [{
240
- type: Input
241
- }], readonly: [{
242
- type: Input
243
- }], status: [{
244
- type: Output
245
- }], focusedSection: [{
246
- type: Output
247
- }], mtnaFormChange: [{
248
- type: Output
249
- }] } });
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvZm9ybS9mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9mb3JtL2Zvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQW9CLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7QUFXdEUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLG9CQUFvQixDQUFDO0NBQVEsQ0FBQztJQTZGckUsWUFDVSxlQUFxQyxFQUNyQyxhQUFrQyxFQUNsQyxTQUEwQjtRQUVsQyxLQUFLLEVBQUUsQ0FBQztRQUpBLG9CQUFlLEdBQWYsZUFBZSxDQUFzQjtRQUNyQyxrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFDbEMsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUEvRTVCLGdDQUEyQixHQUFHLEtBQUssQ0FBQztRQXdEcEMsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBRXZEOzs7V0FHRztRQUNPLFdBQU0sR0FBRyxJ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L0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsV0FBVyxFQUFFLHVCQUF1QjtvQkFDcEMsU0FBUyxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ3BDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7MktBTUssV0FBVztzQkFEZCxLQUFLO2dCQU9GLDBCQUEwQjtzQkFEN0IsS0FBSztnQkFVRixRQUFRO3NCQURYLEtBQUs7Z0JBZ0NGLEtBQUs7c0JBRFIsS0FBSztnQkFjRixRQUFRO3NCQURYLEtBQUs7Z0JBZ0JJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBDYW5EZXN0cm95Tm90aWZ5LCBtaXhpbkRlc3Ryb3lOb3RpZmllciB9IGZyb20gJ0BtdG5hL2NvcmUtYW5ndWxhcic7XG5pbXBvcnQgeyBBbm5vdGF0YWJsZU51bWJlck1hcCB9IGZyb20gJ0BtdG5hL3Bvam8tc29jaWFsLWFuZ3VsYXInO1xuaW1wb3J0IHsgRm9ybSwgRm9ybUNvbnRyb2xTdGF0dXMsIEZvcm1JdGVtIH0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHNraXBXaGlsZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBmaW5kRm9ybUNvbnRyb2wgfSBmcm9tICcuLi9jb3JlL3V0aWxpdGllcy9maW5kLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBNdG5hV2ZNYW5hZ2VyU2VydmljZSwgTXRuYVdmTmdGb3JtU2VydmljZSwgTXRuYVdmVUlTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBGb3JtU3RlcCB9IGZyb20gJy4uL2Zvcm0tc3RlcHBlci9tb2RlbHMvZm9ybS1zdGVwLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXRuYS1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZGb3JtQ29tcG9uZW50IGV4dGVuZHMgbWl4aW5EZXN0cm95Tm90aWZpZXIoY2xhc3Mge30pIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ2FuRGVzdHJveU5vdGlmeSwgT25EZXN0cm95IHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2VtaXRTdGF0dXNPbk10bmFGb3JtQ2hhbmdlOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZXNfcmVhZG9ubHk6IEJvb2xlYW5JbnB1dDtcblxuICBASW5wdXQoKVxuICBzZXQgYW5ub3RhdGlvbnMobWFwOiBBbm5vdGF0YWJsZU51bWJlck1hcCkge1xuICAgIHRoaXMudWlTZXJ2aWNlLnJlZ2lzdGVyQW5ub3RhdGlvbnMobWFwKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRvIGVtaXQgdGhlIHN0YXR1cyBvZiBlYWNoIHN0ZXAgZWFjaCB0aW1lIHRoZSB7QGxpbmsgbXRuYUZvcm19IGlzIHNldCB0byBhIG5ldyB2YWx1ZS4gRGVmYXVsdHMgdG8gZmFsc2UuKi9cbiAgQElucHV0KClcbiAgZ2V0IGVtaXRTdGF0dXNPbk10bmFGb3JtQ2hhbmdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdHVzT25NdG5hRm9ybUNoYW5nZTtcbiAgfVxuICBzZXQgZW1pdFN0YXR1c09uTXRuYUZvcm1DaGFuZ2UoZW1pdFN0YXR1c09uTXRuYUZvcm1DaGFuZ2U6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9lbWl0U3RhdHVzT25NdG5hRm9ybUNoYW5nZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShlbWl0U3RhdHVzT25NdG5hRm9ybUNoYW5nZSk7XG4gIH1cbiAgcHJpdmF0ZSBfZW1pdFN0YXR1c09uTXRuYUZvcm1DaGFuZ2UgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBnZXQgbXRuYUZvcm0oKTogRm9ybSB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tdG5hRm9ybTtcbiAgfVxuICBzZXQgbXRuYUZvcm0oZm9ybTogRm9ybSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoISFmb3JtICYmICF0aGlzLm5nRm9ybSkge1xuICAgICAgLy8gc2VyaWFsaXplIHRoZSBmb3JtIHdoZW4gaW5wdXQgaXMgc2V0IHRoZSBmaXJzdCB0aW1lXG4gICAgICB0aGlzLl9oYW5kbGVGb3JtU2VyaWFsaXphdGlvbihmb3JtKTtcbiAgICAgIHRoaXMuX2NoZWNrQW5kU3Vic2NyaWJlVG9Gb3JtU3RhdHVzKCk7XG4gICAgfVxuICAgIHRoaXMuX210bmFGb3JtID0gZm9ybTtcbiAgICBpZiAoZm9ybSkge1xuICAgICAgdGhpcy5tdG5hRm9ybU1hbmFnZXIuc2V0TXRuYUZvcm0oZm9ybSk7XG5cbiAgICAgIC8vIElmIGluZGljYXRlZCwgcmUtZW1pdCB0aGUgc3RhdHVzIG9mIGVhY2ggc3RlcCB3aGVuIHRoZXJlIGlzIGEgbmV3IGZvcm1cbiAgICAgIGlmICh0aGlzLmVtaXRTdGF0dXNPbk10bmFGb3JtQ2hhbmdlICYmIHRoaXMubmdGb3JtKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX3N0ZXBzKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9zdGVwcywga2V5KSkge1xuICAgICAgICAgICAgdGhpcy5fZW1pdEZvcm1Db250cm9sU3RhdHVzKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX210bmFGb3JtOiBGb3JtIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGZvcm0gY2FuIGNvbnRhaW4gc2VjdGlvbnMgbm90IGluY2x1ZGVkIGluIHRoZSBzdGVwcy5cbiAgICogVG8gYXZvaWQgbWlzYWxpZ25tZW50IG9mIHN0ZXBzLXRvLXNlY3Rpb25zLCB3ZSBtYXAgZWFjaCBzdGVwIHRvXG4gICAqIGl0cyBpbnN0YW5jZUlkXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgc3RlcHMobmV3U3RlcHM6IEFycmF5PEZvcm1TdGVwPiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoISFuZXdTdGVwcyAmJiAhIW5ld1N0ZXBzLmxlbmd0aCkge1xuICAgICAgaWYgKCF0aGlzLl9zdGVwcykge1xuICAgICAgICB0aGlzLl9zdGVwcyA9IHt9O1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBzdGVwIG9mIG5ld1N0ZXBzKSB7XG4gICAgICAgIHRoaXMuX3N0ZXBzW3N0ZXAuaW5zdGFuY2VJZF0gPSBzdGVwO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2hlY2tBbmRTdWJzY3JpYmVUb0Zvcm1TdGF0dXMoKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkkLnZhbHVlO1xuICB9XG4gIHNldCByZWFkb25seShyOiBib29sZWFuKSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocik7XG4gICAgaWYgKG5ld1ZhbHVlICE9PSB0aGlzLnJlYWRvbmx5JC52YWx1ZSkge1xuICAgICAgdGhpcy5yZWFkb25seSQubmV4dChyKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIGV2ZXJ5IHRpbWUgYSBmb3JtIGNvbnRyb2wncyB2YWxpZGF0aW9uIHN0YXR1cyBjaGFuZ2VzLlxuICAgKiBUaGUgYGlkYCBpcyB0aGUgZm9ybSBjb250cm9sJ3MgbmFtZSBhbmQgdGhlIGBzdGF0dXNgIGlzIHRoZSBuZXcgdmFsaWRhdGlvbiBzdGF0dXMgZm9yIHRoZSBjb250cm9sLlxuICAgKi9cbiAgQE91dHB1dCgpIHN0YXR1cyA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZDogc3RyaW5nOyBzdGF0dXM6IEZvcm1Db250cm9sU3RhdHVzIH0+KCk7XG4gIEBPdXRwdXQoKSBmb2N1c2VkU2VjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybVN0ZXA+KCk7XG4gIEBPdXRwdXQoKSBtdG5hRm9ybUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybT4oKTtcblxuICBuZ0Zvcm06IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcbiAgY29tcG9uZW50SWRzID0gW107XG4gIF9zdGVwczogeyBbaWQ6IHN0cmluZ106IEZvcm1TdGVwIH0gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfY29uc3RydWN0aW9uRGF0ZTogRGF0ZTtcbiAgcHJpdmF0ZSBfaGFzUHJldmlvdXNGb3JtID0gZmFsc2U7XG4gIHByaXZhdGUgX25nRm9ybVN0YXR1c0NoYW5nZVN1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfbXRuYUZvcm1JdGVtQ2hhbmdlU3ViPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9pbml0aWFsU3RhdHVzRW1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbXRuYUZvcm1NYW5hZ2VyOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIG5nRm9ybVNlcnZpY2U6IE10bmFXZk5nRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1aVNlcnZpY2U6IE10bmFXZlVJU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NvbnN0cnVjdGlvbkRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIC8vIEluaXRpYWxpemUgdGhlIHN1YnNjcmlwdGlvbiB0byBvYnNlcnZlIGlucHV0IGNoYW5nZXNcbiAgICB0aGlzLl9zdWJzY3JpYmVBbmRFbWl0TXRuYUZvcm1DaGFuZ2VzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgYWZ0ZXJWaWV3SW5pdERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHNlY29uZHNUb1JlbmRlciA9IChhZnRlclZpZXdJbml0RGF0ZS5nZXRUaW1lKCkgLSB0aGlzLl9jb25zdHJ1Y3Rpb25EYXRlLmdldFRpbWUoKSkgLyAxMDAwO1xuICAgIGNvbnNvbGUud2FybignW010bmFGb3JtQ29tcG9uZW50XSBhZnRlclZpZXdJbml0IC0gdG9vayAnLCBzZWNvbmRzVG9SZW5kZXIsICcgdG8gcmVuZGVyJyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMudWlTZXJ2aWNlLnJlc2V0Q29tcG9uZW50TWFwKCk7XG4gIH1cblxuICBfdHJhY2tCeUluc3RhbmNlSWQoaW5kZXg6IG51bWJlciwgZm9ybUl0ZW06IEZvcm1JdGVtKSB7XG4gICAgcmV0dXJuIGZvcm1JdGVtLmluc3RhbmNlSWQ7XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIGFuZCBlbWl0IGZvcm0gc3RhdHVzIGNoYW5nZXMgZm9yIHRoZSBzdGVwcy4gKi9cbiAgcHJpdmF0ZSBfY2hlY2tBbmRTdWJzY3JpYmVUb0Zvcm1TdGF0dXMoKSB7XG4gICAgLy8gT25seSBzdWJzY3JpYmUgb25jZSBib3RoIHRoZSBzdGVwcyBhbmQgdGhlIGFuZ3VsYXIgaGF2ZSBiZWVuIGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMubmdGb3JtICYmIHRoaXMuX3N0ZXBzKSB7XG4gICAgICAvLyBVcGRhdGUgZm9ybSBzdGF0dXMgc3Vic2NyaXB0aW9ucyBhbnl0aW1lIHRoZSByZWFkb25seSBpbnB1dCBjaGFuZ2VzXG4gICAgICB0aGlzLnJlYWRvbmx5JC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoKHJlYWRvbmx5KSA9PiB7XG4gICAgICAgIGlmIChyZWFkb25seSkge1xuICAgICAgICAgIC8vIERvbid0IGVtaXQgc3RhdHVzZXMgd2hpbGUgZm9ybSBpcyBpbiByZWFkb25seVxuICAgICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRnJvbU5nRm9ybUNoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fbmdGb3JtU3RhdHVzQ2hhbmdlU3ViIHx8IHRoaXMuX25nRm9ybVN0YXR1c0NoYW5nZVN1Yi5jbG9zZWQpIHtcbiAgICAgICAgICAvLyBGb3IgcGVyZm9ybWFuY2UsIHN1YnNjcmliZSBzaG91bGQgb25seSB0cmlnZ2VyIGFnYWluIGlmIHRoZSBzdWJzY3JpcHRpb24gZGlkbid0IHByZXZpb3VzbHkgZXhpc3RcbiAgICAgICAgICB0aGlzLl9lbWl0SW5pdGlhbFN0ZXBzU3RhdHVzQW5kU3Vic2NyaWJlVG9DaGFuZ2VzKCF0aGlzLl9pbml0aWFsU3RhdHVzRW1pdHRlZCk7XG4gICAgICAgICAgdGhpcy5faW5pdGlhbFN0YXR1c0VtaXR0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIGZvcm0gY29udHJvbCB3aXRoIHRoZSBnaXZlbiBuYW1lLCB0aGVuIGVtaXQgaXQncyBzdGF0dXMuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIOKAlCBUaGUgdW5pcXVlIG5hbWUgb2YgdGhlIGZvcm0gY290cm9sIHRvIGZpbmQgYW5kIGVtaXQgdGhlIHN0YXR1cyBmb3IuXG4gICAqL1xuICBwcml2YXRlIF9lbWl0Rm9ybUNvbnRyb2xTdGF0dXMobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubmdGb3JtKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gZmluZEZvcm1Db250cm9sKG5hbWUsIHRoaXMubmdGb3JtKTtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIHRoaXMuc3RhdHVzLmVtaXQoe1xuICAgICAgICAgIGlkOiBuYW1lLFxuICAgICAgICAgIHN0YXR1czogY29udHJvbC5zdGF0dXMgYXMgRm9ybUNvbnRyb2xTdGF0dXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZW1pdEluaXRpYWxWYWx1ZXMgV2hldGhlciB0byBlbWl0IGluaXRpYWwgc3RlcCB2YWx1ZXMgb3IganVzdCBsaXN0ZW4gZm9yIGZ1dHVyZSBjaGFuZ2VzXG4gICAqL1xuICBwcml2YXRlIF9lbWl0SW5pdGlhbFN0ZXBzU3RhdHVzQW5kU3Vic2NyaWJlVG9DaGFuZ2VzKGVtaXRJbml0aWFsVmFsdWVzOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX3N0ZXBzICYmIHRoaXMubmdGb3JtKSB7XG4gICAgICB0aGlzLl91bnN1YnNjcmliZUZyb21OZ0Zvcm1DaGFuZ2VzKCk7XG4gICAgICB0aGlzLl9uZ0Zvcm1TdGF0dXNDaGFuZ2VTdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAgIC8vIEZpbmQgdGhlIGZvcm0gY29udHJvbCBmb3IgZWFjaCBzdGVwIGFuZCBvbmx5IHN1YnNjcmliZSB0byB0aG9zZS5cbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX3N0ZXBzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc3RlcHMsIGtleSkpIHtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gZmluZEZvcm1Db250cm9sKGtleSwgdGhpcy5uZ0Zvcm0pO1xuICAgICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoZW1pdEluaXRpYWxWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0dXMuZW1pdCh7XG4gICAgICAgICAgICAgICAgaWQ6IGtleSxcbiAgICAgICAgICAgICAgICAvLyBBbmd1bGFyIGludHJvZHVjZWQgdGhpcyBzdGF0dXMgaW4gdjEzLCBvbmNlIHdlIHVwZGF0ZSwgdGhpcyB0eXBlIGNhc3QgY2FuIGJlIHJlbW92ZWQuXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBjb250cm9sLnN0YXR1cyBhcyBGb3JtQ29udHJvbFN0YXR1cyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gc3RhdHVzIGNoYW5nZXMgb2YgZWFjaCBzdGVwICYgZW1pdCBvbiBjaGFuZ2VcbiAgICAgICAgICAgIHRoaXMuX25nRm9ybVN0YXR1c0NoYW5nZVN1Yi5hZGQoXG4gICAgICAgICAgICAgIGNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHN0YXR1cykgPT4gdGhpcy5zdGF0dXMuZW1pdCh7IGlkOiBrZXksIHN0YXR1cyB9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmVzIGlucHV0IGNoYW5nZXMgZm9yIHJlYWRPbmx5LCBpbiBvcmRlciB0byBoYW5kbGUgaW50ZXJuYWwgY2hhbmdlIHN1YnNjcmlwdGlvbnMuXG4gICAqIFdoZW4gdGhlIGZvcm0gaXMgbm90IHJlYWRvbmx5LCB3ZSBzdWJzY3JpYmUgdG8gZm9ybSBzdGF0dXMgJiBmb3JtIGl0ZW0gY2hhbmdlcywgc28gd2UgY2FuIGVtaXQgdGhlbS5cbiAgICogV2hlbiB0aGUgZm9ybSBpcyByZWFkb25seSwgd2UgZG8gbm90IHdhbnQgdG8gZW1pdCBhbnkgY2hhbmdlcywgc28gd2UgdW5zdWJzY3JpYmUuXG4gICAqL1xuICBwcml2YXRlIF9zdWJzY3JpYmVBbmRFbWl0TXRuYUZvcm1DaGFuZ2VzKCkge1xuICAgIHRoaXMucmVhZG9ubHkkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gY3JlYXRlIHN1YnNjcmlwdGlvbnMgdW50aWwgd2UgaGF2ZSBhIGZvcm0gdG8gc3Vic2NyaWJlIHRvXG4gICAgICAgIHNraXBXaGlsZSgoKSA9PiAhdGhpcy5tdG5hRm9ybSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlYWRvbmx5KSA9PiB7XG4gICAgICAgIGlmIChyZWFkb25seSkge1xuICAgICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRnJvbU10bmFGb3JtQ2hhbmdlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9tdG5hRm9ybUl0ZW1DaGFuZ2VTdWIgfHwgdGhpcy5fbXRuYUZvcm1JdGVtQ2hhbmdlU3ViLmNsb3NlZCkge1xuICAgICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgc3Vic2NyaWJlIHNob3VsZCBvbmx5IHRyaWdnZXIgYWdhaW4gaWYgb25lIG9mIHRoZSBzdWJzY3JpcHRpb25zIGRpZG4ndCBwcmV2aW91c2x5IGV4aXN0XG4gICAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9NdG5hRm9ybUl0ZW1DaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlRm9ybVNlcmlhbGl6YXRpb24oZm9ybTogRm9ybSkge1xuICAgIC8vIEdldCB0aGUgcmVnaXN0ZXJlZCBmb3JtIGZyb20gdGhlIHNlcnZpY2UgaWYgaXQgZXhpc3RzXG4gICAgdGhpcy5faGFzUHJldmlvdXNGb3JtID0gdGhpcy5uZ0Zvcm1TZXJ2aWNlLmhhc0Zvcm0oKTtcbiAgICBpZiAodGhpcy5faGFzUHJldmlvdXNGb3JtKSB7XG4gICAgICB0aGlzLm5nRm9ybSA9IHRoaXMubmdGb3JtU2VydmljZS5nZXRGb3JtKCk7XG4gICAgICAvLyBGSVhNRSB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpbml0aWFsIHZpc2libGl0eSBpcyBiYXNlZCBvbiB0aGUgbXRuYUZvcm0gaXRlbSdzIGRpc2FibGUgcHJvcGVydHlcbiAgICAgIC8vIElmIHRoZSB1c2VyIGNoYW5nZXMgYSB2YWx1ZSwgZ29lcyB0byBhbm90aGVyIHRhYiAoZGVzdHJveWluZyBmb3JtKSBhbmQgY29tZXMgYmFjaywgdGhlIGluaXRpYWwgdmFsdWVzIGFyZSBpbmNvcnJlY3RcbiAgICAgIHRoaXMubXRuYUZvcm0gPSB0aGlzLm10bmFGb3JtTWFuYWdlci5pbnNlcnROZXdWYWx1ZXMoZm9ybSwgdGhpcy5uZ0Zvcm1TZXJ2aWNlLmdldEZvcm1WYWx1ZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uZ0Zvcm0gPSB0aGlzLm10bmFGb3JtTWFuYWdlci5zZXJpYWxpemVNdG5hRm9ybUl0ZW0oZm9ybSkgYXMgRm9ybUdyb3VwO1xuICAgICAgdGhpcy5uZ0Zvcm1TZXJ2aWNlLnNldEZvcm0odGhpcy5uZ0Zvcm0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG9yIHJlbW92ZXMgYSBGb3JtSXRlbSB3aGVuZXZlciBhIG5ldyBNdG5hV2ZGb3JtSXRlbUNoYW5nZSBvY2N1cnMsXG4gICAqIGFuZCBlbWl0cyBhIG5ldyBNdG5hRm9ybS5cbiAgICovXG4gIHByaXZhdGUgX3N1YnNjcmliZVRvTXRuYUZvcm1JdGVtQ2hhbmdlcygpIHtcbiAgICB0aGlzLl91bnN1YnNjcmliZUZyb21NdG5hRm9ybUNoYW5nZXMoKTtcbiAgICB0aGlzLl9tdG5hRm9ybUl0ZW1DaGFuZ2VTdWIgPSB0aGlzLm10bmFGb3JtTWFuYWdlci5mb3JtQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgICBza2lwV2hpbGUoKGNoYW5nZSkgPT4gIWNoYW5nZSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKG5ld0Zvcm06IEZvcm0pID0+IHRoaXMubXRuYUZvcm1DaGFuZ2UuZW1pdChuZXdGb3JtKSk7XG4gIH1cblxuICBwcml2YXRlIF91bnN1YnNjcmliZUZyb21OZ0Zvcm1DaGFuZ2VzKCkge1xuICAgIGlmICghIXRoaXMuX25nRm9ybVN0YXR1c0NoYW5nZVN1YiAmJiAhdGhpcy5fbmdGb3JtU3RhdHVzQ2hhbmdlU3ViLmNsb3NlZCkge1xuICAgICAgdGhpcy5fbmdGb3JtU3RhdHVzQ2hhbmdlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVGcm9tTXRuYUZvcm1DaGFuZ2VzKCkge1xuICAgIGlmICghIXRoaXMuX210bmFGb3JtSXRlbUNoYW5nZVN1YiAmJiAhdGhpcy5fbXRuYUZvcm1JdGVtQ2hhbmdlU3ViLmNsb3NlZCkge1xuICAgICAgdGhpcy5fbXRuYUZvcm1JdGVtQ2hhbmdlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iLCI8Zm9ybSAqbmdJZj1cIm5nRm9ybVwiIFtmb3JtR3JvdXBdPVwibmdGb3JtXCIgW2Zvcm1EaXNhYmxlZF09XCJyZWFkb25seVwiPlxuICA8bXRuYS13Zi1pdGVtXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbXRuYUZvcm0/Lml0ZW1zOyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogX3RyYWNrQnlJbnN0YW5jZUlkXCJcbiAgICBbaXRlbV09XCJpdGVtXCJcbiAgICBbY29udHJvbF09XCJuZ0Zvcm0uY29udHJvbHNbaXRlbS5pbnN0YW5jZUlkXVwiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICBbcGFyZW50SWRzXT1cImNvbXBvbmVudElkc1wiXG4gICAgW3N0ZXBdPVwiX3N0ZXBzPy5baXRlbS5pbnN0YW5jZUlkXVwiXG4gICAgKGZvY3VzZWRTZWN0aW9uKT1cImZvY3VzZWRTZWN0aW9uLmVtaXQoJGV2ZW50KVwiXG4gID48L210bmEtd2YtaXRlbT5cbjwvZm9ybT5cbiJdfQ==