@ohioepa/oepa-ui-lib 1.1.0

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 (299) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/account-search-input/account-search-input.component.mjs +147 -0
  3. package/esm2022/lib/account-search-modal/account-search-modal.component.mjs +151 -0
  4. package/esm2022/lib/action-btn/action-btn.component.mjs +70 -0
  5. package/esm2022/lib/action-btn/oepa-action-event.mjs +2 -0
  6. package/esm2022/lib/action-btn/oepa-action.mjs +2 -0
  7. package/esm2022/lib/action-btn-modal/action-btn-modal.component.mjs +21 -0
  8. package/esm2022/lib/address/address.component.mjs +174 -0
  9. package/esm2022/lib/address/oepa-address.service.mjs +64 -0
  10. package/esm2022/lib/address/oepa-form-address.mjs +2 -0
  11. package/esm2022/lib/blank/blank.component.mjs +14 -0
  12. package/esm2022/lib/checkbox/checkbox.component.mjs +33 -0
  13. package/esm2022/lib/checkbox-input/checkbox-input.component.mjs +41 -0
  14. package/esm2022/lib/comment-modal/comment-modal.component.mjs +56 -0
  15. package/esm2022/lib/common-forms.module.mjs +291 -0
  16. package/esm2022/lib/confirmation-modal/confirmation-modal.component.mjs +120 -0
  17. package/esm2022/lib/contact/contact.component.mjs +102 -0
  18. package/esm2022/lib/contact/oepa-form-contact.mjs +2 -0
  19. package/esm2022/lib/date-input/date-input.component.mjs +52 -0
  20. package/esm2022/lib/date-input-modal/date-input-modal.component.mjs +68 -0
  21. package/esm2022/lib/datepicker/datepicker.component.mjs +131 -0
  22. package/esm2022/lib/daterangepicker/daterangepicker.component.mjs +70 -0
  23. package/esm2022/lib/document/document-editor/document-editor.component.mjs +225 -0
  24. package/esm2022/lib/document/document-event-entity-type.mjs +7 -0
  25. package/esm2022/lib/document/document-event-type.mjs +7 -0
  26. package/esm2022/lib/document/document-event.mjs +2 -0
  27. package/esm2022/lib/document/document-group/document-group.component.mjs +210 -0
  28. package/esm2022/lib/document/document-part/document-part.component.mjs +19 -0
  29. package/esm2022/lib/document/document-part-editor/document-part-editor.component.mjs +296 -0
  30. package/esm2022/lib/document/document-placeholder-modal/document-placeholder-modal.component.mjs +49 -0
  31. package/esm2022/lib/document/document-section/document-section.component.mjs +226 -0
  32. package/esm2022/lib/document/document.service.mjs +325 -0
  33. package/esm2022/lib/document/group-modal/group-modal.component.mjs +46 -0
  34. package/esm2022/lib/document/part-modal/part-modal.component.mjs +48 -0
  35. package/esm2022/lib/document/portal-document-class.mjs +2 -0
  36. package/esm2022/lib/document/portal-document-group.mjs +2 -0
  37. package/esm2022/lib/document/portal-document-part.mjs +2 -0
  38. package/esm2022/lib/document/portal-document-placeholder.mjs +2 -0
  39. package/esm2022/lib/document/portal-document-section.mjs +2 -0
  40. package/esm2022/lib/document/portal-document-text.mjs +2 -0
  41. package/esm2022/lib/document/portal-document-type.mjs +2 -0
  42. package/esm2022/lib/document/portal-document.mjs +2 -0
  43. package/esm2022/lib/document/portal-email-attachment-type.mjs +2 -0
  44. package/esm2022/lib/document/portal-email-attachment.mjs +2 -0
  45. package/esm2022/lib/document/portal-email-filter.mjs +2 -0
  46. package/esm2022/lib/document/portal-email.mjs +2 -0
  47. package/esm2022/lib/document/section-modal/section-modal.component.mjs +46 -0
  48. package/esm2022/lib/dual-list-box/array.pipes.mjs +71 -0
  49. package/esm2022/lib/dual-list-box/dual-list-box.component.mjs +339 -0
  50. package/esm2022/lib/dual-list-box/items-moved-event.mjs +2 -0
  51. package/esm2022/lib/dual-list-box/list-box-item.mjs +2 -0
  52. package/esm2022/lib/ebiz-address/ebiz-address.component.mjs +62 -0
  53. package/esm2022/lib/edoc-attachment/edoc-attachment.component.mjs +216 -0
  54. package/esm2022/lib/edoc-attachment/edoc-attachment.service.mjs +38 -0
  55. package/esm2022/lib/edoc-attachment/edocument-attachment-metadata.mjs +2 -0
  56. package/esm2022/lib/edoc-attachment/edocument-attachment.mjs +2 -0
  57. package/esm2022/lib/edoc-attachment/edocument-reference.mjs +2 -0
  58. package/esm2022/lib/entity/entity.service.mjs +104 -0
  59. package/esm2022/lib/entity/organization-create-modal/organization-create-modal.component.mjs +307 -0
  60. package/esm2022/lib/entity/organization-search-input/organization-search-input.component.mjs +127 -0
  61. package/esm2022/lib/entity/organization-search-modal/organization-search-modal.component.mjs +304 -0
  62. package/esm2022/lib/entity/person-create-modal/person-create-modal.component.mjs +316 -0
  63. package/esm2022/lib/entity/person-search-input/person-search-input.component.mjs +129 -0
  64. package/esm2022/lib/entity/person-search-modal/person-search-modal.component.mjs +311 -0
  65. package/esm2022/lib/entity/place-create-modal/place-create-modal.component.mjs +14 -0
  66. package/esm2022/lib/entity/place-search-input/place-search-input.component.mjs +126 -0
  67. package/esm2022/lib/entity/place-search-modal/place-search-modal.component.mjs +216 -0
  68. package/esm2022/lib/esri-map/esri-map.component.mjs +416 -0
  69. package/esm2022/lib/file-upload/file-upload.component.mjs +148 -0
  70. package/esm2022/lib/lynx-image-upload/lynx-image-upload.component.mjs +143 -0
  71. package/esm2022/lib/lynx-image-upload/lynx.service.mjs +47 -0
  72. package/esm2022/lib/masks/oepa-create-integer-mask.mjs +39 -0
  73. package/esm2022/lib/masks/oepa-integer-mask-args.mjs +2 -0
  74. package/esm2022/lib/message/message.component.mjs +19 -0
  75. package/esm2022/lib/message/oepa-message-type.mjs +7 -0
  76. package/esm2022/lib/message/oepa-message.mjs +31 -0
  77. package/esm2022/lib/message-list/message-list.component.mjs +24 -0
  78. package/esm2022/lib/multi-file-upload/multi-file-upload.component.mjs +137 -0
  79. package/esm2022/lib/notes-modal/notes-modal.component.mjs +177 -0
  80. package/esm2022/lib/notes-modal/oepa-note-result.mjs +2 -0
  81. package/esm2022/lib/notes-modal/oepa-note.mjs +2 -0
  82. package/esm2022/lib/numeric-input/numeric-input.component.mjs +50 -0
  83. package/esm2022/lib/numeric-input.directive.mjs +76 -0
  84. package/esm2022/lib/oepa-error-message/oepa-error-message.component.mjs +39 -0
  85. package/esm2022/lib/oepa-forms.service.mjs +199 -0
  86. package/esm2022/lib/oepa-images.mjs +59 -0
  87. package/esm2022/lib/oepa-wait-message/oepa-wait-message.component.mjs +29 -0
  88. package/esm2022/lib/ohio-lat-long/ohio-lat-long.component.mjs +176 -0
  89. package/esm2022/lib/parameter/parameter.mjs +2 -0
  90. package/esm2022/lib/parameter/parameter.service.mjs +47 -0
  91. package/esm2022/lib/params-help-button/params-help-button.component.mjs +42 -0
  92. package/esm2022/lib/phone-number/phone-number.component.mjs +44 -0
  93. package/esm2022/lib/pin-modal/oepa-attestation.mjs +2 -0
  94. package/esm2022/lib/pin-modal/oepa-pin.mjs +2 -0
  95. package/esm2022/lib/pin-modal/oepa-pin.service.mjs +54 -0
  96. package/esm2022/lib/pin-modal/oepa-security-question.mjs +2 -0
  97. package/esm2022/lib/pin-modal/pin-modal.component.mjs +186 -0
  98. package/esm2022/lib/progress-indicator/progress-info.mjs +2 -0
  99. package/esm2022/lib/select-input/select-input.component.mjs +96 -0
  100. package/esm2022/lib/server-timeout-modal/server-timeout-modal.component.mjs +63 -0
  101. package/esm2022/lib/shopping-cart/shopping-cart-summary/shopping-cart-summary.component.mjs +54 -0
  102. package/esm2022/lib/shopping-cart/shopping-cart-view/shopping-cart-view-parameters.mjs +2 -0
  103. package/esm2022/lib/shopping-cart/shopping-cart-view/shopping-cart-view.component.mjs +190 -0
  104. package/esm2022/lib/shopping-cart/shopping-cart.service.mjs +89 -0
  105. package/esm2022/lib/start-end-timepicker/start-end-timepicker.component.mjs +126 -0
  106. package/esm2022/lib/table/oepa-p-column.mjs +2 -0
  107. package/esm2022/lib/table/oepa-table-cell-classname.pipe.mjs +22 -0
  108. package/esm2022/lib/table/oepa-table-cell-click-event.mjs +2 -0
  109. package/esm2022/lib/table/oepa-table-cell-colspan.pipe.mjs +22 -0
  110. package/esm2022/lib/table/oepa-table-cell-hidden.pipe.mjs +22 -0
  111. package/esm2022/lib/table/oepa-table-cell-icon-classname.pipe.mjs +22 -0
  112. package/esm2022/lib/table/oepa-table-cell-img-src.pipe.mjs +22 -0
  113. package/esm2022/lib/table/oepa-table-cell-inner-html.pipe.mjs +22 -0
  114. package/esm2022/lib/table/oepa-table-cell-input-component.pipe.mjs +22 -0
  115. package/esm2022/lib/table/oepa-table-cell-not-selectable.pipe.mjs +22 -0
  116. package/esm2022/lib/table/oepa-table-cell-value.pipe.mjs +22 -0
  117. package/esm2022/lib/table/oepa-table-cell.mjs +2 -0
  118. package/esm2022/lib/table/oepa-table-column.mjs +2 -0
  119. package/esm2022/lib/table/oepa-table-config.mjs +2 -0
  120. package/esm2022/lib/table/oepa-table-filter.mjs +2 -0
  121. package/esm2022/lib/table/oepa-table-filtering.directive.mjs +57 -0
  122. package/esm2022/lib/table/oepa-table-header.mjs +2 -0
  123. package/esm2022/lib/table/oepa-table-page-info.mjs +2 -0
  124. package/esm2022/lib/table/oepa-table-popover.mjs +2 -0
  125. package/esm2022/lib/table/oepa-table-row.mjs +2 -0
  126. package/esm2022/lib/table/oepa-table-sort-criterion.mjs +2 -0
  127. package/esm2022/lib/table/oepa-table-sorting.directive.mjs +57 -0
  128. package/esm2022/lib/table/oepa-table.mjs +2 -0
  129. package/esm2022/lib/table/p-table/p-table.component.mjs +826 -0
  130. package/esm2022/lib/table/table-data-cell/table-data-cell-click-event.mjs +2 -0
  131. package/esm2022/lib/table/table-data-cell/table-data-cell.component.mjs +60 -0
  132. package/esm2022/lib/table/table-export.service.mjs +57 -0
  133. package/esm2022/lib/table/table-header-cell/table-header-cell.component.mjs +61 -0
  134. package/esm2022/lib/table/table.component.mjs +793 -0
  135. package/esm2022/lib/table/table.service.mjs +112 -0
  136. package/esm2022/lib/template-confirmation-modal/template-confirmation-modal.component.mjs +46 -0
  137. package/esm2022/lib/text-area-input/text-area-input.component.mjs +48 -0
  138. package/esm2022/lib/text-input/text-input.component.mjs +48 -0
  139. package/esm2022/lib/timeout-modal/timeout-modal.component.mjs +31 -0
  140. package/esm2022/lib/timepicker/timepicker.component.mjs +48 -0
  141. package/esm2022/lib/validation/form-validator.mjs +2 -0
  142. package/esm2022/lib/validation/validation.service.mjs +134 -0
  143. package/esm2022/lib/yes-no/yes-no.component.mjs +44 -0
  144. package/esm2022/lib/yes-no-boolean/yes-no.component.mjs +44 -0
  145. package/esm2022/lib/yes-no-other-input/yes-no-other-input.component.mjs +41 -0
  146. package/esm2022/lib/zip-code/zip-code.component.mjs +42 -0
  147. package/esm2022/ohioepa-oepa-ui-lib.mjs +5 -0
  148. package/esm2022/public-api.mjs +142 -0
  149. package/fesm2022/ohioepa-oepa-ui-lib.mjs +10720 -0
  150. package/fesm2022/ohioepa-oepa-ui-lib.mjs.map +1 -0
  151. package/index.d.ts +5 -0
  152. package/lib/account-search-input/account-search-input.component.d.ts +36 -0
  153. package/lib/account-search-modal/account-search-modal.component.d.ts +40 -0
  154. package/lib/action-btn/action-btn.component.d.ts +34 -0
  155. package/lib/action-btn/oepa-action-event.d.ts +19 -0
  156. package/lib/action-btn/oepa-action.d.ts +13 -0
  157. package/lib/action-btn-modal/action-btn-modal.component.d.ts +12 -0
  158. package/lib/address/address.component.d.ts +43 -0
  159. package/lib/address/oepa-address.service.d.ts +28 -0
  160. package/lib/address/oepa-form-address.d.ts +19 -0
  161. package/lib/blank/blank.component.d.ts +8 -0
  162. package/lib/checkbox/checkbox.component.d.ts +15 -0
  163. package/lib/checkbox-input/checkbox-input.component.d.ts +17 -0
  164. package/lib/comment-modal/comment-modal.component.d.ts +22 -0
  165. package/lib/common-forms.module.d.ts +104 -0
  166. package/lib/confirmation-modal/confirmation-modal.component.d.ts +49 -0
  167. package/lib/contact/contact.component.d.ts +33 -0
  168. package/lib/contact/oepa-form-contact.d.ts +58 -0
  169. package/lib/date-input/date-input.component.d.ts +18 -0
  170. package/lib/date-input-modal/date-input-modal.component.d.ts +25 -0
  171. package/lib/datepicker/datepicker.component.d.ts +28 -0
  172. package/lib/daterangepicker/daterangepicker.component.d.ts +22 -0
  173. package/lib/document/document-editor/document-editor.component.d.ts +34 -0
  174. package/lib/document/document-event-entity-type.d.ts +5 -0
  175. package/lib/document/document-event-type.d.ts +5 -0
  176. package/lib/document/document-event.d.ts +9 -0
  177. package/lib/document/document-group/document-group.component.d.ts +38 -0
  178. package/lib/document/document-part/document-part.component.d.ts +10 -0
  179. package/lib/document/document-part-editor/document-part-editor.component.d.ts +46 -0
  180. package/lib/document/document-placeholder-modal/document-placeholder-modal.component.d.ts +19 -0
  181. package/lib/document/document-section/document-section.component.d.ts +37 -0
  182. package/lib/document/document.service.d.ts +90 -0
  183. package/lib/document/group-modal/group-modal.component.d.ts +20 -0
  184. package/lib/document/part-modal/part-modal.component.d.ts +20 -0
  185. package/lib/document/portal-document-class.d.ts +10 -0
  186. package/lib/document/portal-document-group.d.ts +15 -0
  187. package/lib/document/portal-document-part.d.ts +22 -0
  188. package/lib/document/portal-document-placeholder.d.ts +12 -0
  189. package/lib/document/portal-document-section.d.ts +13 -0
  190. package/lib/document/portal-document-text.d.ts +7 -0
  191. package/lib/document/portal-document-type.d.ts +15 -0
  192. package/lib/document/portal-document.d.ts +27 -0
  193. package/lib/document/portal-email-attachment-type.d.ts +6 -0
  194. package/lib/document/portal-email-attachment.d.ts +12 -0
  195. package/lib/document/portal-email-filter.d.ts +12 -0
  196. package/lib/document/portal-email.d.ts +18 -0
  197. package/lib/document/section-modal/section-modal.component.d.ts +20 -0
  198. package/lib/dual-list-box/array.pipes.d.ts +36 -0
  199. package/lib/dual-list-box/dual-list-box.component.d.ts +91 -0
  200. package/lib/dual-list-box/items-moved-event.d.ts +11 -0
  201. package/lib/dual-list-box/list-box-item.d.ts +7 -0
  202. package/lib/ebiz-address/ebiz-address.component.d.ts +23 -0
  203. package/lib/edoc-attachment/edoc-attachment.component.d.ts +44 -0
  204. package/lib/edoc-attachment/edoc-attachment.service.d.ts +16 -0
  205. package/lib/edoc-attachment/edocument-attachment-metadata.d.ts +16 -0
  206. package/lib/edoc-attachment/edocument-attachment.d.ts +12 -0
  207. package/lib/edoc-attachment/edocument-reference.d.ts +5 -0
  208. package/lib/entity/entity.service.d.ts +31 -0
  209. package/lib/entity/organization-create-modal/organization-create-modal.component.d.ts +53 -0
  210. package/lib/entity/organization-search-input/organization-search-input.component.d.ts +34 -0
  211. package/lib/entity/organization-search-modal/organization-search-modal.component.d.ts +56 -0
  212. package/lib/entity/person-create-modal/person-create-modal.component.d.ts +53 -0
  213. package/lib/entity/person-search-input/person-search-input.component.d.ts +34 -0
  214. package/lib/entity/person-search-modal/person-search-modal.component.d.ts +56 -0
  215. package/lib/entity/place-create-modal/place-create-modal.component.d.ts +8 -0
  216. package/lib/entity/place-search-input/place-search-input.component.d.ts +34 -0
  217. package/lib/entity/place-search-modal/place-search-modal.component.d.ts +41 -0
  218. package/lib/esri-map/esri-map.component.d.ts +41 -0
  219. package/lib/file-upload/file-upload.component.d.ts +37 -0
  220. package/lib/lynx-image-upload/lynx-image-upload.component.d.ts +36 -0
  221. package/lib/lynx-image-upload/lynx.service.d.ts +16 -0
  222. package/lib/masks/oepa-create-integer-mask.d.ts +8 -0
  223. package/lib/masks/oepa-integer-mask-args.d.ts +5 -0
  224. package/lib/message/message.component.d.ts +10 -0
  225. package/lib/message/oepa-message-type.d.ts +5 -0
  226. package/lib/message/oepa-message.d.ts +7 -0
  227. package/lib/message-list/message-list.component.d.ts +11 -0
  228. package/lib/multi-file-upload/multi-file-upload.component.d.ts +36 -0
  229. package/lib/notes-modal/notes-modal.component.d.ts +50 -0
  230. package/lib/notes-modal/oepa-note-result.d.ts +10 -0
  231. package/lib/notes-modal/oepa-note.d.ts +13 -0
  232. package/lib/numeric-input/numeric-input.component.d.ts +20 -0
  233. package/lib/numeric-input.directive.d.ts +19 -0
  234. package/lib/oepa-error-message/oepa-error-message.component.d.ts +9 -0
  235. package/lib/oepa-forms.service.d.ts +28 -0
  236. package/lib/oepa-images.d.ts +53 -0
  237. package/lib/oepa-wait-message/oepa-wait-message.component.d.ts +9 -0
  238. package/lib/ohio-lat-long/ohio-lat-long.component.d.ts +63 -0
  239. package/lib/parameter/parameter.d.ts +7 -0
  240. package/lib/parameter/parameter.service.d.ts +18 -0
  241. package/lib/params-help-button/params-help-button.component.d.ts +15 -0
  242. package/lib/phone-number/phone-number.component.d.ts +19 -0
  243. package/lib/pin-modal/oepa-attestation.d.ts +10 -0
  244. package/lib/pin-modal/oepa-pin.d.ts +26 -0
  245. package/lib/pin-modal/oepa-pin.service.d.ts +38 -0
  246. package/lib/pin-modal/oepa-security-question.d.ts +8 -0
  247. package/lib/pin-modal/pin-modal.component.d.ts +46 -0
  248. package/lib/progress-indicator/progress-info.d.ts +4 -0
  249. package/lib/select-input/select-input.component.d.ts +27 -0
  250. package/lib/server-timeout-modal/server-timeout-modal.component.d.ts +23 -0
  251. package/lib/shopping-cart/shopping-cart-summary/shopping-cart-summary.component.d.ts +18 -0
  252. package/lib/shopping-cart/shopping-cart-view/shopping-cart-view-parameters.d.ts +10 -0
  253. package/lib/shopping-cart/shopping-cart-view/shopping-cart-view.component.d.ts +51 -0
  254. package/lib/shopping-cart/shopping-cart.service.d.ts +44 -0
  255. package/lib/start-end-timepicker/start-end-timepicker.component.d.ts +29 -0
  256. package/lib/table/oepa-p-column.d.ts +4 -0
  257. package/lib/table/oepa-table-cell-classname.pipe.d.ts +9 -0
  258. package/lib/table/oepa-table-cell-click-event.d.ts +15 -0
  259. package/lib/table/oepa-table-cell-colspan.pipe.d.ts +9 -0
  260. package/lib/table/oepa-table-cell-hidden.pipe.d.ts +9 -0
  261. package/lib/table/oepa-table-cell-icon-classname.pipe.d.ts +9 -0
  262. package/lib/table/oepa-table-cell-img-src.pipe.d.ts +9 -0
  263. package/lib/table/oepa-table-cell-inner-html.pipe.d.ts +9 -0
  264. package/lib/table/oepa-table-cell-input-component.pipe.d.ts +9 -0
  265. package/lib/table/oepa-table-cell-not-selectable.pipe.d.ts +9 -0
  266. package/lib/table/oepa-table-cell-value.pipe.d.ts +9 -0
  267. package/lib/table/oepa-table-cell.d.ts +66 -0
  268. package/lib/table/oepa-table-column.d.ts +71 -0
  269. package/lib/table/oepa-table-config.d.ts +72 -0
  270. package/lib/table/oepa-table-filter.d.ts +10 -0
  271. package/lib/table/oepa-table-filtering.directive.d.ts +17 -0
  272. package/lib/table/oepa-table-header.d.ts +9 -0
  273. package/lib/table/oepa-table-page-info.d.ts +22 -0
  274. package/lib/table/oepa-table-popover.d.ts +28 -0
  275. package/lib/table/oepa-table-row.d.ts +84 -0
  276. package/lib/table/oepa-table-sort-criterion.d.ts +4 -0
  277. package/lib/table/oepa-table-sorting.directive.d.ts +16 -0
  278. package/lib/table/oepa-table.d.ts +42 -0
  279. package/lib/table/p-table/p-table.component.d.ts +155 -0
  280. package/lib/table/table-data-cell/table-data-cell-click-event.d.ts +5 -0
  281. package/lib/table/table-data-cell/table-data-cell.component.d.ts +23 -0
  282. package/lib/table/table-export.service.d.ts +33 -0
  283. package/lib/table/table-header-cell/table-header-cell.component.d.ts +24 -0
  284. package/lib/table/table.component.d.ts +144 -0
  285. package/lib/table/table.service.d.ts +28 -0
  286. package/lib/template-confirmation-modal/template-confirmation-modal.component.d.ts +19 -0
  287. package/lib/text-area-input/text-area-input.component.d.ts +19 -0
  288. package/lib/text-input/text-input.component.d.ts +19 -0
  289. package/lib/timeout-modal/timeout-modal.component.d.ts +13 -0
  290. package/lib/timepicker/timepicker.component.d.ts +17 -0
  291. package/lib/validation/form-validator.d.ts +10 -0
  292. package/lib/validation/validation.service.d.ts +16 -0
  293. package/lib/yes-no/yes-no.component.d.ts +19 -0
  294. package/lib/yes-no-boolean/yes-no.component.d.ts +19 -0
  295. package/lib/yes-no-other-input/yes-no-other-input.component.d.ts +18 -0
  296. package/lib/zip-code/zip-code.component.d.ts +19 -0
  297. package/ohioepa-oepa-ui-lib-1.1.0.tgz +0 -0
  298. package/package.json +25 -0
  299. package/public-api.d.ts +138 -0
