@po-ui/ng-templates 18.23.0 → 19.0.0-next.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 (205) hide show
  1. package/fesm2022/po-ui-ng-templates.mjs +139 -122
  2. package/fesm2022/po-ui-ng-templates.mjs.map +1 -1
  3. package/lib/components/po-modal-password-recovery/po-modal-password-recovery-base.component.d.ts +1 -1
  4. package/lib/components/po-modal-password-recovery/po-modal-password-recovery.service.d.ts +1 -1
  5. package/lib/components/po-page-blocked-user/po-page-blocked-user-base.component.d.ts +1 -1
  6. package/lib/components/po-page-blocked-user/po-page-blocked-user.component.d.ts +1 -1
  7. package/lib/components/po-page-change-password/po-page-change-password-base.component.d.ts +1 -1
  8. package/lib/components/po-page-change-password/po-page-change-password.service.d.ts +1 -1
  9. package/lib/components/po-page-dynamic-search/po-advanced-filter/po-advanced-filter-base.component.d.ts +1 -1
  10. package/lib/components/po-page-dynamic-search/po-page-dynamic-search-base.component.d.ts +1 -1
  11. package/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.d.ts +2 -2
  12. package/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-custom-action.interface.d.ts +1 -1
  13. package/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-custom-table-action.interface.d.ts +1 -1
  14. package/lib/components/po-page-dynamic-table/po-page-dynamic-list-base.component.d.ts +2 -2
  15. package/lib/components/po-page-dynamic-table/po-page-dynamic-table.component.d.ts +2 -2
  16. package/lib/components/po-page-job-scheduler/po-page-job-scheduler-base.component.d.ts +1 -1
  17. package/lib/components/po-page-job-scheduler/po-page-job-scheduler-execution/po-page-job-scheduler-execution.component.d.ts +2 -2
  18. package/lib/components/po-page-job-scheduler/po-page-job-scheduler-parameters/po-job-scheduler-parameters-template/po-job-scheduler-parameters-template.directive.d.ts +1 -1
  19. package/lib/components/po-page-job-scheduler/po-page-job-scheduler-summary/po-page-job-scheduler-summary.component.d.ts +1 -1
  20. package/lib/components/po-page-login/po-page-login-base.component.d.ts +1 -1
  21. package/lib/components/po-page-login/po-page-login.service.d.ts +1 -1
  22. package/package.json +13 -15
  23. package/po-ui-ng-templates-19.0.0-next.0.tgz +0 -0
  24. package/schematics/ng-add/index.js +2 -2
  25. package/schematics/ng-add/index.js.map +1 -1
  26. package/schematics/ng-generate/po-page-blocked-user/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
  27. package/schematics/ng-generate/po-page-blocked-user/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
  28. package/schematics/ng-generate/po-page-blocked-user/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
  29. package/schematics/ng-generate/po-page-blocked-user/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
  30. package/schematics/ng-generate/po-page-blocked-user/index.js +1 -1
  31. package/schematics/ng-generate/po-page-blocked-user/index.js.map +1 -1
  32. package/schematics/ng-generate/po-page-change-password/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
  33. package/schematics/ng-generate/po-page-change-password/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
  34. package/schematics/ng-generate/po-page-change-password/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
  35. package/schematics/ng-generate/po-page-change-password/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
  36. package/schematics/ng-generate/po-page-change-password/index.js +1 -1
  37. package/schematics/ng-generate/po-page-change-password/index.js.map +1 -1
  38. package/schematics/ng-generate/po-page-dynamic-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
  39. package/schematics/ng-generate/po-page-dynamic-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
  40. package/schematics/ng-generate/po-page-dynamic-detail/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
  41. package/schematics/ng-generate/po-page-dynamic-detail/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
  42. package/schematics/ng-generate/po-page-dynamic-detail/index.js +1 -1
  43. package/schematics/ng-generate/po-page-dynamic-detail/index.js.map +1 -1
  44. package/schematics/ng-generate/po-page-dynamic-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
  45. package/schematics/ng-generate/po-page-dynamic-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
  46. package/schematics/ng-generate/po-page-dynamic-edit/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
  47. package/schematics/ng-generate/po-page-dynamic-edit/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
  48. package/schematics/ng-generate/po-page-dynamic-edit/index.js +1 -1
  49. package/schematics/ng-generate/po-page-dynamic-edit/index.js.map +1 -1
  50. package/schematics/ng-generate/po-page-dynamic-search/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
  51. package/schematics/ng-generate/po-page-dynamic-search/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
  52. package/schematics/ng-generate/po-page-dynamic-search/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
  53. package/schematics/ng-generate/po-page-dynamic-search/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
  54. package/schematics/ng-generate/po-page-dynamic-search/index.js +1 -1
  55. package/schematics/ng-generate/po-page-dynamic-search/index.js.map +1 -1
  56. package/schematics/ng-generate/po-page-dynamic-table/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
  57. package/schematics/ng-generate/po-page-dynamic-table/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
  58. package/schematics/ng-generate/po-page-dynamic-table/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
  59. package/schematics/ng-generate/po-page-dynamic-table/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
  60. package/schematics/ng-generate/po-page-dynamic-table/index.js +1 -1
  61. package/schematics/ng-generate/po-page-dynamic-table/index.js.map +1 -1
  62. package/schematics/ng-generate/po-page-job-scheduler/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
  63. package/schematics/ng-generate/po-page-job-scheduler/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
  64. package/schematics/ng-generate/po-page-job-scheduler/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
  65. package/schematics/ng-generate/po-page-job-scheduler/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
  66. package/schematics/ng-generate/po-page-job-scheduler/index.js +1 -1
  67. package/schematics/ng-generate/po-page-job-scheduler/index.js.map +1 -1
  68. package/schematics/ng-generate/po-page-login/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -2
  69. package/schematics/ng-generate/po-page-login/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +2 -1
  70. package/schematics/ng-generate/po-page-login/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +4 -3
  71. package/schematics/ng-generate/po-page-login/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -1
  72. package/schematics/ng-generate/po-page-login/index.js +1 -1
  73. package/schematics/ng-generate/po-page-login/index.js.map +1 -1
  74. package/esm2022/lib/components/components.module.mjs +0 -84
  75. package/esm2022/lib/components/index.mjs +0 -12
  76. package/esm2022/lib/components/po-modal-password-recovery/enums/po-modal-password-recovery-modal-content.enum.mjs +0 -17
  77. package/esm2022/lib/components/po-modal-password-recovery/enums/po-modal-password-recovery-type.enum.mjs +0 -17
  78. package/esm2022/lib/components/po-modal-password-recovery/index.mjs +0 -8
  79. package/esm2022/lib/components/po-modal-password-recovery/interfaces/po-modal-password-recovery.interface.mjs +0 -2
  80. package/esm2022/lib/components/po-modal-password-recovery/literals/i18n/po-modal-password-recovery-literals.mjs +0 -119
  81. package/esm2022/lib/components/po-modal-password-recovery/po-modal-password-recovery-base.component.mjs +0 -293
  82. package/esm2022/lib/components/po-modal-password-recovery/po-modal-password-recovery-error-message/po-modal-password-recovery-error-message.component.mjs +0 -34
  83. package/esm2022/lib/components/po-modal-password-recovery/po-modal-password-recovery.component.mjs +0 -451
  84. package/esm2022/lib/components/po-modal-password-recovery/po-modal-password-recovery.module.mjs +0 -29
  85. package/esm2022/lib/components/po-modal-password-recovery/po-modal-password-recovery.service.mjs +0 -18
  86. package/esm2022/lib/components/po-page-background/index.mjs +0 -3
  87. package/esm2022/lib/components/po-page-background/po-page-background.component.mjs +0 -191
  88. package/esm2022/lib/components/po-page-background/po-page-background.module.mjs +0 -27
  89. package/esm2022/lib/components/po-page-blocked-user/enums/po-page-blocked-user-reason.enum.mjs +0 -17
  90. package/esm2022/lib/components/po-page-blocked-user/index.mjs +0 -8
  91. package/esm2022/lib/components/po-page-blocked-user/interfaces/po-page-blocked-user-reason-params.interface.mjs +0 -2
  92. package/esm2022/lib/components/po-page-blocked-user/literals/i18n/po-page-blocked-user-literals.mjs +0 -78
  93. package/esm2022/lib/components/po-page-blocked-user/po-page-blocked-user-base.component.mjs +0 -197
  94. package/esm2022/lib/components/po-page-blocked-user/po-page-blocked-user-contacts/po-page-blocked-user-contacts.component.mjs +0 -105
  95. package/esm2022/lib/components/po-page-blocked-user/po-page-blocked-user-reason/po-page-blocked-user-reason.component.mjs +0 -107
  96. package/esm2022/lib/components/po-page-blocked-user/po-page-blocked-user.component.mjs +0 -108
  97. package/esm2022/lib/components/po-page-blocked-user/po-page-blocked-user.module.mjs +0 -29
  98. package/esm2022/lib/components/po-page-change-password/index.mjs +0 -7
  99. package/esm2022/lib/components/po-page-change-password/interfaces/po-page-change-password-recovery.interface.mjs +0 -2
  100. package/esm2022/lib/components/po-page-change-password/interfaces/po-page-change-password-requirement.interface.mjs +0 -2
  101. package/esm2022/lib/components/po-page-change-password/interfaces/po-page-change-password.interface.mjs +0 -2
  102. package/esm2022/lib/components/po-page-change-password/literals/i18n/po-page-change-password-literals.mjs +0 -79
  103. package/esm2022/lib/components/po-page-change-password/po-page-change-password-base.component.mjs +0 -300
  104. package/esm2022/lib/components/po-page-change-password/po-page-change-password.component.mjs +0 -401
  105. package/esm2022/lib/components/po-page-change-password/po-page-change-password.module.mjs +0 -30
  106. package/esm2022/lib/components/po-page-change-password/po-page-change-password.service.mjs +0 -18
  107. package/esm2022/lib/components/po-page-dynamic-detail/index.mjs +0 -10
  108. package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-actions.interface.mjs +0 -2
  109. package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-before-back.interface.mjs +0 -2
  110. package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-before-edit.interface.mjs +0 -2
  111. package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-before-remove.interface.mjs +0 -2
  112. package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-field.interface.mjs +0 -2
  113. package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-metadata.interface.mjs +0 -2
  114. package/esm2022/lib/components/po-page-dynamic-detail/interfaces/po-page-dynamic-detail-options.interface.mjs +0 -2
  115. package/esm2022/lib/components/po-page-dynamic-detail/po-page-dynamic-detail-actions.service.mjs +0 -44
  116. package/esm2022/lib/components/po-page-dynamic-detail/po-page-dynamic-detail.component.mjs +0 -546
  117. package/esm2022/lib/components/po-page-dynamic-detail/po-page-dynamic-detail.module.mjs +0 -54
  118. package/esm2022/lib/components/po-page-dynamic-edit/index.mjs +0 -11
  119. package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-actions.interface.mjs +0 -2
  120. package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-before-cancel.interface.mjs +0 -2
  121. package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-before-save-new.interface.mjs +0 -2
  122. package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-before-save.interface.mjs +0 -2
  123. package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-field.interface.mjs +0 -2
  124. package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-literals.interface.mjs +0 -2
  125. package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-metadata.interface.mjs +0 -2
  126. package/esm2022/lib/components/po-page-dynamic-edit/interfaces/po-page-dynamic-edit-options.interface.mjs +0 -2
  127. package/esm2022/lib/components/po-page-dynamic-edit/po-page-dynamic-edit-actions.service.mjs +0 -44
  128. package/esm2022/lib/components/po-page-dynamic-edit/po-page-dynamic-edit.component.mjs +0 -889
  129. package/esm2022/lib/components/po-page-dynamic-edit/po-page-dynamic-edit.module.mjs +0 -60
  130. package/esm2022/lib/components/po-page-dynamic-search/index.mjs +0 -7
  131. package/esm2022/lib/components/po-page-dynamic-search/po-advanced-filter/po-advanced-filter-base.component.mjs +0 -133
  132. package/esm2022/lib/components/po-page-dynamic-search/po-advanced-filter/po-advanced-filter-literals.interface.mjs +0 -2
  133. package/esm2022/lib/components/po-page-dynamic-search/po-advanced-filter/po-advanced-filter.component.mjs +0 -76
  134. package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search-base.component.mjs +0 -365
  135. package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search-filters.interface.mjs +0 -2
  136. package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search-literals.interface.mjs +0 -2
  137. package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search-options.interface.mjs +0 -2
  138. package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.mjs +0 -349
  139. package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search.interface.mjs +0 -2
  140. package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search.module.mjs +0 -52
  141. package/esm2022/lib/components/po-page-dynamic-table/index.mjs +0 -16
  142. package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-actions.interface.mjs +0 -2
  143. package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-before-detail.interface.mjs +0 -2
  144. package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-before-duplicate.interface.mjs +0 -2
  145. package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-before-edit.interface.mjs +0 -2
  146. package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-before-new.interface.mjs +0 -2
  147. package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-before-remove-all.interface.mjs +0 -2
  148. package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-before-remove.interface.mjs +0 -2
  149. package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-custom-action.interface.mjs +0 -2
  150. package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-custom-table-action.interface.mjs +0 -2
  151. package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-field.interface.mjs +0 -2
  152. package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-filters.interface.mjs +0 -2
  153. package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-metadata.interface.mjs +0 -2
  154. package/esm2022/lib/components/po-page-dynamic-table/interfaces/po-page-dynamic-table-options.interface.mjs +0 -2
  155. package/esm2022/lib/components/po-page-dynamic-table/po-page-dynamic-list-base.component.mjs +0 -271
  156. package/esm2022/lib/components/po-page-dynamic-table/po-page-dynamic-table-actions.service.mjs +0 -59
  157. package/esm2022/lib/components/po-page-dynamic-table/po-page-dynamic-table-literals.mjs +0 -63
  158. package/esm2022/lib/components/po-page-dynamic-table/po-page-dynamic-table.component.mjs +0 -1257
  159. package/esm2022/lib/components/po-page-dynamic-table/po-page-dynamic-table.module.mjs +0 -50
  160. package/esm2022/lib/components/po-page-job-scheduler/index.mjs +0 -6
  161. package/esm2022/lib/components/po-page-job-scheduler/interfaces/po-job-scheduler-internal.interface.mjs +0 -2
  162. package/esm2022/lib/components/po-page-job-scheduler/interfaces/po-job-scheduler.interface.mjs +0 -2
  163. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-base.component.mjs +0 -302
  164. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-execution/po-page-job-scheduler-execution.component.mjs +0 -393
  165. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-internal.mjs +0 -13
  166. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-literals.mjs +0 -195
  167. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-lookup.service.mjs +0 -22
  168. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-parameters/index.mjs +0 -2
  169. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-parameters/po-job-scheduler-parameters-template/index.mjs +0 -2
  170. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-parameters/po-job-scheduler-parameters-template/po-job-scheduler-parameters-template.directive.mjs +0 -92
  171. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-parameters/po-page-job-scheduler-parameters.component.mjs +0 -79
  172. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-summary/index.mjs +0 -2
  173. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-summary/po-job-scheduler-summary-template/index.mjs +0 -2
  174. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-summary/po-job-scheduler-summary-template/po-job-scheduler-summary-template.directive.mjs +0 -44
  175. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler-summary/po-page-job-scheduler-summary.component.mjs +0 -211
  176. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler.component.mjs +0 -418
  177. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler.module.mjs +0 -85
  178. package/esm2022/lib/components/po-page-job-scheduler/po-page-job-scheduler.service.mjs +0 -224
  179. package/esm2022/lib/components/po-page-login/enums/po-page-login-authentication-type.enum.mjs +0 -15
  180. package/esm2022/lib/components/po-page-login/index.mjs +0 -8
  181. package/esm2022/lib/components/po-page-login/interfaces/po-page-login-custom-field.interface.mjs +0 -2
  182. package/esm2022/lib/components/po-page-login/interfaces/po-page-login-literals.interface.mjs +0 -2
  183. package/esm2022/lib/components/po-page-login/interfaces/po-page-login-recovery.interface.mjs +0 -2
  184. package/esm2022/lib/components/po-page-login/interfaces/po-page-login.interface.mjs +0 -2
  185. package/esm2022/lib/components/po-page-login/po-page-login-base.component.mjs +0 -1099
  186. package/esm2022/lib/components/po-page-login/po-page-login-popover/po-page-login-popover.component.mjs +0 -137
  187. package/esm2022/lib/components/po-page-login/po-page-login.component.mjs +0 -483
  188. package/esm2022/lib/components/po-page-login/po-page-login.module.mjs +0 -31
  189. package/esm2022/lib/components/po-page-login/po-page-login.service.mjs +0 -32
  190. package/esm2022/lib/index.mjs +0 -4
  191. package/esm2022/lib/po-templates.module.mjs +0 -18
  192. package/esm2022/lib/services/index.mjs +0 -4
  193. package/esm2022/lib/services/po-page-customization/index.mjs +0 -4
  194. package/esm2022/lib/services/po-page-customization/po-page-customization.module.mjs +0 -23
  195. package/esm2022/lib/services/po-page-customization/po-page-customization.service.mjs +0 -86
  196. package/esm2022/lib/services/po-page-customization/po-page-dynamic-options.interface.mjs +0 -2
  197. package/esm2022/lib/services/po-page-dynamic/index.mjs +0 -3
  198. package/esm2022/lib/services/po-page-dynamic/po-page-dynamic-literals.interface.mjs +0 -2
  199. package/esm2022/lib/services/po-page-dynamic/po-page-dynamic.module.mjs +0 -23
  200. package/esm2022/lib/services/po-page-dynamic/po-page-dynamic.service.mjs +0 -106
  201. package/esm2022/lib/services/services.module.mjs +0 -18
  202. package/esm2022/lib/utils/util.mjs +0 -428
  203. package/esm2022/po-ui-ng-templates.mjs +0 -5
  204. package/esm2022/public-api.mjs +0 -2
  205. package/po-ui-ng-templates-18.23.0.tgz +0 -0
