@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,10 +0,0 @@
1
- import { isFormStepGroup } from '../../form-stepper/models';
2
- /**
3
- * Flattens formStepGroup.steps and combines all steps into single array
4
- * @param steps Array<FormStep | FormStepGroup>
5
- * @returns FormStep[] array of the steps and children of step groups
6
- */
7
- export function flattenSteps(steps) {
8
- return steps.reduce((a, b) => a.concat(isFormStepGroup(b) ? b.steps : b), new Array());
9
- }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlbi1zdGVwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL3V0aWxpdGllcy9mbGF0dGVuLXN0ZXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckY7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBc0M7SUFDakUsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksS0FBSyxFQUFZLENBQUMsQ0FBQztBQUNuRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybVN0ZXAsIEZvcm1TdGVwR3JvdXAsIGlzRm9ybVN0ZXBHcm91cCB9IGZyb20gJy4uLy4uL2Zvcm0tc3RlcHBlci9tb2RlbHMnO1xuXG4vKipcbiAqIEZsYXR0ZW5zIGZvcm1TdGVwR3JvdXAuc3RlcHMgYW5kIGNvbWJpbmVzIGFsbCBzdGVwcyBpbnRvIHNpbmdsZSBhcnJheVxuICogQHBhcmFtIHN0ZXBzIEFycmF5PEZvcm1TdGVwIHwgRm9ybVN0ZXBHcm91cD5cbiAqIEByZXR1cm5zIEZvcm1TdGVwW10gYXJyYXkgb2YgdGhlIHN0ZXBzIGFuZCBjaGlsZHJlbiBvZiBzdGVwIGdyb3Vwc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlblN0ZXBzKHN0ZXBzOiBBcnJheTxGb3JtU3RlcCB8IEZvcm1TdGVwR3JvdXA+KTogQXJyYXk8Rm9ybVN0ZXA+IHtcbiAgcmV0dXJuIHN0ZXBzLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoaXNGb3JtU3RlcEdyb3VwKGIpID8gYi5zdGVwcyA6IGIpLCBuZXcgQXJyYXk8Rm9ybVN0ZXA+KCkpO1xufVxuIl19
@@ -1,38 +0,0 @@
1
- import { toLetters } from '@mtna/core-ts';
2
- import { isDataCubeItem, isSection } from '@mtna/web-form-ts';
3
- import { FormStep, FormStepGroup, isFormStepGroup } from '../../form-stepper/models';
4
- /**
5
- * Builds up an array of FormSteps or FormStepGroups based on what is found in the provided form items. For most typical
6
- * forms this will mean that a step is generated for every section that is found in the form. It is assumed that all
7
- * inputs are held within sections and therefore the sections are the steps that should be monitored for completeness.
8
- * However, in some circumstances, like very short forms, it may be the case that there are no sections and that all
9
- * the items are set directly on the form itself. In these circumstances the allSteps parameter can be set to true and
10
- * a step will be produced for each form item found.
11
- *
12
- * @param items the items of the form
13
- * @param allSteps flag indicating that a form step should be produced for every form item
14
- */
15
- export function generateFormSteps(items, allSteps = false) {
16
- // Build up an array of steps based on the form items
17
- return items.reduce((newArray, item) => {
18
- // The number of non-group steps, used to number the top level steps
19
- const count = newArray.filter((step) => !isFormStepGroup(step)).length;
20
- if (allSteps) {
21
- newArray.push(new FormStep(count + 1, item.name || 'No Title', item.instanceId, !item.required));
22
- }
23
- else if (isSection(item)) {
24
- // If the item is a Section, add a step
25
- newArray.push(new FormStep(count + 1, item.title.value || 'No Title', item.instanceId, !item.required));
26
- }
27
- else if (isDataCubeItem(item)) {
28
- // If the item is a DataCubeItem, add a step and add a group step for the sub-sections
29
- newArray.push(new FormStep(count + 1, item.title.value || '', item.instanceId, !item.required));
30
- const subSectionSteps = item.items
31
- .filter(isSection)
32
- .map((item, index) => new FormStep(`${count + 1}${toLetters(index + 1)}`, item.title.value || '', item.instanceId, !item.required));
33
- newArray.push(new FormStepGroup(subSectionSteps, item.instanceId, false));
34
- }
35
- return newArray;
36
- }, []);
37
- }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtZm9ybS1zdGVwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL3V0aWxpdGllcy9nZW5lcmF0ZS1mb3JtLXN0ZXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFZLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRjs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQXNCLEVBQUUsUUFBUSxHQUFHLEtBQUs7SUFDeEUscURBQXFEO0lBQ3JELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQXlDLEVBQUUsSUFBYyxFQUFFLEVBQUU7UUFDaEYsb0VBQW9FO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3ZFLElBQUksUUFBUSxFQUFFO1lBQ1osUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUNsRzthQUFNLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLHVDQUF1QztZQUN2QyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUN6RzthQUFNLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLHNGQUFzRjtZQUN0RixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUVoRyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSztpQkFDL0IsTUFBTSxDQUFDLFNBQVMsQ0FBQztpQkFDakIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3RJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUMzRTtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNULENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b0xldHRlcnMgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7IEZvcm1JdGVtLCBpc0RhdGFDdWJlSXRlbSwgaXNTZWN0aW9uIH0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuXG5pbXBvcnQgeyBGb3JtU3RlcCwgRm9ybVN0ZXBHcm91cCwgaXNGb3JtU3RlcEdyb3VwIH0gZnJvbSAnLi4vLi4vZm9ybS1zdGVwcGVyL21vZGVscyc7XG5cbi8qKlxuICogQnVpbGRzIHVwIGFuIGFycmF5IG9mIEZvcm1TdGVwcyBvciBGb3JtU3RlcEdyb3VwcyBiYXNlZCBvbiB3aGF0IGlzIGZvdW5kIGluIHRoZSBwcm92aWRlZCBmb3JtIGl0ZW1zLiBGb3IgbW9zdCB0eXBpY2FsXG4gKiBmb3JtcyB0aGlzIHdpbGwgbWVhbiB0aGF0IGEgc3RlcCBpcyBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IHNlY3Rpb24gdGhhdCBpcyBmb3VuZCBpbiB0aGUgZm9ybS4gSXQgaXMgYXNzdW1lZCB0aGF0IGFsbFxuICogaW5wdXRzIGFyZSBoZWxkIHdpdGhpbiBzZWN0aW9ucyBhbmQgdGhlcmVmb3JlIHRoZSBzZWN0aW9ucyBhcmUgdGhlIHN0ZXBzIHRoYXQgc2hvdWxkIGJlIG1vbml0b3JlZCBmb3IgY29tcGxldGVuZXNzLlxuICogSG93ZXZlciwgaW4gc29tZSBjaXJjdW1zdGFuY2VzLCBsaWtlIHZlcnkgc2hvcnQgZm9ybXMsIGl0IG1heSBiZSB0aGUgY2FzZSB0aGF0IHRoZXJlIGFyZSBubyBzZWN0aW9ucyBhbmQgdGhhdCBhbGxcbiAqIHRoZSBpdGVtcyBhcmUgc2V0IGRpcmVjdGx5IG9uIHRoZSBmb3JtIGl0c2VsZi4gSW4gdGhlc2UgY2lyY3Vtc3RhbmNlcyB0aGUgYWxsU3RlcHMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgdG8gdHJ1ZSBhbmRcbiAqIGEgc3RlcCB3aWxsIGJlIHByb2R1Y2VkIGZvciBlYWNoIGZvcm0gaXRlbSBmb3VuZC5cbiAqXG4gKiBAcGFyYW0gaXRlbXMgdGhlIGl0ZW1zIG9mIHRoZSBmb3JtXG4gKiBAcGFyYW0gYWxsU3RlcHMgZmxhZyBpbmRpY2F0aW5nIHRoYXQgYSBmb3JtIHN0ZXAgc2hvdWxkIGJlIHByb2R1Y2VkIGZvciBldmVyeSBmb3JtIGl0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRm9ybVN0ZXBzKGl0ZW1zOiBBcnJheTxGb3JtSXRlbT4sIGFsbFN0ZXBzID0gZmFsc2UpOiBBcnJheTxGb3JtU3RlcCB8IEZvcm1TdGVwR3JvdXA+IHtcbiAgLy8gQnVpbGQgdXAgYW4gYXJyYXkgb2Ygc3RlcHMgYmFzZWQgb24gdGhlIGZvcm0gaXRlbXNcbiAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgobmV3QXJyYXk6IEFycmF5PEZvcm1TdGVwIHwgRm9ybVN0ZXBHcm91cD4sIGl0ZW06IEZvcm1JdGVtKSA9PiB7XG4gICAgLy8gVGhlIG51bWJlciBvZiBub24tZ3JvdXAgc3RlcHMsIHVzZWQgdG8gbnVtYmVyIHRoZSB0b3AgbGV2ZWwgc3RlcHNcbiAgICBjb25zdCBjb3VudCA9IG5ld0FycmF5LmZpbHRlcigoc3RlcCkgPT4gIWlzRm9ybVN0ZXBHcm91cChzdGVwKSkubGVuZ3RoO1xuICAgIGlmIChhbGxTdGVwcykge1xuICAgICAgbmV3QXJyYXkucHVzaChuZXcgRm9ybVN0ZXAoY291bnQgKyAxLCBpdGVtLm5hbWUgfHwgJ05vIFRpdGxlJywgaXRlbS5pbnN0YW5jZUlkLCAhaXRlbS5yZXF1aXJlZCkpO1xuICAgIH0gZWxzZSBpZiAoaXNTZWN0aW9uKGl0ZW0pKSB7XG4gICAgICAvLyBJZiB0aGUgaXRlbSBpcyBhIFNlY3Rpb24sIGFkZCBhIHN0ZXBcbiAgICAgIG5ld0FycmF5LnB1c2gobmV3IEZvcm1TdGVwKGNvdW50ICsgMSwgaXRlbS50aXRsZS52YWx1ZSB8fCAnTm8gVGl0bGUnLCBpdGVtLmluc3RhbmNlSWQsICFpdGVtLnJlcXVpcmVkKSk7XG4gICAgfSBlbHNlIGlmIChpc0RhdGFDdWJlSXRlbShpdGVtKSkge1xuICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgYSBEYXRhQ3ViZUl0ZW0sIGFkZCBhIHN0ZXAgYW5kIGFkZCBhIGdyb3VwIHN0ZXAgZm9yIHRoZSBzdWItc2VjdGlvbnNcbiAgICAgIG5ld0FycmF5LnB1c2gobmV3IEZvcm1TdGVwKGNvdW50ICsgMSwgaXRlbS50aXRsZS52YWx1ZSB8fCAnJywgaXRlbS5pbnN0YW5jZUlkLCAhaXRlbS5yZXF1aXJlZCkpO1xuXG4gICAgICBjb25zdCBzdWJTZWN0aW9uU3RlcHMgPSBpdGVtLml0ZW1zXG4gICAgICAgIC5maWx0ZXIoaXNTZWN0aW9uKVxuICAgICAgICAubWFwKChpdGVtLCBpbmRleCkgPT4gbmV3IEZvcm1TdGVwKGAke2NvdW50ICsgMX0ke3RvTGV0dGVycyhpbmRleCArIDEpfWAsIGl0ZW0udGl0bGUudmFsdWUgfHwgJycsIGl0ZW0uaW5zdGFuY2VJZCwgIWl0ZW0ucmVxdWlyZWQpKTtcbiAgICAgIG5ld0FycmF5LnB1c2gobmV3IEZvcm1TdGVwR3JvdXAoc3ViU2VjdGlvblN0ZXBzLCBpdGVtLmluc3RhbmNlSWQsIGZhbHNlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0FycmF5O1xuICB9LCBbXSk7XG59XG4iXX0=
@@ -1,9 +0,0 @@
1
- import * as MtnaWfSerializer from './serializer-util';
2
- export { MtnaWfSerializer };
3
- export * from './find-form-control';
4
- export * from './find-form-item';
5
- export * from './flatten-steps';
6
- export * from './generate-form-steps';
7
- export * from './is-form-group';
8
- export * from './update-step-status';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvY29yZS91dGlsaXRpZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLGdCQUFnQixNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0FBQzVCLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgTXRuYVdmU2VyaWFsaXplciBmcm9tICcuL3NlcmlhbGl6ZXItdXRpbCc7XG5cbmV4cG9ydCB7IE10bmFXZlNlcmlhbGl6ZXIgfTtcbmV4cG9ydCAqIGZyb20gJy4vZmluZC1mb3JtLWNvbnRyb2wnO1xuZXhwb3J0ICogZnJvbSAnLi9maW5kLWZvcm0taXRlbSc7XG5leHBvcnQgKiBmcm9tICcuL2ZsYXR0ZW4tc3RlcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW5lcmF0ZS1mb3JtLXN0ZXBzJztcbmV4cG9ydCAqIGZyb20gJy4vaXMtZm9ybS1ncm91cCc7XG5leHBvcnQgKiBmcm9tICcuL3VwZGF0ZS1zdGVwLXN0YXR1cyc7XG4iXX0=
@@ -1,6 +0,0 @@
1
- import { isObject, isType } from '@mtna/core-ts';
2
- /** Typeguard for {@link FormGroup}. Determines if something is a FormGroup. */
3
- export function isFormGroup(something) {
4
- return isObject(something) && isType(something, 'controls') && isObject(something.controls);
5
- }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZm9ybS1ncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL3V0aWxpdGllcy9pcy1mb3JtLWdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELCtFQUErRTtBQUMvRSxNQUFNLFVBQVUsV0FBVyxDQUFDLFNBQWtCO0lBQzVDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBWSxTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBpc09iamVjdCwgaXNUeXBlIH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5cbi8qKiBUeXBlZ3VhcmQgZm9yIHtAbGluayBGb3JtR3JvdXB9LiBEZXRlcm1pbmVzIGlmIHNvbWV0aGluZyBpcyBhIEZvcm1Hcm91cC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm1Hcm91cChzb21ldGhpbmc6IHVua25vd24pOiBzb21ldGhpbmcgaXMgRm9ybUdyb3VwIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNvbWV0aGluZykgJiYgaXNUeXBlPEZvcm1Hcm91cD4oc29tZXRoaW5nLCAnY29udHJvbHMnKSAmJiBpc09iamVjdChzb21ldGhpbmcuY29udHJvbHMpO1xufVxuIl19
@@ -1,358 +0,0 @@
1
- import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
2
- import { isNullOrUndefined, isPresent, isType } from '@mtna/core-ts';
3
- import { CHECKBOX_ITEM_ID, DECIMAL_ANSWER_ITEM_ID, isForm, isFormItemGroupImpl, isOffsetDateRangeItem, isRepeatableItem, isSection, isTableItem, isWholeNumberItem, isYearQuarterRangeItem, PARAGRAPH_ANSWER_ITEM_ID, SHORT_ANSWER_ITEM_ID, WHOLE_NUMBER_ANSWER_ITEM_ID, } from '@mtna/web-form-ts';
4
- import { validationResultValidator } from '../validators';
5
- /** RegEx to validate number items contain only negative, digits, or decimals */
6
- const numOnlyWithoutComma = /^-?\d+(\.\d*)?$/;
7
- /** RegEx to validate number items contain only negative, digits, or decimals in comma format */
8
- const numOnlyWithComma = /^-?\d{1,3}(,\d{3})*(\.\d*)?$/;
9
- /** RegEx to validate 'positive only' item conains non-negative characters */
10
- const posOnly = /^[^-]*$/;
11
- /** RegEx to validate 'whole number' item contains only negative, digits, or comma format */
12
- const wholeNumber = /^-?\d+(,\d{3})*$/;
13
- //#region FormControl Generation
14
- /**
15
- * Generates a new FormGroup with FormControls & possible nested FormGroups
16
- * @param formItem WebForm, Section, Group, or RepeatableItem used to create a FormGroup
17
- * @param customFormItemConditional boolean function for any custom FormItems
18
- * @param customControlGenerator FormControl generator function for any custom FormItems
19
- */
20
- export function serializeFormItems(formItem, managerService, customFormItemConditional = () => false, customControlGenerator) {
21
- const form = {};
22
- for (const item of formItem.items) {
23
- const control = determineSerializeFunctionToUse(item, managerService, customFormItemConditional, customControlGenerator);
24
- if (control) {
25
- form[item.instanceId] = control;
26
- }
27
- }
28
- const required = isForm(formItem) ? true : formItem.required;
29
- const group = required ? new FormGroup(form, Validators.required) : new FormGroup(form);
30
- if ('disabled' in formItem && formItem.disabled) {
31
- group.disable({ onlySelf: true, emitEvent: false });
32
- }
33
- return group;
34
- }
35
- /**
36
- * Returns a tailored FormControl with validators for a FormItem
37
- * @param formItem The FormItem requesting a tailored FormControl
38
- * @internal Creating the form control and then calling setValidators force a validation pass,
39
- * see https://github.com/angular/angular/issues/19622#issuecomment-341547884
40
- * Better to gather the validators and put them in the constructor of the form control.
41
- */
42
- export function serializeFormItem(formItem, managerService) {
43
- const validators = new Array(validationResultValidator(formItem.instanceId, managerService));
44
- if (formItem.required) {
45
- validators.push(Validators.required);
46
- }
47
- switch (formItem.itemId) {
48
- case CHECKBOX_ITEM_ID: {
49
- const checkboxItem = formItem;
50
- const value = checkboxItem.value || [];
51
- validators.push(numCheckboxesValidator('MIN', checkboxItem.minSelections), numCheckboxesValidator('MAX', checkboxItem.maxSelections));
52
- const arr = new FormArray(checkboxItem.options.map((o) => new FormControl({ value: o.selected || value.some((v) => v === o.option.id), disabled: checkboxItem.disabled })), Validators.compose(validators));
53
- return arr;
54
- }
55
- case DECIMAL_ANSWER_ITEM_ID:
56
- case WHOLE_NUMBER_ANSWER_ITEM_ID: {
57
- const item = formItem;
58
- validators.push(numericalValueCheck());
59
- if (isWholeNumberItem(item)) {
60
- validators.push(wholeNumberPattern());
61
- }
62
- if (item.positiveOnly) {
63
- validators.push(positiveNumberPattern());
64
- }
65
- if (!isNullOrUndefined(item.minValue)) {
66
- validators.push(numValueLimit('min', item.minValue));
67
- }
68
- if (!isNullOrUndefined(item.maxValue)) {
69
- validators.push(numValueLimit('max', item.maxValue));
70
- }
71
- break;
72
- }
73
- case PARAGRAPH_ANSWER_ITEM_ID:
74
- case SHORT_ANSWER_ITEM_ID: {
75
- const shortAnswerItem = formItem;
76
- validators.push(...getNumericValidator('minLength', shortAnswerItem.minCharCount));
77
- validators.push(...getNumericValidator('maxLength', shortAnswerItem.maxCharCount));
78
- break;
79
- }
80
- default:
81
- break;
82
- }
83
- return new FormControl({ value: formItem.value, disabled: !!formItem.disabled }, Validators.compose(validators));
84
- }
85
- /**
86
- * Builds controls for any form items nested inside a parent items options
87
- * @param formItem The FormItem with an 'options' property
88
- * @param customFormItemConditional conditional function from parent 'serializeFormItems' function
89
- * @param customControlGenerator FormControl generator from parent 'serializeFormItems' function
90
- */
91
- export function serializeNestedOptionFormItems(formItem, managerService, customFormItemConditional = () => false, customControlGenerator) {
92
- const controls = {};
93
- for (const id in formItem.optionItemMap) {
94
- if (Object.prototype.hasOwnProperty.call(formItem.optionItemMap, id)) {
95
- const subItem = formItem.optionItemMap[id];
96
- const control = determineSerializeFunctionToUse(subItem, managerService, customFormItemConditional, customControlGenerator);
97
- if (control) {
98
- controls[subItem.instanceId] = control;
99
- }
100
- }
101
- }
102
- controls[formItem.instanceId] = serializeFormItem(formItem, managerService);
103
- const group = formItem.required ? new FormGroup(controls, Validators.required) : new FormGroup(controls);
104
- if (formItem.disabled) {
105
- group.disable({ onlySelf: true, emitEvent: false });
106
- }
107
- return group;
108
- }
109
- /**
110
- * Build FormControls for a TableItem
111
- * @param item TableItem requiring FormControls
112
- * @param customFormItemConditional Conditional function for custom any FormItems
113
- * @param customControlGenerator FormControl generator for custom any FormItems
114
- */
115
- export function serializeTableItem(item, managerService, customFormItemConditional = () => false, customControlGenerator) {
116
- const tableControl = {};
117
- for (const row of item.tableRows) {
118
- for (const rowItem of row.items.filter((i) => !!i)) {
119
- const control = determineSerializeFunctionToUse(rowItem, managerService, customFormItemConditional, customControlGenerator);
120
- if (control) {
121
- tableControl[rowItem.instanceId] = control;
122
- }
123
- }
124
- }
125
- const group = item.required ? new FormGroup(tableControl, Validators.required) : new FormGroup(tableControl);
126
- if (item.disabled) {
127
- group.disable({ onlySelf: true, emitEvent: false });
128
- }
129
- return group;
130
- }
131
- /**
132
- * Returns the appropriate function for the caller to use.
133
- *
134
- * @param formItem FormItem requiring serialization
135
- * @param customFormItemConditional Conditional for a custom FormItem
136
- * @param customControlGenerator Serializer for a custom FormItem
137
- */
138
- export function determineSerializeFunctionToUse(formItem, managerService, customFormItemConditional = () => false, customControlGenerator) {
139
- if (isForm(formItem) || isRepeatableItem(formItem) || isSection(formItem) || isFormItemGroupImpl(formItem)) {
140
- return serializeFormItems(formItem, managerService, customFormItemConditional, customControlGenerator);
141
- }
142
- else if (isTableItem(formItem)) {
143
- return serializeTableItem(formItem, managerService, customFormItemConditional, customControlGenerator);
144
- }
145
- else if (customFormItemConditional(formItem) && !!customControlGenerator) {
146
- return customControlGenerator(formItem);
147
- }
148
- else if (hasNestedFormItems(formItem)) {
149
- return serializeNestedOptionFormItems(formItem, managerService);
150
- }
151
- else if (isOffsetDateRangeItem(formItem) || isYearQuarterRangeItem(formItem)) {
152
- return serializeRangeItem(formItem);
153
- }
154
- else {
155
- return serializeFormItem(formItem, managerService);
156
- }
157
- }
158
- /**
159
- * Builds a FormGroup for a range item
160
- * @param formItem FormItem for a DateRange of Date | YearQuarter
161
- */
162
- export function serializeRangeItem(formItem) {
163
- const validators = new Array();
164
- if (formItem.required) {
165
- validators.push(Validators.required);
166
- }
167
- const group = new FormGroup({
168
- start: new FormControl(formItem.value ? formItem.value.start : null),
169
- end: new FormControl(formItem.value ? formItem.value.end : null),
170
- }, Validators.compose(validators));
171
- if (formItem.disabled) {
172
- group.disable({ onlySelf: true, emitEvent: false });
173
- }
174
- return group;
175
- }
176
- /**
177
- * Returns a Validator with a numeric value for a FormItem;
178
- * Returns as an array of length 1 or 0
179
- * @param param0 `type` - type of validator, e.g. 'minLength';
180
- * `value` - parameter for the validator, e.g. 'minLength(value)'
181
- */
182
- function getNumericValidator(type, value) {
183
- return !isNullOrUndefined(value) ? [Validators[type](value)] : [];
184
- }
185
- //#endregion
186
- //#region MtnaForm value insertion
187
- /**
188
- * Returns an array of Formitems with new values inserted.
189
- *
190
- * @param section The old Form or Form Section
191
- * @param ngFormValue ngForm JSON values
192
- * @param customFormItemConditional boolean function for any custom FormItems
193
- * @param customFormItemBuilder function to handle custom FormItems
194
- * @returns new FormItem array
195
- */
196
- export function insertFormItemValues(section, ngFormValue, disabledState, customFormItemConditional = () => false, customFormItemBuilder) {
197
- return section.items
198
- .map((item) => determineInsertFunctionToUse(item, ngFormValue[item.instanceId], disabledState, customFormItemConditional, customFormItemBuilder, section))
199
- .filter(isPresent);
200
- }
201
- /**
202
- * Returns a copied TableItem, with each row FormItem having new inserted values.
203
- * @param item TableItem to insert values
204
- * @param ngFormValue ngForm value of the TableItem
205
- * @param customFormItemConditional boolean function for any custom FormItem
206
- * @param customFormItemBuilder function to handle custom FormItem value insertion
207
- */
208
- export function insertTableItemValues(item, ngFormValue, disabledState, customFormItemConditional = () => false, customFormItemBuilder) {
209
- const tableRows = item.tableRows.map((row) => (Object.assign(Object.assign({}, row), { items: row.items
210
- .filter(isPresent)
211
- .map((formItem) => {
212
- return determineInsertFunctionToUse(formItem, ngFormValue[formItem.instanceId], disabledState, customFormItemConditional, customFormItemBuilder);
213
- })
214
- .filter(isPresent) })));
215
- return Object.assign(Object.assign({}, item), { tableRows, disabled: _isDisabled(item, disabledState) });
216
- }
217
- /**
218
- * Returns a new FormItem after determining the appropriate function to use.
219
- * @param formItem FormItem requiring value insertion
220
- * @param ngFormValue ngForm value
221
- * @param customFormItemConditional Conditional for a custom FormItem
222
- * @param customFormItemBuilder Value insertion function for a custom FormItem
223
- * @param disabledState Map of items' disabled state
224
- * @param parent Parent of the FormItem, used to pass to the customFormItemBuilder
225
- */
226
- function determineInsertFunctionToUse(formItem, ngFormValue, disabledState, customFormItemConditional = () => false, customFormItemBuilder, parent) {
227
- if (isSection(formItem) || isFormItemGroupImpl(formItem) || isRepeatableItem(formItem)) {
228
- const items = insertFormItemValues(formItem, ngFormValue, disabledState, customFormItemConditional, customFormItemBuilder);
229
- return Object.assign(Object.assign({}, formItem), { items, disabled: _isDisabled(formItem, disabledState) });
230
- }
231
- else if (isTableItem(formItem)) {
232
- return insertTableItemValues(formItem, ngFormValue, disabledState, customFormItemConditional, customFormItemBuilder);
233
- }
234
- else if (customFormItemConditional(formItem) && !!customFormItemBuilder) {
235
- return customFormItemBuilder(parent, formItem, ngFormValue, disabledState);
236
- }
237
- else if (hasNestedFormItems(formItem)) {
238
- return insertNestedFormItemValues(formItem, ngFormValue, disabledState, customFormItemConditional, customFormItemBuilder);
239
- }
240
- else if (isOffsetDateRangeItem(formItem) || isYearQuarterRangeItem(formItem)) {
241
- const start = isType(ngFormValue, 'start') ? ngFormValue.start : undefined;
242
- const end = isType(ngFormValue, 'end') ? ngFormValue.end : undefined;
243
- return Object.assign(Object.assign({}, formItem), { value: { start, end }, disabled: _isDisabled(formItem, disabledState) });
244
- }
245
- else {
246
- return Object.assign(Object.assign({}, formItem), { value: findItemValue(formItem, ngFormValue), disabled: _isDisabled(formItem, disabledState) });
247
- }
248
- }
249
- /**
250
- * Returns ngForm value for a FormItem.
251
- *
252
- * @param formItem FormItem requiring a value
253
- * @param ngFormValue ngForm value
254
- */
255
- function findItemValue(formItem, ngFormValue) {
256
- const itemId = formItem.itemId.split('.').pop();
257
- switch (itemId === null || itemId === void 0 ? void 0 : itemId.toUpperCase()) {
258
- // FIXME: can we put these IDs in constants and refer to them instead?
259
- case 'DATEITEM':
260
- return !!ngFormValue && typeof ngFormValue !== 'string' ? ngFormValue.toISOString() : ngFormValue;
261
- case 'CHECKBOXITEM': {
262
- if (!isNullOrUndefined(ngFormValue) && Array.isArray(ngFormValue)) {
263
- const arr = ngFormValue;
264
- return formItem.options.filter((o, index) => !!arr[index]).map((o) => o.option.id);
265
- }
266
- return [];
267
- }
268
- default:
269
- return ngFormValue;
270
- }
271
- }
272
- function insertNestedFormItemValues(formItem, ngFormValue, disabledState, customFormItemConditional = () => false, customFormItemBuilder) {
273
- const optionItemMap = {};
274
- for (const id in formItem.optionItemMap) {
275
- if (Object.prototype.hasOwnProperty.call(formItem.optionItemMap, id)) {
276
- const subItem = formItem.optionItemMap[id];
277
- optionItemMap[id] = determineInsertFunctionToUse(subItem, ngFormValue[subItem.instanceId], disabledState, customFormItemConditional, customFormItemBuilder);
278
- }
279
- }
280
- return Object.assign(Object.assign({}, formItem), { optionItemMap, value: findItemValue(formItem, ngFormValue[formItem.instanceId]), disabled: _isDisabled(formItem, disabledState) });
281
- }
282
- //#endregion
283
- /**
284
- * Determines if a FormItem has an OptionItemMap with at least 1 item, which require their own FormControl(s)
285
- * @param formItem FormItem to check
286
- */
287
- export function hasNestedFormItems(formItem) {
288
- return isType(formItem, 'optionItemMap') && Object.keys(formItem.optionItemMap).length > 0;
289
- }
290
- /**
291
- * Function for validating min/max selections limits
292
- * @param typeCheck Which limit to validate. 'MIN' | 'MAX'
293
- * @param limit upper or lower limit to check against
294
- */
295
- function numCheckboxesValidator(typeCheck, limit = 1) {
296
- return (control) => {
297
- let totalSelected = 0;
298
- if (isFormArray(control)) {
299
- totalSelected = control.controls.map((c) => c.value).reduce((total, next) => (next ? total + next : total), 0);
300
- }
301
- switch (typeCheck) {
302
- case 'MIN':
303
- return totalSelected >= limit ? null : { minSelected: `Select at least ${limit}` };
304
- case 'MAX':
305
- return totalSelected <= limit ? null : { maxSelected: `Select no more than ${limit}` };
306
- }
307
- };
308
- }
309
- function isFormArray(control) {
310
- return isType(control, 'controls');
311
- }
312
- function _isDisabled(item, disabledState) {
313
- const disabled = disabledState[item.instanceId];
314
- return isNullOrUndefined(disabled) ? item.disabled : disabled;
315
- }
316
- function wholeNumberPattern() {
317
- return (control) => {
318
- if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
319
- return null;
320
- }
321
- return wholeNumber.test(control.value) ? null : { wholeNumber: true };
322
- };
323
- }
324
- function numericalValueCheck() {
325
- return (control) => {
326
- if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
327
- return null;
328
- }
329
- return numOnlyWithoutComma.test(control.value) || numOnlyWithComma.test(control.value) ? null : { nonDigit: true };
330
- };
331
- }
332
- function positiveNumberPattern() {
333
- return (control) => {
334
- if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
335
- return null;
336
- }
337
- return posOnly.test(control.value) ? null : { positive: true };
338
- };
339
- }
340
- /**
341
- * This works as a combination of the angular 'min'/'max' Validators. Using the built-in validators
342
- * appears to take precedence over custom validators, regardless of order in the array. Using this function
343
- * ensures validators set before this one maintain priority. For instance, the input value failing numerical validation
344
- * is more important than the value being within min-max range.
345
- */
346
- function numValueLimit(type, limit) {
347
- return (control) => {
348
- if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
349
- return null;
350
- }
351
- const value = parseFloat(control.value);
352
- return !isNaN(value) && (type === 'min' ? value < limit : value > limit) ? { [type]: { [type]: limit, actual: control.value } } : null;
353
- };
354
- }
355
- function isEmptyString(value) {
356
- return typeof value === 'string' && !value.length;
357
- }
358
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL2NvcmUvdXRpbGl0aWVzL3NlcmlhbGl6ZXItdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFpQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBSWhCLHNCQUFzQixFQU10QixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsc0JBQXNCLEVBR3RCLHdCQUF3QixFQUd4QixvQkFBb0IsRUFLcEIsMkJBQTJCLEdBRzVCLE1BQU0sbUJBQW1CLENBQUM7QUFLM0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTFELGdGQUFnRjtBQUNoRixNQUFNLG1CQUFtQixHQUFHLGlCQUFpQixDQUFDO0FBQzlDLGdHQUFnRztBQUNoRyxNQUFNLGdCQUFnQixHQUFHLDhCQUE4QixDQUFDO0FBQ3hELDZFQUE2RTtBQUM3RSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDMUIsNEZBQTRGO0FBQzVGLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDO0FBRXZDLGdDQUFnQztBQUVoQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsUUFBa0QsRUFDbEQsY0FBb0MsRUFDcEMsNEJBQXlELEdBQUcsRUFBRSxDQUFDLEtBQUssRUFDcEUsc0JBQW1FO0lBRW5FLE1BQU0sSUFBSSxHQUF1QyxFQUFFLENBQUM7SUFFcEQs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QyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6SSxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgaXNOdWxsT3JVbmRlZmluZWQsIGlzUHJlc2VudCwgaXNUeXBlIH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5pbXBvcnQge1xuICBDSEVDS0JPWF9JVEVNX0lELFxuICBDaGVja2JveEl0ZW0sXG4gIENvbmRpdGlvbmFsSXRlbSxcbiAgRGF0ZVJhbmdlLFxuICBERUNJTUFMX0FOU1dFUl9JVEVNX0lELFxuICBEZWNpbWFsQW5zd2VySXRlbSxcbiAgRm9ybSBhcyBXZWJGb3JtLFxuICBGb3JtSXRlbSxcbiAgRm9ybUl0ZW1Hcm91cCxcbiAgRm9ybUl0ZW1JbXBsLFxuICBpc0Zvcm0sXG4gIGlzRm9ybUl0ZW1Hcm91cEltcGwsXG4gIGlzT2Zmc2V0RGF0ZVJhbmdlSXRlbSxcbiAgaXNSZXBlYXRhYmxlSXRlbSxcbiAgaXNTZWN0aW9uLFxuICBpc1RhYmxlSXRlbSxcbiAgaXNXaG9sZU51bWJlckl0ZW0sXG4gIGlzWWVhclF1YXJ0ZXJSYW5nZUl0ZW0sXG4gIE9wdGlvbixcbiAgT3B0aW9uR3JvdXBJdGVtSW1wbCxcbiAgUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lELFxuICBQYXJhZ3JhcGhBbnN3ZXJJdGVtLFxuICBSZXBlYXRhYmxlSXRlbSxcbiAgU0hPUlRfQU5TV0VSX0lURU1fSUQsXG4gIFNob3J0QW5zd2VySXRlbSxcbiAgVGFibGVJdGVtLFxuICBUYWJsZVJvd0l0ZW0sXG4gIFZhbHVlSXRlbSxcbiAgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX0lELFxuICBXaG9sZU51bWJlckFuc3dlckl0ZW0sXG4gIFllYXJRdWFydGVyLFxufSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5cbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IE10bmFXZk1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9ybS1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgdmFsaWRhdGlvblJlc3VsdFZhbGlkYXRvciB9IGZyb20gJy4uL3ZhbGlkYXRvcnMnO1xuXG4vKiogVHlwZXMgb2YgVmFsaWRhdG9ycyB0aGF0IGNhbiBiZSBzZXQgb24gYSBGb3JtQ29udHJvbCAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdG9yVHlwZSA9ICdyZXF1aXJlZCcgfCAncmVxdWlyZWRUcnVlJyB8ICdlbWFpbCc7XG5leHBvcnQgdHlwZSBWYWxpZGF0b3JXaXRoTnVtYmVyVHlwZSA9ICdtaW5MZW5ndGgnIHwgJ21heExlbmd0aCcgfCAnbWluJyB8ICdtYXgnO1xuXG4vKiogUmVnRXggdG8gdmFsaWRhdGUgbnVtYmVyIGl0ZW1zIGNvbnRhaW4gb25seSBuZWdhdGl2ZSwgZGlnaXRzLCBvciBkZWNpbWFscyAqL1xuY29uc3QgbnVtT25seVdpdGhvdXRDb21tYSA9IC9eLT9cXGQrKFxcLlxcZCopPyQvO1xuLyoqIFJlZ0V4IHRvIHZhbGlkYXRlIG51bWJlciBpdGVtcyBjb250YWluIG9ubHkgbmVnYXRpdmUsIGRpZ2l0cywgb3IgZGVjaW1hbHMgaW4gY29tbWEgZm9ybWF0ICovXG5jb25zdCBudW1Pbmx5V2l0aENvbW1hID0gL14tP1xcZHsxLDN9KCxcXGR7M30pKihcXC5cXGQqKT8kLztcbi8qKiBSZWdFeCB0byB2YWxpZGF0ZSAncG9zaXRpdmUgb25seScgaXRlbSBjb25haW5zIG5vbi1uZWdhdGl2ZSBjaGFyYWN0ZXJzICovXG5jb25zdCBwb3NPbmx5ID0gL15bXi1dKiQvO1xuLyoqIFJlZ0V4IHRvIHZhbGlkYXRlICd3aG9sZSBudW1iZXInIGl0ZW0gY29udGFpbnMgb25seSBuZWdhdGl2ZSwgZGlnaXRzLCBvciBjb21tYSBmb3JtYXQgKi9cbmNvbnN0IHdob2xlTnVtYmVyID0gL14tP1xcZCsoLFxcZHszfSkqJC87XG5cbi8vI3JlZ2lvbiBGb3JtQ29udHJvbCBHZW5lcmF0aW9uXG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbmV3IEZvcm1Hcm91cCB3aXRoIEZvcm1Db250cm9scyAmIHBvc3NpYmxlIG5lc3RlZCBGb3JtR3JvdXBzXG4gKiBAcGFyYW0gZm9ybUl0ZW0gV2ViRm9ybSwgU2VjdGlvbiwgR3JvdXAsIG9yIFJlcGVhdGFibGVJdGVtIHVzZWQgdG8gY3JlYXRlIGEgRm9ybUdyb3VwXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBib29sZWFuIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtc1xuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgRm9ybUNvbnRyb2wgZ2VuZXJhdG9yIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRm9ybUl0ZW1zKFxuICBmb3JtSXRlbTogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSxcbiAgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlLFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tQ29udHJvbEdlbmVyYXRvcj86IChpdGVtOiBGb3JtSXRlbSkgPT4gQWJzdHJhY3RDb250cm9sIHwgbnVsbFxuKTogRm9ybUdyb3VwIHtcbiAgY29uc3QgZm9ybTogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2wgfSA9IHt9O1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBmb3JtSXRlbS5pdGVtcykge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBkZXRlcm1pbmVTZXJpYWxpemVGdW5jdGlvblRvVXNlKFxuICAgICAgaXRlbSBhcyBGb3JtSXRlbUltcGw8dW5rbm93bj4sXG4gICAgICBtYW5hZ2VyU2VydmljZSxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICBjdXN0b21Db250cm9sR2VuZXJhdG9yXG4gICAgKTtcbiAgICBpZiAoY29udHJvbCkge1xuICAgICAgZm9ybVtpdGVtLmluc3RhbmNlSWRdID0gY29udHJvbDtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVxdWlyZWQgPSBpc0Zvcm0oZm9ybUl0ZW0pID8gdHJ1ZSA6IGZvcm1JdGVtLnJlcXVpcmVkO1xuICBjb25zdCBncm91cCA9IHJlcXVpcmVkID8gbmV3IEZvcm1Hcm91cChmb3JtLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSA6IG5ldyBGb3JtR3JvdXAoZm9ybSk7XG4gIGlmICgnZGlzYWJsZWQnIGluIGZvcm1JdGVtICYmIGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgdGFpbG9yZWQgRm9ybUNvbnRyb2wgd2l0aCB2YWxpZGF0b3JzIGZvciBhIEZvcm1JdGVtXG4gKiBAcGFyYW0gZm9ybUl0ZW0gVGhlIEZvcm1JdGVtIHJlcXVlc3RpbmcgYSB0YWlsb3JlZCBGb3JtQ29udHJvbFxuICogQGludGVybmFsIENyZWF0aW5nIHRoZSBmb3JtIGNvbnRyb2wgYW5kIHRoZW4gY2FsbGluZyBzZXRWYWxpZGF0b3JzIGZvcmNlIGEgdmFsaWRhdGlvbiBwYXNzLFxuICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE5NjIyI2lzc3VlY29tbWVudC0zNDE1NDc4ODRcbiAqIEJldHRlciB0byBnYXRoZXIgdGhlIHZhbGlkYXRvcnMgYW5kIHB1dCB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgZm9ybSBjb250cm9sLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRm9ybUl0ZW0oZm9ybUl0ZW06IEZvcm1JdGVtSW1wbDx1bmtub3duPiwgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlKTogQWJzdHJhY3RDb250cm9sIHtcbiAgY29uc3QgdmFsaWRhdG9ycyA9IG5ldyBBcnJheTxWYWxpZGF0b3JGbj4odmFsaWRhdGlvblJlc3VsdFZhbGlkYXRvcihmb3JtSXRlbS5pbnN0YW5jZUlkLCBtYW5hZ2VyU2VydmljZSkpO1xuICBpZiAoZm9ybUl0ZW0ucmVxdWlyZWQpIHtcbiAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gIH1cbiAgc3dpdGNoIChmb3JtSXRlbS5pdGVtSWQpIHtcbiAgICBjYXNlIENIRUNLQk9YX0lURU1fSUQ6IHtcbiAgICAgIGNvbnN0IGNoZWNrYm94SXRlbSA9IGZvcm1JdGVtIGFzIENoZWNrYm94SXRlbTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2hlY2tib3hJdGVtLnZhbHVlIHx8IFtdO1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKG51bUNoZWNrYm94ZXNWYWxpZGF0b3IoJ01JTicsIGNoZWNrYm94SXRlbS5taW5TZWxlY3Rpb25zKSwgbnVtQ2hlY2tib3hlc1ZhbGlkYXRvcignTUFYJywgY2hlY2tib3hJdGVtLm1heFNlbGVjdGlvbnMpKTtcbiAgICAgIGNvbnN0IGFyciA9IG5ldyBGb3JtQXJyYXkoXG4gICAgICAgIGNoZWNrYm94SXRlbS5vcHRpb25zLm1hcChcbiAgICAgICAgICAobykgPT4gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IG8uc2VsZWN0ZWQgfHwgdmFsdWUuc29tZSgodikgPT4gdiA9PT0gby5vcHRpb24uaWQpLCBkaXNhYmxlZDogY2hlY2tib3hJdGVtLmRpc2FibGVkIH0pXG4gICAgICAgICksXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICAgIGNhc2UgREVDSU1BTF9BTlNXRVJfSVRFTV9JRDpcbiAgICBjYXNlIFdIT0xFX05VTUJFUl9BTlNXRVJfSVRFTV9JRDoge1xuICAgICAgY29uc3QgaXRlbSA9IGZvcm1JdGVtIGFzIERlY2ltYWxBbnN3ZXJJdGVtIHwgV2hvbGVOdW1iZXJBbnN3ZXJJdGVtO1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKG51bWVyaWNhbFZhbHVlQ2hlY2soKSk7XG4gICAgICBpZiAoaXNXaG9sZU51bWJlckl0ZW0oaXRlbSkpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHdob2xlTnVtYmVyUGF0dGVybigpKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLnBvc2l0aXZlT25seSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2gocG9zaXRpdmVOdW1iZXJQYXR0ZXJuKCkpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVtLm1pblZhbHVlKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2gobnVtVmFsdWVMaW1pdCgnbWluJywgaXRlbS5taW5WYWx1ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVtLm1heFZhbHVlKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2gobnVtVmFsdWVMaW1pdCgnbWF4JywgaXRlbS5tYXhWYWx1ZSkpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lEOlxuICAgIGNhc2UgU0hPUlRfQU5TV0VSX0lURU1fSUQ6IHtcbiAgICAgIGNvbnN0IHNob3J0QW5zd2VySXRlbSA9IGZvcm1JdGVtIGFzIFNob3J0QW5zd2VySXRlbSB8IFBhcmFncmFwaEFuc3dlckl0ZW07XG4gICAgICB2YWxpZGF0b3JzLnB1c2goLi4uZ2V0TnVtZXJpY1ZhbGlkYXRvcignbWluTGVuZ3RoJywgc2hvcnRBbnN3ZXJJdGVtLm1pbkNoYXJDb3VudCkpO1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKC4uLmdldE51bWVyaWNWYWxpZGF0b3IoJ21heExlbmd0aCcsIHNob3J0QW5zd2VySXRlbS5tYXhDaGFyQ291bnQpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBmb3JtSXRlbS52YWx1ZSwgZGlzYWJsZWQ6ICEhZm9ybUl0ZW0uZGlzYWJsZWQgfSwgVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgY29udHJvbHMgZm9yIGFueSBmb3JtIGl0ZW1zIG5lc3RlZCBpbnNpZGUgYSBwYXJlbnQgaXRlbXMgb3B0aW9uc1xuICogQHBhcmFtIGZvcm1JdGVtIFRoZSBGb3JtSXRlbSB3aXRoIGFuICdvcHRpb25zJyBwcm9wZXJ0eVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgY29uZGl0aW9uYWwgZnVuY3Rpb24gZnJvbSBwYXJlbnQgJ3NlcmlhbGl6ZUZvcm1JdGVtcycgZnVuY3Rpb25cbiAqIEBwYXJhbSBjdXN0b21Db250cm9sR2VuZXJhdG9yIEZvcm1Db250cm9sIGdlbmVyYXRvciBmcm9tIHBhcmVudCAnc2VyaWFsaXplRm9ybUl0ZW1zJyBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTmVzdGVkT3B0aW9uRm9ybUl0ZW1zKFxuICBmb3JtSXRlbTogT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBGb3JtR3JvdXAge1xuICBjb25zdCBjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2wgfSA9IHt9O1xuICBmb3IgKGNvbnN0IGlkIGluIGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXApIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXAsIGlkKSkge1xuICAgICAgY29uc3Qgc3ViSXRlbSA9IGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXBbaWRdIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPjtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBkZXRlcm1pbmVTZXJpYWxpemVGdW5jdGlvblRvVXNlKHN1Ykl0ZW0sIG1hbmFnZXJTZXJ2aWNlLCBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLCBjdXN0b21Db250cm9sR2VuZXJhdG9yKTtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnRyb2xzW3N1Ykl0ZW0uaW5zdGFuY2VJZF0gPSBjb250cm9sO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnRyb2xzW2Zvcm1JdGVtLmluc3RhbmNlSWRdID0gc2VyaWFsaXplRm9ybUl0ZW0oZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlKTtcbiAgY29uc3QgZ3JvdXAgPSBmb3JtSXRlbS5yZXF1aXJlZCA/IG5ldyBGb3JtR3JvdXAoY29udHJvbHMsIFZhbGlkYXRvcnMucmVxdWlyZWQpIDogbmV3IEZvcm1Hcm91cChjb250cm9scyk7XG4gIGlmIChmb3JtSXRlbS5kaXNhYmxlZCkge1xuICAgIGdyb3VwLmRpc2FibGUoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogQnVpbGQgRm9ybUNvbnRyb2xzIGZvciBhIFRhYmxlSXRlbVxuICogQHBhcmFtIGl0ZW0gVGFibGVJdGVtIHJlcXVpcmluZyBGb3JtQ29udHJvbHNcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIENvbmRpdGlvbmFsIGZ1bmN0aW9uIGZvciBjdXN0b20gYW55IEZvcm1JdGVtc1xuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgRm9ybUNvbnRyb2wgZ2VuZXJhdG9yIGZvciBjdXN0b20gYW55IEZvcm1JdGVtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplVGFibGVJdGVtKFxuICBpdGVtOiBUYWJsZUl0ZW0sXG4gIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3I/OiAoaXRlbTogRm9ybUl0ZW0pID0+IEFic3RyYWN0Q29udHJvbCB8IG51bGxcbik6IEZvcm1Hcm91cCB7XG4gIGNvbnN0IHRhYmxlQ29udHJvbDogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2wgfSA9IHt9O1xuICBmb3IgKGNvbnN0IHJvdyBvZiBpdGVtLnRhYmxlUm93cykge1xuICAgIGZvciAoY29uc3Qgcm93SXRlbSBvZiByb3cuaXRlbXMuZmlsdGVyKChpKSA9PiAhIWkpKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gZGV0ZXJtaW5lU2VyaWFsaXplRnVuY3Rpb25Ub1VzZShcbiAgICAgICAgcm93SXRlbSBhcyBGb3JtSXRlbUltcGw8dW5rbm93bj4sXG4gICAgICAgIG1hbmFnZXJTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICBjdXN0b21Db250cm9sR2VuZXJhdG9yXG4gICAgICApO1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgdGFibGVDb250cm9sW3Jvd0l0ZW0uaW5zdGFuY2VJZF0gPSBjb250cm9sO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBncm91cCA9IGl0ZW0ucmVxdWlyZWQgPyBuZXcgRm9ybUdyb3VwKHRhYmxlQ29udHJvbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgRm9ybUdyb3VwKHRhYmxlQ29udHJvbCk7XG4gIGlmIChpdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiBmb3IgdGhlIGNhbGxlciB0byB1c2UuXG4gKlxuICogQHBhcmFtIGZvcm1JdGVtIEZvcm1JdGVtIHJlcXVpcmluZyBzZXJpYWxpemF0aW9uXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBDb25kaXRpb25hbCBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqIEBwYXJhbSBjdXN0b21Db250cm9sR2VuZXJhdG9yIFNlcmlhbGl6ZXIgZm9yIGEgY3VzdG9tIEZvcm1JdGVtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmVTZXJpYWxpemVGdW5jdGlvblRvVXNlKFxuICBmb3JtSXRlbTogRm9ybUl0ZW1JbXBsPHVua25vd24+IHwgV2ViRm9ybSxcbiAgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlLFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tQ29udHJvbEdlbmVyYXRvcj86IChpdGVtOiBGb3JtSXRlbSkgPT4gQWJzdHJhY3RDb250cm9sIHwgbnVsbFxuKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gIGlmIChpc0Zvcm0oZm9ybUl0ZW0pIHx8IGlzUmVwZWF0YWJsZUl0ZW0oZm9ybUl0ZW0pIHx8IGlzU2VjdGlvbihmb3JtSXRlbSkgfHwgaXNGb3JtSXRlbUdyb3VwSW1wbChmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplRm9ybUl0ZW1zKGZvcm1JdGVtLCBtYW5hZ2VyU2VydmljZSwgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCwgY3VzdG9tQ29udHJvbEdlbmVyYXRvcik7XG4gIH0gZWxzZSBpZiAoaXNUYWJsZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZVRhYmxlSXRlbShmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UsIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpO1xuICB9IGVsc2UgaWYgKGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwoZm9ybUl0ZW0pICYmICEhY3VzdG9tQ29udHJvbEdlbmVyYXRvcikge1xuICAgIHJldHVybiBjdXN0b21Db250cm9sR2VuZXJhdG9yKGZvcm1JdGVtKTtcbiAgfSBlbHNlIGlmIChoYXNOZXN0ZWRGb3JtSXRlbXMoZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZU5lc3RlZE9wdGlvbkZvcm1JdGVtcyhmb3JtSXRlbSBhcyBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sIG1hbmFnZXJTZXJ2aWNlKTtcbiAgfSBlbHNlIGlmIChpc09mZnNldERhdGVSYW5nZUl0ZW0oZm9ybUl0ZW0pIHx8IGlzWWVhclF1YXJ0ZXJSYW5nZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZVJhbmdlSXRlbShmb3JtSXRlbSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZUZvcm1JdGVtKGZvcm1JdGVtLCBtYW5hZ2VyU2VydmljZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBGb3JtR3JvdXAgZm9yIGEgcmFuZ2UgaXRlbVxuICogQHBhcmFtIGZvcm1JdGVtIEZvcm1JdGVtIGZvciBhIERhdGVSYW5nZSBvZiBEYXRlIHwgWWVhclF1YXJ0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVJhbmdlSXRlbShmb3JtSXRlbTogRm9ybUl0ZW1JbXBsPERhdGVSYW5nZTxEYXRlIHwgWWVhclF1YXJ0ZXI+Pik6IEZvcm1Hcm91cCB7XG4gIGNvbnN0IHZhbGlkYXRvcnMgPSBuZXcgQXJyYXk8VmFsaWRhdG9yRm4+KCk7XG4gIGlmIChmb3JtSXRlbS5yZXF1aXJlZCkge1xuICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfVxuICBjb25zdCBncm91cCA9IG5ldyBGb3JtR3JvdXAoXG4gICAge1xuICAgICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbChmb3JtSXRlbS52YWx1ZSA/IGZvcm1JdGVtLnZhbHVlLnN0YXJ0IDogbnVsbCksXG4gICAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbChmb3JtSXRlbS52YWx1ZSA/IGZvcm1JdGVtLnZhbHVlLmVuZCA6IG51bGwpLFxuICAgIH0sXG4gICAgVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpXG4gICk7XG4gIGlmIChmb3JtSXRlbS5kaXNhYmxlZCkge1xuICAgIGdyb3VwLmRpc2FibGUoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIFZhbGlkYXRvciB3aXRoIGEgbnVtZXJpYyB2YWx1ZSBmb3IgYSBGb3JtSXRlbTtcbiAqIFJldHVybnMgYXMgYW4gYXJyYXkgb2YgbGVuZ3RoIDEgb3IgMFxuICogQHBhcmFtIHBhcmFtMCBgdHlwZWAgLSB0eXBlIG9mIHZhbGlkYXRvciwgZS5nLiAnbWluTGVuZ3RoJztcbiAqIGB2YWx1ZWAgLSBwYXJhbWV0ZXIgZm9yIHRoZSB2YWxpZGF0b3IsIGUuZy4gJ21pbkxlbmd0aCh2YWx1ZSknXG4gKi9cbmZ1bmN0aW9uIGdldE51bWVyaWNWYWxpZGF0b3IodHlwZTogVmFsaWRhdG9yV2l0aE51bWJlclR5cGUsIHZhbHVlOiBudW1iZXIpOiBWYWxpZGF0b3JGbltdIHtcbiAgcmV0dXJuICFpc051bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyBbVmFsaWRhdG9yc1t0eXBlXSh2YWx1ZSldIDogW107XG59XG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIE10bmFGb3JtIHZhbHVlIGluc2VydGlvblxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgRm9ybWl0ZW1zIHdpdGggbmV3IHZhbHVlcyBpbnNlcnRlZC5cbiAqXG4gKiBAcGFyYW0gc2VjdGlvbiBUaGUgb2xkIEZvcm0gb3IgRm9ybSBTZWN0aW9uXG4gKiBAcGFyYW0gbmdGb3JtVmFsdWUgbmdGb3JtIEpTT04gdmFsdWVzXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBib29sZWFuIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQnVpbGRlciBmdW5jdGlvbiB0byBoYW5kbGUgY3VzdG9tIEZvcm1JdGVtc1xuICogQHJldHVybnMgbmV3IEZvcm1JdGVtIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRGb3JtSXRlbVZhbHVlcyhcbiAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSxcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IEFycmF5PEZvcm1JdGVtPiB7XG4gIHJldHVybiBzZWN0aW9uLml0ZW1zXG4gICAgLm1hcCgoaXRlbSkgPT5cbiAgICAgIGRldGVybWluZUluc2VydEZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIG5nRm9ybVZhbHVlW2l0ZW0uaW5zdGFuY2VJZF0sXG4gICAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlcixcbiAgICAgICAgc2VjdGlvblxuICAgICAgKVxuICAgIClcbiAgICAuZmlsdGVyKGlzUHJlc2VudCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNvcGllZCBUYWJsZUl0ZW0sIHdpdGggZWFjaCByb3cgRm9ybUl0ZW0gaGF2aW5nIG5ldyBpbnNlcnRlZCB2YWx1ZXMuXG4gKiBAcGFyYW0gaXRlbSBUYWJsZUl0ZW0gdG8gaW5zZXJ0IHZhbHVlc1xuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZSBvZiB0aGUgVGFibGVJdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBib29sZWFuIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1CdWlsZGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSBjdXN0b20gRm9ybUl0ZW0gdmFsdWUgaW5zZXJ0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRUYWJsZUl0ZW1WYWx1ZXMoXG4gIGl0ZW06IFRhYmxlSXRlbSxcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IFRhYmxlSXRlbSB7XG4gIGNvbnN0IHRhYmxlUm93cyA9IGl0ZW0udGFibGVSb3dzLm1hcCgocm93OiBUYWJsZVJvd0l0ZW0pID0+ICh7XG4gICAgLi4ucm93LFxuICAgIGl0ZW1zOiByb3cuaXRlbXNcbiAgICAgIC5maWx0ZXIoaXNQcmVzZW50KVxuICAgICAgLm1hcCgoZm9ybUl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRldGVybWluZUluc2VydEZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgICAgZm9ybUl0ZW0sXG4gICAgICAgICAgbmdGb3JtVmFsdWVbZm9ybUl0ZW0uaW5zdGFuY2VJZF0sXG4gICAgICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICAgICApO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoaXNQcmVzZW50KSxcbiAgfSkpO1xuICByZXR1cm4geyAuLi5pdGVtLCB0YWJsZVJvd3MsIGRpc2FibGVkOiBfaXNEaXNhYmxlZChpdGVtLCBkaXNhYmxlZFN0YXRlKSB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgRm9ybUl0ZW0gYWZ0ZXIgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIHVzZS5cbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSByZXF1aXJpbmcgdmFsdWUgaW5zZXJ0aW9uXG4gKiBAcGFyYW0gbmdGb3JtVmFsdWUgbmdGb3JtIHZhbHVlXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBDb25kaXRpb25hbCBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIgVmFsdWUgaW5zZXJ0aW9uIGZ1bmN0aW9uIGZvciBhIGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGRpc2FibGVkU3RhdGUgTWFwIG9mIGl0ZW1zJyBkaXNhYmxlZCBzdGF0ZVxuICogQHBhcmFtIHBhcmVudCBQYXJlbnQgb2YgdGhlIEZvcm1JdGVtLCB1c2VkIHRvIHBhc3MgdG8gdGhlIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICBmb3JtSXRlbTogRm9ybUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiB1bmtub3duLFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGwsXG4gIHBhcmVudD86IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW1cbik6IEZvcm1JdGVtIHwgbnVsbCB7XG4gIGlmIChpc1NlY3Rpb24oZm9ybUl0ZW0pIHx8IGlzRm9ybUl0ZW1Hcm91cEltcGwoZm9ybUl0ZW0pIHx8IGlzUmVwZWF0YWJsZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgY29uc3QgaXRlbXMgPSBpbnNlcnRGb3JtSXRlbVZhbHVlcyhcbiAgICAgIGZvcm1JdGVtLFxuICAgICAgbmdGb3JtVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICk7XG4gICAgcmV0dXJuIHsgLi4uZm9ybUl0ZW0sIGl0ZW1zLCBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0sIGRpc2FibGVkU3RhdGUpIH0gYXMgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtO1xuICB9IGVsc2UgaWYgKGlzVGFibGVJdGVtKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBpbnNlcnRUYWJsZUl0ZW1WYWx1ZXMoXG4gICAgICBmb3JtSXRlbSxcbiAgICAgIG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICApO1xuICB9IGVsc2UgaWYgKGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwoZm9ybUl0ZW0pICYmICEhY3VzdG9tRm9ybUl0ZW1CdWlsZGVyKSB7XG4gICAgcmV0dXJuIGN1c3RvbUZvcm1JdGVtQnVpbGRlcihwYXJlbnQsIGZvcm1JdGVtLCBuZ0Zvcm1WYWx1ZSwgZGlzYWJsZWRTdGF0ZSk7XG4gIH0gZWxzZSBpZiAoaGFzTmVzdGVkRm9ybUl0ZW1zKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBpbnNlcnROZXN0ZWRGb3JtSXRlbVZhbHVlcyhcbiAgICAgIGZvcm1JdGVtIGFzIE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICAgIG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICApO1xuICB9IGVsc2UgaWYgKGlzT2Zmc2V0RGF0ZVJhbmdlSXRlbShmb3JtSXRlbSkgfHwgaXNZZWFyUXVhcnRlclJhbmdlSXRlbShmb3JtSXRlbSkpIHtcbiAgICBjb25zdCBzdGFydCA9IGlzVHlwZTx7IHN0YXJ0OiBZZWFyUXVhcnRlciB8IERhdGUgfT4obmdGb3JtVmFsdWUsICdzdGFydCcpID8gbmdGb3JtVmFsdWUuc3RhcnQgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZW5kID0gaXNUeXBlPHsgZW5kOiBZZWFyUXVhcnRlciB8IERhdGUgfT4obmdGb3JtVmFsdWUsICdlbmQnKSA/IG5nRm9ybVZhbHVlLmVuZCA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyAuLi5mb3JtSXRlbSwgdmFsdWU6IHsgc3RhcnQsIGVuZCB9LCBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0sIGRpc2FibGVkU3RhdGUpIH0gYXMgRm9ybUl0ZW1JbXBsPFxuICAgICAgRGF0ZVJhbmdlPERhdGUgfCBZZWFyUXVhcnRlcj5cbiAgICA+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5mb3JtSXRlbSxcbiAgICAgIHZhbHVlOiBmaW5kSXRlbVZhbHVlKGZvcm1JdGVtLCBuZ0Zvcm1WYWx1ZSksXG4gICAgICBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0gYXMgRm9ybUl0ZW1JbXBsPHVua25vd24+LCBkaXNhYmxlZFN0YXRlKSxcbiAgICB9IGFzIEZvcm1JdGVtO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBuZ0Zvcm0gdmFsdWUgZm9yIGEgRm9ybUl0ZW0uXG4gKlxuICogQHBhcmFtIGZvcm1JdGVtIEZvcm1JdGVtIHJlcXVpcmluZyBhIHZhbHVlXG4gKiBAcGFyYW0gbmdGb3JtVmFsdWUgbmdGb3JtIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGZpbmRJdGVtVmFsdWUoZm9ybUl0ZW06IEZvcm1JdGVtLCBuZ0Zvcm1WYWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICBjb25zdCBpdGVtSWQgPSBmb3JtSXRlbS5pdGVtSWQuc3BsaXQoJy4nKS5wb3AoKTtcbiAgc3dpdGNoIChpdGVtSWQ/LnRvVXBwZXJDYXNlKCkpIHtcbiAgICAvLyBGSVhNRTogY2FuIHdlIHB1dCB0aGVzZSBJRHMgaW4gY29uc3RhbnRzIGFuZCByZWZlciB0byB0aGVtIGluc3RlYWQ/XG4gICAgY2FzZSAnREFURUlURU0nOlxuICAgICAgcmV0dXJuICEhbmdGb3JtVmFsdWUgJiYgdHlwZW9mIG5nRm9ybVZhbHVlICE9PSAnc3RyaW5nJyA/IChuZ0Zvcm1WYWx1ZSBhcyBNb21lbnQpLnRvSVNPU3RyaW5nKCkgOiAobmdGb3JtVmFsdWUgYXMgc3RyaW5nKTtcbiAgICBjYXNlICdDSEVDS0JPWElURU0nOiB7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKG5nRm9ybVZhbHVlKSAmJiBBcnJheS5pc0FycmF5KG5nRm9ybVZhbHVlKSkge1xuICAgICAgICBjb25zdCBhcnIgPSBuZ0Zvcm1WYWx1ZSBhcyBBcnJheTxib29sZWFuPjtcbiAgICAgICAgcmV0dXJuIChmb3JtSXRlbSBhcyBDaGVja2JveEl0ZW0pLm9wdGlvbnMuZmlsdGVyKChvLCBpbmRleCkgPT4gISFhcnJbaW5kZXhdKS5tYXAoKG8pID0+IG8ub3B0aW9uLmlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZ0Zvcm1WYWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnROZXN0ZWRGb3JtSXRlbVZhbHVlcyhcbiAgZm9ybUl0ZW06IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IEZvcm1JdGVtIHtcbiAgY29uc3Qgb3B0aW9uSXRlbU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBpZCBpbiBmb3JtSXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmb3JtSXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgIGNvbnN0IHN1Ykl0ZW0gPSBmb3JtSXRlbS5vcHRpb25JdGVtTWFwW2lkXTtcbiAgICAgIG9wdGlvbkl0ZW1NYXBbaWRdID0gZGV0ZXJtaW5lSW5zZXJ0RnVuY3Rpb25Ub1VzZShcbiAgICAgICAgc3ViSXRlbSxcbiAgICAgICAgbmdGb3JtVmFsdWVbc3ViSXRlbS5pbnN0YW5jZUlkXSxcbiAgICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmZvcm1JdGVtLFxuICAgIG9wdGlvbkl0ZW1NYXAsXG4gICAgdmFsdWU6IGZpbmRJdGVtVmFsdWUoZm9ybUl0ZW0sIG5nRm9ybVZhbHVlW2Zvcm1JdGVtLmluc3RhbmNlSWRdKSxcbiAgICBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0sIGRpc2FibGVkU3RhdGUpLFxuICB9IGFzIE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+Pjtcbn1cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBGb3JtSXRlbSBoYXMgYW4gT3B0aW9uSXRlbU1hcCB3aXRoIGF0IGxlYXN0IDEgaXRlbSwgd2hpY2ggcmVxdWlyZSB0aGVpciBvd24gRm9ybUNvbnRyb2wocylcbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSB0byBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzTmVzdGVkRm9ybUl0ZW1zKGZvcm1JdGVtOiB1bmtub3duKTogZm9ybUl0ZW0gaXMgeyBvcHRpb25JdGVtTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgcmV0dXJuIGlzVHlwZTx7IG9wdGlvbkl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+KGZvcm1JdGVtLCAnb3B0aW9uSXRlbU1hcCcpICYmIE9iamVjdC5rZXlzKGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXApLmxlbmd0aCA+IDA7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gZm9yIHZhbGlkYXRpbmcgbWluL21heCBzZWxlY3Rpb25zIGxpbWl0c1xuICogQHBhcmFtIHR5cGVDaGVjayBXaGljaCBsaW1pdCB0byB2YWxpZGF0ZS4gJ01JTicgfCAnTUFYJ1xuICogQHBhcmFtIGxpbWl0IHVwcGVyIG9yIGxvd2VyIGxpbWl0IHRvIGNoZWNrIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gbnVtQ2hlY2tib3hlc1ZhbGlkYXRvcih0eXBlQ2hlY2s6ICdNSU4nIHwgJ01BWCcsIGxpbWl0ID0gMSk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICBsZXQgdG90YWxTZWxlY3RlZCA9IDA7XG4gICAgaWYgKGlzRm9ybUFycmF5KGNvbnRyb2wpKSB7XG4gICAgICB0b3RhbFNlbGVjdGVkID0gY29udHJvbC5jb250cm9scy5tYXAoKGMpID0+IGMudmFsdWUpLnJlZHVjZSgodG90YWwsIG5leHQpID0+IChuZXh0ID8gdG90YWwgKyBuZXh0IDogdG90YWwpLCAwKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGVDaGVjaykge1xuICAgICAgY2FzZSAnTUlOJzpcbiAgICAgICAgcmV0dXJuIHRvdGFsU2VsZWN0ZWQgPj0gbGltaXQgPyBudWxsIDogeyBtaW5TZWxlY3RlZDogYFNlbGVjdCBhdCBsZWFzdCAke2xpbWl0fWAgfTtcbiAgICAgIGNhc2UgJ01BWCc6XG4gICAgICAgIHJldHVybiB0b3RhbFNlbGVjdGVkIDw9IGxpbWl0ID8gbnVsbCA6IHsgbWF4U2VsZWN0ZWQ6IGBTZWxlY3Qgbm8gbW9yZSB0aGFuICR7bGltaXR9YCB9O1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNGb3JtQXJyYXkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogY29udHJvbCBpcyBGb3JtQXJyYXkge1xuICByZXR1cm4gaXNUeXBlPEZvcm1BcnJheT4oY29udHJvbCwgJ2NvbnRyb2xzJyk7XG59XG5cbmZ1bmN0aW9uIF9pc0Rpc2FibGVkKGl0ZW06IENvbmRpdGlvbmFsSXRlbSwgZGlzYWJsZWRTdGF0ZTogeyBbaWQ6IHN0cmluZ106IGJvb2xlYW4gfSk6IGJvb2xlYW4ge1xuICBjb25zdCBkaXNhYmxlZCA9IGRpc2FibGVkU3RhdGVbaXRlbS5pbnN0YW5jZUlkXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGRpc2FibGVkKSA/IGl0ZW0uZGlzYWJsZWQgOiBkaXNhYmxlZDtcbn1cblxuZnVuY3Rpb24gd2hvbGVOdW1iZXJQYXR0ZXJuKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzRW1wdHlTdHJpbmcoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB3aG9sZU51bWJlci50ZXN0KGNvbnRyb2wudmFsdWUpID8gbnVsbCA6IHsgd2hvbGVOdW1iZXI6IHRydWUgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbnVtZXJpY2FsVmFsdWVDaGVjaygpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChjb250cm9sLnZhbHVlKSB8fCBpc0VtcHR5U3RyaW5nKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bU9ubHlXaXRob3V0Q29tbWEudGVzdChjb250cm9sLnZhbHVlKSB8fCBudW1Pbmx5V2l0aENvbW1hLnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBub25EaWdpdDogdHJ1ZSB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBwb3NpdGl2ZU51bWJlclBhdHRlcm4oKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwb3NPbmx5LnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBwb3NpdGl2ZTogdHJ1ZSB9O1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgd29ya3MgYXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgYW5ndWxhciAnbWluJy8nbWF4JyBWYWxpZGF0b3JzLiBVc2luZyB0aGUgYnVpbHQtaW4gdmFsaWRhdG9yc1xuICogYXBwZWFycyB0byB0YWtlIHByZWNlZGVuY2Ugb3ZlciBjdXN0b20gdmFsaWRhdG9ycywgcmVnYXJkbGVzcyBvZiBvcmRlciBpbiB0aGUgYXJyYXkuIFVzaW5nIHRoaXMgZnVuY3Rpb25cbiAqIGVuc3VyZXMgdmFsaWRhdG9ycyBzZXQgYmVmb3JlIHRoaXMgb25lIG1haW50YWluIHByaW9yaXR5LiBGb3IgaW5zdGFuY2UsIHRoZSBpbnB1dCB2YWx1ZSBmYWlsaW5nIG51bWVyaWNhbCB2YWxpZGF0aW9uXG4gKiBpcyBtb3JlIGltcG9ydGFudCB0aGFuIHRoZSB2YWx1ZSBiZWluZyB3aXRoaW4gbWluLW1heCByYW5nZS5cbiAqL1xuZnVuY3Rpb24gbnVtVmFsdWVMaW1pdCh0eXBlOiAnbWluJyB8ICdtYXgnLCBsaW1pdDogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChjb250cm9sLnZhbHVlKTtcbiAgICByZXR1cm4gIWlzTmFOKHZhbHVlKSAmJiAodHlwZSA9PT0gJ21pbicgPyB2YWx1ZSA8IGxpbWl0IDogdmFsdWUgPiBsaW1pdCkgPyB7IFt0eXBlXTogeyBbdHlwZV06IGxpbWl0LCBhY3R1YWw6IGNvbnRyb2wudmFsdWUgfSB9IDogbnVsbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eVN0cmluZyh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhdmFsdWUubGVuZ3RoO1xufVxuIl19
@@ -1,38 +0,0 @@
1
- import { isType } from '@mtna/core-ts';
2
- import { findFormItem } from './find-form-item';
3
- /**
4
- * Update a {@link FormStep}'s `status`.
5
- * The server side form validation errors will trump the provided `status`.
6
- *
7
- * @param instanceId the instanceId of the step to update, otherwise return the original step
8
- * @param step the step to check
9
- * @param status the new status to apply to the step
10
- * @param form the containing form
11
- * @returns an updated step with the correct status
12
- */
13
- export function updateStepStatus(instanceId, step, status, form) {
14
- var _a;
15
- if (instanceId !== step.instanceId) {
16
- // These aren't the droids you're looking for.
17
- // Return unmodified step.
18
- return step;
19
- }
20
- // A server validation error will trump the provided status
21
- if ((_a = form === null || form === void 0 ? void 0 : form.validationResult) === null || _a === void 0 ? void 0 : _a.formItemValidationResults.length) {
22
- // Get the FormGroup that represents the step
23
- const group = findFormItem(step.instanceId, form);
24
- if (isType(group, 'items')) {
25
- for (const error of form.validationResult.formItemValidationResults) {
26
- const itemWithError = findFormItem(error.id, group);
27
- // If the invalid item is within the step group,
28
- // show an error state
29
- if (itemWithError) {
30
- return Object.assign(Object.assign({}, step), { status: 'ERROR' });
31
- }
32
- }
33
- }
34
- }
35
- // There were no server side validation errors, just update the status
36
- return Object.assign(Object.assign({}, step), { status });
37
- }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXN0ZXAtc3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL2NvcmUvdXRpbGl0aWVzL3VwZGF0ZS1zdGVwLXN0YXR1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3ZDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsVUFBa0IsRUFBRSxJQUFjLEVBQUUsTUFBb0IsRUFBRSxJQUFXOztJQUNwRyxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ2xDLDhDQUE4QztRQUM5QywwQkFBMEI7UUFDMUIsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELDJEQUEyRDtJQUMzRCxJQUFJLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGdCQUFnQiwwQ0FBRSx5QkFBeUIsQ0FBQyxNQUFNLEVBQUU7UUFDNUQsNkNBQTZDO1FBQzdDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksTUFBTSxDQUFnQixLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDekMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLEVBQUU7Z0JBQ25FLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNwRCxnREFBZ0Q7Z0JBQ2hELHNCQUFzQjtnQkFDdEIsSUFBSSxhQUFhLEVBQUU7b0JBQ2pCLHVDQUFZLElBQUksS0FBRSxNQUFNLEVBQUUsT0FBTyxJQUFHO2lCQUNyQzthQUNGO1NBQ0Y7S0FDRjtJQUVELHNFQUFzRTtJQUN0RSx1Q0FBWSxJQUFJLEtBQUUsTUFBTSxJQUFHO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1R5cGUgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7IENpcmNsZVN0YXR1cyB9IGZyb20gJ0BtdG5hL2NvcmUtYW5ndWxhcic7XG5pbXBvcnQgeyBGb3JtLCBGb3JtSXRlbUdyb3VwIH0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuXG5pbXBvcnQgeyBGb3JtU3RlcCB9IGZyb20gJy4uLy4uL2Zvcm0tc3RlcHBlci9tb2RlbHMvZm9ybS1zdGVwLm1vZGVsJztcbmltcG9ydCB7IGZpbmRGb3JtSXRlbSB9IGZyb20gJy4vZmluZC1mb3JtLWl0ZW0nO1xuXG4vKipcbiAqIFVwZGF0ZSBhIHtAbGluayBGb3JtU3RlcH0ncyBgc3RhdHVzYC5cbiAqIFRoZSBzZXJ2ZXIgc2lkZSBmb3JtIHZhbGlkYXRpb24gZXJyb3JzIHdpbGwgdHJ1bXAgdGhlIHByb3ZpZGVkIGBzdGF0dXNgLlxuICpcbiAqIEBwYXJhbSBpbnN0YW5jZUlkIHRoZSBpbnN0YW5jZUlkIG9mIHRoZSBzdGVwIHRvIHVwZGF0ZSwgb3RoZXJ3aXNlIHJldHVybiB0aGUgb3JpZ2luYWwgc3RlcFxuICogQHBhcmFtIHN0ZXAgIHRoZSBzdGVwIHRvIGNoZWNrXG4gKiBAcGFyYW0gc3RhdHVzIHRoZSBuZXcgc3RhdHVzIHRvIGFwcGx5IHRvIHRoZSBzdGVwXG4gKiBAcGFyYW0gZm9ybSB0aGUgY29udGFpbmluZyBmb3JtXG4gKiBAcmV0dXJucyBhbiB1cGRhdGVkIHN0ZXAgd2l0aCB0aGUgY29ycmVjdCBzdGF0dXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0ZXBTdGF0dXMoaW5zdGFuY2VJZDogc3RyaW5nLCBzdGVwOiBGb3JtU3RlcCwgc3RhdHVzOiBDaXJjbGVTdGF0dXMsIGZvcm0/OiBGb3JtKTogRm9ybVN0ZXAge1xuICBpZiAoaW5zdGFuY2VJZCAhPT0gc3RlcC5pbnN0YW5jZUlkKSB7XG4gICAgLy8gVGhlc2UgYXJlbid0IHRoZSBkcm9pZHMgeW91J3JlIGxvb2tpbmcgZm9yLlxuICAgIC8vIFJldHVybiB1bm1vZGlmaWVkIHN0ZXAuXG4gICAgcmV0dXJuIHN0ZXA7XG4gIH1cblxuICAvLyBBIHNlcnZlciB2YWxpZGF0aW9uIGVycm9yIHdpbGwgdHJ1bXAgdGhlIHByb3ZpZGVkIHN0YXR1c1xuICBpZiAoZm9ybT8udmFsaWRhdGlvblJlc3VsdD8uZm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0cy5sZW5ndGgpIHtcbiAgICAvLyBHZXQgdGhlIEZvcm1Hcm91cCB0aGF0IHJlcHJlc2VudHMgdGhlIHN0ZXBcbiAgICBjb25zdCBncm91cCA9IGZpbmRGb3JtSXRlbShzdGVwLmluc3RhbmNlSWQsIGZvcm0pO1xuICAgIGlmIChpc1R5cGU8Rm9ybUl0ZW1Hcm91cD4oZ3JvdXAsICdpdGVtcycpKSB7XG4gICAgICBmb3IgKGNvbnN0IGVycm9yIG9mIGZvcm0udmFsaWRhdGlvblJlc3VsdC5mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1XaXRoRXJyb3IgPSBmaW5kRm9ybUl0ZW0oZXJyb3IuaWQsIGdyb3VwKTtcbiAgICAgICAgLy8gSWYgdGhlIGludmFsaWQgaXRlbSBpcyB3aXRoaW4gdGhlIHN0ZXAgZ3JvdXAsXG4gICAgICAgIC8vIHNob3cgYW4gZXJyb3Igc3RhdGVcbiAgICAgICAgaWYgKGl0ZW1XaXRoRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5zdGVwLCBzdGF0dXM6ICdFUlJPUicgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFRoZXJlIHdlcmUgbm8gc2VydmVyIHNpZGUgdmFsaWRhdGlvbiBlcnJvcnMsIGp1c3QgdXBkYXRlIHRoZSBzdGF0dXNcbiAgcmV0dXJuIHsgLi4uc3RlcCwgc3RhdHVzIH07XG59XG4iXX0=
@@ -1,3 +0,0 @@
1
- export * from './instant-validation-result-error-state-matcher';
2
- export * from './validation-result-validator';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvY29yZS92YWxpZGF0b3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW5zdGFudC12YWxpZGF0aW9uLXJlc3VsdC1lcnJvci1zdGF0ZS1tYXRjaGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdmFsaWRhdGlvbi1yZXN1bHQtdmFsaWRhdG9yJztcbiJdfQ==
@@ -1,23 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { ErrorStateMatcher } from '@angular/material/core';
3
- import { isKey } from '@mtna/core-ts';
4
- import { MTNA_WF_FORM_ITEM_VALIDATION_RESULT_ERROR_NAME } from './validation-result-validator';
5
- import * as i0 from "@angular/core";
6
- /**
7
- * Custom {@link ErrorStateMatcher} that will immediately show {@link FormValidationResult} errors.
8
- * Theses errors are calcualted on the server and need to always show.
9
- * Regular form validation will use the default error matcher strategy.
10
- */
11
- export class MtnaWfInstantValidationResultErrorStateMatcher extends ErrorStateMatcher {
12
- isErrorState(control, form) {
13
- const hasValidationResultError = isKey(control === null || control === void 0 ? void 0 : control.errors, MTNA_WF_FORM_ITEM_VALIDATION_RESULT_ERROR_NAME);
14
- return hasValidationResultError || super.isErrorState(control, form);
15
- }
16
- }
17
- MtnaWfInstantValidationResultErrorStateMatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfInstantValidationResultErrorStateMatcher, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
18
- MtnaWfInstantValidationResultErrorStateMatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfInstantValidationResultErrorStateMatcher, providedIn: 'root' });
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfInstantValidationResultErrorStateMatcher, decorators: [{
20
- type: Injectable,
21
- args: [{ providedIn: 'root' }]
22
- }] });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFudC12YWxpZGF0aW9uLXJlc3VsdC1lcnJvci1zdGF0ZS1tYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL2NvcmUvdmFsaWRhdG9ycy9pbnN0YW50LXZhbGlkYXRpb24tcmVzdWx0LWVycm9yLXN0YXRlLW1hdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRDLE9BQU8sRUFBRSw4Q0FBOEMsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUUvRjs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLDhDQUErQyxTQUFRLGlCQUFpQjtJQUMxRSxZQUFZLENBQUMsT0FBMkIsRUFBRSxJQUF3QztRQUN6RixNQUFNLHdCQUF3QixHQUFHLEtBQUssQ0FBQyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxFQUFFLDhDQUE4QyxDQUFDLENBQUM7UUFDeEcsT0FBTyx3QkFBd0IsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDOzs0SUFKVSw4Q0FBOEM7Z0pBQTlDLDhDQUE4QyxjQURqQyxNQUFNOzRGQUNuQiw4Q0FBOEM7a0JBRDFELFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuaW1wb3J0IHsgaXNLZXkgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcblxuaW1wb3J0IHsgTVROQV9XRl9GT1JNX0lURU1fVkFMSURBVElPTl9SRVNVTFRfRVJST1JfTkFNRSB9IGZyb20gJy4vdmFsaWRhdGlvbi1yZXN1bHQtdmFsaWRhdG9yJztcblxuLyoqXG4gKiBDdXN0b20ge0BsaW5rIEVycm9yU3RhdGVNYXRjaGVyfSB0aGF0IHdpbGwgaW1tZWRpYXRlbHkgc2hvdyB7QGxpbmsgRm9ybVZhbGlkYXRpb25SZXN1bHR9IGVycm9ycy5cbiAqIFRoZXNlcyBlcnJvcnMgYXJlIGNhbGN1YWx0ZWQgb24gdGhlIHNlcnZlciBhbmQgbmVlZCB0byBhbHdheXMgc2hvdy5cbiAqIFJlZ3VsYXIgZm9ybSB2YWxpZGF0aW9uIHdpbGwgdXNlIHRoZSBkZWZhdWx0IGVycm9yIG1hdGNoZXIgc3RyYXRlZ3kuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTXRuYVdmSW5zdGFudFZhbGlkYXRpb25SZXN1bHRFcnJvclN0YXRlTWF0Y2hlciBleHRlbmRzIEVycm9yU3RhdGVNYXRjaGVyIHtcbiAgb3ZlcnJpZGUgaXNFcnJvclN0YXRlKGNvbnRyb2w6IEZvcm1Db250cm9sIHwgbnVsbCwgZm9ybTogRm9ybUdyb3VwRGlyZWN0aXZlIHwgTmdGb3JtIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc1ZhbGlkYXRpb25SZXN1bHRFcnJvciA9IGlzS2V5KGNvbnRyb2w/LmVycm9ycywgTVROQV9XRl9GT1JNX0lURU1fVkFMSURBVElPTl9SRVNVTFRfRVJST1JfTkFNRSk7XG4gICAgcmV0dXJuIGhhc1ZhbGlkYXRpb25SZXN1bHRFcnJvciB8fCBzdXBlci5pc0Vycm9yU3RhdGUoY29udHJvbCwgZm9ybSk7XG4gIH1cbn1cbiJdfQ==