@@ -0,0 +1,226 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { SectionModalComponent } from '../section-modal/section-modal.component';
3
+ import { GroupModalComponent } from '../group-modal/group-modal.component';
4
+ import { DocumentEventType } from '../document-event-type';
5
+ import { DocumentEventEntityType } from '../document-event-entity-type';
6
+ import { ConfirmationModalComponent } from '../../confirmation-modal/confirmation-modal.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "ngx-bootstrap/modal";
9
+ import * as i2 from "ngx-toastr";
10
+ import * as i3 from "../document.service";
11
+ import * as i4 from "@angular/common";
12
+ import * as i5 from "../document-group/document-group.component";
13
+ export class DocumentSectionComponent {
14
+ modalService;
15
+ toastr;
16
+ documentService;
17
+ section;
18
+ onMoveUp = new EventEmitter();
19
+ onInsertAbove = new EventEmitter();
20
+ onMoveDown = new EventEmitter();
21
+ onInsertBelow = new EventEmitter();
22
+ onDelete = new EventEmitter();
23
+ busy = false;
24
+ constructor(modalService, toastr, documentService) {
25
+ this.modalService = modalService;
26
+ this.toastr = toastr;
27
+ this.documentService = documentService;
28
+ }
29
+ ngOnInit() {
30
+ }
31
+ moveUp() {
32
+ this.onMoveUp.emit(this.section);
33
+ }
34
+ insertAbove() {
35
+ this.onInsertAbove.emit(this.section);
36
+ }
37
+ moveDown() {
38
+ this.onMoveDown.emit(this.section);
39
+ }
40
+ insertBelow() {
41
+ this.onInsertBelow.emit(this.section);
42
+ }
43
+ delete() {
44
+ this.onDelete.emit(this.section);
45
+ }
46
+ moveGroupUp(group) {
47
+ if (!group.sequence) {
48
+ group.sequence = 0;
49
+ }
50
+ if (group.sequence > 1) {
51
+ let clone = Object.assign({}, this.section);
52
+ if (!clone.groups) {
53
+ clone.groups = [];
54
+ }
55
+ clone.groups.splice(group.sequence - 2, 0, clone.groups.splice(group.sequence - 1, 1)[0]);
56
+ this.resequence(clone);
57
+ this.documentService.updateDocumentSection(clone).subscribe({
58
+ next: () => {
59
+ this.documentService.updateDcoumentID(clone.documentID || '');
60
+ }, error: err => {
61
+ this.toastr.error('Failed section group: ' + err, 'ERROR');
62
+ }
63
+ });
64
+ }
65
+ }
66
+ insertAboveGroup(group) {
67
+ if (!group.sequence) {
68
+ group.sequence = 1;
69
+ }
70
+ let newGroup = this.newGroup(group.sequence - 1 || 1);
71
+ this.insertGroup(group.sequence - 1, newGroup);
72
+ }
73
+ moveGroupDown(group) {
74
+ if (!group.sequence) {
75
+ group.sequence = 1;
76
+ }
77
+ if (this.section.groups && group.sequence < this.section.groups.length) {
78
+ let clone = Object.assign({}, this.section);
79
+ if (!clone.groups) {
80
+ clone.groups = [];
81
+ }
82
+ clone.groups.splice(group.sequence, 0, clone.groups.splice(group.sequence - 1, 1)[0]);
83
+ this.resequence(clone);
84
+ this.documentService.updateDocumentSection(clone).subscribe({
85
+ next: () => {
86
+ this.documentService.updateDcoumentID(clone.documentID || '');
87
+ }, error: err => {
88
+ this.toastr.error('Failed updating section: ' + err, 'ERROR');
89
+ }
90
+ });
91
+ }
92
+ }
93
+ insertBelowGroup(group) {
94
+ if (!group.sequence) {
95
+ group.sequence = 1;
96
+ }
97
+ let newGroup = this.newGroup(group.sequence + 1);
98
+ this.insertGroup(group.sequence, newGroup);
99
+ }
100
+ newGroup(sequence) {
101
+ return {
102
+ sectionID: this.section.id,
103
+ documentID: this.section.documentID,
104
+ sequence: sequence,
105
+ name: 'Group ' + sequence,
106
+ parts: [
107
+ {
108
+ documentID: this.section.documentID,
109
+ name: 'Paragraph 1',
110
+ text: {
111
+ text: ''
112
+ }
113
+ }
114
+ ]
115
+ };
116
+ }
117
+ insertGroup(insertIndex, newGroup) {
118
+ const initialState = {
119
+ label: 'Insert Group',
120
+ group: newGroup
121
+ };
122
+ let modal = this.modalService.show(GroupModalComponent, { initialState, ignoreBackdropClick: true });
123
+ modal.content.onGroupSave.subscribe(updatesdGroup => {
124
+ this.busy = true;
125
+ let clone = Object.assign({}, this.section);
126
+ if (!clone.groups) {
127
+ clone.groups = [];
128
+ }
129
+ clone.groups.splice(insertIndex, 0, updatesdGroup);
130
+ this.resequence(clone);
131
+ this.documentService.updateDocumentSection(clone).subscribe({
132
+ next: () => {
133
+ this.documentService.updateDcoumentID(clone.documentID || '');
134
+ this.busy = false;
135
+ }, error: err => {
136
+ this.toastr.error('Failed updating section: ' + err, 'ERROR');
137
+ this.busy = false;
138
+ }
139
+ });
140
+ });
141
+ }
142
+ resequence(section) {
143
+ let sequence = 1;
144
+ if (section.groups) {
145
+ section.groups.forEach(group => {
146
+ group.sequence = sequence++;
147
+ });
148
+ }
149
+ }
150
+ deleteGroup(group) {
151
+ let bodyText = 'Delete Group ' + group.name + '?';
152
+ const eventOverride = this.documentService.isOverriddenEvent({ eventType: DocumentEventType.Delete, entityType: DocumentEventEntityType.Group });
153
+ if (eventOverride && eventOverride.confirmationMessage) {
154
+ bodyText = eventOverride.confirmationMessage;
155
+ }
156
+ const initialState = {
157
+ headerText: 'Delete Group',
158
+ bodyText: bodyText,
159
+ confirmBtnLabel: 'Yes',
160
+ cancelBtnLabel: 'No'
161
+ };
162
+ let modal = this.modalService.show(ConfirmationModalComponent, { initialState, ignoreBackdropClick: true });
163
+ modal.content.confirmClicked.subscribe(() => {
164
+ this.busy = true;
165
+ let clone = Object.assign({}, this.section);
166
+ if (!clone.groups) {
167
+ clone.groups = [];
168
+ }
169
+ clone.groups = clone.groups.filter(keep => {
170
+ keep.id != group.id;
171
+ });
172
+ this.resequence(clone);
173
+ this.documentService.updateDocumentSection(clone).subscribe({
174
+ next: () => {
175
+ this.documentService.deleteDocumentGroup(group).subscribe({
176
+ next: () => {
177
+ this.documentService.updateDcoumentID(clone.documentID || '');
178
+ this.busy = false;
179
+ }, error: err => {
180
+ this.toastr.error('Failed deleting group: ' + err, 'ERROR');
181
+ this.busy = false;
182
+ }
183
+ });
184
+ }, error: err => {
185
+ this.toastr.error('Failed updating section: ' + err, 'ERROR');
186
+ this.busy = false;
187
+ }
188
+ });
189
+ });
190
+ }
191
+ editSection(section) {
192
+ const initialState = {
193
+ label: 'Edit Section Attributes',
194
+ section: section
195
+ };
196
+ let modal = this.modalService.show(SectionModalComponent, { initialState, ignoreBackdropClick: true });
197
+ modal.content.onSectionSave.subscribe(updatedSection => {
198
+ this.busy = true;
199
+ this.documentService.updateDocumentSection(updatedSection).subscribe(() => {
200
+ this.busy = false;
201
+ }, err => {
202
+ this.toastr.error('Failed updating section: ' + err, 'ERROR');
203
+ this.busy = false;
204
+ });
205
+ });
206
+ }
207
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentSectionComponent, deps: [{ token: i1.BsModalService }, { token: i2.ToastrService }, { token: i3.DocumentService }], target: i0.ɵɵFactoryTarget.Component });
208
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DocumentSectionComponent, selector: "oepa-document-section", inputs: { section: "section" }, outputs: { onMoveUp: "onMoveUp", onInsertAbove: "onInsertAbove", onMoveDown: "onMoveDown", onInsertBelow: "onInsertBelow", onDelete: "onDelete" }, ngImport: i0, template: "<div *ngIf=\"section\" class=\"card\">\n <div *ngIf=\"section.groups && section.groups.length > 0\" class=\"card\">\n <div *ngFor=\"let g of section.groups\" class=\"row\">\n <div class=\"col-sm-12\">\n <oepa-document-group [group]=\"g\" (onMoveUp)=\"moveGroupUp($event)\"\n (onInsertAbove)=\"insertAboveGroup($event)\" (onMoveDown)=\"moveGroupDown($event)\"\n (onInsertBelow)=\"insertBelowGroup($event)\" (onDelete)=\"deleteGroup($event)\">\n </oepa-document-group>\n </div>\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.DocumentGroupComponent, selector: "oepa-document-group", inputs: ["group"], outputs: ["onMoveUp", "onInsertAbove", "onMoveDown", "onInsertBelow", "onDelete"] }] });
209
+ }
210
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentSectionComponent, decorators: [{
211
+ type: Component,
212
+ args: [{ selector: 'oepa-document-section', template: "<div *ngIf=\"section\" class=\"card\">\n <div *ngIf=\"section.groups && section.groups.length > 0\" class=\"card\">\n <div *ngFor=\"let g of section.groups\" class=\"row\">\n <div class=\"col-sm-12\">\n <oepa-document-group [group]=\"g\" (onMoveUp)=\"moveGroupUp($event)\"\n (onInsertAbove)=\"insertAboveGroup($event)\" (onMoveDown)=\"moveGroupDown($event)\"\n (onInsertBelow)=\"insertBelowGroup($event)\" (onDelete)=\"deleteGroup($event)\">\n </oepa-document-group>\n </div>\n </div>\n </div>\n</div>" }]
213
+ }], ctorParameters: () => [{ type: i1.BsModalService }, { type: i2.ToastrService }, { type: i3.DocumentService }], propDecorators: { section: [{
214
+ type: Input
215
+ }], onMoveUp: [{
216
+ type: Output
217
+ }], onInsertAbove: [{
218
+ type: Output
219
+ }], onMoveDown: [{
220
+ type: Output
221
+ }], onInsertBelow: [{
222
+ type: Output
223
+ }], onDelete: [{
224
+ type: Output
225
+ }] } });
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtc2VjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RvY3VtZW50L2RvY3VtZW50LXNlY3Rpb24vZG9jdW1lbnQtc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RvY3VtZW50L2RvY3VtZW50LXNlY3Rpb24vZG9jdW1lbnQtc2VjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7Ozs7O0FBT25HLE1BQU0sT0FBTyx3QkFBd0I7SUFZZjtJQUNWO0lBQ0E7SUFiRCxPQUFPLENBQXlCO0lBRS9CLFFBQVEsR0FBd0MsSUFBSSxZQUFZLEVBQXlCLENBQUM7SUFDMUYsYUFBYSxHQUF3QyxJQUFJLFlBQVksRUFBeUIsQ0FBQztJQUMvRixVQUFVLEdBQXdDLElBQUksWUFBWSxFQUF5QixDQUFDO0lBQzVGLGFBQWEsR0FBd0MsSUFBSSxZQUFZLEVBQXlCLENBQUM7SUFDL0YsUUFBUSxHQUF3QyxJQUFJLFlBQVksRUFBeUIsQ0FBQztJQUc3RixJQUFJLEdBQUcsS0FBSyxDQUFDO0lBRXBCLFlBQW9CLFlB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QUFFO1lBQzlFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDeEUsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDcEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixHQUFHLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBNU1VLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLGdQQ2xCckMsNm9CQVdNOzs0RkRPTyx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0UsdUJBQXVCOzZJQUt4QixPQUFPO3NCQUFmLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUG9ydGFsRG9jdW1lbnRTZWN0aW9uIH0gZnJvbSAnLi4vcG9ydGFsLWRvY3VtZW50LXNlY3Rpb24nO1xuaW1wb3J0IHsgUG9ydGFsRG9jdW1lbnRHcm91cCB9IGZyb20gJy4uL3BvcnRhbC1kb2N1bWVudC1ncm91cCc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgRG9jdW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vZG9jdW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBTZWN0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9zZWN0aW9uLW1vZGFsL3NlY3Rpb24tbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IEdyb3VwTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9ncm91cC1tb2RhbC9ncm91cC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRG9jdW1lbnRFdmVudCB9IGZyb20gJy4uL2RvY3VtZW50LWV2ZW50JztcbmltcG9ydCB7IERvY3VtZW50RXZlbnRUeXBlIH0gZnJvbSAnLi4vZG9jdW1lbnQtZXZlbnQtdHlwZSc7XG5pbXBvcnQgeyBEb2N1bWVudEV2ZW50RW50aXR5VHlwZSB9IGZyb20gJy4uL2RvY3VtZW50LWV2ZW50LWVudGl0eS10eXBlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29uZmlybWF0aW9uLW1vZGFsL2NvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLWRvY3VtZW50LXNlY3Rpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnQtc2VjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RvY3VtZW50LXNlY3Rpb24uY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50U2VjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHNlY3Rpb24hOiBQb3J0YWxEb2N1bWVudFNlY3Rpb247XG5cbiAgQE91dHB1dCgpIG9uTW92ZVVwOiBFdmVudEVtaXR0ZXI8UG9ydGFsRG9jdW1lbnRTZWN0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8UG9ydGFsRG9jdW1lbnRTZWN0aW9uPigpO1xuICBAT3V0cHV0KCkgb25JbnNlcnRBYm92ZTogRXZlbnRFbWl0dGVyPFBvcnRhbERvY3VtZW50U2VjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPFBvcnRhbERvY3VtZW50U2VjdGlvbj4oKTtcbiAgQE91dHB1dCgpIG9uTW92ZURvd246IEV2ZW50RW1pdHRlcjxQb3J0YWxEb2N1bWVudFNlY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxQb3J0YWxEb2N1bWVudFNlY3Rpb24+KCk7XG4gIEBPdXRwdXQoKSBvbkluc2VydEJlbG93OiBFdmVudEVtaXR0ZXI8UG9ydGFsRG9jdW1lbnRTZWN0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8UG9ydGFsRG9jdW1lbnRTZWN0aW9uPigpO1xuICBAT3V0cHV0KCkgb25EZWxldGU6IEV2ZW50RW1pdHRlcjxQb3J0YWxEb2N1bWVudFNlY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxQb3J0YWxEb2N1bWVudFNlY3Rpb24+KCk7XG5cblxuICBwdWJsaWMgYnVzeSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlVXAoKSB7XG4gICAgdGhpcy5vbk1vdmVVcC5lbWl0KHRoaXMuc2VjdGlvbik7XG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0QWJvdmUoKSB7XG4gICAgdGhpcy5vbkluc2VydEFib3ZlLmVtaXQodGhpcy5zZWN0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlRG93bigpIHtcbiAgICB0aGlzLm9uTW92ZURvd24uZW1pdCh0aGlzLnNlY3Rpb24pO1xuICB9XG5cbiAgcHVibGljIGluc2VydEJlbG93KCkge1xuICAgIHRoaXMub25JbnNlcnRCZWxvdy5lbWl0KHRoaXMuc2VjdGlvbik7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKCkge1xuICAgIHRoaXMub25EZWxldGUuZW1pdCh0aGlzLnNlY3Rpb24pO1xuICB9XG5cbiAgcHVibGljIG1vdmVHcm91cFVwKGdyb3VwOiBQb3J0YWxEb2N1bWVudEdyb3VwKSB7XG4gICAgaWYgKCFncm91cC5zZXF1ZW5jZSkge1xuICAgICAgZ3JvdXAuc2VxdWVuY2UgPSAwO1xuICAgIH1cbiAgICBpZiAoZ3JvdXAuc2VxdWVuY2UgPiAxKSB7XG4gICAgICBsZXQgY2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnNlY3Rpb24pO1xuICAgICAgaWYgKCFjbG9uZS5ncm91cHMpIHtcbiAgICAgICAgY2xvbmUuZ3JvdXBzID0gW107XG4gICAgICB9XG4gICAgICBjbG9uZS5ncm91cHMuc3BsaWNlKGdyb3VwLnNlcXVlbmNlIC0gMiwgMCwgY2xvbmUuZ3JvdXBzLnNwbGljZShncm91cC5zZXF1ZW5jZSAtIDEsIDEpWzBdKTtcbiAgICAgIHRoaXMucmVzZXF1ZW5jZShjbG9uZSk7XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS51cGRhdGVEb2N1bWVudFNlY3Rpb24oY2xvbmUpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UudXBkYXRlRGNvdW1lbnRJRChjbG9uZS5kb2N1bWVudElEIHx8ICcnKTtcbiAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignRmFpbGVkIHNlY3Rpb24gZ3JvdXA6ICcgKyBlcnIsICdFUlJPUicpO1xuICAgICAgfX0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbnNlcnRBYm92ZUdyb3VwKGdyb3VwOiBQb3J0YWxEb2N1bWVudEdyb3VwKSB7XG4gICAgaWYgKCFncm91cC5zZXF1ZW5jZSkge1xuICAgICAgZ3JvdXAuc2VxdWVuY2UgPSAxO1xuICAgIH1cbiAgICBsZXQgbmV3R3JvdXAgPSB0aGlzLm5ld0dyb3VwKGdyb3VwLnNlcXVlbmNlICAtIDEgfHwgMSk7XG4gICAgdGhpcy5pbnNlcnRHcm91cChncm91cC5zZXF1ZW5jZSAtIDEsIG5ld0dyb3VwKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlR3JvdXBEb3duKGdyb3VwOiBQb3J0YWxEb2N1bWVudEdyb3VwKSB7XG4gICAgaWYgKCFncm91cC5zZXF1ZW5jZSkge1xuICAgICAgZ3JvdXAuc2VxdWVuY2UgPSAxO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWN0aW9uLmdyb3VwcyAmJiBncm91cC5zZXF1ZW5jZSA8IHRoaXMuc2VjdGlvbi5ncm91cHMubGVuZ3RoKSB7XG4gICAgICBsZXQgY2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnNlY3Rpb24pO1xuICAgICAgaWYgKCFjbG9uZS5ncm91cHMpIHtcbiAgICAgICAgY2xvbmUuZ3JvdXBzID0gW107XG4gICAgICB9XG4gICAgICBjbG9uZS5ncm91cHMuc3BsaWNlKGdyb3VwLnNlcXVlbmNlLCAwLCBjbG9uZS5ncm91cHMuc3BsaWNlKGdyb3VwLnNlcXVlbmNlIC0gMSwgMSlbMF0pO1xuICAgICAgdGhpcy5yZXNlcXVlbmNlKGNsb25lKTtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURvY3VtZW50U2VjdGlvbihjbG9uZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS51cGRhdGVEY291bWVudElEKGNsb25lLmRvY3VtZW50SUQgfHwgJycpO1xuICAgICAgfSwgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgdXBkYXRpbmcgc2VjdGlvbjogJyArIGVyciwgJ0VSUk9SJyk7XG4gICAgICB9fSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGluc2VydEJlbG93R3JvdXAoZ3JvdXA6IFBvcnRhbERvY3VtZW50R3JvdXApIHtcbiAgICBpZiAoIWdyb3VwLnNlcXVlbmNlKSB7XG4gICAgICBncm91cC5zZXF1ZW5jZSA9IDE7XG4gICAgfVxuICAgIGxldCBuZXdHcm91cCA9IHRoaXMubmV3R3JvdXAoZ3JvdXAuc2VxdWVuY2UgICsgMSk7XG4gICAgdGhpcy5pbnNlcnRHcm91cChncm91cC5zZXF1ZW5jZSwgbmV3R3JvdXApO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXdHcm91cChzZXF1ZW5jZTogbnVtYmVyKTogUG9ydGFsRG9jdW1lbnRHcm91cCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlY3Rpb25JRDogdGhpcy5zZWN0aW9uLmlkLFxuICAgICAgZG9jdW1lbnRJRDogdGhpcy5zZWN0aW9uLmRvY3VtZW50SUQsXG4gICAgICBzZXF1ZW5jZTogc2VxdWVuY2UsXG4gICAgICBuYW1lOiAnR3JvdXAgJyArIHNlcXVlbmNlLFxuICAgICAgcGFydHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRvY3VtZW50SUQ6IHRoaXMuc2VjdGlvbi5kb2N1bWVudElELFxuICAgICAgICAgIG5hbWU6ICdQYXJhZ3JhcGggMScsXG4gICAgICAgICAgdGV4dDoge1xuICAgICAgICAgICAgdGV4dDogJydcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluc2VydEdyb3VwKGluc2VydEluZGV4OiBudW1iZXIsIG5ld0dyb3VwOiBQb3J0YWxEb2N1bWVudEdyb3VwKSB7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgbGFiZWw6ICdJbnNlcnQgR3JvdXAnLFxuICAgICAgZ3JvdXA6IG5ld0dyb3VwXG4gICAgfVxuICAgIGxldCBtb2RhbCA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coR3JvdXBNb2RhbENvbXBvbmVudCwge2luaXRpYWxTdGF0ZSwgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZX0pO1xuICAgICg8R3JvdXBNb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5vbkdyb3VwU2F2ZS5zdWJzY3JpYmUodXBkYXRlc2RHcm91cCA9PiB7XG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgICAgbGV0IGNsb25lID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zZWN0aW9uKTtcbiAgICAgIGlmICghY2xvbmUuZ3JvdXBzKSB7XG4gICAgICAgIGNsb25lLmdyb3VwcyA9IFtdO1xuICAgICAgfVxuICAgICAgY2xvbmUuZ3JvdXBzLnNwbGljZShpbnNlcnRJbmRleCwgMCwgdXBkYXRlc2RHcm91cCk7XG4gICAgICB0aGlzLnJlc2VxdWVuY2UoY2xvbmUpO1xuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UudXBkYXRlRG9jdW1lbnRTZWN0aW9uKGNsb25lKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURjb3VtZW50SUQoY2xvbmUuZG9jdW1lbnRJRCB8fCAnJyk7XG4gICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgICAgfSwgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgdXBkYXRpbmcgc2VjdGlvbjogJyArIGVyciwgJ0VSUk9SJyk7XG4gICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgICAgfX0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNlcXVlbmNlKHNlY3Rpb246IFBvcnRhbERvY3VtZW50U2VjdGlvbikge1xuICAgIGxldCBzZXF1ZW5jZSA9IDE7XG4gICAgaWYgKHNlY3Rpb24uZ3JvdXBzKSB7XG4gICAgICBzZWN0aW9uLmdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgZ3JvdXAuc2VxdWVuY2UgPSBzZXF1ZW5jZSsrO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlbGV0ZUdyb3VwKGdyb3VwOiBQb3J0YWxEb2N1bWVudEdyb3VwKSB7XG4gICAgbGV0IGJvZHlUZXh0ID0gJ0RlbGV0ZSBHcm91cCAnICsgZ3JvdXAubmFtZSArICc/JztcbiAgICBjb25zdCBldmVudE92ZXJyaWRlOiBEb2N1bWVudEV2ZW50IHwgdW5kZWZpbmVkID0gdGhpcy5kb2N1bWVudFNlcnZpY2UuaXNPdmVycmlkZGVuRXZlbnQoeyBldmVudFR5cGU6IERvY3VtZW50RXZlbnRUeXBlLkRlbGV0ZSwgZW50aXR5VHlwZTogRG9jdW1lbnRFdmVudEVudGl0eVR5cGUuR3JvdXAgfSk7XG4gICAgaWYgKGV2ZW50T3ZlcnJpZGUgJiYgZXZlbnRPdmVycmlkZS5jb25maXJtYXRpb25NZXNzYWdlKSB7XG4gICAgICBib2R5VGV4dCA9IGV2ZW50T3ZlcnJpZGUuY29uZmlybWF0aW9uTWVzc2FnZTtcbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgaGVhZGVyVGV4dDogJ0RlbGV0ZSBHcm91cCcsXG4gICAgICBib2R5VGV4dDogYm9keVRleHQsXG4gICAgICBjb25maXJtQnRuTGFiZWw6ICdZZXMnLFxuICAgICAgY2FuY2VsQnRuTGFiZWw6ICdObydcbiAgICB9XG4gICAgbGV0IG1vZGFsID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwgeyBpbml0aWFsU3RhdGUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUgfSk7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5jb25maXJtQ2xpY2tlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICAgIGxldCBjbG9uZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc2VjdGlvbik7XG4gICAgICBpZiAoIWNsb25lLmdyb3Vwcykge1xuICAgICAgICBjbG9uZS5ncm91cHMgPSBbXTtcbiAgICAgIH1cbiAgICAgIGNsb25lLmdyb3VwcyA9IGNsb25lLmdyb3Vwcy5maWx0ZXIoa2VlcCA9PiB7XG4gICAgICAgIGtlZXAuaWQgIT0gZ3JvdXAuaWQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVzZXF1ZW5jZShjbG9uZSk7XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS51cGRhdGVEb2N1bWVudFNlY3Rpb24oY2xvbmUpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5kZWxldGVEb2N1bWVudEdyb3VwKGdyb3VwKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS51cGRhdGVEY291bWVudElEKGNsb25lLmRvY3VtZW50SUQgfHwgJycpO1xuICAgICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignRmFpbGVkIGRlbGV0aW5nIGdyb3VwOiAnICsgZXJyLCAnRVJST1InKTtcbiAgICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgdXBkYXRpbmcgc2VjdGlvbjogJyArIGVyciwgJ0VSUk9SJyk7XG4gICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGVkaXRTZWN0aW9uKHNlY3Rpb246IFBvcnRhbERvY3VtZW50U2VjdGlvbikge1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIGxhYmVsOiAnRWRpdCBTZWN0aW9uIEF0dHJpYnV0ZXMnLFxuICAgICAgc2VjdGlvbjogc2VjdGlvblxuICAgIH1cbiAgICBsZXQgbW9kYWwgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KFNlY3Rpb25Nb2RhbENvbXBvbmVudCwge2luaXRpYWxTdGF0ZSwgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZX0pO1xuICAgICg8U2VjdGlvbk1vZGFsQ29tcG9uZW50Pm1vZGFsLmNvbnRlbnQpLm9uU2VjdGlvblNhdmUuc3Vic2NyaWJlKHVwZGF0ZWRTZWN0aW9uID0+IHtcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS51cGRhdGVEb2N1bWVudFNlY3Rpb24odXBkYXRlZFNlY3Rpb24pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ0ZhaWxlZCB1cGRhdGluZyBzZWN0aW9uOiAnICsgZXJyLCAnRVJST1InKTtcbiAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICB9KVxuICAgIH0pO1xuICB9XG5cbn1cbiIsIjxkaXYgKm5nSWY9XCJzZWN0aW9uXCIgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWN0aW9uLmdyb3VwcyAmJiBzZWN0aW9uLmdyb3Vwcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBnIG9mIHNlY3Rpb24uZ3JvdXBzXCIgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvZXBhLWRvY3VtZW50LWdyb3VwIFtncm91cF09XCJnXCIgKG9uTW92ZVVwKT1cIm1vdmVHcm91cFVwKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uSW5zZXJ0QWJvdmUpPVwiaW5zZXJ0QWJvdmVHcm91cCgkZXZlbnQpXCIgKG9uTW92ZURvd24pPVwibW92ZUdyb3VwRG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkluc2VydEJlbG93KT1cImluc2VydEJlbG93R3JvdXAoJGV2ZW50KVwiIChvbkRlbGV0ZSk9XCJkZWxldGVHcm91cCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvb2VwYS1kb2N1bWVudC1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==