@@ -1,546 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { concat, EMPTY, throwError, of } from 'rxjs';
3
- import { tap, catchError, map, switchMap } from 'rxjs/operators';
4
- import { poLocaleDefault } from '@po-ui/ng-components';
5
- import { convertToBoolean, mapObjectByProperties, valuesFromObject } from '../../utils/util';
6
- import { PoPageDynamicService } from '../../services/po-page-dynamic/po-page-dynamic.service';
7
- import { PoPageDynamicDetailActionsService } from './po-page-dynamic-detail-actions.service';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/router";
10
- import * as i2 from "@po-ui/ng-components";
11
- import * as i3 from "../../services/po-page-dynamic/po-page-dynamic.service";
12
- import * as i4 from "./po-page-dynamic-detail-actions.service";
13
- import * as i5 from "./../../services/po-page-customization/po-page-customization.service";
14
- import * as i6 from "@angular/common";
15
- function PoPageDynamicDetailComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {
16
- i0.ɵɵelementContainer(0);
17
- } }
18
- function PoPageDynamicDetailComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
19
- i0.ɵɵelementStart(0, "po-widget");
20
- i0.ɵɵelement(1, "po-icon", 4);
21
- i0.ɵɵelementStart(2, "span", 5);
22
- i0.ɵɵtext(3);
23
- i0.ɵɵelementEnd()();
24
- } if (rf & 2) {
25
- const ctx_r0 = i0.ɵɵnextContext();
26
- i0.ɵɵadvance(3);
27
- i0.ɵɵtextInterpolate1(" ", ctx_r0.literals.registerNotFound, " ");
28
- } }
29
- function PoPageDynamicDetailComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) {
30
- i0.ɵɵelement(0, "po-dynamic-view", 6);
31
- } if (rf & 2) {
32
- const ctx_r0 = i0.ɵɵnextContext();
33
- i0.ɵɵproperty("p-fields", ctx_r0.fields)("p-value", ctx_r0.model);
34
- } }
35
- export const poPageDynamicDetailLiteralsDefault = {
36
- en: {
37
- pageActionEdit: 'Edit',
38
- pageActionRemove: 'Delete',
39
- pageActionBack: 'Back',
40
- confirmRemoveTitle: 'Confirm delete',
41
- confirmRemoveMessage: 'Are you sure you want to delete this record? You can not undo this action.',
42
- removeNotificationSuccess: 'Item deleted successfully.',
43
- registerNotFound: 'Register not found.'
44
- },
45
- es: {
46
- pageActionEdit: 'Editar',
47
- pageActionRemove: 'Borrar',
48
- pageActionBack: 'Regreso',
49
- confirmRemoveTitle: 'Confirmar la exclusión',
50
- confirmRemoveMessage: '¿Está seguro de que desea eliminar este registro? No puede deshacer esta acción.',
51
- removeNotificationSuccess: 'Elemento eliminado con éxito.',
52
- registerNotFound: 'Registro no encontrado.'
53
- },
54
- pt: {
55
- pageActionEdit: 'Editar',
56
- pageActionRemove: 'Excluir',
57
- pageActionBack: 'Voltar',
58
- confirmRemoveTitle: 'Confirmar exclusão',
59
- confirmRemoveMessage: 'Tem certeza de que deseja excluir esse registro? Você não poderá desfazer essa ação.',
60
- removeNotificationSuccess: 'Item excluído com sucesso.',
61
- registerNotFound: 'Registro não encontrado.'
62
- },
63
- ru: {
64
- pageActionEdit: 'Редактировать',
65
- pageActionRemove: 'Удалить',
66
- pageActionBack: 'Назад',
67
- confirmRemoveTitle: 'Подтверждение удаления',
68
- confirmRemoveMessage: 'Вы уверены, что хотите удалить эту запись? Вы не можете отменить это действие.',
69
- removeNotificationSuccess: 'Элемент успешно удален.',
70
- registerNotFound: 'Запись не найдена.'
71
- }
72
- };
73
- /**
74
- * @description
75
- *
76
- * O `po-page-dynamic-detail` é uma página que serve para exibir registros em detalhes,
77
- * o mesmo também suporta metadados conforme especificado na documentação.
78
- *
79
- *
80
- * ### Utilização via rota
81
- *
82
- * Ao utilizar as rotas para inicializar o template, o `page-dynamic-detail` disponibiliza propriedades que devem ser fornecidas no arquivo de configuração de rotas da aplicação, para
83
- * poder especificar o endpoint dos dados e dos metadados que serão carregados na inicialização.
84
- *
85
- * Exemplo de utilização:
86
- *
87
- * Arquivo de configuração de rotas da aplicação: `app-routing.module.ts`
88
- * ```
89
- * const routes: Routes = [
90
- * {
91
- * path: 'people/:id',
92
- * component: PoPageDynamicDetailComponent,
93
- * data: {
94
- * serviceApi: 'http://localhost:3000/v1/people', // endpoint dos dados
95
- * serviceMetadataApi: 'http://localhost:3000/v1/metadata', // endpoint dos metadados utilizando o método HTTP Get
96
- * serviceLoadApi: 'http://localhost:3000/load-metadata' // endpoint de customizações dos metadados utilizando o método HTTP Post
97
- * }
98
- * },
99
- * {
100
- * path: 'home',
101
- * component: HomeExampleComponent
102
- * }
103
- * ];
104
- *
105
- * ```
106
- * O componente primeiro irá carregar o metadado da rota definida na propriedade serviceMetadataApi
107
- * e depois irá buscar da rota definida na propriedade serviceLoadApi.
108
- *
109
- * A requisição dos metadados é feita na inicialização do template para buscar os metadados da página passando o
110
- * tipo do metadado esperado e a versão cacheada pelo browser.
111
- *
112
- * > Caso o servidor retornar um erro ao recuperar os metadados, serão repassados os metadados salvos em cache,
113
- * se o cache não existir será disparada uma notificação.
114
- *
115
- * O formato esperado na resposta da requisição está especificado na interface
116
- * [PoPageDynamicDetailMetadata](/documentation/po-page-dynamic-detail#po-page-dynamic-detail-metadata). Por exemplo:
117
- *
118
- * ```
119
- * {
120
- * version: 1,
121
- * title: 'Person Detail',
122
- * fields: [
123
- * { property: 'id', key: true, disabled: true },
124
- * { property: 'status' },
125
- * { property: 'name' },
126
- * { property: 'nickname' },
127
- * { property: 'birthdate', label: 'Birth date' },
128
- * { property: 'genre' },
129
- * { property: 'city' },
130
- * { property: 'country' }
131
- * ]
132
- * }
133
- * ```
134
- *
135
- * > Caso o endpoint dos metadados não seja especificado, será feito uma requisição utilizando o `serviceApi` da seguinte forma:
136
- * ```
137
- * GET {end-point}/metadata?type=detail&version={version}
138
- * ```
139
- *
140
- * @example
141
- *
142
- * <example name="po-page-dynamic-detail-user" title="PO Page Dynamic Detail User">
143
- * <file name="sample-po-page-dynamic-detail-user/sample-po-page-dynamic-detail-user.component.html"> </file>
144
- * <file name="sample-po-page-dynamic-detail-user/sample-po-page-dynamic-detail-user.component.ts"> </file>
145
- * </example>
146
- */
147
- export class PoPageDynamicDetailComponent {
148
- router;
149
- activatedRoute;
150
- poNotification;
151
- poDialogService;
152
- poPageDynamicService;
153
- poPageDynamicDetailActionsService;
154
- poPageCustomizationService;
155
- /** Objeto com propriedades do breadcrumb. */
156
- breadcrumb = { items: [] };
157
- /**
158
- * Função ou serviço que será executado na inicialização do componente.
159
- *
160
- * A propriedade aceita os seguintes tipos:
161
- * - `string`: *Endpoint* usado pelo componente para requisição via `POST`.
162
- * - `function`: Método que será executado.
163
- *
164
- * O retorno desta função deve ser do tipo `PoPageDynamicDetailOptions`,
165
- * onde o usuário poderá customizar novos campos, breadcrumb, title e actions
166
- *
167
- * Por exemplo:
168
- *
169
- * ```
170
- * getPageOptions(): PoPageDynamicDetailOptions {
171
- * return {
172
- * actions:
173
- * { new: 'new', edit: 'edit/:id', remove: true },
174
- * fields: [
175
- * { property: 'idCard', gridColumns: 6 }
176
- * ]
177
- * };
178
- * }
179
- *
180
- * ```
181
- * Para referenciar a sua função utilize a propriedade `bind`, por exemplo:
182
- * ```
183
- * [p-load]="onLoadOptions.bind(this)"
184
- * ```
185
- */
186
- onLoad;
187
- /** Título da página. */
188
- title;
189
- /**
190
- * @description
191
- *
192
- * Endpoint usado pelo template para requisição do recurso que serão exibido.
193
- *
194
- * Caso a ação `remove` estiver configurada, será feito uma requisição de exclusão nesse mesmo endpoint passando os campos
195
- * setados como `key: true`.
196
- *
197
- * > `DELETE {end-point}/{keys}`
198
- *
199
- * ```
200
- * <po-page-dynamic-detail
201
- * [p-actions]="{ remove: '/' }"
202
- * [p-fields]="[ { property: 'id', key: true } ]"
203
- * p-service="/api/po-samples/v1/people"
204
- * ...>
205
- * </po-page-dynamic-detail>
206
- * ```
207
- *
208
- * Resquisição disparada, onde a propriedade `id` é igual a 2:
209
- *
210
- * ```
211
- * DELETE /api/po-samples/v1/people/2 HTTP/1.1
212
- * Host: localhost:4000
213
- * Connection: keep-alive
214
- * Accept: application/json, text/plain
215
- * ...
216
- * ```
217
- *
218
- * > Caso esteja usando metadados com o template, será disparado uma requisição na inicialização do template para buscar
219
- * > os metadados da página passando o tipo do metadado esperado e a versão cacheada pelo browser.
220
- * >
221
- * > `GET {end-point}/metadata?type=detail&version={version}`
222
- */
223
- serviceApi;
224
- literals;
225
- model = {};
226
- subscriptions = [];
227
- _actions = {};
228
- _autoRouter = false;
229
- _duplicates = [];
230
- _fields = [];
231
- _keys = [];
232
- _pageActions = [];
233
- /**
234
- * @optional
235
- *
236
- * @description
237
- *
238
- * Define as ações da página de acordo com a interface `PoPageDynamicDetailActions`.
239
- */
240
- set actions(value) {
241
- this._actions = this.isObject(value) ? value : {};
242
- this._pageActions = this.getPageActions(this._actions);
243
- }
244
- get actions() {
245
- return { ...this._actions };
246
- }
247
- /**
248
- * @todo Validar rotas na mão pois se existir uma rota '**' o catch do navigation não funciona.
249
- *
250
- * @optional
251
- *
252
- * @description
253
- *
254
- * Cria automaticamente as rotas de edição (novo/duplicate) e detalhes caso as ações
255
- * estejam definidas nas ações.
256
- *
257
- * > Para o correto funcionamento não pode haver nenhum rota coringa (`**`) especificada.
258
- *
259
- * @default false
260
- */
261
- set autoRouter(value) {
262
- this._autoRouter = convertToBoolean(value);
263
- }
264
- get autoRouter() {
265
- return this._autoRouter;
266
- }
267
- /** Lista dos campos exibidos na página. */
268
- set fields(value) {
269
- this._fields = Array.isArray(value) ? [...value] : [];
270
- this._keys = this.getKeysByFields(this.fields);
271
- this._duplicates = this.getDuplicatesByFields(this.fields);
272
- }
273
- get fields() {
274
- return this._fields;
275
- }
276
- constructor(router, activatedRoute, poNotification, poDialogService, poPageDynamicService, poPageDynamicDetailActionsService, poPageCustomizationService, languageService) {
277
- this.router = router;
278
- this.activatedRoute = activatedRoute;
279
- this.poNotification = poNotification;
280
- this.poDialogService = poDialogService;
281
- this.poPageDynamicService = poPageDynamicService;
282
- this.poPageDynamicDetailActionsService = poPageDynamicDetailActionsService;
283
- this.poPageCustomizationService = poPageCustomizationService;
284
- const language = languageService.getShortLanguage();
285
- this.literals = {
286
- ...poPageDynamicDetailLiteralsDefault[poLocaleDefault],
287
- ...poPageDynamicDetailLiteralsDefault[language]
288
- };
289
- }
290
- ngOnInit() {
291
- this.loadDataFromAPI();
292
- }
293
- ngOnDestroy() {
294
- if (this.subscriptions) {
295
- this.subscriptions.forEach(subscription => {
296
- subscription.unsubscribe();
297
- });
298
- }
299
- }
300
- get duplicates() {
301
- return [...this._duplicates];
302
- }
303
- get keys() {
304
- return [...this._keys];
305
- }
306
- get pageActions() {
307
- return [...this._pageActions];
308
- }
309
- remove(actionRemove, actionBeforeRemove) {
310
- const uniqueKey = this.formatUniqueKey(this.model);
311
- this.subscriptions.push(this.poPageDynamicDetailActionsService
312
- .beforeRemove(actionBeforeRemove, uniqueKey, { ...this.model })
313
- .pipe(switchMap((beforeRemoveResult) => {
314
- const newRemoveAction = beforeRemoveResult?.newUrl ?? actionRemove;
315
- const allowAction = beforeRemoveResult?.allowAction ?? true;
316
- if (!allowAction) {
317
- return of({});
318
- }
319
- if (typeof newRemoveAction === 'string') {
320
- return this.executeRemove(newRemoveAction, uniqueKey);
321
- }
322
- else {
323
- newRemoveAction(uniqueKey, { ...this.model });
324
- return EMPTY;
325
- }
326
- }))
327
- .subscribe());
328
- }
329
- confirmRemove(actionRemove, actionBeforeRemove) {
330
- const confirmOptions = {
331
- title: this.literals.confirmRemoveTitle,
332
- message: this.literals.confirmRemoveMessage,
333
- confirm: this.remove.bind(this, actionRemove, actionBeforeRemove)
334
- };
335
- this.poDialogService.confirm(confirmOptions);
336
- }
337
- executeRemove(path, uniqueKey) {
338
- return this.poPageDynamicService.deleteResource(uniqueKey).pipe(map(() => {
339
- this.poNotification.success(this.literals.removeNotificationSuccess);
340
- this.navigateTo({ path: path });
341
- }));
342
- }
343
- formatUniqueKey(item) {
344
- const keys = mapObjectByProperties(item, this.keys);
345
- return valuesFromObject(keys).join('|');
346
- }
347
- goBack(actionBack) {
348
- this.subscriptions.push(this.poPageDynamicDetailActionsService
349
- .beforeBack(this.actions.beforeBack)
350
- .subscribe((beforeBackResult) => this.executeBackAction(actionBack, beforeBackResult?.allowAction, beforeBackResult?.newUrl)));
351
- }
352
- executeBackAction(actionBack, allowAction, newUrl) {
353
- const isAllowedAction = typeof allowAction === 'boolean' ? allowAction : true;
354
- if (isAllowedAction) {
355
- if (actionBack === undefined || typeof actionBack === 'boolean') {
356
- return window.history.back();
357
- }
358
- if (typeof actionBack === 'string' || newUrl) {
359
- return this.router.navigate([newUrl || actionBack]);
360
- }
361
- return actionBack();
362
- }
363
- }
364
- loadData(id) {
365
- return this.poPageDynamicService.getResource(id).pipe(tap(response => {
366
- if (!response) {
367
- this.setUndefinedToModelAndActions();
368
- }
369
- else {
370
- this.model = response;
371
- }
372
- }), catchError(error => {
373
- this.setUndefinedToModelAndActions();
374
- return throwError(error);
375
- }));
376
- }
377
- setUndefinedToModelAndActions() {
378
- this.model = undefined;
379
- this.actions = undefined;
380
- }
381
- getMetadata(serviceApiFromRoute, onLoad) {
382
- if (serviceApiFromRoute) {
383
- return this.poPageDynamicService.getMetadata('detail').pipe(tap(response => {
384
- this.autoRouter = response.autoRouter || this.autoRouter;
385
- this.actions = response.actions || this.actions;
386
- this.breadcrumb = response.breadcrumb || this.breadcrumb;
387
- this.fields = response.fields || this.fields;
388
- this.title = response.title || this.title;
389
- }), switchMap(() => this.loadOptionsOnInitialize(onLoad)));
390
- }
391
- return this.loadOptionsOnInitialize(onLoad);
392
- }
393
- // @todo Validar rotas na mão pois se existir uma rota '**' o catch do navigation não funciona.
394
- navigateTo(route, forceStopAutoRouter = false) {
395
- this.router.navigate([route.url || route.path], { queryParams: route.params }).catch(() => {
396
- if (forceStopAutoRouter || !this.autoRouter) {
397
- return;
398
- }
399
- this.router.config.unshift({
400
- path: route.path,
401
- component: route.component,
402
- data: { serviceApi: this.serviceApi, autoRouter: true }
403
- });
404
- this.navigateTo(route, true);
405
- });
406
- }
407
- openEdit(action) {
408
- const id = this.formatUniqueKey(this.model);
409
- this.subscriptions.push(this.poPageDynamicDetailActionsService
410
- .beforeEdit(this.actions.beforeEdit, id, this.model)
411
- .pipe(switchMap((beforeEditResult) => this.executeEditAction(action, beforeEditResult, id)))
412
- .subscribe());
413
- }
414
- executeEditAction(action, beforeEditResult, id) {
415
- const newEditAction = beforeEditResult?.newUrl ?? action;
416
- const allowAction = beforeEditResult?.allowAction ?? true;
417
- if (!allowAction) {
418
- return of({});
419
- }
420
- if (typeof newEditAction === 'string') {
421
- this.openEditUrl(newEditAction);
422
- }
423
- else {
424
- newEditAction(id, { ...this.model });
425
- }
426
- return EMPTY;
427
- }
428
- openEditUrl(path) {
429
- const url = this.resolveUrl(this.model, path);
430
- this.navigateTo({ path, url });
431
- }
432
- resolveUrl(item, path) {
433
- const uniqueKey = this.formatUniqueKey(item);
434
- return path.replace(/:id/g, uniqueKey);
435
- }
436
- getPageActions(actions = {}) {
437
- const pageActions = [];
438
- if (actions.edit) {
439
- pageActions.push({ label: this.literals.pageActionEdit, action: this.openEdit.bind(this, actions.edit) });
440
- }
441
- if (actions.remove) {
442
- pageActions.push({
443
- label: this.literals.pageActionRemove,
444
- action: this.confirmRemove.bind(this, actions.remove, this.actions.beforeRemove),
445
- type: 'danger'
446
- });
447
- }
448
- if (actions.back === undefined || actions.back) {
449
- pageActions.push({ label: this.literals.pageActionBack, action: this.goBack.bind(this, actions.back) });
450
- }
451
- return pageActions;
452
- }
453
- getKeysByFields(fields = []) {
454
- return fields.filter(field => field.key === true).map(field => field.property);
455
- }
456
- getDuplicatesByFields(fields = []) {
457
- return fields.filter(field => field.duplicate === true).map(field => field.property);
458
- }
459
- isObject(value) {
460
- return !!value && typeof value === 'object' && !Array.isArray(value);
461
- }
462
- loadDataFromAPI() {
463
- const { serviceApi: serviceApiFromRoute, serviceMetadataApi, serviceLoadApi } = this.activatedRoute.snapshot.data;
464
- const { id } = this.activatedRoute.snapshot.params;
465
- const onLoad = serviceLoadApi || this.onLoad;
466
- this.serviceApi = serviceApiFromRoute || this.serviceApi;
467
- this.poPageDynamicService.configServiceApi({ endpoint: this.serviceApi, metadata: serviceMetadataApi });
468
- const metadata$ = this.getMetadata(serviceApiFromRoute, onLoad);
469
- const data$ = this.loadData(id);
470
- this.subscriptions.push(concat(metadata$, data$).subscribe());
471
- }
472
- loadOptionsOnInitialize(onLoad) {
473
- if (onLoad) {
474
- return this.getPoDynamicPageOptions(onLoad).pipe(tap(responsePoOption => this.poPageCustomizationService.changeOriginalOptionsToNewOptions(this, responsePoOption)));
475
- }
476
- return EMPTY;
477
- }
478
- getPoDynamicPageOptions(onLoad) {
479
- const originalOption = {
480
- fields: this.fields,
481
- actions: this.actions,
482
- breadcrumb: this.breadcrumb,
483
- title: this.title
484
- };
485
- const pageOptionSchema = {
486
- schema: [
487
- {
488
- nameProp: 'fields',
489
- merge: true,
490
- keyForMerge: 'property'
491
- },
492
- {
493
- nameProp: 'actions',
494
- merge: true
495
- },
496
- {
497
- nameProp: 'breadcrumb'
498
- },
499
- {
500
- nameProp: 'title'
501
- }
502
- ]
503
- };
504
- return this.poPageCustomizationService.getCustomOptions(onLoad, originalOption, pageOptionSchema);
505
- }
506
- static ɵfac = function PoPageDynamicDetailComponent_Factory(t) { return new (t || PoPageDynamicDetailComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.PoNotificationService), i0.ɵɵdirectiveInject(i2.PoDialogService), i0.ɵɵdirectiveInject(i3.PoPageDynamicService), i0.ɵɵdirectiveInject(i4.PoPageDynamicDetailActionsService), i0.ɵɵdirectiveInject(i5.PoPageCustomizationService), i0.ɵɵdirectiveInject(i2.PoLanguageService)); };
507
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoPageDynamicDetailComponent, selectors: [["po-page-dynamic-detail"]], inputs: { breadcrumb: [0, "p-breadcrumb", "breadcrumb"], onLoad: [0, "p-load", "onLoad"], title: [0, "p-title", "title"], serviceApi: [0, "p-service-api", "serviceApi"], actions: [0, "p-actions", "actions"], autoRouter: [0, "p-auto-router", "autoRouter"], fields: [0, "p-fields", "fields"] }, features: [i0.ɵɵProvidersFeature([PoPageDynamicService, PoPageDynamicDetailActionsService])], decls: 6, vars: 6, consts: [["registerNotFoundTemplate", ""], ["viewFieldsTemplate", ""], [3, "p-actions", "p-breadcrumb", "p-title"], [4, "ngIf", "ngIfThen", "ngIfElse"], ["p-icon", "ICON_INFO"], [1, "po-font-text-large"], [3, "p-fields", "p-value"]], template: function PoPageDynamicDetailComponent_Template(rf, ctx) { if (rf & 1) {
508
- i0.ɵɵelementStart(0, "po-page-default", 2);
509
- i0.ɵɵtemplate(1, PoPageDynamicDetailComponent_ng_container_1_Template, 1, 0, "ng-container", 3);
510
- i0.ɵɵelementEnd();
511
- i0.ɵɵtemplate(2, PoPageDynamicDetailComponent_ng_template_2_Template, 4, 1, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(4, PoPageDynamicDetailComponent_ng_template_4_Template, 1, 2, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
512
- } if (rf & 2) {
513
- const registerNotFoundTemplate_r2 = i0.ɵɵreference(3);
514
- const viewFieldsTemplate_r3 = i0.ɵɵreference(5);
515
- i0.ɵɵproperty("p-actions", ctx.pageActions)("p-breadcrumb", ctx.breadcrumb)("p-title", ctx.title);
516
- i0.ɵɵadvance();
517
- i0.ɵɵproperty("ngIf", ctx.model)("ngIfThen", viewFieldsTemplate_r3)("ngIfElse", registerNotFoundTemplate_r2);
518
- } }, dependencies: [i6.NgIf, i2.PoDynamicViewComponent, i2.PoIconComponent, i2.PoPageDefaultComponent, i2.PoWidgetComponent], encapsulation: 2 });
519
- }
520
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoPageDynamicDetailComponent, [{
521
- type: Component,
522
- args: [{ selector: 'po-page-dynamic-detail', providers: [PoPageDynamicService, PoPageDynamicDetailActionsService], template: "<po-page-default [p-actions]=\"pageActions\" [p-breadcrumb]=\"breadcrumb\" [p-title]=\"title\">\n <ng-container *ngIf=\"model; then viewFieldsTemplate; else registerNotFoundTemplate\"> </ng-container>\n</po-page-default>\n\n<ng-template #registerNotFoundTemplate>\n <po-widget>\n <po-icon p-icon=\"ICON_INFO\"></po-icon>\n <span class=\"po-font-text-large\">\n {{ literals.registerNotFound }}\n </span>\n </po-widget>\n</ng-template>\n\n<ng-template #viewFieldsTemplate>\n <po-dynamic-view [p-fields]=\"fields\" [p-value]=\"model\"> </po-dynamic-view>\n</ng-template>\n" }]
523
- }], () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.PoNotificationService }, { type: i2.PoDialogService }, { type: i3.PoPageDynamicService }, { type: i4.PoPageDynamicDetailActionsService }, { type: i5.PoPageCustomizationService }, { type: i2.PoLanguageService }], { breadcrumb: [{
524
- type: Input,
525
- args: ['p-breadcrumb']
526
- }], onLoad: [{
527
- type: Input,
528
- args: ['p-load']
529
- }], title: [{
530
- type: Input,
531
- args: ['p-title']
532
- }], serviceApi: [{
533
- type: Input,
534
- args: ['p-service-api']
535
- }], actions: [{
536
- type: Input,
537
- args: ['p-actions']
538
- }], autoRouter: [{
539
- type: Input,
540
- args: ['p-auto-router']
541
- }], fields: [{
542
- type: Input,
543
- args: ['p-fields']
544
- }] }); })();
545
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PoPageDynamicDetailComponent, { className: "PoPageDynamicDetailComponent", filePath: "lib/components/po-page-dynamic-detail/po-page-dynamic-detail.component.ts", lineNumber: 151 }); })();
546
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwvcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwvcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHcEUsT0FBTyxFQUFnQixNQUFNLEVBQUUsS0FBSyxFQUFjLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFPTCxlQUFlLEVBQ2hCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJN0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDOUYsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7OztJQ3BCM0Ysd0JBQW9HOzs7SUFJcEcsaUNBQVc7SUFDVCw2QkFBc0M7SUFDdEMsK0JBQWlDO0lBQy9CLFlBQ0Y7SUFDRixBQURFLGlCQUFPLEVBQ0c7OztJQUZSLGVBQ0Y7SUFERSxpRUFDRjs7O0lBS0YscUNBQTBFOzs7SUFBckMsQUFBcEIsd0NBQW1CLHlCQUFr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LDRCQUE0Qjs2REFBNUIsNEJBQTRCLGlYQUY1QixDQUFDLG9CQUFvQixFQUFFLGlDQUFpQyxDQUFDO1lDcEp0RSwwQ0FBeUY7WUFDdkYsK0ZBQW9GO1lBQ3RGLGlCQUFrQjtZQVdsQixBQVRBLDhIQUF1QyxpSEFTTjs7OztZQWJzQyxBQUE1QixBQUExQiwyQ0FBeUIsZ0NBQTRCLHNCQUFrQjtZQUN2RSxjQUFhO1lBQXlCLEFBQXpCLEFBQWIsZ0NBQWEsbUNBQXlCLHlDQUE2Qjs7O2lGRHFKdkUsNEJBQTRCO2NBTHhDLFNBQVM7MkJBQ0Usd0JBQXdCLGFBRXZCLENBQUMsb0JBQW9CLEVBQUUsaUNBQWlDLENBQUM7a1NBSTdDLFVBQVU7a0JBQWhDLEtBQUs7bUJBQUMsY0FBYztZQStCSixNQUFNO2tCQUF0QixLQUFLO21CQUFDLFFBQVE7WUFHRyxLQUFLO2tCQUF0QixLQUFLO21CQUFDLFNBQVM7WUFvQ1EsVUFBVTtrQkFBakMsS0FBSzttQkFBQyxlQUFlO1lBcUJFLE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQXdCVSxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWU7WUFTQyxNQUFNO2tCQUE1QixLQUFLO21CQUFDLFVBQVU7O2tGQTlITiw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGUsIFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGNvbmNhdCwgRU1QVFksIE9ic2VydmFibGUsIHRocm93RXJyb3IsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAsIGNhdGNoRXJyb3IsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBQb0JyZWFkY3J1bWIsXG4gIFBvRGlhbG9nQ29uZmlybU9wdGlvbnMsXG4gIFBvRGlhbG9nU2VydmljZSxcbiAgUG9MYW5ndWFnZVNlcnZpY2UsXG4gIFBvTm90aWZpY2F0aW9uU2VydmljZSxcbiAgUG9QYWdlQWN0aW9uLFxuICBwb0xvY2FsZURlZmF1bHRcbn0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sZWFuLCBtYXBPYmplY3RCeVByb3BlcnRpZXMsIHZhbHVlc0Zyb21PYmplY3QgfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcblxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWRldGFpbC1hY3Rpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRGV0YWlsRmllbGQgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWRldGFpbC1maWVsZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWR5bmFtaWMvcG8tcGFnZS1keW5hbWljLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9wby1wYWdlLWR5bmFtaWMtZGV0YWlsLWFjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRGV0YWlsT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtZGV0YWlsLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWN1c3RvbWl6YXRpb24vcG8tcGFnZS1jdXN0b21pemF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY09wdGlvbnNTY2hlbWEgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL3BvLXBhZ2UtY3VzdG9taXphdGlvbi9wby1wYWdlLWR5bmFtaWMtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbE1ldGFEYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwtbWV0YWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNEZXRhaWxCZWZvcmVCYWNrIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwtYmVmb3JlLWJhY2suaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNEZXRhaWxCZWZvcmVSZW1vdmUgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLWRldGFpbC1iZWZvcmUtcmVtb3ZlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRGV0YWlsQmVmb3JlRWRpdCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtZGV0YWlsLWJlZm9yZS1lZGl0LmludGVyZmFjZSc7XG5cbnR5cGUgVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvbiA9IHN0cmluZyB8ICgoKSA9PiBQb1BhZ2VEeW5hbWljRGV0YWlsT3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCBwb1BhZ2VEeW5hbWljRGV0YWlsTGl0ZXJhbHNEZWZhdWx0ID0ge1xuICBlbjoge1xuICAgIHBhZ2VBY3Rpb25FZGl0OiAnRWRpdCcsXG4gICAgcGFnZUFjdGlvblJlbW92ZTogJ0RlbGV0ZScsXG4gICAgcGFnZUFjdGlvbkJhY2s6ICdCYWNrJyxcbiAgICBjb25maXJtUmVtb3ZlVGl0bGU6ICdDb25maXJtIGRlbGV0ZScsXG4gICAgY29uZmlybVJlbW92ZU1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPyBZb3UgY2FuIG5vdCB1bmRvIHRoaXMgYWN0aW9uLicsXG4gICAgcmVtb3ZlTm90aWZpY2F0aW9uU3VjY2VzczogJ0l0ZW0gZGVsZXRlZCBzdWNjZXNzZnVsbHkuJyxcbiAgICByZWdpc3Rlck5vdEZvdW5kOiAnUmVnaXN0ZXIgbm90IGZvdW5kLidcbiAgfSxcbiAgZXM6IHtcbiAgICBwYWdlQWN0aW9uRWRpdDogJ0VkaXRhcicsXG4gICAgcGFnZUFjdGlvblJlbW92ZTogJ0JvcnJhcicsXG4gICAgcGFnZUFjdGlvbkJhY2s6ICdSZWdyZXNvJyxcbiAgICBjb25maXJtUmVtb3ZlVGl0bGU6ICdDb25maXJtYXIgbGEgZXhjbHVzacOzbicsXG4gICAgY29uZmlybVJlbW92ZU1lc3NhZ2U6ICfCv0VzdMOhIHNlZ3VybyBkZSBxdWUgZGVzZWEgZWxpbWluYXIgZXN0ZSByZWdpc3Rybz8gTm8gcHVlZGUgZGVzaGFjZXIgZXN0YSBhY2Npw7NuLicsXG4gICAgcmVtb3ZlTm90aWZpY2F0aW9uU3VjY2VzczogJ0VsZW1lbnRvIGVsaW1pbmFkbyBjb24gw6l4aXRvLicsXG4gICAgcmVnaXN0ZXJOb3RGb3VuZDogJ1JlZ2lzdHJvIG5vIGVuY29udHJhZG8uJ1xuICB9LFxuICBwdDoge1xuICAgIHBhZ2VBY3Rpb25FZGl0OiAnRWRpdGFyJyxcbiAgICBwYWdlQWN0aW9uUmVtb3ZlOiAnRXhjbHVpcicsXG4gICAgcGFnZUFjdGlvbkJhY2s6ICdWb2x0YXInLFxuICAgIGNvbmZpcm1SZW1vdmVUaXRsZTogJ0NvbmZpcm1hciBleGNsdXPDo28nLFxuICAgIGNvbmZpcm1SZW1vdmVNZXNzYWdlOiAnVGVtIGNlcnRlemEgZGUgcXVlIGRlc2VqYSBleGNsdWlyIGVzc2UgcmVnaXN0cm8/IFZvY8OqIG7Do28gcG9kZXLDoSBkZXNmYXplciBlc3NhIGHDp8Ojby4nLFxuICAgIHJlbW92ZU5vdGlmaWNhdGlvblN1Y2Nlc3M6ICdJdGVtIGV4Y2x1w61kbyBjb20gc3VjZXNzby4nLFxuICAgIHJlZ2lzdGVyTm90Rm91bmQ6ICdSZWdpc3RybyBuw6NvIGVuY29udHJhZG8uJ1xuICB9LFxuICBydToge1xuICAgIHBhZ2VBY3Rpb25FZGl0OiAn0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YwnLFxuICAgIHBhZ2VBY3Rpb25SZW1vdmU6ICfQo9C00LDQu9C40YLRjCcsXG4gICAgcGFnZUFjdGlvbkJhY2s6ICfQndCw0LfQsNC0JyxcbiAgICBjb25maXJtUmVtb3ZlVGl0bGU6ICfQn9C+0LTRgtCy0LXRgNC20LTQtdC90LjQtSDRg9C00LDQu9C10L3QuNGPJyxcbiAgICBjb25maXJtUmVtb3ZlTWVzc2FnZTogJ9CS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0Y3RgtGDINC30LDQv9C40YHRjD8gINCS0Ysg0L3QtSDQvNC+0LbQtdGC0LUg0L7RgtC80LXQvdC40YLRjCDRjdGC0L4g0LTQtdC50YHRgtCy0LjQtS4nLFxuICAgIHJlbW92ZU5vdGlmaWNhdGlvblN1Y2Nlc3M6ICfQrdC70LXQvNC10L3RgiDRg9GB0L/QtdGI0L3QviDRg9C00LDQu9C10L0uJyxcbiAgICByZWdpc3Rlck5vdEZvdW5kOiAn0JfQsNC/0LjRgdGMINC90LUg0L3QsNC50LTQtdC90LAuJ1xuICB9XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gYHBvLXBhZ2UtZHluYW1pYy1kZXRhaWxgIMOpIHVtYSBww6FnaW5hIHF1ZSBzZXJ2ZSBwYXJhIGV4aWJpciByZWdpc3Ryb3MgZW0gZGV0YWxoZXMsXG4gKiBvIG1lc21vIHRhbWLDqW0gc3Vwb3J0YSBtZXRhZGFkb3MgY29uZm9ybWUgZXNwZWNpZmljYWRvIG5hIGRvY3VtZW50YcOnw6NvLlxuICpcbiAqXG4gKiAjIyMgVXRpbGl6YcOnw6NvIHZpYSByb3RhXG4gKlxuICogQW8gdXRpbGl6YXIgYXMgcm90YXMgcGFyYSBpbmljaWFsaXphciBvIHRlbXBsYXRlLCBvIGBwYWdlLWR5bmFtaWMtZGV0YWlsYCBkaXNwb25pYmlsaXphIHByb3ByaWVkYWRlcyBxdWUgZGV2ZW0gc2VyIGZvcm5lY2lkYXMgbm8gYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyBkZSByb3RhcyBkYSBhcGxpY2HDp8OjbywgcGFyYVxuICogcG9kZXIgZXNwZWNpZmljYXIgbyBlbmRwb2ludCBkb3MgZGFkb3MgZSBkb3MgbWV0YWRhZG9zIHF1ZSBzZXLDo28gY2FycmVnYWRvcyBuYSBpbmljaWFsaXphw6fDo28uXG4gKlxuICogRXhlbXBsbyBkZSB1dGlsaXphw6fDo286XG4gKlxuICogQXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyBkZSByb3RhcyBkYSBhcGxpY2HDp8OjbzogYGFwcC1yb3V0aW5nLm1vZHVsZS50c2BcbiAqIGBgYFxuICogY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiB7XG4gKiAgIHBhdGg6ICdwZW9wbGUvOmlkJyxcbiAqICAgY29tcG9uZW50OiBQb1BhZ2VEeW5hbWljRGV0YWlsQ29tcG9uZW50LFxuICogICBkYXRhOiB7XG4gKiAgICAgc2VydmljZUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9wZW9wbGUnLCAvLyBlbmRwb2ludCBkb3MgZGFkb3NcbiAqICAgICBzZXJ2aWNlTWV0YWRhdGFBcGk6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvdjEvbWV0YWRhdGEnLCAvLyBlbmRwb2ludCBkb3MgbWV0YWRhZG9zIHV0aWxpemFuZG8gbyBtw6l0b2RvIEhUVFAgR2V0XG4gKiAgICAgc2VydmljZUxvYWRBcGk6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvbG9hZC1tZXRhZGF0YScgLy8gZW5kcG9pbnQgZGUgY3VzdG9taXphw6fDtWVzIGRvcyBtZXRhZGFkb3MgdXRpbGl6YW5kbyBvIG3DqXRvZG8gSFRUUCBQb3N0XG4gKiAgIH1cbiAqICB9LFxuICogIHtcbiAqICAgcGF0aDogJ2hvbWUnLFxuICogICBjb21wb25lbnQ6IEhvbWVFeGFtcGxlQ29tcG9uZW50XG4gKiAgfVxuICogXTtcbiAqXG4gKiBgYGBcbiAqIE8gY29tcG9uZW50ZSBwcmltZWlybyBpcsOhIGNhcnJlZ2FyIG8gbWV0YWRhZG8gZGEgcm90YSBkZWZpbmlkYSBuYSBwcm9wcmllZGFkZSBzZXJ2aWNlTWV0YWRhdGFBcGlcbiAqIGUgZGVwb2lzIGlyw6EgYnVzY2FyIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZUxvYWRBcGkuXG4gKlxuICogQSByZXF1aXNpw6fDo28gZG9zIG1ldGFkYWRvcyDDqSBmZWl0YSBuYSBpbmljaWFsaXphw6fDo28gZG8gdGVtcGxhdGUgcGFyYSBidXNjYXIgb3MgbWV0YWRhZG9zIGRhIHDDoWdpbmEgcGFzc2FuZG8gb1xuICogdGlwbyBkbyBtZXRhZGFkbyBlc3BlcmFkbyBlIGEgdmVyc8OjbyBjYWNoZWFkYSBwZWxvIGJyb3dzZXIuXG4gKlxuICogPiBDYXNvIG8gc2Vydmlkb3IgcmV0b3JuYXIgdW0gZXJybyBhbyByZWN1cGVyYXIgb3MgbWV0YWRhZG9zLCBzZXLDo28gcmVwYXNzYWRvcyBvcyBtZXRhZGFkb3Mgc2Fsdm9zIGVtIGNhY2hlLFxuICogc2UgbyBjYWNoZSBuw6NvIGV4aXN0aXIgc2Vyw6EgZGlzcGFyYWRhIHVtYSBub3RpZmljYcOnw6NvLlxuICpcbiAqIE8gZm9ybWF0byBlc3BlcmFkbyBuYSByZXNwb3N0YSBkYSByZXF1aXNpw6fDo28gZXN0w6EgZXNwZWNpZmljYWRvIG5hIGludGVyZmFjZVxuICogW1BvUGFnZUR5bmFtaWNEZXRhaWxNZXRhZGF0YV0oL2RvY3VtZW50YXRpb24vcG8tcGFnZS1keW5hbWljLWRldGFpbCNwby1wYWdlLWR5bmFtaWMtZGV0YWlsLW1ldGFkYXRhKS4gUG9yIGV4ZW1wbG86XG4gKlxuICogYGBgXG4gKiAge1xuICogICB2ZXJzaW9uOiAxLFxuICogICB0aXRsZTogJ1BlcnNvbiBEZXRhaWwnLFxuICogICBmaWVsZHM6IFtcbiAqICAgICB7IHByb3BlcnR5OiAnaWQnLCBrZXk6IHRydWUsIGRpc2FibGVkOiB0cnVlIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ3N0YXR1cycgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnbmFtZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnbmlja25hbWUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2JpcnRoZGF0ZScsIGxhYmVsOiAnQmlydGggZGF0ZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnZ2VucmUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2NpdHknIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2NvdW50cnknIH1cbiAqICAgXVxuICogfVxuICogYGBgXG4gKlxuICogPiBDYXNvIG8gZW5kcG9pbnQgZG9zIG1ldGFkYWRvcyBuw6NvIHNlamEgZXNwZWNpZmljYWRvLCBzZXLDoSBmZWl0byB1bWEgcmVxdWlzacOnw6NvIHV0aWxpemFuZG8gbyBgc2VydmljZUFwaWAgZGEgc2VndWludGUgZm9ybWE6XG4gKiBgYGBcbiAqIEdFVCB7ZW5kLXBvaW50fS9tZXRhZGF0YT90eXBlPWRldGFpbCZ2ZXJzaW9uPXt2ZXJzaW9ufVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tcGFnZS1keW5hbWljLWRldGFpbC11c2VyXCIgdGl0bGU9XCJQTyBQYWdlIER5bmFtaWMgRGV0YWlsIFVzZXJcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy1kZXRhaWwtdXNlci9zYW1wbGUtcG8tcGFnZS1keW5hbWljLWRldGFpbC11c2VyLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy1kZXRhaWwtdXNlci9zYW1wbGUtcG8tcGFnZS1keW5hbWljLWRldGFpbC11c2VyLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1BvUGFnZUR5bmFtaWNTZXJ2aWNlLCBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1NlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFBvUGFnZUR5bmFtaWNEZXRhaWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBPYmpldG8gY29tIHByb3ByaWVkYWRlcyBkbyBicmVhZGNydW1iLiAqL1xuICBASW5wdXQoJ3AtYnJlYWRjcnVtYicpIGJyZWFkY3J1bWI/OiBQb0JyZWFkY3J1bWIgPSB7IGl0ZW1zOiBbXSB9O1xuXG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBvdSBzZXJ2acOnbyBxdWUgc2Vyw6EgZXhlY3V0YWRvIG5hIGluaWNpYWxpemHDp8OjbyBkbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBBIHByb3ByaWVkYWRlIGFjZWl0YSBvcyBzZWd1aW50ZXMgdGlwb3M6XG4gICAqIC0gYHN0cmluZ2A6ICpFbmRwb2ludCogdXNhZG8gcGVsbyBjb21wb25lbnRlIHBhcmEgcmVxdWlzacOnw6NvIHZpYSBgUE9TVGAuXG4gICAqIC0gYGZ1bmN0aW9uYDogTcOpdG9kbyBxdWUgc2Vyw6EgZXhlY3V0YWRvLlxuICAgKlxuICAgKiBPIHJldG9ybm8gZGVzdGEgZnVuw6fDo28gZGV2ZSBzZXIgZG8gdGlwbyBgUG9QYWdlRHluYW1pY0RldGFpbE9wdGlvbnNgLFxuICAgKiBvbmRlIG8gdXN1w6FyaW8gcG9kZXLDoSBjdXN0b21pemFyIG5vdm9zIGNhbXBvcywgYnJlYWRjcnVtYiwgdGl0bGUgZSBhY3Rpb25zXG4gICAqXG4gICAqIFBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGBcbiAgICogZ2V0UGFnZU9wdGlvbnMoKTogUG9QYWdlRHluYW1pY0RldGFpbE9wdGlvbnMge1xuICAgKiByZXR1cm4ge1xuICAgKiAgIGFjdGlvbnM6XG4gICAqICAgICB7IG5ldzogJ25ldycsIGVkaXQ6ICdlZGl0LzppZCcsIHJlbW92ZTogdHJ1ZSB9LFxuICAgKiAgIGZpZWxkczogW1xuICAgKiAgICAgeyBwcm9wZXJ0eTogJ2lkQ2FyZCcsIGdyaWRDb2x1bW5zOiA2IH1cbiAgICogICBdXG4gICAqIH07XG4gICAqIH1cbiAgICpcbiAgICogYGBgXG4gICAqIFBhcmEgcmVmZXJlbmNpYXIgYSBzdWEgZnVuw6fDo28gdXRpbGl6ZSBhIHByb3ByaWVkYWRlIGBiaW5kYCwgcG9yIGV4ZW1wbG86XG4gICAqIGBgYFxuICAgKiAgW3AtbG9hZF09XCJvbkxvYWRPcHRpb25zLmJpbmQodGhpcylcIlxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgncC1sb2FkJykgb25Mb2FkOiBzdHJpbmcgfCAoKCkgPT4gUG9QYWdlRHluYW1pY0RldGFpbE9wdGlvbnMpO1xuXG4gIC8qKiBUw610dWxvIGRhIHDDoWdpbmEuICovXG4gIEBJbnB1dCgncC10aXRsZScpIHRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFbmRwb2ludCB1c2FkbyBwZWxvIHRlbXBsYXRlIHBhcmEgcmVxdWlzacOnw6NvIGRvIHJlY3Vyc28gcXVlIHNlcsOjbyBleGliaWRvLlxuICAgKlxuICAgKiBDYXNvIGEgYcOnw6NvIGByZW1vdmVgIGVzdGl2ZXIgY29uZmlndXJhZGEsIHNlcsOhIGZlaXRvIHVtYSByZXF1aXNpw6fDo28gZGUgZXhjbHVzw6NvIG5lc3NlIG1lc21vIGVuZHBvaW50IHBhc3NhbmRvIG9zIGNhbXBvc1xuICAgKiBzZXRhZG9zIGNvbW8gYGtleTogdHJ1ZWAuXG4gICAqXG4gICAqID4gYERFTEVURSB7ZW5kLXBvaW50fS97a2V5c31gXG4gICAqXG4gICAqIGBgYFxuICAgKiAgPHBvLXBhZ2UtZHluYW1pYy1kZXRhaWxcbiAgICogICAgW3AtYWN0aW9uc109XCJ7IHJlbW92ZTogJy8nIH1cIlxuICAgKiAgICBbcC1maWVsZHNdPVwiWyB7IHByb3BlcnR5OiAnaWQnLCBrZXk6IHRydWUgfSBdXCJcbiAgICogICAgcC1zZXJ2aWNlPVwiL2FwaS9wby1zYW1wbGVzL3YxL3Blb3BsZVwiXG4gICAqICAgIC4uLj5cbiAgICogIDwvcG8tcGFnZS1keW5hbWljLWRldGFpbD5cbiAgICogYGBgXG4gICAqXG4gICAqIFJlc3F1aXNpw6fDo28gZGlzcGFyYWRhLCBvbmRlIGEgcHJvcHJpZWRhZGUgYGlkYCDDqSBpZ3VhbCBhIDI6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgREVMRVRFIC9hcGkvcG8tc2FtcGxlcy92MS9wZW9wbGUvMiBIVFRQLzEuMVxuICAgKiAgSG9zdDogbG9jYWxob3N0OjQwMDBcbiAgICogIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAgICogIEFjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpblxuICAgKiAgLi4uXG4gICAqIGBgYFxuICAgKlxuICAgKiA+IENhc28gZXN0ZWphIHVzYW5kbyBtZXRhZGFkb3MgY29tIG8gdGVtcGxhdGUsIHNlcsOhIGRpc3BhcmFkbyB1bWEgcmVxdWlzacOnw6NvIG5hIGluaWNpYWxpemHDp8OjbyBkbyB0ZW1wbGF0ZSBwYXJhIGJ1c2NhclxuICAgKiA+IG9zIG1ldGFkYWRvcyBkYSBww6FnaW5hIHBhc3NhbmRvIG8gdGlwbyBkbyBtZXRhZGFkbyBlc3BlcmFkbyBlIGEgdmVyc8OjbyBjYWNoZWFkYSBwZWxvIGJyb3dzZXIuXG4gICAqID5cbiAgICogPiBgR0VUIHtlbmQtcG9pbnR9L21ldGFkYXRhP3R5cGU9ZGV0YWlsJnZlcnNpb249e3ZlcnNpb259YFxuICAgKi9cbiAgQElucHV0KCdwLXNlcnZpY2UtYXBpJykgc2VydmljZUFwaTogc3RyaW5nO1xuXG4gIGxpdGVyYWxzO1xuICBtb2RlbDogYW55ID0ge307XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgcHJpdmF0ZSBfYWN0aW9uczogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnMgPSB7fTtcbiAgcHJpdmF0ZSBfYXV0b1JvdXRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9kdXBsaWNhdGVzOiBBcnJheTxhbnk+ID0gW107XG4gIHByaXZhdGUgX2ZpZWxkczogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIF9rZXlzOiBBcnJheTxhbnk+ID0gW107XG4gIHByaXZhdGUgX3BhZ2VBY3Rpb25zOiBBcnJheTxQb1BhZ2VBY3Rpb24+ID0gW107XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGFzIGHDp8O1ZXMgZGEgcMOhZ2luYSBkZSBhY29yZG8gY29tIGEgaW50ZXJmYWNlIGBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc2AuXG4gICAqL1xuICBASW5wdXQoJ3AtYWN0aW9ucycpIHNldCBhY3Rpb25zKHZhbHVlOiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9ucykge1xuICAgIHRoaXMuX2FjdGlvbnMgPSB0aGlzLmlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge307XG5cbiAgICB0aGlzLl9wYWdlQWN0aW9ucyA9IHRoaXMuZ2V0UGFnZUFjdGlvbnModGhpcy5fYWN0aW9ucyk7XG4gIH1cblxuICBnZXQgYWN0aW9ucygpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9hY3Rpb25zIH07XG4gIH1cblxuICAvKipcbiAgICogQHRvZG8gVmFsaWRhciByb3RhcyBuYSBtw6NvIHBvaXMgc2UgZXhpc3RpciB1bWEgcm90YSAnKionIG8gY2F0Y2ggZG8gbmF2aWdhdGlvbiBuw6NvIGZ1bmNpb25hLlxuICAgKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIENyaWEgYXV0b21hdGljYW1lbnRlIGFzIHJvdGFzIGRlIGVkacOnw6NvIChub3ZvL2R1cGxpY2F0ZSkgZSBkZXRhbGhlcyBjYXNvIGFzIGHDp8O1ZXNcbiAgICogZXN0ZWphbSBkZWZpbmlkYXMgbmFzIGHDp8O1ZXMuXG4gICAqXG4gICAqID4gUGFyYSBvIGNvcnJldG8gZnVuY2lvbmFtZW50byBuw6NvIHBvZGUgaGF2ZXIgbmVuaHVtIHJvdGEgY29yaW5nYSAoYCoqYCkgZXNwZWNpZmljYWRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCdwLWF1dG8tcm91dGVyJykgc2V0IGF1dG9Sb3V0ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hdXRvUm91dGVyID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgYXV0b1JvdXRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b1JvdXRlcjtcbiAgfVxuXG4gIC8qKiBMaXN0YSBkb3MgY2FtcG9zIGV4aWJpZG9zIG5hIHDDoWdpbmEuICovXG4gIEBJbnB1dCgncC1maWVsZHMnKSBzZXQgZmllbGRzKHZhbHVlOiBBcnJheTxQb1BhZ2VEeW5hbWljRGV0YWlsRmllbGQ+KSB7XG4gICAgdGhpcy5fZmllbGRzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogW107XG5cbiAgICB0aGlzLl9rZXlzID0gdGhpcy5nZXRLZXlzQnlGaWVsZHModGhpcy5maWVsZHMpO1xuICAgIHRoaXMuX2R1cGxpY2F0ZXMgPSB0aGlzLmdldER1cGxpY2F0ZXNCeUZpZWxkcyh0aGlzLmZpZWxkcyk7XG4gIH1cblxuICBnZXQgZmllbGRzKCk6IEFycmF5PFBvUGFnZUR5bmFtaWNEZXRhaWxGaWVsZD4ge1xuICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcG9Ob3RpZmljYXRpb246IFBvTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHBvRGlhbG9nU2VydmljZTogUG9EaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9QYWdlRHluYW1pY1NlcnZpY2U6IFBvUGFnZUR5bmFtaWNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNTZXJ2aWNlOiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZTogUG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZVxuICApIHtcbiAgICBjb25zdCBsYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XG5cbiAgICB0aGlzLmxpdGVyYWxzID0ge1xuICAgICAgLi4ucG9QYWdlRHluYW1pY0RldGFpbExpdGVyYWxzRGVmYXVsdFtwb0xvY2FsZURlZmF1bHRdLFxuICAgICAgLi4ucG9QYWdlRHluYW1pY0RldGFpbExpdGVyYWxzRGVmYXVsdFtsYW5ndWFnZV1cbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRGF0YUZyb21BUEkoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGR1cGxpY2F0ZXMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9kdXBsaWNhdGVzXTtcbiAgfVxuXG4gIGdldCBrZXlzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5fa2V5c107XG4gIH1cblxuICBnZXQgcGFnZUFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9wYWdlQWN0aW9uc107XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZShcbiAgICBhY3Rpb25SZW1vdmU6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydyZW1vdmUnXSxcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmU/OiBQb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1snYmVmb3JlUmVtb3ZlJ11cbiAgKSB7XG4gICAgY29uc3QgdW5pcXVlS2V5ID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkodGhpcy5tb2RlbCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVSZW1vdmUoYWN0aW9uQmVmb3JlUmVtb3ZlLCB1bmlxdWVLZXksIHsgLi4udGhpcy5tb2RlbCB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKGJlZm9yZVJlbW92ZVJlc3VsdDogUG9QYWdlRHluYW1pY0RldGFpbEJlZm9yZVJlbW92ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3UmVtb3ZlQWN0aW9uID0gYmVmb3JlUmVtb3ZlUmVzdWx0Py5uZXdVcmwgPz8gYWN0aW9uUmVtb3ZlO1xuICAgICAgICAgICAgY29uc3QgYWxsb3dBY3Rpb24gPSBiZWZvcmVSZW1vdmVSZXN1bHQ/LmFsbG93QWN0aW9uID8/IHRydWU7XG5cbiAgICAgICAgICAgIGlmICghYWxsb3dBY3Rpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuZXdSZW1vdmVBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZW1vdmUobmV3UmVtb3ZlQWN0aW9uLCB1bmlxdWVLZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3UmVtb3ZlQWN0aW9uKHVuaXF1ZUtleSwgeyAuLi50aGlzLm1vZGVsIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maXJtUmVtb3ZlKFxuICAgIGFjdGlvblJlbW92ZTogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNbJ3JlbW92ZSddLFxuICAgIGFjdGlvbkJlZm9yZVJlbW92ZTogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNbJ2JlZm9yZVJlbW92ZSddXG4gICkge1xuICAgIGNvbnN0IGNvbmZpcm1PcHRpb25zOiBQb0RpYWxvZ0NvbmZpcm1PcHRpb25zID0ge1xuICAgICAgdGl0bGU6IHRoaXMubGl0ZXJhbHMuY29uZmlybVJlbW92ZVRpdGxlLFxuICAgICAgbWVzc2FnZTogdGhpcy5saXRlcmFscy5jb25maXJtUmVtb3ZlTWVzc2FnZSxcbiAgICAgIGNvbmZpcm06IHRoaXMucmVtb3ZlLmJpbmQodGhpcywgYWN0aW9uUmVtb3ZlLCBhY3Rpb25CZWZvcmVSZW1vdmUpXG4gICAgfTtcblxuICAgIHRoaXMucG9EaWFsb2dTZXJ2aWNlLmNvbmZpcm0oY29uZmlybU9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlUmVtb3ZlKHBhdGgsIHVuaXF1ZUtleTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZGVsZXRlUmVzb3VyY2UodW5pcXVlS2V5KS5waXBlKFxuICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5zdWNjZXNzKHRoaXMubGl0ZXJhbHMucmVtb3ZlTm90aWZpY2F0aW9uU3VjY2Vzcyk7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IHBhdGggfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFVuaXF1ZUtleShpdGVtKSB7XG4gICAgY29uc3Qga2V5cyA9IG1hcE9iamVjdEJ5UHJvcGVydGllcyhpdGVtLCB0aGlzLmtleXMpO1xuXG4gICAgcmV0dXJuIHZhbHVlc0Zyb21PYmplY3Qoa2V5cykuam9pbignfCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnb0JhY2soYWN0aW9uQmFjazogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNbJ2JhY2snXSkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljRGV0YWlsQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZUJhY2sodGhpcy5hY3Rpb25zLmJlZm9yZUJhY2spXG4gICAgICAgIC5zdWJzY3JpYmUoKGJlZm9yZUJhY2tSZXN1bHQ6IFBvUGFnZUR5bmFtaWNEZXRhaWxCZWZvcmVCYWNrKSA9PlxuICAgICAgICAgIHRoaXMuZXhlY3V0ZUJhY2tBY3Rpb24oYWN0aW9uQmFjaywgYmVmb3JlQmFja1Jlc3VsdD8uYWxsb3dBY3Rpb24sIGJlZm9yZUJhY2tSZXN1bHQ/Lm5ld1VybClcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVCYWNrQWN0aW9uKGFjdGlvbkJhY2s6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydiYWNrJ10sIGFsbG93QWN0aW9uPywgbmV3VXJsPzogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNBbGxvd2VkQWN0aW9uID0gdHlwZW9mIGFsbG93QWN0aW9uID09PSAnYm9vbGVhbicgPyBhbGxvd0FjdGlvbiA6IHRydWU7XG5cbiAgICBpZiAoaXNBbGxvd2VkQWN0aW9uKSB7XG4gICAgICBpZiAoYWN0aW9uQmFjayA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBhY3Rpb25CYWNrID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBhY3Rpb25CYWNrID09PSAnc3RyaW5nJyB8fCBuZXdVcmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuZXdVcmwgfHwgYWN0aW9uQmFja10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWN0aW9uQmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5nZXRSZXNvdXJjZShpZCkucGlwZShcbiAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICB0aGlzLnNldFVuZGVmaW5lZFRvTW9kZWxBbmRBY3Rpb25zKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tb2RlbCA9IHJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLnNldFVuZGVmaW5lZFRvTW9kZWxBbmRBY3Rpb25zKCk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VW5kZWZpbmVkVG9Nb2RlbEFuZEFjdGlvbnMoKSB7XG4gICAgdGhpcy5tb2RlbCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFjdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldE1ldGFkYXRhKFxuICAgIHNlcnZpY2VBcGlGcm9tUm91dGU6IHN0cmluZyxcbiAgICBvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb25cbiAgKTogT2JzZXJ2YWJsZTxQb1BhZ2VEeW5hbWljRGV0YWlsTWV0YURhdGE+IHtcbiAgICBpZiAoc2VydmljZUFwaUZyb21Sb3V0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZ2V0TWV0YWRhdGE8UG9QYWdlRHluYW1pY0RldGFpbE1ldGFEYXRhPignZGV0YWlsJykucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICB0aGlzLmF1dG9Sb3V0ZXIgPSByZXNwb25zZS5hdXRvUm91dGVyIHx8IHRoaXMuYXV0b1JvdXRlcjtcbiAgICAgICAgICB0aGlzLmFjdGlvbnMgPSByZXNwb25zZS5hY3Rpb25zIHx8IHRoaXMuYWN0aW9ucztcbiAgICAgICAgICB0aGlzLmJyZWFkY3J1bWIgPSByZXNwb25zZS5icmVhZGNydW1iIHx8IHRoaXMuYnJlYWRjcnVtYjtcbiAgICAgICAgICB0aGlzLmZpZWxkcyA9IHJlc3BvbnNlLmZpZWxkcyB8fCB0aGlzLmZpZWxkcztcbiAgICAgICAgICB0aGlzLnRpdGxlID0gcmVzcG9uc2UudGl0bGUgfHwgdGhpcy50aXRsZTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWRPcHRpb25zT25Jbml0aWFsaXplKG9uTG9hZCkpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxvYWRPcHRpb25zT25Jbml0aWFsaXplKG9uTG9hZCk7XG4gIH1cblxuICAvLyBAdG9kbyBWYWxpZGFyIHJvdGFzIG5hIG3Do28gcG9pcyBzZSBleGlzdGlyIHVtYSByb3RhICcqKicgbyBjYXRjaCBkbyBuYXZpZ2F0aW9uIG7Do28gZnVuY2lvbmEuXG4gIHByaXZhdGUgbmF2aWdhdGVUbyhcbiAgICByb3V0ZTogeyBwYXRoOiBzdHJpbmc7IGNvbXBvbmVudD87IHVybD86IHN0cmluZzsgcGFyYW1zPzogYW55IH0sXG4gICAgZm9yY2VTdG9wQXV0b1JvdXRlcjogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZS51cmwgfHwgcm91dGUucGF0aF0sIHsgcXVlcnlQYXJhbXM6IHJvdXRlLnBhcmFtcyB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBpZiAoZm9yY2VTdG9wQXV0b1JvdXRlciB8fCAhdGhpcy5hdXRvUm91dGVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yb3V0ZXIuY29uZmlnLnVuc2hpZnQoPFJvdXRlPntcbiAgICAgICAgcGF0aDogcm91dGUucGF0aCxcbiAgICAgICAgY29tcG9uZW50OiByb3V0ZS5jb21wb25lbnQsXG4gICAgICAgIGRhdGE6IHsgc2VydmljZUFwaTogdGhpcy5zZXJ2aWNlQXBpLCBhdXRvUm91dGVyOiB0cnVlIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm5hdmlnYXRlVG8ocm91dGUsIHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRWRpdChhY3Rpb246IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zWydlZGl0J10pIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KHRoaXMubW9kZWwpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlRWRpdCh0aGlzLmFjdGlvbnMuYmVmb3JlRWRpdCwgaWQsIHRoaXMubW9kZWwpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoYmVmb3JlRWRpdFJlc3VsdDogUG9QYWdlRHluYW1pY0RldGFpbEJlZm9yZUVkaXQpID0+XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVFZGl0QWN0aW9uKGFjdGlvbiwgYmVmb3JlRWRpdFJlc3VsdCwgaWQpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVFZGl0QWN0aW9uKFxuICAgIGFjdGlvbjogUG9QYWdlRHluYW1pY0RldGFpbEFjdGlvbnNbJ2VkaXQnXSxcbiAgICBiZWZvcmVFZGl0UmVzdWx0OiBQb1BhZ2VEeW5hbWljRGV0YWlsQmVmb3JlRWRpdCxcbiAgICBpZDogYW55XG4gICkge1xuICAgIGNvbnN0IG5ld0VkaXRBY3Rpb24gPSBiZWZvcmVFZGl0UmVzdWx0Py5uZXdVcmwgPz8gYWN0aW9uO1xuICAgIGNvbnN0IGFsbG93QWN0aW9uID0gYmVmb3JlRWRpdFJlc3VsdD8uYWxsb3dBY3Rpb24gPz8gdHJ1ZTtcblxuICAgIGlmICghYWxsb3dBY3Rpb24pIHtcbiAgICAgIHJldHVybiBvZih7fSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdFZGl0QWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5vcGVuRWRpdFVybChuZXdFZGl0QWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RWRpdEFjdGlvbihpZCwgeyAuLi50aGlzLm1vZGVsIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBFTVBUWTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkVkaXRVcmwocGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5yZXNvbHZlVXJsKHRoaXMubW9kZWwsIHBhdGgpO1xuICAgIHRoaXMubmF2aWdhdGVUbyh7IHBhdGgsIHVybCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVVybChpdGVtOiBhbnksIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuXG4gICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvOmlkL2csIHVuaXF1ZUtleSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBhZ2VBY3Rpb25zKGFjdGlvbnM6IFBvUGFnZUR5bmFtaWNEZXRhaWxBY3Rpb25zID0ge30pOiBBcnJheTxQb1BhZ2VBY3Rpb24+IHtcbiAgICBjb25zdCBwYWdlQWN0aW9ucyA9IFtdO1xuXG4gICAgaWYgKGFjdGlvbnMuZWRpdCkge1xuICAgICAgcGFnZUFjdGlvbnMucHVzaCh7IGxhYmVsOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb25FZGl0LCBhY3Rpb246IHRoaXMub3BlbkVkaXQuYmluZCh0aGlzLCBhY3Rpb25zLmVkaXQpIH0pO1xuICAgIH1cblxuICAgIGlmIChhY3Rpb25zLnJlbW92ZSkge1xuICAgICAgcGFnZUFjdGlvbnMucHVzaCh7XG4gICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb25SZW1vdmUsXG4gICAgICAgIGFjdGlvbjogdGhpcy5jb25maXJtUmVtb3ZlLmJpbmQodGhpcywgYWN0aW9ucy5yZW1vdmUsIHRoaXMuYWN0aW9ucy5iZWZvcmVSZW1vdmUpLFxuICAgICAgICB0eXBlOiAnZGFuZ2VyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbnMuYmFjayA9PT0gdW5kZWZpbmVkIHx8IGFjdGlvbnMuYmFjaykge1xuICAgICAgcGFnZUFjdGlvbnMucHVzaCh7IGxhYmVsOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb25CYWNrLCBhY3Rpb246IHRoaXMuZ29CYWNrLmJpbmQodGhpcywgYWN0aW9ucy5iYWNrKSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFnZUFjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGdldEtleXNCeUZpZWxkcyhmaWVsZHM6IEFycmF5PGFueT4gPSBbXSkge1xuICAgIHJldHVybiBmaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmtleSA9PT0gdHJ1ZSkubWFwKGZpZWxkID0+IGZpZWxkLnByb3BlcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHVwbGljYXRlc0J5RmllbGRzKGZpZWxkczogQXJyYXk8YW55PiA9IFtdKSB7XG4gICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQuZHVwbGljYXRlID09PSB0cnVlKS5tYXAoZmllbGQgPT4gZmllbGQucHJvcGVydHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRnJvbUFQSSgpIHtcbiAgICBjb25zdCB7IHNlcnZpY2VBcGk6IHNlcnZpY2VBcGlGcm9tUm91dGUsIHNlcnZpY2VNZXRhZGF0YUFwaSwgc2VydmljZUxvYWRBcGkgfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTtcbiAgICBjb25zdCB7IGlkIH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtcztcblxuICAgIGNvbnN0IG9uTG9hZCA9IHNlcnZpY2VMb2FkQXBpIHx8IHRoaXMub25Mb2FkO1xuICAgIHRoaXMuc2VydmljZUFwaSA9IHNlcnZpY2VBcGlGcm9tUm91dGUgfHwgdGhpcy5zZXJ2aWNlQXBpO1xuXG4gICAgdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5jb25maWdTZXJ2aWNlQXBpKHsgZW5kcG9pbnQ6IHRoaXMuc2VydmljZUFwaSwgbWV0YWRhdGE6IHNlcnZpY2VNZXRhZGF0YUFwaSB9KTtcblxuICAgIGNvbnN0IG1ldGFkYXRhJCA9IHRoaXMuZ2V0TWV0YWRhdGEoc2VydmljZUFwaUZyb21Sb3V0ZSwgb25Mb2FkKTtcbiAgICBjb25zdCBkYXRhJCA9IHRoaXMubG9hZERhdGEoaWQpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goY29uY2F0KG1ldGFkYXRhJCwgZGF0YSQpLnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uKSB7XG4gICAgaWYgKG9uTG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9EeW5hbWljUGFnZU9wdGlvbnMob25Mb2FkKS5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2VQb09wdGlvbiA9PlxuICAgICAgICAgIHRoaXMucG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UuY2hhbmdlT3JpZ2luYWxPcHRpb25zVG9OZXdPcHRpb25zKHRoaXMsIHJlc3BvbnNlUG9PcHRpb24pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQb0R5bmFtaWNQYWdlT3B0aW9ucyhvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24pOiBPYnNlcnZhYmxlPFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zPiB7XG4gICAgY29uc3Qgb3JpZ2luYWxPcHRpb246IFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zID0ge1xuICAgICAgZmllbGRzOiB0aGlzLmZpZWxkcyxcbiAgICAgIGFjdGlvbnM6IHRoaXMuYWN0aW9ucyxcbiAgICAgIGJyZWFkY3J1bWI6IHRoaXMuYnJlYWRjcnVtYixcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZ2VPcHRpb25TY2hlbWE6IFBvUGFnZUR5bmFtaWNPcHRpb25zU2NoZW1hPFBvUGFnZUR5bmFtaWNEZXRhaWxPcHRpb25zPiA9IHtcbiAgICAgIHNjaGVtYTogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdmaWVsZHMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgICAgIGtleUZvck1lcmdlOiAncHJvcGVydHknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2FjdGlvbnMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2JyZWFkY3J1bWInXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ3RpdGxlJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldEN1c3RvbU9wdGlvbnMob25Mb2FkLCBvcmlnaW5hbE9wdGlvbiwgcGFnZU9wdGlvblNjaGVtYSk7XG4gIH1cbn1cbiIsIjxwby1wYWdlLWRlZmF1bHQgW3AtYWN0aW9uc109XCJwYWdlQWN0aW9uc1wiIFtwLWJyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYlwiIFtwLXRpdGxlXT1cInRpdGxlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlbDsgdGhlbiB2aWV3RmllbGRzVGVtcGxhdGU7IGVsc2UgcmVnaXN0ZXJOb3RGb3VuZFRlbXBsYXRlXCI+IDwvbmctY29udGFpbmVyPlxuPC9wby1wYWdlLWRlZmF1bHQ+XG5cbjxuZy10ZW1wbGF0ZSAjcmVnaXN0ZXJOb3RGb3VuZFRlbXBsYXRlPlxuICA8cG8td2lkZ2V0PlxuICAgIDxwby1pY29uIHAtaWNvbj1cIklDT05fSU5GT1wiPjwvcG8taWNvbj5cbiAgICA8c3BhbiBjbGFzcz1cInBvLWZvbnQtdGV4dC1sYXJnZVwiPlxuICAgICAge3sgbGl0ZXJhbHMucmVnaXN0ZXJOb3RGb3VuZCB9fVxuICAgIDwvc3Bhbj5cbiAgPC9wby13aWRnZXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3ZpZXdGaWVsZHNUZW1wbGF0ZT5cbiAgPHBvLWR5bmFtaWMtdmlldyBbcC1maWVsZHNdPVwiZmllbGRzXCIgW3AtdmFsdWVdPVwibW9kZWxcIj4gPC9wby1keW5hbWljLXZpZXc+XG48L25nLXRlbXBsYXRlPlxuIl19