@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,225 @@
1
+ import { Component, Input, ViewChild } from '@angular/core';
2
+ import { SectionModalComponent } from '../section-modal/section-modal.component';
3
+ import { ConfirmationModalComponent } from '../../confirmation-modal/confirmation-modal.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "ngx-bootstrap/modal";
6
+ import * as i2 from "ngx-toastr";
7
+ import * as i3 from "../document.service";
8
+ import * as i4 from "@angular/common";
9
+ import * as i5 from "ngx-bootstrap/tabs";
10
+ import * as i6 from "../document-section/document-section.component";
11
+ export class DocumentEditorComponent {
12
+ modalService;
13
+ toastr;
14
+ documentService;
15
+ document;
16
+ allowRemoveSection = false;
17
+ showSectionOptions = false;
18
+ documentSectionTabs;
19
+ busy = false;
20
+ static selectedTabIndex = 0;
21
+ constructor(modalService, toastr, documentService) {
22
+ this.modalService = modalService;
23
+ this.toastr = toastr;
24
+ this.documentService = documentService;
25
+ }
26
+ ngOnInit() {
27
+ // TODO add check for DSWSWIMSSystemAdmin to the NPDES code
28
+ // this.userAccountService.retrieveAccountForCurrentUser().subscribe((account) => {
29
+ // if (account && account.roleList) {
30
+ // account.roleList.forEach(role => {
31
+ // if (role.name == 'DSWSWIMSSystemAdmin') {
32
+ // this.showSectionOptions = true;
33
+ // }
34
+ // });
35
+ // } else {
36
+ // alert('No Account could be found in the OepaAccountService!');
37
+ // }
38
+ // });
39
+ }
40
+ ngAfterViewInit() {
41
+ if (this.documentSectionTabs?.tabs[DocumentEditorComponent.selectedTabIndex]) {
42
+ this.documentSectionTabs.tabs[DocumentEditorComponent.selectedTabIndex].active = true;
43
+ }
44
+ }
45
+ onSectionTabSelect(index) {
46
+ console.log(index);
47
+ console.log(DocumentEditorComponent.selectedTabIndex);
48
+ DocumentEditorComponent.selectedTabIndex = index;
49
+ if (this.documentSectionTabs?.tabs[DocumentEditorComponent.selectedTabIndex]) {
50
+ this.documentService.updateSelectedSectionName(this.documentSectionTabs.tabs[DocumentEditorComponent.selectedTabIndex].heading);
51
+ }
52
+ else if (this.documentSectionTabs?.tabs[DocumentEditorComponent.selectedTabIndex]) {
53
+ this.editSection(this.documentSectionTabs.tabs[DocumentEditorComponent.selectedTabIndex]);
54
+ }
55
+ }
56
+ moveSectionUp(section) {
57
+ if (section.sequence && section.sequence > 1) {
58
+ let clone = Object.assign({}, this.document);
59
+ if (clone.sections) {
60
+ clone.sections.splice(section.sequence - 2, 0, clone.sections.splice(section.sequence - 1, 1)[0]);
61
+ this.resequence(clone);
62
+ this.documentService.updateDocumentGroup(clone).subscribe({
63
+ next: () => {
64
+ this.documentService.updateDcoumentID(clone.id || '');
65
+ }, error: err => {
66
+ this.toastr.error('Failed updating document: ' + err, 'ERROR');
67
+ }
68
+ });
69
+ }
70
+ }
71
+ else {
72
+ this.toastr.info('Cannot move top section up', '', { disableTimeOut: false, timeOut: 5000 });
73
+ }
74
+ }
75
+ insertAboveSection(section) {
76
+ if (section.sequence) {
77
+ let newSection = this.newSection(section.sequence - 1 || 1);
78
+ this.insertSection(section.sequence - 1, newSection);
79
+ }
80
+ }
81
+ moveSectionDown(section) {
82
+ if (section.sequence && this.document && this.document.sections && section.sequence < this.document.sections.length - 1) {
83
+ let clone = Object.assign({}, this.document);
84
+ if (clone.sections) {
85
+ clone.sections.splice(section.sequence, 0, clone.sections.splice(section.sequence - 1, 1)[0]);
86
+ this.resequence(clone);
87
+ this.documentService.updateDocumentGroup(clone).subscribe({
88
+ next: () => {
89
+ this.documentService.updateDcoumentID(clone.id || '');
90
+ }, error: err => {
91
+ this.toastr.error('Failed updating document: ' + err, 'ERROR');
92
+ }
93
+ });
94
+ }
95
+ }
96
+ else {
97
+ this.toastr.info('Cannot move bottom section down', '', { disableTimeOut: false, timeOut: 5000 });
98
+ }
99
+ }
100
+ insertBelowSection(section) {
101
+ if (section.sequence) {
102
+ let newSection = this.newSection(section.sequence + 1);
103
+ this.insertSection(section.sequence, newSection);
104
+ }
105
+ }
106
+ newSection(sequence) {
107
+ return {
108
+ documentID: this.document?.id,
109
+ sequence: sequence,
110
+ name: 'Section ' + sequence,
111
+ groups: [
112
+ {
113
+ name: 'Group 1',
114
+ parts: [
115
+ {
116
+ name: 'Paragraph 1',
117
+ text: {
118
+ text: ''
119
+ }
120
+ }
121
+ ]
122
+ }
123
+ ]
124
+ };
125
+ }
126
+ insertSection(insertIndex, newSection) {
127
+ const initialState = {
128
+ label: 'Insert Section',
129
+ section: newSection
130
+ };
131
+ let modal = this.modalService.show(SectionModalComponent, { initialState, ignoreBackdropClick: true });
132
+ modal.content.onSectionSave.subscribe(updatedSection => {
133
+ this.busy = true;
134
+ let clone = Object.assign({}, this.document);
135
+ if (clone.sections) {
136
+ clone.sections.splice(insertIndex, 0, updatedSection);
137
+ this.resequence(clone);
138
+ this.documentService.updateDocument(clone).subscribe({
139
+ next: () => {
140
+ this.documentService.updateDcoumentID(clone.id || '');
141
+ this.busy = false;
142
+ }, error: err => {
143
+ this.toastr.error('Failed updating section: ' + err, 'ERROR');
144
+ this.busy = false;
145
+ }
146
+ });
147
+ }
148
+ });
149
+ }
150
+ resequence(document) {
151
+ let sequence = 1;
152
+ if (document.sections) {
153
+ document.sections.forEach(section => {
154
+ section.sequence = sequence++;
155
+ });
156
+ }
157
+ }
158
+ deleteSection(section) {
159
+ const initialState = {
160
+ headerText: 'Delete Section',
161
+ bodyText: 'Delete Section ' + section.name + '?',
162
+ confirmBtnLabel: 'Yes',
163
+ cancelBtnLabel: 'No'
164
+ };
165
+ let modal = this.modalService.show(ConfirmationModalComponent, { initialState, ignoreBackdropClick: true });
166
+ modal.content.confirmClicked.subscribe(() => {
167
+ this.busy = true;
168
+ let clone = Object.assign({}, this.document);
169
+ if (clone.sections) {
170
+ clone.sections = clone.sections.filter(keep => {
171
+ keep.id != section.id;
172
+ });
173
+ this.resequence(clone);
174
+ this.documentService.updateDocument(clone).subscribe({
175
+ next: () => {
176
+ this.documentService.deleteDocumentSection(section).subscribe({
177
+ next: () => {
178
+ this.documentService.updateDcoumentID(clone.id || '');
179
+ this.busy = false;
180
+ }, error: err => {
181
+ this.toastr.error('Failed deleting section: ' + err, 'ERROR');
182
+ this.busy = false;
183
+ }
184
+ });
185
+ }, error: err => {
186
+ this.toastr.error('Failed updating document: ' + err, 'ERROR');
187
+ this.busy = false;
188
+ }
189
+ });
190
+ }
191
+ });
192
+ }
193
+ editSection(section) {
194
+ const initialState = {
195
+ label: 'Edit Section Attributes',
196
+ section: section
197
+ };
198
+ let modal = this.modalService.show(SectionModalComponent, { initialState, ignoreBackdropClick: true });
199
+ modal.content.onSectionSave.subscribe(updatedSection => {
200
+ this.busy = true;
201
+ this.documentService.updateDocumentSection(updatedSection).subscribe(() => {
202
+ this.busy = false;
203
+ }, err => {
204
+ this.toastr.error('Failed updating section: ' + err, 'ERROR');
205
+ this.busy = false;
206
+ });
207
+ });
208
+ }
209
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentEditorComponent, deps: [{ token: i1.BsModalService }, { token: i2.ToastrService }, { token: i3.DocumentService }], target: i0.ɵɵFactoryTarget.Component });
210
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DocumentEditorComponent, selector: "oepa-document-editor", inputs: { document: "document", allowRemoveSection: "allowRemoveSection", showSectionOptions: "showSectionOptions" }, viewQueries: [{ propertyName: "documentSectionTabs", first: true, predicate: ["documentSectionTabs"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"document\">\n <div *ngIf=\"document.sections && document.sections.length > 0\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <button type=\"button\" class=\"btn btn-primary btn-sm\"\n (click)=\"insertBelowSection(document.sections[document.sections.length-1])\">\n Add new section\n </button>\n </div>\n <div class=\"col-sm-8\">\n </div>\n <div class=\"col-sm-12\" class=\"row\">\n <tabset #documentSectionTabs>\n <tab *ngFor=\"let s of document.sections; let i = index;\" (selectTab)=\"onSectionTabSelect(i)\"\n [removable]=\"allowRemoveSection\" (removed)=\"deleteSection(s)\">\n <ng-template tabHeading>\n <span>\n <span>{{s.name}}</span>\n <span *ngIf=\"showSectionOptions\">&nbsp;<i class=\"bi bi-pencil-fill\"\n (click)=\"editSection(s)\"></i> &nbsp;<i class=\"bi bi-x-lg\"\n (click)=\"deleteSection(s)\"></i></span>\n </span>\n </ng-template>\n <oepa-document-section [section]=\"s\" (onMoveUp)=\"moveSectionUp($event)\"\n (onInsertAbove)=\"insertAboveSection($event)\" (onMoveDown)=\"moveSectionDown($event)\"\n (onInsertBelow)=\"insertBelowSection($event)\" (onDelete)=\"deleteSection($event)\">\n </oepa-document-section>\n </tab>\n </tabset>\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: "directive", type: i5.TabDirective, selector: "tab, [tab]", inputs: ["heading", "id", "disabled", "removable", "customClass", "active"], outputs: ["selectTab", "deselect", "removed"], exportAs: ["tab"] }, { kind: "component", type: i5.TabsetComponent, selector: "tabset", inputs: ["vertical", "justified", "type"] }, { kind: "directive", type: i5.TabHeadingDirective, selector: "[tabHeading]" }, { kind: "component", type: i6.DocumentSectionComponent, selector: "oepa-document-section", inputs: ["section"], outputs: ["onMoveUp", "onInsertAbove", "onMoveDown", "onInsertBelow", "onDelete"] }] });
211
+ }
212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentEditorComponent, decorators: [{
213
+ type: Component,
214
+ args: [{ selector: 'oepa-document-editor', template: "<div *ngIf=\"document\">\n <div *ngIf=\"document.sections && document.sections.length > 0\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <button type=\"button\" class=\"btn btn-primary btn-sm\"\n (click)=\"insertBelowSection(document.sections[document.sections.length-1])\">\n Add new section\n </button>\n </div>\n <div class=\"col-sm-8\">\n </div>\n <div class=\"col-sm-12\" class=\"row\">\n <tabset #documentSectionTabs>\n <tab *ngFor=\"let s of document.sections; let i = index;\" (selectTab)=\"onSectionTabSelect(i)\"\n [removable]=\"allowRemoveSection\" (removed)=\"deleteSection(s)\">\n <ng-template tabHeading>\n <span>\n <span>{{s.name}}</span>\n <span *ngIf=\"showSectionOptions\">&nbsp;<i class=\"bi bi-pencil-fill\"\n (click)=\"editSection(s)\"></i> &nbsp;<i class=\"bi bi-x-lg\"\n (click)=\"deleteSection(s)\"></i></span>\n </span>\n </ng-template>\n <oepa-document-section [section]=\"s\" (onMoveUp)=\"moveSectionUp($event)\"\n (onInsertAbove)=\"insertAboveSection($event)\" (onMoveDown)=\"moveSectionDown($event)\"\n (onInsertBelow)=\"insertBelowSection($event)\" (onDelete)=\"deleteSection($event)\">\n </oepa-document-section>\n </tab>\n </tabset>\n </div>\n </div>\n </div>\n</div>" }]
215
+ }], ctorParameters: () => [{ type: i1.BsModalService }, { type: i2.ToastrService }, { type: i3.DocumentService }], propDecorators: { document: [{
216
+ type: Input
217
+ }], allowRemoveSection: [{
218
+ type: Input
219
+ }], showSectionOptions: [{
220
+ type: Input
221
+ }], documentSectionTabs: [{
222
+ type: ViewChild,
223
+ args: ['documentSectionTabs', { static: false }]
224
+ }] } });
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29lcGEtdWktbGliL3NyYy9saWIvZG9jdW1lbnQvZG9jdW1lbnQtZWRpdG9yL2RvY3VtZW50LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RvY3VtZW50L2RvY3VtZW50LWVkaXRvci9kb2N1bWVudC1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU1uRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUVqRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQzs7Ozs7Ozs7QUFPbkcsTUFBTSxPQUFPLHVCQUF1QjtJQVdkO0lBQ1Y7SUFDQTtJQVhELFFBQVEsQ0FBNkI7SUFDckMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQzNCLGtCQUFrQixHQUFZLEtBQUssQ0FBQztJQUVRLG1CQUFtQixDQUFtQjtJQUVwRixJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ1osTUFBTSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUVwQyxZQUFvQixZQUE0QixFQUN0QyxNQUFxQixFQUNyQixlQUFnQztRQUZ0QixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDdEMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFFMUMsQ0FBQztJQUVELFFBQVE7UUFDTiwyREFBMkQ7UUFDM0QsbUZBQW1GO1FBQ25GLHVDQUF1QztRQUN2Qyx5Q0FBeUM7UUFDekMsa0RBQWtEO1FBQ2xELDBDQUEwQztRQUMxQyxVQUFVO1FBQ1YsVUFBVTtRQUNWLGFBQWE7UUFDYixxRUFBcUU7UUFDckUsTUFBTTtRQUNOLE1BQU07SUFDUixDQUFDO0lBR0QsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDN0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDeEYsQ0FBQztJQUNILENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxLQUFhO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ3JELHVCQUF1QixDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNqRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQzdFLElBQUksQ0FBQyxlQUFlLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xJLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ3BGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDNUYsQ0FBQztJQUNILENBQUM7SUFFTSxhQUFhLENBQUMsT0FBOEI7UUFDakQsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0MsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNuQixLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ3hELElBQUksRUFBRSxHQUFHLEVBQUU7d0JBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUN4RCxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO3dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixHQUFHLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDakUsQ0FBQztpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7SUFFSCxDQUFDO0lBRU0sa0JBQWtCLENBQUMsT0FBOEI7UUFDdEQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRU0sZUFBZSxDQUFDLE9BQThCO1FBQ25ELElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hILElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ3hELElBQUksRUFBRSxHQUFHLEVBQUU7d0JBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUN4RCxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO3dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixHQUFHLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDakUsQ0FBQztpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7SUFDSCxDQUFDO0lBRU0sa0JBQWtCLENBQUMsT0FBOEI7UUFDdEQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxRQUFnQjtRQUNqQyxPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUM3QixRQUFRLEVBQUUsUUFBUTtZQUNsQixJQUFJLEVBQUUsVUFBVSxHQUFHLFFBQVE7WUFDM0IsTUFBTSxFQUFFO2dCQUNOO29CQUNFLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRTt3QkFDTDs0QkFDRSxJQUFJLEVBQUUsYUFBYTs0QkFDbkIsSUFBSSxFQUFFO2dDQUNKLElBQUksRUFBRSxFQUFFOzZCQUNUO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUFBO0lBQ0gsQ0FBQztJQUNPLGFBQWEsQ0FBQyxXQUFtQixFQUFFLFVBQWlDO1FBQzFFLE1BQU0sWUFBWSxHQUFHO1lBQ25CLEtBQUssRUFBRSxnQkFBZ0I7WUFDdkIsT0FBTyxFQUFFLFVBQVU7U0FDcEIsQ0FBQTtRQUNELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0UsS0FBSyxDQUFDLE9BQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQzlFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUNuRCxJQUFJLEVBQUUsR0FBRyxFQUFFO3dCQUNULElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDdEQsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7b0JBQ3BCLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEdBQUcsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUM5RCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztvQkFDcEIsQ0FBQztpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sVUFBVSxDQUFDLFFBQXdCO1FBQ3pDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDbEMsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU0sYUFBYSxDQUFDLE9BQThCO1FBQ2pELE1BQU0sWUFBWSxHQUFHO1lBQ25CLFVBQVUsRUFBRSxnQkFBZ0I7WUFDNUIsUUFBUSxFQUFFLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRztZQUNoRCxlQUFlLEVBQUUsS0FBSztZQUN0QixjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFBO1FBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvRSxLQUFLLENBQUMsT0FBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3hFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDNUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ25ELElBQUksRUFBRSxHQUFHLEVBQUU7d0JBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7NEJBQzVELElBQUksRUFBRSxHQUFHLEVBQUU7Z0NBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dDQUN0RCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQzs0QkFDcEIsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtnQ0FDZCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsR0FBRyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0NBQzlELElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDOzRCQUNwQixDQUFDO3lCQUNGLENBQUMsQ0FBQztvQkFDTCxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO3dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixHQUFHLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDL0QsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7b0JBQ3BCLENBQUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFdBQVcsQ0FBQyxPQUE4QjtRQUMvQyxNQUFNLFlBQVksR0FBRztZQUNuQixLQUFLLEVBQUUseUJBQXlCO1lBQ2hDLE9BQU8sRUFBRSxPQUFPO1NBQ2pCLENBQUE7UUFDRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLEtBQUssQ0FBQyxPQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUM5RSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hFLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsR0FBRyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQWhOVSx1QkFBdUI7NEZBQXZCLHVCQUF1Qiw4U0NmcEMsaXdEQWdDTTs7NEZEakJPLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxzQkFBc0I7NklBTXZCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFK0MsbUJBQW1CO3NCQUF2RSxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb3J0YWxEb2N1bWVudCB9IGZyb20gJy4uL3BvcnRhbC1kb2N1bWVudCc7XG5pbXBvcnQgeyBQb3J0YWxEb2N1bWVudFNlY3Rpb24gfSBmcm9tICcuLi9wb3J0YWwtZG9jdW1lbnQtc2VjdGlvbic7XG5pbXBvcnQgeyBEb2N1bWVudFNlcnZpY2UgfSBmcm9tICcuLi9kb2N1bWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBTZWN0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9zZWN0aW9uLW1vZGFsL3NlY3Rpb24tbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYnNldENvbXBvbmVudCB9IGZyb20gJ25neC1ib290c3RyYXAvdGFicyc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbmZpcm1hdGlvbi1tb2RhbC9jb25maXJtYXRpb24tbW9kYWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1kb2N1bWVudC1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnQtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnQtZWRpdG9yLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQElucHV0KCkgZG9jdW1lbnQ6IFBvcnRhbERvY3VtZW50IHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBhbGxvd1JlbW92ZVNlY3Rpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1NlY3Rpb25PcHRpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnZG9jdW1lbnRTZWN0aW9uVGFicycsIHsgc3RhdGljOiBmYWxzZSB9KSBkb2N1bWVudFNlY3Rpb25UYWJzPzogVGFic2V0Q29tcG9uZW50O1xuXG4gIHB1YmxpYyBidXN5ID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGljIHNlbGVjdGVkVGFiSW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlKSB7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIFRPRE8gYWRkIGNoZWNrIGZvciBEU1dTV0lNU1N5c3RlbUFkbWluIHRvIHRoZSBOUERFUyBjb2RlXG4gICAgLy8gdGhpcy51c2VyQWNjb3VudFNlcnZpY2UucmV0cmlldmVBY2NvdW50Rm9yQ3VycmVudFVzZXIoKS5zdWJzY3JpYmUoKGFjY291bnQpID0+IHtcbiAgICAvLyAgIGlmIChhY2NvdW50ICYmIGFjY291bnQucm9sZUxpc3QpIHtcbiAgICAvLyAgICAgYWNjb3VudC5yb2xlTGlzdC5mb3JFYWNoKHJvbGUgPT4ge1xuICAgIC8vICAgICAgIGlmIChyb2xlLm5hbWUgPT0gJ0RTV1NXSU1TU3lzdGVtQWRtaW4nKSB7XG4gICAgLy8gICAgICAgICB0aGlzLnNob3dTZWN0aW9uT3B0aW9ucyA9IHRydWU7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9KTtcbiAgICAvLyAgIH0gZWxzZSB7XG4gICAgLy8gICAgIGFsZXJ0KCdObyBBY2NvdW50IGNvdWxkIGJlIGZvdW5kIGluIHRoZSBPZXBhQWNjb3VudFNlcnZpY2UhJyk7XG4gICAgLy8gICB9XG4gICAgLy8gfSk7XG4gIH1cblxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kb2N1bWVudFNlY3Rpb25UYWJzPy50YWJzW0RvY3VtZW50RWRpdG9yQ29tcG9uZW50LnNlbGVjdGVkVGFiSW5kZXhdKSB7XG4gICAgICB0aGlzLmRvY3VtZW50U2VjdGlvblRhYnMudGFic1tEb2N1bWVudEVkaXRvckNvbXBvbmVudC5zZWxlY3RlZFRhYkluZGV4XS5hY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblNlY3Rpb25UYWJTZWxlY3QoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnNvbGUubG9nKGluZGV4KVxuICAgIGNvbnNvbGUubG9nKERvY3VtZW50RWRpdG9yQ29tcG9uZW50LnNlbGVjdGVkVGFiSW5kZXgpXG4gICAgRG9jdW1lbnRFZGl0b3JDb21wb25lbnQuc2VsZWN0ZWRUYWJJbmRleCA9IGluZGV4O1xuICAgIGlmICh0aGlzLmRvY3VtZW50U2VjdGlvblRhYnM/LnRhYnNbRG9jdW1lbnRFZGl0b3JDb21wb25lbnQuc2VsZWN0ZWRUYWJJbmRleF0pIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZVNlbGVjdGVkU2VjdGlvbk5hbWUodGhpcy5kb2N1bWVudFNlY3Rpb25UYWJzLnRhYnNbRG9jdW1lbnRFZGl0b3JDb21wb25lbnQuc2VsZWN0ZWRUYWJJbmRleF0uaGVhZGluZyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRvY3VtZW50U2VjdGlvblRhYnM/LnRhYnNbRG9jdW1lbnRFZGl0b3JDb21wb25lbnQuc2VsZWN0ZWRUYWJJbmRleF0pIHtcbiAgICAgIHRoaXMuZWRpdFNlY3Rpb24odGhpcy5kb2N1bWVudFNlY3Rpb25UYWJzLnRhYnNbRG9jdW1lbnRFZGl0b3JDb21wb25lbnQuc2VsZWN0ZWRUYWJJbmRleF0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBtb3ZlU2VjdGlvblVwKHNlY3Rpb246IFBvcnRhbERvY3VtZW50U2VjdGlvbikge1xuICAgIGlmIChzZWN0aW9uLnNlcXVlbmNlICYmIHNlY3Rpb24uc2VxdWVuY2UgPiAxKSB7XG4gICAgICBsZXQgY2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRvY3VtZW50KTtcbiAgICAgIGlmIChjbG9uZS5zZWN0aW9ucykge1xuICAgICAgICBjbG9uZS5zZWN0aW9ucy5zcGxpY2Uoc2VjdGlvbi5zZXF1ZW5jZSAtIDIsIDAsIGNsb25lLnNlY3Rpb25zLnNwbGljZShzZWN0aW9uLnNlcXVlbmNlIC0gMSwgMSlbMF0pO1xuICAgICAgICB0aGlzLnJlc2VxdWVuY2UoY2xvbmUpO1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS51cGRhdGVEb2N1bWVudEdyb3VwKGNsb25lKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURjb3VtZW50SUQoY2xvbmUuaWQgfHwgJycpO1xuICAgICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ0ZhaWxlZCB1cGRhdGluZyBkb2N1bWVudDogJyArIGVyciwgJ0VSUk9SJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2FzdHIuaW5mbygnQ2Fubm90IG1vdmUgdG9wIHNlY3Rpb24gdXAnLCAnJywgeyBkaXNhYmxlVGltZU91dDogZmFsc2UsIHRpbWVPdXQ6IDUwMDAgfSk7XG4gICAgfVxuXG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0QWJvdmVTZWN0aW9uKHNlY3Rpb246IFBvcnRhbERvY3VtZW50U2VjdGlvbikge1xuICAgIGlmIChzZWN0aW9uLnNlcXVlbmNlKSB7XG4gICAgICBsZXQgbmV3U2VjdGlvbiA9IHRoaXMubmV3U2VjdGlvbihzZWN0aW9uLnNlcXVlbmNlIC0gMSB8fCAxKTtcbiAgICAgIHRoaXMuaW5zZXJ0U2VjdGlvbihzZWN0aW9uLnNlcXVlbmNlIC0gMSwgbmV3U2VjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1vdmVTZWN0aW9uRG93bihzZWN0aW9uOiBQb3J0YWxEb2N1bWVudFNlY3Rpb24pIHtcbiAgICBpZiAoc2VjdGlvbi5zZXF1ZW5jZSAmJiB0aGlzLmRvY3VtZW50ICYmIHRoaXMuZG9jdW1lbnQuc2VjdGlvbnMgJiYgc2VjdGlvbi5zZXF1ZW5jZSA8IHRoaXMuZG9jdW1lbnQuc2VjdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgbGV0IGNsb25lID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5kb2N1bWVudCk7XG4gICAgICBpZiAoY2xvbmUuc2VjdGlvbnMpIHtcbiAgICAgICAgY2xvbmUuc2VjdGlvbnMuc3BsaWNlKHNlY3Rpb24uc2VxdWVuY2UsIDAsIGNsb25lLnNlY3Rpb25zLnNwbGljZShzZWN0aW9uLnNlcXVlbmNlIC0gMSwgMSlbMF0pO1xuICAgICAgICB0aGlzLnJlc2VxdWVuY2UoY2xvbmUpO1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS51cGRhdGVEb2N1bWVudEdyb3VwKGNsb25lKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURjb3VtZW50SUQoY2xvbmUuaWQgfHwgJycpO1xuICAgICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ0ZhaWxlZCB1cGRhdGluZyBkb2N1bWVudDogJyArIGVyciwgJ0VSUk9SJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2FzdHIuaW5mbygnQ2Fubm90IG1vdmUgYm90dG9tIHNlY3Rpb24gZG93bicsICcnLCB7IGRpc2FibGVUaW1lT3V0OiBmYWxzZSwgdGltZU91dDogNTAwMCB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0QmVsb3dTZWN0aW9uKHNlY3Rpb246IFBvcnRhbERvY3VtZW50U2VjdGlvbikge1xuICAgIGlmIChzZWN0aW9uLnNlcXVlbmNlKSB7XG4gICAgICBsZXQgbmV3U2VjdGlvbiA9IHRoaXMubmV3U2VjdGlvbihzZWN0aW9uLnNlcXVlbmNlICsgMSk7XG4gICAgICB0aGlzLmluc2VydFNlY3Rpb24oc2VjdGlvbi5zZXF1ZW5jZSwgbmV3U2VjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBuZXdTZWN0aW9uKHNlcXVlbmNlOiBudW1iZXIpOiBQb3J0YWxEb2N1bWVudFNlY3Rpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBkb2N1bWVudElEOiB0aGlzLmRvY3VtZW50Py5pZCxcbiAgICAgIHNlcXVlbmNlOiBzZXF1ZW5jZSxcbiAgICAgIG5hbWU6ICdTZWN0aW9uICcgKyBzZXF1ZW5jZSxcbiAgICAgIGdyb3VwczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0dyb3VwIDEnLFxuICAgICAgICAgIHBhcnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdQYXJhZ3JhcGggMScsXG4gICAgICAgICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiAnJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9XG4gIHByaXZhdGUgaW5zZXJ0U2VjdGlvbihpbnNlcnRJbmRleDogbnVtYmVyLCBuZXdTZWN0aW9uOiBQb3J0YWxEb2N1bWVudFNlY3Rpb24pIHtcbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBsYWJlbDogJ0luc2VydCBTZWN0aW9uJyxcbiAgICAgIHNlY3Rpb246IG5ld1NlY3Rpb25cbiAgICB9XG4gICAgbGV0IG1vZGFsID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhTZWN0aW9uTW9kYWxDb21wb25lbnQsIHsgaW5pdGlhbFN0YXRlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlIH0pO1xuICAgICg8U2VjdGlvbk1vZGFsQ29tcG9uZW50Pm1vZGFsLmNvbnRlbnQpLm9uU2VjdGlvblNhdmUuc3Vic2NyaWJlKHVwZGF0ZWRTZWN0aW9uID0+IHtcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgICBsZXQgY2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRvY3VtZW50KTtcbiAgICAgIGlmIChjbG9uZS5zZWN0aW9ucykge1xuICAgICAgICBjbG9uZS5zZWN0aW9ucy5zcGxpY2UoaW5zZXJ0SW5kZXgsIDAsIHVwZGF0ZWRTZWN0aW9uKTtcbiAgICAgICAgdGhpcy5yZXNlcXVlbmNlKGNsb25lKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UudXBkYXRlRG9jdW1lbnQoY2xvbmUpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UudXBkYXRlRGNvdW1lbnRJRChjbG9uZS5pZCB8fCAnJyk7XG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICAgICAgICB9LCBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgdXBkYXRpbmcgc2VjdGlvbjogJyArIGVyciwgJ0VSUk9SJyk7XG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNlcXVlbmNlKGRvY3VtZW50OiBQb3J0YWxEb2N1bWVudCkge1xuICAgIGxldCBzZXF1ZW5jZSA9IDE7XG4gICAgaWYgKGRvY3VtZW50LnNlY3Rpb25zKSB7XG4gICAgICBkb2N1bWVudC5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgICBzZWN0aW9uLnNlcXVlbmNlID0gc2VxdWVuY2UrKztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVTZWN0aW9uKHNlY3Rpb246IFBvcnRhbERvY3VtZW50U2VjdGlvbikge1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIGhlYWRlclRleHQ6ICdEZWxldGUgU2VjdGlvbicsXG4gICAgICBib2R5VGV4dDogJ0RlbGV0ZSBTZWN0aW9uICcgKyBzZWN0aW9uLm5hbWUgKyAnPycsXG4gICAgICBjb25maXJtQnRuTGFiZWw6ICdZZXMnLFxuICAgICAgY2FuY2VsQnRuTGFiZWw6ICdObydcbiAgICB9XG4gICAgbGV0IG1vZGFsID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwgeyBpbml0aWFsU3RhdGUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUgfSk7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5jb25maXJtQ2xpY2tlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICAgIGxldCBjbG9uZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZG9jdW1lbnQpO1xuICAgICAgaWYgKGNsb25lLnNlY3Rpb25zKSB7XG4gICAgICAgIGNsb25lLnNlY3Rpb25zID0gY2xvbmUuc2VjdGlvbnMuZmlsdGVyKGtlZXAgPT4ge1xuICAgICAgICAgIGtlZXAuaWQgIT0gc2VjdGlvbi5pZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzZXF1ZW5jZShjbG9uZSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURvY3VtZW50KGNsb25lKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmRlbGV0ZURvY3VtZW50U2VjdGlvbihzZWN0aW9uKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UudXBkYXRlRGNvdW1lbnRJRChjbG9uZS5pZCB8fCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgZGVsZXRpbmcgc2VjdGlvbjogJyArIGVyciwgJ0VSUk9SJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ0ZhaWxlZCB1cGRhdGluZyBkb2N1bWVudDogJyArIGVyciwgJ0VSUk9SJyk7XG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGVkaXRTZWN0aW9uKHNlY3Rpb246IFBvcnRhbERvY3VtZW50U2VjdGlvbikge1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIGxhYmVsOiAnRWRpdCBTZWN0aW9uIEF0dHJpYnV0ZXMnLFxuICAgICAgc2VjdGlvbjogc2VjdGlvblxuICAgIH1cbiAgICBsZXQgbW9kYWwgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KFNlY3Rpb25Nb2RhbENvbXBvbmVudCwgeyBpbml0aWFsU3RhdGUsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUgfSk7XG4gICAgKDxTZWN0aW9uTW9kYWxDb21wb25lbnQ+bW9kYWwuY29udGVudCkub25TZWN0aW9uU2F2ZS5zdWJzY3JpYmUodXBkYXRlZFNlY3Rpb24gPT4ge1xuICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURvY3VtZW50U2VjdGlvbih1cGRhdGVkU2VjdGlvbikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICB9LCBlcnIgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignRmFpbGVkIHVwZGF0aW5nIHNlY3Rpb246ICcgKyBlcnIsICdFUlJPUicpO1xuICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxufVxuIiwiPGRpdiAqbmdJZj1cImRvY3VtZW50XCI+XG4gICAgPGRpdiAqbmdJZj1cImRvY3VtZW50LnNlY3Rpb25zICYmIGRvY3VtZW50LnNlY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImluc2VydEJlbG93U2VjdGlvbihkb2N1bWVudC5zZWN0aW9uc1tkb2N1bWVudC5zZWN0aW9ucy5sZW5ndGgtMV0pXCI+XG4gICAgICAgICAgICAgICAgICAgIEFkZCBuZXcgc2VjdGlvblxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMlwiIGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPHRhYnNldCAjZG9jdW1lbnRTZWN0aW9uVGFicz5cbiAgICAgICAgICAgICAgICAgICAgPHRhYiAqbmdGb3I9XCJsZXQgcyBvZiBkb2N1bWVudC5zZWN0aW9uczsgbGV0IGkgPSBpbmRleDtcIiAoc2VsZWN0VGFiKT1cIm9uU2VjdGlvblRhYlNlbGVjdChpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cImFsbG93UmVtb3ZlU2VjdGlvblwiIChyZW1vdmVkKT1cImRlbGV0ZVNlY3Rpb24ocylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSB0YWJIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3MubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dTZWN0aW9uT3B0aW9uc1wiPiZuYnNwOzxpIGNsYXNzPVwiYmkgYmktcGVuY2lsLWZpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0U2VjdGlvbihzKVwiPjwvaT4gJm5ic3A7PGkgY2xhc3M9XCJiaSBiaS14LWxnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlU2VjdGlvbihzKVwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvZXBhLWRvY3VtZW50LXNlY3Rpb24gW3NlY3Rpb25dPVwic1wiIChvbk1vdmVVcCk9XCJtb3ZlU2VjdGlvblVwKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkluc2VydEFib3ZlKT1cImluc2VydEFib3ZlU2VjdGlvbigkZXZlbnQpXCIgKG9uTW92ZURvd24pPVwibW92ZVNlY3Rpb25Eb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkluc2VydEJlbG93KT1cImluc2VydEJlbG93U2VjdGlvbigkZXZlbnQpXCIgKG9uRGVsZXRlKT1cImRlbGV0ZVNlY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vZXBhLWRvY3VtZW50LXNlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvdGFiPlxuICAgICAgICAgICAgICAgIDwvdGFic2V0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
@@ -0,0 +1,7 @@
1
+ export var DocumentEventEntityType;
2
+ (function (DocumentEventEntityType) {
3
+ DocumentEventEntityType[DocumentEventEntityType["Section"] = 0] = "Section";
4
+ DocumentEventEntityType[DocumentEventEntityType["Group"] = 1] = "Group";
5
+ DocumentEventEntityType[DocumentEventEntityType["Part"] = 2] = "Part";
6
+ })(DocumentEventEntityType || (DocumentEventEntityType = {}));
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZXZlbnQtZW50aXR5LXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RvY3VtZW50L2RvY3VtZW50LWV2ZW50LWVudGl0eS10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLHVCQUlYO0FBSkQsV0FBWSx1QkFBdUI7SUFDL0IsMkVBQU8sQ0FBQTtJQUNQLHVFQUFLLENBQUE7SUFDTCxxRUFBSSxDQUFBO0FBQ1IsQ0FBQyxFQUpXLHVCQUF1QixLQUF2Qix1QkFBdUIsUUFJbEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBEb2N1bWVudEV2ZW50RW50aXR5VHlwZSB7XG4gICAgU2VjdGlvbixcbiAgICBHcm91cCxcbiAgICBQYXJ0XG59Il19
@@ -0,0 +1,7 @@
1
+ export var DocumentEventType;
2
+ (function (DocumentEventType) {
3
+ DocumentEventType[DocumentEventType["Create"] = 0] = "Create";
4
+ DocumentEventType[DocumentEventType["Update"] = 1] = "Update";
5
+ DocumentEventType[DocumentEventType["Delete"] = 2] = "Delete";
6
+ })(DocumentEventType || (DocumentEventType = {}));
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZXZlbnQtdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29lcGEtdWktbGliL3NyYy9saWIvZG9jdW1lbnQvZG9jdW1lbnQtZXZlbnQtdHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxpQkFJWDtBQUpELFdBQVksaUJBQWlCO0lBQ3pCLDZEQUFNLENBQUE7SUFDTiw2REFBTSxDQUFBO0lBQ04sNkRBQU0sQ0FBQTtBQUNWLENBQUMsRUFKVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBSTVCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gRG9jdW1lbnRFdmVudFR5cGUge1xuICAgIENyZWF0ZSxcbiAgICBVcGRhdGUsXG4gICAgRGVsZXRlXG59Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RvY3VtZW50L2RvY3VtZW50LWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb2N1bWVudEV2ZW50RW50aXR5VHlwZSB9IGZyb20gXCIuL2RvY3VtZW50LWV2ZW50LWVudGl0eS10eXBlXCI7XG5pbXBvcnQgeyBEb2N1bWVudEV2ZW50VHlwZSB9IGZyb20gXCIuL2RvY3VtZW50LWV2ZW50LXR5cGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBEb2N1bWVudEV2ZW50IHtcbiAgICBldmVudFR5cGU/OiBEb2N1bWVudEV2ZW50VHlwZTtcbiAgICBlbnRpdHlUeXBlPzogRG9jdW1lbnRFdmVudEVudGl0eVR5cGU7XG4gICAgZW50aXR5SUQ/OiBzdHJpbmc7XG4gICAgY29uZmlybWF0aW9uTWVzc2FnZT86IHN0cmluZztcbiAgICBlbnRpdHk/OiBhbnk7XG59Il19
@@ -0,0 +1,210 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { GroupModalComponent } from '../group-modal/group-modal.component';
3
+ import { DocumentEventType } from '../document-event-type';
4
+ import { DocumentEventEntityType } from '../document-event-entity-type';
5
+ import { ConfirmationModalComponent } from '../../confirmation-modal/confirmation-modal.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "ngx-bootstrap/modal";
8
+ import * as i2 from "ngx-toastr";
9
+ import * as i3 from "../document.service";
10
+ import * as i4 from "@angular/common";
11
+ import * as i5 from "ngx-bootstrap/tooltip";
12
+ import * as i6 from "../document-part-editor/document-part-editor.component";
13
+ export class DocumentGroupComponent {
14
+ modalService;
15
+ toastr;
16
+ documentService;
17
+ group;
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.group);
33
+ }
34
+ insertAbove() {
35
+ this.onInsertAbove.emit(this.group);
36
+ }
37
+ moveDown() {
38
+ this.onMoveDown.emit(this.group);
39
+ }
40
+ insertBelow() {
41
+ this.onInsertBelow.emit(this.group);
42
+ }
43
+ delete() {
44
+ this.onDelete.emit(this.group);
45
+ }
46
+ movePartUp(part) {
47
+ if (part.sequence && part.sequence > 1) {
48
+ let clone = Object.assign({}, this.group);
49
+ if (clone.parts && clone.documentID) {
50
+ clone.parts.splice(part.sequence - 2, 0, clone.parts.splice(part.sequence - 1, 1)[0]);
51
+ this.resequence(clone);
52
+ this.documentService.updateDocumentGroup(clone).subscribe({
53
+ next: () => {
54
+ this.documentService.updateDcoumentID(clone.documentID || '');
55
+ }, error: err => {
56
+ this.toastr.error('Failed updating group: ' + err, 'ERROR');
57
+ }
58
+ });
59
+ }
60
+ }
61
+ }
62
+ insertAbovePart(part) {
63
+ if (part.sequence) {
64
+ let newPart = this.newPart(part.sequence - 1 || 1);
65
+ this.insertPart(part.sequence - 1, newPart);
66
+ }
67
+ }
68
+ movePartDown(part) {
69
+ if (part.sequence && this.group.parts && part.sequence < this.group.parts.length) {
70
+ let clone = Object.assign({}, this.group);
71
+ if (clone.parts && clone.documentID) {
72
+ clone.parts.splice(part.sequence, 0, clone.parts.splice(part.sequence - 1, 1)[0]);
73
+ this.resequence(clone);
74
+ this.documentService.updateDocumentGroup(clone).subscribe({
75
+ next: () => {
76
+ this.documentService.updateDcoumentID(clone.documentID || '');
77
+ }, error: err => {
78
+ this.toastr.error('Failed updating group: ' + err, 'ERROR');
79
+ }
80
+ });
81
+ }
82
+ }
83
+ }
84
+ insertBelowPart(part) {
85
+ if (part.sequence) {
86
+ let newPart = this.newPart(part.sequence + 1);
87
+ this.insertPart(part.sequence, newPart);
88
+ }
89
+ }
90
+ newPart(sequence) {
91
+ return {
92
+ groupID: this.group.id,
93
+ documentID: this.group.documentID,
94
+ sequence: sequence,
95
+ name: 'Paragraph ' + sequence,
96
+ display: true,
97
+ required: true
98
+ };
99
+ }
100
+ insertPart(insertIndex, newPart) {
101
+ const initialState = {
102
+ headerText: 'Insert Paragraph',
103
+ bodyText: 'Insert new paragraph?'
104
+ };
105
+ let modal = this.modalService.show(ConfirmationModalComponent, { initialState, ignoreBackdropClick: true });
106
+ modal.content.confirmClicked.subscribe(() => {
107
+ let clone = Object.assign({}, this.group);
108
+ if (clone.parts && clone.documentID) {
109
+ clone.parts.splice(insertIndex, 0, newPart);
110
+ this.resequence(clone);
111
+ this.documentService.createDocumentPart(newPart).subscribe({
112
+ next: partID => {
113
+ newPart.id = partID;
114
+ this.documentService.updateDocumentGroup(clone).subscribe({
115
+ next: () => {
116
+ this.documentService.updateDcoumentID(clone.documentID || '');
117
+ }, error: err => {
118
+ this.toastr.error('Failed updating group: ' + err, 'ERROR');
119
+ }
120
+ });
121
+ }, error: err => {
122
+ this.toastr.error('Failed inserting paragraph: ' + err, 'ERROR');
123
+ }
124
+ });
125
+ }
126
+ });
127
+ }
128
+ deletePart(part) {
129
+ let bodyText = 'Delete paragraph ' + part.name + '?';
130
+ const eventOverride = this.documentService.isOverriddenEvent({ eventType: DocumentEventType.Delete, entityType: DocumentEventEntityType.Part });
131
+ if (eventOverride && eventOverride.confirmationMessage) {
132
+ bodyText = eventOverride.confirmationMessage;
133
+ }
134
+ const initialState = {
135
+ headerText: 'Delete Paragraph',
136
+ bodyText: bodyText,
137
+ confirmBtnLabel: 'Yes',
138
+ cancelBtnLabel: 'No'
139
+ };
140
+ let modal = this.modalService.show(ConfirmationModalComponent, { initialState, ignoreBackdropClick: true });
141
+ modal.content.confirmClicked.subscribe(() => {
142
+ this.doDeletePart(part);
143
+ });
144
+ }
145
+ doDeletePart(part) {
146
+ let clone = Object.assign({}, this.group);
147
+ if (clone.parts && clone.documentID) {
148
+ clone.parts = clone.parts.filter(keep => {
149
+ keep.id != part.id;
150
+ });
151
+ this.resequence(clone);
152
+ this.documentService.updateDocumentGroup(clone).subscribe({
153
+ next: () => {
154
+ this.documentService.deleteDocumentPart(part).subscribe({
155
+ next: () => {
156
+ this.documentService.updateDcoumentID(clone.documentID || '');
157
+ }, error: err => {
158
+ this.toastr.error('Failed deleting paragraph: ' + err, 'ERROR');
159
+ }
160
+ });
161
+ }, error: err => {
162
+ this.toastr.error('Failed updating group: ' + err, 'ERROR');
163
+ }
164
+ });
165
+ }
166
+ }
167
+ resequence(group) {
168
+ let sequence = 1;
169
+ if (group.parts) {
170
+ group.parts.forEach(part => {
171
+ part.sequence = sequence++;
172
+ });
173
+ }
174
+ }
175
+ editGroup(group) {
176
+ const initialState = {
177
+ label: 'Edit Group Attributes',
178
+ group: group
179
+ };
180
+ let modal = this.modalService.show(GroupModalComponent, { initialState, ignoreBackdropClick: true });
181
+ modal.content.onGroupSave.subscribe(updatedGroup => {
182
+ this.busy = true;
183
+ this.documentService.updateDocumentGroup(updatedGroup).subscribe(() => {
184
+ this.busy = false;
185
+ }, err => {
186
+ this.toastr.error('Failed updating group: ' + err, 'ERROR');
187
+ this.busy = false;
188
+ });
189
+ });
190
+ }
191
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentGroupComponent, deps: [{ token: i1.BsModalService }, { token: i2.ToastrService }, { token: i3.DocumentService }], target: i0.ɵɵFactoryTarget.Component });
192
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DocumentGroupComponent, selector: "oepa-document-group", inputs: { group: "group" }, outputs: { onMoveUp: "onMoveUp", onInsertAbove: "onInsertAbove", onMoveDown: "onMoveDown", onInsertBelow: "onInsertBelow", onDelete: "onDelete" }, ngImport: i0, template: "<div *ngIf=\"group\" class=\"card\">\n <div *ngIf=\"!group.isCollapsed\" class=\"row\">\n <div class=\"col-sm-10\">\n <div *ngIf=\"group.parts && group.parts.length > 0\">\n <div *ngFor=\"let p of group.parts\" class=\"row\">\n <div class=\"col-sm-12\">\n <oepa-document-part-editor [part]=\"p\" (onMoveUp)=\"movePartUp($event)\"\n (onInsertAbove)=\"insertAbovePart($event)\" (onMoveDown)=\"movePartDown($event)\"\n (onInsertBelow)=\"insertBelowPart($event)\" (onDelete)=\"deletePart($event)\">\n </oepa-document-part-editor>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-sm-2 alert alert-info\" role=\"alert\">\n <div class=\"row\">\n <div class=\"col-sm-12\">\n <button [id]=\"'deleteGroup'+group.sequence\" class=\"btn\" (click)=\"this.delete()\" tooltip=\"Delete Group\">\n <i class=\"bi bi-trash\"></i> \n </button>\n &nbsp;{{group.name || ''}}\n </div>\n <div class=\"col-sm-12\">\n <button [id]=\"'moveGroupUp'+group.sequence\" class=\"btn\" (click)=\"moveUp()\" tooltip=\"Move Group Up\">\n <i class=\"bi bi-chevron-double-up\"></i>\n </button>\n <button [id]=\"'insertaboveGroup'+group.sequence\" class=\"btn\" (click)=\"insertAbove()\" tooltip=\"Insert Group Above\">\n <i class=\"bi bi-arrow-up-circle\"></i>\n </button>\n </div>\n <div class=\"col-sm-12\">\n <button [id]=\"'moveGroupDown'+group.sequence\" class=\"btn\" (click)=\"moveDown()\" tooltip=\"Move Group Down\">\n <i class=\"bi bi-chevron-double-down\"></i>\n </button>\n <button [id]=\"'insertBelowGroup'+group.sequence\" class=\"btn\" (click)=\"insertBelow()\" tooltip=\"Insert Group Below\">\n <i class=\"bi bi-arrow-down-circle\"></i>\n </button>\n </div>\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: "directive", type: i5.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: i6.DocumentPartEditorComponent, selector: "oepa-document-part-editor", inputs: ["part", "editing"], outputs: ["partChange", "onMoveUp", "onInsertAbove", "onMoveDown", "onInsertBelow", "onDelete"] }] });
193
+ }
194
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentGroupComponent, decorators: [{
195
+ type: Component,
196
+ args: [{ selector: 'oepa-document-group', template: "<div *ngIf=\"group\" class=\"card\">\n <div *ngIf=\"!group.isCollapsed\" class=\"row\">\n <div class=\"col-sm-10\">\n <div *ngIf=\"group.parts && group.parts.length > 0\">\n <div *ngFor=\"let p of group.parts\" class=\"row\">\n <div class=\"col-sm-12\">\n <oepa-document-part-editor [part]=\"p\" (onMoveUp)=\"movePartUp($event)\"\n (onInsertAbove)=\"insertAbovePart($event)\" (onMoveDown)=\"movePartDown($event)\"\n (onInsertBelow)=\"insertBelowPart($event)\" (onDelete)=\"deletePart($event)\">\n </oepa-document-part-editor>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-sm-2 alert alert-info\" role=\"alert\">\n <div class=\"row\">\n <div class=\"col-sm-12\">\n <button [id]=\"'deleteGroup'+group.sequence\" class=\"btn\" (click)=\"this.delete()\" tooltip=\"Delete Group\">\n <i class=\"bi bi-trash\"></i> \n </button>\n &nbsp;{{group.name || ''}}\n </div>\n <div class=\"col-sm-12\">\n <button [id]=\"'moveGroupUp'+group.sequence\" class=\"btn\" (click)=\"moveUp()\" tooltip=\"Move Group Up\">\n <i class=\"bi bi-chevron-double-up\"></i>\n </button>\n <button [id]=\"'insertaboveGroup'+group.sequence\" class=\"btn\" (click)=\"insertAbove()\" tooltip=\"Insert Group Above\">\n <i class=\"bi bi-arrow-up-circle\"></i>\n </button>\n </div>\n <div class=\"col-sm-12\">\n <button [id]=\"'moveGroupDown'+group.sequence\" class=\"btn\" (click)=\"moveDown()\" tooltip=\"Move Group Down\">\n <i class=\"bi bi-chevron-double-down\"></i>\n </button>\n <button [id]=\"'insertBelowGroup'+group.sequence\" class=\"btn\" (click)=\"insertBelow()\" tooltip=\"Insert Group Below\">\n <i class=\"bi bi-arrow-down-circle\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>" }]
197
+ }], ctorParameters: () => [{ type: i1.BsModalService }, { type: i2.ToastrService }, { type: i3.DocumentService }], propDecorators: { group: [{
198
+ type: Input
199
+ }], onMoveUp: [{
200
+ type: Output
201
+ }], onInsertAbove: [{
202
+ type: Output
203
+ }], onMoveDown: [{
204
+ type: Output
205
+ }], onInsertBelow: [{
206
+ type: Output
207
+ }], onDelete: [{
208
+ type: Output
209
+ }] } });
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9kb2N1bWVudC9kb2N1bWVudC1ncm91cC9kb2N1bWVudC1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RvY3VtZW50L2RvY3VtZW50LWdyb3VwL2RvY3VtZW50LWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFeEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7Ozs7O0FBT25HLE1BQU0sT0FBTyxzQkFBc0I7SUFZYjtJQUNWO0lBQ0E7SUFiRCxLQUFLLENBQXVCO0lBRTNCLFFBQVEsR0FBdUMsSUFBSSxZQUFZLEVBQXVCLENBQUM7SUFDdkYsYUFBYSxHQUFzQyxJQUFJLFlBQVksRUFBdUIsQ0FBQztJQUMzRixVQUFVLEdBQXNDLElBQUksWUFBWSxFQUF1QixDQUFDO0lBQ3hGLGFBQWEsR0FBc0MsSUFBSSxZQUFZLEVBQXVCLENBQUM7SUFDM0YsUUFBUSxHQUFzQyxJQUFJLFlBQVksRUFBdUIsQ0FBQztJQUd6RixJQUFJLEdBQUcsS0FBSyxDQUFDO0lBRXBCLFlBQW9CLFlBQTRCLEVBQ3RDLE1BQXFCLEVBQ3JCLGVBQWdDO1FBRnRCLGlCQUFZLEdBQVosWUFBWSxDQUFn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RkFBdEIsc0JBQXNCLDBPQ2pCbkMsazhFQXlDTTs7NEZEeEJPLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxxQkFBcUI7NklBS3RCLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb3J0YWxEb2N1bWVudEdyb3VwIH0gZnJvbSAnLi4vcG9ydGFsLWRvY3VtZW50LWdyb3VwJztcbmltcG9ydCB7IFBvcnRhbERvY3VtZW50UGFydCB9IGZyb20gJy4uL3BvcnRhbC1kb2N1bWVudC1wYXJ0JztcbmltcG9ydCB7IERvY3VtZW50U2VydmljZSB9IGZyb20gJy4uL2RvY3VtZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IEdyb3VwTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9ncm91cC1tb2RhbC9ncm91cC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRG9jdW1lbnRFdmVudFR5cGUgfSBmcm9tICcuLi9kb2N1bWVudC1ldmVudC10eXBlJztcbmltcG9ydCB7IERvY3VtZW50RXZlbnRFbnRpdHlUeXBlIH0gZnJvbSAnLi4vZG9jdW1lbnQtZXZlbnQtZW50aXR5LXR5cGUnO1xuaW1wb3J0IHsgRG9jdW1lbnRFdmVudCB9IGZyb20gJy4uL2RvY3VtZW50LWV2ZW50JztcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29uZmlybWF0aW9uLW1vZGFsL2NvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLWRvY3VtZW50LWdyb3VwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RvY3VtZW50LWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnQtZ3JvdXAuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50R3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBncm91cCE6IFBvcnRhbERvY3VtZW50R3JvdXA7XG5cbiAgQE91dHB1dCgpIG9uTW92ZVVwOiAgRXZlbnRFbWl0dGVyPFBvcnRhbERvY3VtZW50R3JvdXA+ID0gbmV3IEV2ZW50RW1pdHRlcjxQb3J0YWxEb2N1bWVudEdyb3VwPigpO1xuICBAT3V0cHV0KCkgb25JbnNlcnRBYm92ZTogRXZlbnRFbWl0dGVyPFBvcnRhbERvY3VtZW50R3JvdXA+ID0gbmV3IEV2ZW50RW1pdHRlcjxQb3J0YWxEb2N1bWVudEdyb3VwPigpO1xuICBAT3V0cHV0KCkgb25Nb3ZlRG93bjogRXZlbnRFbWl0dGVyPFBvcnRhbERvY3VtZW50R3JvdXA+ID0gbmV3IEV2ZW50RW1pdHRlcjxQb3J0YWxEb2N1bWVudEdyb3VwPigpO1xuICBAT3V0cHV0KCkgb25JbnNlcnRCZWxvdzogRXZlbnRFbWl0dGVyPFBvcnRhbERvY3VtZW50R3JvdXA+ID0gbmV3IEV2ZW50RW1pdHRlcjxQb3J0YWxEb2N1bWVudEdyb3VwPigpO1xuICBAT3V0cHV0KCkgb25EZWxldGU6IEV2ZW50RW1pdHRlcjxQb3J0YWxEb2N1bWVudEdyb3VwPiA9IG5ldyBFdmVudEVtaXR0ZXI8UG9ydGFsRG9jdW1lbnRHcm91cD4oKTtcblxuXG4gIHB1YmxpYyBidXN5ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbiAgcHVibGljIG1vdmVVcCgpIHtcbiAgICB0aGlzLm9uTW92ZVVwLmVtaXQodGhpcy5ncm91cCk7XG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0QWJvdmUoKSB7XG4gICAgdGhpcy5vbkluc2VydEFib3ZlLmVtaXQodGhpcy5ncm91cCk7XG4gIH1cblxuICBwdWJsaWMgbW92ZURvd24oKSB7XG4gICAgdGhpcy5vbk1vdmVEb3duLmVtaXQodGhpcy5ncm91cCk7XG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0QmVsb3coKSB7XG4gICAgdGhpcy5vbkluc2VydEJlbG93LmVtaXQodGhpcy5ncm91cCk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKCkge1xuICAgIHRoaXMub25EZWxldGUuZW1pdCh0aGlzLmdyb3VwKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlUGFydFVwKHBhcnQ6IFBvcnRhbERvY3VtZW50UGFydCkge1xuICAgIGlmIChwYXJ0LnNlcXVlbmNlICYmIHBhcnQuc2VxdWVuY2UgPiAxKSB7XG4gICAgICBsZXQgY2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdyb3VwKTtcbiAgICAgIGlmIChjbG9uZS5wYXJ0cyAmJiBjbG9uZS5kb2N1bWVudElEKSB7XG4gICAgICAgIGNsb25lLnBhcnRzLnNwbGljZShwYXJ0LnNlcXVlbmNlIC0gMiwgMCwgY2xvbmUucGFydHMuc3BsaWNlKHBhcnQuc2VxdWVuY2UgLSAxLCAxKVswXSk7XG4gICAgICAgIHRoaXMucmVzZXF1ZW5jZShjbG9uZSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURvY3VtZW50R3JvdXAoY2xvbmUpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURjb3VtZW50SUQoY2xvbmUuZG9jdW1lbnRJRCB8fCAnJyk7XG4gICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgdXBkYXRpbmcgZ3JvdXA6ICcgKyBlcnIsICdFUlJPUicpO1xuICAgICAgICB9fSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGluc2VydEFib3ZlUGFydChwYXJ0OiBQb3J0YWxEb2N1bWVudFBhcnQpIHtcbiAgICBpZiAocGFydC5zZXF1ZW5jZSkge1xuICAgICAgbGV0IG5ld1BhcnQgPSB0aGlzLm5ld1BhcnQocGFydC5zZXF1ZW5jZSAtIDEgfHwgMSk7XG4gICAgICB0aGlzLmluc2VydFBhcnQocGFydC5zZXF1ZW5jZSAtMSwgbmV3UGFydCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1vdmVQYXJ0RG93bihwYXJ0OiBQb3J0YWxEb2N1bWVudFBhcnQpIHtcbiAgICBpZiAocGFydC5zZXF1ZW5jZSAmJiB0aGlzLmdyb3VwLnBhcnRzICYmIHBhcnQuc2VxdWVuY2UgPCB0aGlzLmdyb3VwLnBhcnRzLmxlbmd0aCkge1xuICAgICAgbGV0IGNsb25lID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ncm91cCk7XG4gICAgICBpZiAoY2xvbmUucGFydHMgJiYgY2xvbmUuZG9jdW1lbnRJRCkge1xuICAgICAgICBjbG9uZS5wYXJ0cy5zcGxpY2UocGFydC5zZXF1ZW5jZSwgMCwgY2xvbmUucGFydHMuc3BsaWNlKHBhcnQuc2VxdWVuY2UgLSAgMSwgMSlbMF0pO1xuICAgICAgICB0aGlzLnJlc2VxdWVuY2UoY2xvbmUpO1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS51cGRhdGVEb2N1bWVudEdyb3VwKGNsb25lKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS51cGRhdGVEY291bWVudElEKGNsb25lLmRvY3VtZW50SUQgfHwgJycpO1xuICAgICAgICB9LCBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignRmFpbGVkIHVwZGF0aW5nIGdyb3VwOiAnICsgZXJyLCAnRVJST1InKTtcbiAgICAgICAgfX0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbnNlcnRCZWxvd1BhcnQocGFydDogUG9ydGFsRG9jdW1lbnRQYXJ0KSB7XG4gICAgaWYgKHBhcnQuc2VxdWVuY2UpIHtcbiAgICAgIGxldCBuZXdQYXJ0ID0gdGhpcy5uZXdQYXJ0KHBhcnQuc2VxdWVuY2UgKyAxKTtcbiAgICAgIHRoaXMuaW5zZXJ0UGFydChwYXJ0LnNlcXVlbmNlLCBuZXdQYXJ0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5ld1BhcnQoc2VxdWVuY2U6IG51bWJlcikgOiBQb3J0YWxEb2N1bWVudFBhcnQge1xuICAgIHJldHVybiB7XG4gICAgICBncm91cElEOiB0aGlzLmdyb3VwLmlkLFxuICAgICAgZG9jdW1lbnRJRDogdGhpcy5ncm91cC5kb2N1bWVudElELFxuICAgICAgc2VxdWVuY2U6IHNlcXVlbmNlLFxuICAgICAgbmFtZTogJ1BhcmFncmFwaCAnICsgc2VxdWVuY2UsXG4gICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRQYXJ0KGluc2VydEluZGV4OiBudW1iZXIsIG5ld1BhcnQ6IFBvcnRhbERvY3VtZW50UGFydCkge1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIGhlYWRlclRleHQ6ICdJbnNlcnQgUGFyYWdyYXBoJyxcbiAgICAgIGJvZHlUZXh0OiAnSW5zZXJ0IG5ldyBwYXJhZ3JhcGg/J1xuICAgIH1cbiAgICBsZXQgbW9kYWwgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50LCB7aW5pdGlhbFN0YXRlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlfSk7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5jb25maXJtQ2xpY2tlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgbGV0IGNsb25lID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ncm91cCk7XG4gICAgICBpZiAoY2xvbmUucGFydHMgJiYgY2xvbmUuZG9jdW1lbnRJRCkge1xuICAgICAgICBjbG9uZS5wYXJ0cy5zcGxpY2UoaW5zZXJ0SW5kZXgsIDAsIG5ld1BhcnQpO1xuICAgICAgICB0aGlzLnJlc2VxdWVuY2UoY2xvbmUpO1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5jcmVhdGVEb2N1bWVudFBhcnQobmV3UGFydCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiBwYXJ0SUQgPT4ge1xuICAgICAgICAgIG5ld1BhcnQuaWQgPSBwYXJ0SUQ7XG4gICAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UudXBkYXRlRG9jdW1lbnRHcm91cChjbG9uZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURjb3VtZW50SUQoY2xvbmUuZG9jdW1lbnRJRCB8fCAnJyk7XG4gICAgICAgICAgfSwgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignRmFpbGVkIHVwZGF0aW5nIGdyb3VwOiAnICsgZXJyLCAnRVJST1InKTtcbiAgICAgICAgICB9fSk7XG4gICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgaW5zZXJ0aW5nIHBhcmFncmFwaDogJyArIGVyciwgJ0VSUk9SJyk7XG4gICAgICAgIH19KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVQYXJ0KHBhcnQ6IFBvcnRhbERvY3VtZW50UGFydCkge1xuICAgIGxldCBib2R5VGV4dCA9ICdEZWxldGUgcGFyYWdyYXBoICcgKyBwYXJ0Lm5hbWUgKyAnPyc7XG4gICAgY29uc3QgZXZlbnRPdmVycmlkZTogRG9jdW1lbnRFdmVudCB8IHVuZGVmaW5lZCA9IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmlzT3ZlcnJpZGRlbkV2ZW50KHtldmVudFR5cGU6IERvY3VtZW50RXZlbnRUeXBlLkRlbGV0ZSwgZW50aXR5VHlwZTogRG9jdW1lbnRFdmVudEVudGl0eVR5cGUuUGFydH0pO1xuICAgIGlmIChldmVudE92ZXJyaWRlICYmIGV2ZW50T3ZlcnJpZGUuY29uZmlybWF0aW9uTWVzc2FnZSkge1xuICAgICAgYm9keVRleHQgPSBldmVudE92ZXJyaWRlLmNvbmZpcm1hdGlvbk1lc3NhZ2U7XG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIGhlYWRlclRleHQ6ICdEZWxldGUgUGFyYWdyYXBoJyxcbiAgICAgIGJvZHlUZXh0OiBib2R5VGV4dCxcbiAgICAgIGNvbmZpcm1CdG5MYWJlbDogJ1llcycsXG4gICAgICBjYW5jZWxCdG5MYWJlbDogJ05vJ1xuICAgIH1cbiAgICBsZXQgbW9kYWwgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50LCB7aW5pdGlhbFN0YXRlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlfSk7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5jb25maXJtQ2xpY2tlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5kb0RlbGV0ZVBhcnQocGFydCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRvRGVsZXRlUGFydChwYXJ0OiBQb3J0YWxEb2N1bWVudFBhcnQpIHtcbiAgICBsZXQgY2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdyb3VwKTtcbiAgICBpZiAoY2xvbmUucGFydHMgJiYgY2xvbmUuZG9jdW1lbnRJRCkge1xuICAgICAgY2xvbmUucGFydHMgPSBjbG9uZS5wYXJ0cy5maWx0ZXIoa2VlcCA9PiB7XG4gICAgICAgIGtlZXAuaWQgIT0gcGFydC5pZDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZXNlcXVlbmNlKGNsb25lKTtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURvY3VtZW50R3JvdXAoY2xvbmUpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZGVsZXRlRG9jdW1lbnRQYXJ0KHBhcnQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURjb3VtZW50SUQoY2xvbmUuZG9jdW1lbnRJRCB8fCAnJyk7XG4gICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgZGVsZXRpbmcgcGFyYWdyYXBoOiAnICsgZXJyLCAnRVJST1InKTtcbiAgICAgICAgfX0pO1xuICAgICAgfSwgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgdXBkYXRpbmcgZ3JvdXA6ICcgKyBlcnIsICdFUlJPUicpO1xuICAgICAgfX0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXF1ZW5jZShncm91cDogUG9ydGFsRG9jdW1lbnRHcm91cCkge1xuICAgIGxldCBzZXF1ZW5jZSA9IDE7XG4gICAgaWYgKGdyb3VwLnBhcnRzKSB7XG4gICAgICBncm91cC5wYXJ0cy5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgICBwYXJ0LnNlcXVlbmNlID0gc2VxdWVuY2UrKztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlZGl0R3JvdXAoZ3JvdXA6IFBvcnRhbERvY3VtZW50R3JvdXApIHtcbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBsYWJlbDogJ0VkaXQgR3JvdXAgQXR0cmlidXRlcycsXG4gICAgICBncm91cDogZ3JvdXBcbiAgICB9XG4gICAgbGV0IG1vZGFsID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhHcm91cE1vZGFsQ29tcG9uZW50LCB7aW5pdGlhbFN0YXRlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlfSk7XG4gICAgKDxHcm91cE1vZGFsQ29tcG9uZW50Pm1vZGFsLmNvbnRlbnQpLm9uR3JvdXBTYXZlLnN1YnNjcmliZSh1cGRhdGVkR3JvdXAgPT4ge1xuICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURvY3VtZW50R3JvdXAodXBkYXRlZEdyb3VwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgdXBkYXRpbmcgZ3JvdXA6ICcgKyBlcnIsICdFUlJPUicpO1xuICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxufVxuIiwiPGRpdiAqbmdJZj1cImdyb3VwXCIgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhZ3JvdXAuaXNDb2xsYXBzZWRcIiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cC5wYXJ0cyAmJiBncm91cC5wYXJ0cy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHAgb2YgZ3JvdXAucGFydHNcIiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvZXBhLWRvY3VtZW50LXBhcnQtZWRpdG9yIFtwYXJ0XT1cInBcIiAob25Nb3ZlVXApPVwibW92ZVBhcnRVcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uSW5zZXJ0QWJvdmUpPVwiaW5zZXJ0QWJvdmVQYXJ0KCRldmVudClcIiAob25Nb3ZlRG93bik9XCJtb3ZlUGFydERvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkluc2VydEJlbG93KT1cImluc2VydEJlbG93UGFydCgkZXZlbnQpXCIgKG9uRGVsZXRlKT1cImRlbGV0ZVBhcnQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb2VwYS1kb2N1bWVudC1wYXJ0LWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yIGFsZXJ0IGFsZXJ0LWluZm9cIiByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gW2lkXT1cIidkZWxldGVHcm91cCcrZ3JvdXAuc2VxdWVuY2VcIiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJ0aGlzLmRlbGV0ZSgpXCIgdG9vbHRpcD1cIkRlbGV0ZSBHcm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktdHJhc2hcIj48L2k+IFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDt7e2dyb3VwLm5hbWUgfHwgJyd9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbaWRdPVwiJ21vdmVHcm91cFVwJytncm91cC5zZXF1ZW5jZVwiIGNsYXNzPVwiYnRuXCIgKGNsaWNrKT1cIm1vdmVVcCgpXCIgdG9vbHRpcD1cIk1vdmUgR3JvdXAgVXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNoZXZyb24tZG91YmxlLXVwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFtpZF09XCInaW5zZXJ0YWJvdmVHcm91cCcrZ3JvdXAuc2VxdWVuY2VcIiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJpbnNlcnRBYm92ZSgpXCIgdG9vbHRpcD1cIkluc2VydCBHcm91cCBBYm92ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktYXJyb3ctdXAtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFtpZF09XCInbW92ZUdyb3VwRG93bicrZ3JvdXAuc2VxdWVuY2VcIiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJtb3ZlRG93bigpXCIgdG9vbHRpcD1cIk1vdmUgR3JvdXAgRG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktY2hldnJvbi1kb3VibGUtZG93blwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbaWRdPVwiJ2luc2VydEJlbG93R3JvdXAnK2dyb3VwLnNlcXVlbmNlXCIgY2xhc3M9XCJidG5cIiAoY2xpY2spPVwiaW5zZXJ0QmVsb3coKVwiIHRvb2x0aXA9XCJJbnNlcnQgR3JvdXAgQmVsb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWFycm93LWRvd24tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuPC9kaXY+Il19
@@ -0,0 +1,19 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "../document-part-editor/document-part-editor.component";
5
+ export class DocumentPartComponent {
6
+ part;
7
+ constructor() { }
8
+ ngOnInit() {
9
+ }
10
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentPartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DocumentPartComponent, selector: "oepa-document-part", inputs: { part: "part" }, ngImport: i0, template: "<div *ngIf=\"part\">\n <oepa-document-part-editor [part]=\"part\"></oepa-document-part-editor>\n</div>\n<div *ngIf=\"part.parts && part.parts.length > 0\">\n <div *ngFor=\"let p of part.parts\">\n <oepa-document-part-editor [part]=\"p\"></oepa-document-part-editor>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.DocumentPartEditorComponent, selector: "oepa-document-part-editor", inputs: ["part", "editing"], outputs: ["partChange", "onMoveUp", "onInsertAbove", "onMoveDown", "onInsertBelow", "onDelete"] }] });
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentPartComponent, decorators: [{
14
+ type: Component,
15
+ args: [{ selector: 'oepa-document-part', template: "<div *ngIf=\"part\">\n <oepa-document-part-editor [part]=\"part\"></oepa-document-part-editor>\n</div>\n<div *ngIf=\"part.parts && part.parts.length > 0\">\n <div *ngFor=\"let p of part.parts\">\n <oepa-document-part-editor [part]=\"p\"></oepa-document-part-editor>\n </div>\n</div>\n" }]
16
+ }], ctorParameters: () => [], propDecorators: { part: [{
17
+ type: Input
18
+ }] } });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtcGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RvY3VtZW50L2RvY3VtZW50LXBhcnQvZG9jdW1lbnQtcGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2RvY3VtZW50L2RvY3VtZW50LXBhcnQvZG9jdW1lbnQtcGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVF6RCxNQUFNLE9BQU8scUJBQXFCO0lBQ3ZCLElBQUksQ0FBc0I7SUFFbkMsZ0JBQWdCLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7d0dBTlUscUJBQXFCOzRGQUFyQixxQkFBcUIsb0ZDUmxDLDhTQVFBOzs0RkRBYSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0Usb0JBQW9CO3dEQUtyQixJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvcnRhbERvY3VtZW50UGFydCB9IGZyb20gJy4uL3BvcnRhbC1kb2N1bWVudC1wYXJ0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1kb2N1bWVudC1wYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RvY3VtZW50LXBhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudC1wYXJ0LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudFBhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwYXJ0ITogUG9ydGFsRG9jdW1lbnRQYXJ0O1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gIH1cblxufVxuIiwiPGRpdiAqbmdJZj1cInBhcnRcIj5cbiAgICA8b2VwYS1kb2N1bWVudC1wYXJ0LWVkaXRvciBbcGFydF09XCJwYXJ0XCI+PC9vZXBhLWRvY3VtZW50LXBhcnQtZWRpdG9yPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwicGFydC5wYXJ0cyAmJiBwYXJ0LnBhcnRzLmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwIG9mIHBhcnQucGFydHNcIj5cbiAgICAgICAgPG9lcGEtZG9jdW1lbnQtcGFydC1lZGl0b3IgW3BhcnRdPVwicFwiPjwvb2VwYS1kb2N1bWVudC1wYXJ0LWVkaXRvcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19