@mediusinc/mng-commons 1.4.0 → 2.0.0-rc.1-b808fba6

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 (419) hide show
  1. package/esm2020/lib/api/models/builders/query-param.builder.mjs +58 -58
  2. package/esm2020/lib/api/models/filter-match-type.model.mjs +24 -24
  3. package/esm2020/lib/api/models/filter-param.model.mjs +32 -32
  4. package/esm2020/lib/api/models/index.mjs +8 -8
  5. package/esm2020/lib/api/models/mappers.mjs +12 -12
  6. package/esm2020/lib/api/models/query-mode.model.mjs +17 -17
  7. package/esm2020/lib/api/models/query-param.model.mjs +67 -67
  8. package/esm2020/lib/api/models/query-result.model.mjs +23 -23
  9. package/esm2020/lib/api/models/serialization.model.mjs +1 -1
  10. package/esm2020/lib/api/services/api.abstract.service.mjs +57 -57
  11. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +74 -74
  12. package/esm2020/lib/api/services/get-all-api.abstract.service.mjs +29 -29
  13. package/esm2020/lib/api/services/index.mjs +3 -3
  14. package/esm2020/lib/api/utils/index.mjs +2 -2
  15. package/esm2020/lib/api/utils/medius-rest.util.mjs +213 -213
  16. package/esm2020/lib/api/utils/object-serializer.util.mjs +247 -247
  17. package/esm2020/lib/components/action/action.component.mjs +281 -275
  18. package/esm2020/lib/components/action/editor/action-editor.component.mjs +303 -303
  19. package/esm2020/lib/components/action/index.mjs +4 -4
  20. package/esm2020/lib/components/action/localization/data-language-dropdown.component.mjs +45 -45
  21. package/esm2020/lib/components/action/models/action-component.model.mjs +2 -2
  22. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +2 -2
  23. package/esm2020/lib/components/action/models/action-execution.model.mjs +249 -249
  24. package/esm2020/lib/components/action/models/index.mjs +4 -4
  25. package/esm2020/lib/components/action/models/tableview-action-default-categories.model.mjs +10 -10
  26. package/esm2020/lib/components/action/route/action-route.component.mjs +131 -130
  27. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +301 -300
  28. package/esm2020/lib/components/form/date-range/date-range.component.mjs +110 -109
  29. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +209 -194
  30. package/esm2020/lib/components/form/editor/form-editor.component.mjs +246 -243
  31. package/esm2020/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +43 -39
  32. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +51 -50
  33. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +46 -45
  34. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +28 -26
  35. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +180 -150
  36. package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +24 -24
  37. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +191 -186
  38. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +198 -197
  39. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +158 -154
  40. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +19 -17
  41. package/esm2020/lib/components/form/formly/fields/index.mjs +10 -10
  42. package/esm2020/lib/components/form/formly/formly.config.mjs +211 -211
  43. package/esm2020/lib/components/form/formly/index.mjs +1 -1
  44. package/esm2020/lib/components/form/formly/models/formly-config.model.mjs +1 -1
  45. package/esm2020/lib/components/form/formly/models/formly-field.model.mjs +2 -2
  46. package/esm2020/lib/components/form/formly/models/index.mjs +2 -2
  47. package/esm2020/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +16 -15
  48. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +84 -83
  49. package/esm2020/lib/components/form/formly/wrappers/index.mjs +2 -2
  50. package/esm2020/lib/components/form/index.mjs +4 -4
  51. package/esm2020/lib/components/form/models/field-action-context.model.mjs +2 -2
  52. package/esm2020/lib/components/form/models/form-editor.event.mjs +33 -33
  53. package/esm2020/lib/components/form/models/form-editor.interface.mjs +1 -1
  54. package/esm2020/lib/components/form/models/index.mjs +2 -2
  55. package/esm2020/lib/components/layout/breadcrumb.component.mjs +18 -17
  56. package/esm2020/lib/components/layout/footer.component.mjs +18 -17
  57. package/esm2020/lib/components/layout/index.mjs +9 -8
  58. package/esm2020/lib/components/layout/main-layout.component.mjs +56 -52
  59. package/esm2020/lib/components/layout/menu-item.component.mjs +292 -272
  60. package/esm2020/lib/components/layout/menu.component.mjs +32 -21
  61. package/esm2020/lib/components/layout/services/index.mjs +1 -1
  62. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +194 -194
  63. package/esm2020/lib/components/layout/topbar-user.component.mjs +41 -0
  64. package/esm2020/lib/components/layout/topbar.component.mjs +64 -65
  65. package/esm2020/lib/components/layout/version.component.mjs +58 -58
  66. package/esm2020/lib/components/tableview/index.mjs +6 -6
  67. package/esm2020/lib/components/tableview/models/index.mjs +1 -1
  68. package/esm2020/lib/components/tableview/models/table.event.mjs +16 -16
  69. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +150 -147
  70. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +52 -53
  71. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +121 -120
  72. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +101 -84
  73. package/esm2020/lib/components/tableview/table/table.component.mjs +611 -595
  74. package/esm2020/lib/components/tableview/tableview.component.mjs +115 -113
  75. package/esm2020/lib/data-providers/base.data-provider.mjs +16 -16
  76. package/esm2020/lib/data-providers/editor.data-provider.mjs +36 -36
  77. package/esm2020/lib/data-providers/index.mjs +6 -6
  78. package/esm2020/lib/data-providers/lookup.data-provider.mjs +15 -15
  79. package/esm2020/lib/data-providers/table.data-provider.mjs +37 -37
  80. package/esm2020/lib/data-providers/tableview-crud.data-provider.mjs +23 -23
  81. package/esm2020/lib/data-providers/tableview.data-provider.mjs +44 -44
  82. package/esm2020/lib/descriptors/action/action-button.descriptor.mjs +60 -0
  83. package/esm2020/lib/descriptors/action/action-confirmation.descriptor.mjs +77 -77
  84. package/esm2020/lib/descriptors/action/action.descriptor.mjs +579 -0
  85. package/esm2020/lib/descriptors/action/index.mjs +4 -0
  86. package/esm2020/lib/descriptors/editor/editor.descriptor.mjs +291 -0
  87. package/esm2020/lib/descriptors/editor/field-validation.descriptor.mjs +25 -0
  88. package/esm2020/lib/descriptors/editor/field.descriptor.mjs +990 -0
  89. package/esm2020/lib/descriptors/editor/index.mjs +4 -0
  90. package/esm2020/lib/descriptors/filter/filter.descriptor.mjs +370 -0
  91. package/esm2020/lib/descriptors/filter/index.mjs +2 -0
  92. package/esm2020/lib/descriptors/index.mjs +2 -12
  93. package/esm2020/lib/descriptors/interfaces/field-config.interface.mjs +1 -1
  94. package/esm2020/lib/descriptors/interfaces/index.mjs +2 -2
  95. package/esm2020/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +1 -1
  96. package/esm2020/lib/descriptors/model.descriptor.mjs +44 -44
  97. package/esm2020/lib/descriptors/table/column.descriptor.mjs +406 -0
  98. package/esm2020/lib/descriptors/table/index.mjs +3 -0
  99. package/esm2020/lib/descriptors/table/table.descriptor.mjs +497 -0
  100. package/esm2020/lib/descriptors/tableview/index.mjs +2 -0
  101. package/esm2020/lib/descriptors/tableview/tableview.descriptor.mjs +346 -0
  102. package/esm2020/lib/descriptors/types/action.type.mjs +25 -25
  103. package/esm2020/lib/descriptors/types/column.type.mjs +20 -20
  104. package/esm2020/lib/descriptors/types/editor.type.mjs +7 -7
  105. package/esm2020/lib/descriptors/types/field.type.mjs +55 -55
  106. package/esm2020/lib/descriptors/types/filter.type.mjs +30 -30
  107. package/esm2020/lib/descriptors/types/index.mjs +6 -6
  108. package/esm2020/lib/descriptors/types/table.type.mjs +26 -26
  109. package/esm2020/lib/directives/component.directive.mjs +62 -44
  110. package/esm2020/lib/directives/index.mjs +2 -2
  111. package/esm2020/lib/directives/template.directive.mjs +29 -28
  112. package/esm2020/lib/mng-commons.module.mjs +450 -485
  113. package/esm2020/lib/models/column-value.model.mjs +2 -2
  114. package/esm2020/lib/models/config.model.mjs +2 -2
  115. package/esm2020/lib/models/enum.model.mjs +1 -1
  116. package/esm2020/lib/models/error.model.mjs +1 -1
  117. package/esm2020/lib/models/index.mjs +9 -9
  118. package/esm2020/lib/models/menu.model.mjs +2 -2
  119. package/esm2020/lib/models/tableview-attr.model.mjs +1 -1
  120. package/esm2020/lib/models/user.model.mjs +1 -1
  121. package/esm2020/lib/models/version.model.mjs +1 -1
  122. package/esm2020/lib/models/view-container.model.mjs +2 -2
  123. package/esm2020/lib/pipes/boolean.pipe.mjs +28 -27
  124. package/esm2020/lib/pipes/class-map.pipe.mjs +23 -22
  125. package/esm2020/lib/pipes/enum.pipe.mjs +26 -25
  126. package/esm2020/lib/pipes/enumerate-async.pipe.mjs +39 -38
  127. package/esm2020/lib/pipes/enumerate.pipe.mjs +56 -55
  128. package/esm2020/lib/pipes/getter.pipe.mjs +21 -20
  129. package/esm2020/lib/pipes/i18n-property.pipe.mjs +19 -18
  130. package/esm2020/lib/pipes/index.mjs +11 -11
  131. package/esm2020/lib/pipes/json-path.pipe.mjs +80 -79
  132. package/esm2020/lib/pipes/locale-default-row-class.pipe.mjs +27 -26
  133. package/esm2020/lib/pipes/models/internal/enumrate-pipe-i18n.model.mjs +1 -1
  134. package/esm2020/lib/pipes/models/internal/index.mjs +1 -1
  135. package/esm2020/lib/pipes/parametrize.pipe.mjs +86 -85
  136. package/esm2020/lib/pipes/template.pipe.mjs +25 -24
  137. package/esm2020/lib/provide-commons.mjs +73 -0
  138. package/esm2020/lib/router/index.mjs +4 -3
  139. package/esm2020/lib/router/models/index.mjs +1 -1
  140. package/esm2020/lib/router/models/router.model.mjs +2 -2
  141. package/esm2020/lib/router/route-builder.mjs +293 -426
  142. package/esm2020/lib/router/routes-builder.mjs +67 -0
  143. package/esm2020/lib/router/tableview-route-builder.mjs +184 -187
  144. package/esm2020/lib/security/authorization.guard.mjs +29 -26
  145. package/esm2020/lib/security/authorization.service.mjs +50 -47
  146. package/esm2020/lib/security/authorization.util.mjs +15 -15
  147. package/esm2020/lib/security/index.mjs +3 -3
  148. package/esm2020/lib/security/model/authorization.type.mjs +7 -7
  149. package/esm2020/lib/security/model/index.mjs +3 -3
  150. package/esm2020/lib/security/model/permission-service.interface.mjs +1 -1
  151. package/esm2020/lib/security/model/permissions.model.mjs +86 -86
  152. package/esm2020/lib/services/action-executor.service.mjs +558 -555
  153. package/esm2020/lib/services/commons.service.mjs +464 -461
  154. package/esm2020/lib/services/configuration.service.mjs +149 -142
  155. package/esm2020/lib/services/error-mapper.service.mjs +13 -13
  156. package/esm2020/lib/services/index.mjs +6 -6
  157. package/esm2020/lib/services/internal/commons-init.provider.mjs +3 -3
  158. package/esm2020/lib/services/internal/commons-init.service.mjs +50 -44
  159. package/esm2020/lib/services/internal/index.mjs +2 -2
  160. package/esm2020/lib/services/navigation.service.mjs +51 -48
  161. package/esm2020/lib/services/providers/config-service.provider.mjs +31 -30
  162. package/esm2020/lib/services/providers/formly-config.provider.mjs +30 -30
  163. package/esm2020/lib/services/providers/index.mjs +2 -2
  164. package/esm2020/lib/services/router.service.mjs +97 -0
  165. package/esm2020/lib/services/tokens/browser-storage.token.mjs +5 -5
  166. package/esm2020/lib/services/tokens/commons-init.token.mjs +2 -2
  167. package/esm2020/lib/services/tokens/default-setting.token.mjs +2 -2
  168. package/esm2020/lib/services/tokens/index.mjs +4 -4
  169. package/esm2020/lib/services/tokens/module-config.token.mjs +2 -2
  170. package/esm2020/lib/services/version.service.mjs +42 -39
  171. package/esm2020/lib/services/view-container.component.service.mjs +55 -55
  172. package/esm2020/lib/styles/button-style.builder.mjs +164 -164
  173. package/esm2020/lib/styles/index.mjs +2 -2
  174. package/esm2020/lib/styles/models/index.mjs +2 -2
  175. package/esm2020/lib/styles/models/style-level.enum.mjs +11 -11
  176. package/esm2020/lib/styles/models/style-size.enum.mjs +8 -8
  177. package/esm2020/lib/styles/styles.util.mjs +42 -42
  178. package/esm2020/lib/types/index.mjs +2 -2
  179. package/esm2020/lib/types/type.decorator.mjs +21 -21
  180. package/esm2020/lib/types/type.model.mjs +1 -1
  181. package/esm2020/lib/utils/action-data-provider.util.mjs +145 -145
  182. package/esm2020/lib/utils/date.util.mjs +117 -117
  183. package/esm2020/lib/utils/editor-formly.util.mjs +288 -288
  184. package/esm2020/lib/utils/enum.util.mjs +81 -81
  185. package/esm2020/lib/utils/export.util.mjs +20 -20
  186. package/esm2020/lib/utils/i18n.util.mjs +233 -233
  187. package/esm2020/lib/utils/index.mjs +10 -10
  188. package/esm2020/lib/utils/model.util.mjs +68 -68
  189. package/esm2020/lib/utils/notification.util.mjs +51 -51
  190. package/esm2020/lib/utils/route.util.mjs +36 -24
  191. package/esm2020/lib/utils/string.util.mjs +26 -26
  192. package/esm2020/lib/utils/tableview.util.mjs +160 -160
  193. package/esm2020/lib/utils/type.util.mjs +92 -92
  194. package/esm2020/mediusinc-mng-commons.mjs +4 -4
  195. package/esm2020/public-api.mjs +61 -55
  196. package/fesm2015/mediusinc-mng-commons.mjs +14198 -13932
  197. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  198. package/fesm2020/mediusinc-mng-commons.mjs +14024 -13769
  199. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  200. package/index.d.ts +5 -5
  201. package/lib/api/models/builders/query-param.builder.d.ts +13 -13
  202. package/lib/api/models/filter-match-type.model.d.ts +23 -23
  203. package/lib/api/models/filter-param.model.d.ts +23 -23
  204. package/lib/api/models/index.d.ts +8 -8
  205. package/lib/api/models/mappers.d.ts +6 -6
  206. package/lib/api/models/query-mode.model.d.ts +16 -16
  207. package/lib/api/models/query-param.model.d.ts +31 -31
  208. package/lib/api/models/query-result.model.d.ts +24 -24
  209. package/lib/api/models/serialization.model.d.ts +8 -8
  210. package/lib/api/services/api.abstract.service.d.ts +24 -24
  211. package/lib/api/services/crud-api.abstract.service.d.ts +22 -22
  212. package/lib/api/services/get-all-api.abstract.service.d.ts +14 -14
  213. package/lib/api/services/index.d.ts +3 -3
  214. package/lib/api/utils/index.d.ts +2 -2
  215. package/lib/api/utils/medius-rest.util.d.ts +16 -16
  216. package/lib/api/utils/object-serializer.util.d.ts +33 -33
  217. package/lib/components/action/action.component.d.ts +79 -79
  218. package/lib/components/action/editor/action-editor.component.d.ts +69 -69
  219. package/lib/components/action/index.d.ts +4 -4
  220. package/lib/components/action/localization/data-language-dropdown.component.d.ts +25 -25
  221. package/lib/components/action/models/action-component.model.d.ts +15 -15
  222. package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
  223. package/lib/components/action/models/action-execution.model.d.ts +135 -135
  224. package/lib/components/action/models/index.d.ts +4 -4
  225. package/lib/components/action/models/tableview-action-default-categories.model.d.ts +10 -10
  226. package/lib/components/action/route/action-route.component.d.ts +31 -31
  227. package/lib/components/form/autocomplete/autocomplete.component.d.ts +61 -61
  228. package/lib/components/form/date-range/date-range.component.d.ts +28 -28
  229. package/lib/components/form/dropdown/dropdown.component.d.ts +59 -52
  230. package/lib/components/form/editor/form-editor.component.d.ts +52 -52
  231. package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +13 -13
  232. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +16 -16
  233. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +15 -15
  234. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +14 -14
  235. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +29 -29
  236. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +11 -11
  237. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +46 -46
  238. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +25 -24
  239. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +37 -37
  240. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +7 -7
  241. package/lib/components/form/formly/fields/index.d.ts +10 -10
  242. package/lib/components/form/formly/formly.config.d.ts +14 -14
  243. package/lib/components/form/formly/index.d.ts +1 -1
  244. package/lib/components/form/formly/models/formly-config.model.d.ts +11 -11
  245. package/lib/components/form/formly/models/formly-field.model.d.ts +16 -16
  246. package/lib/components/form/formly/models/index.d.ts +2 -2
  247. package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +6 -6
  248. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +11 -11
  249. package/lib/components/form/formly/wrappers/index.d.ts +2 -2
  250. package/lib/components/form/index.d.ts +4 -4
  251. package/lib/components/form/models/field-action-context.model.d.ts +17 -17
  252. package/lib/components/form/models/form-editor.event.d.ts +37 -37
  253. package/lib/components/form/models/form-editor.interface.d.ts +10 -10
  254. package/lib/components/form/models/index.d.ts +2 -2
  255. package/lib/components/layout/breadcrumb.component.d.ts +8 -8
  256. package/lib/components/layout/footer.component.d.ts +9 -9
  257. package/lib/components/layout/index.d.ts +8 -7
  258. package/lib/components/layout/main-layout.component.d.ts +22 -20
  259. package/lib/components/layout/menu-item.component.d.ts +56 -52
  260. package/lib/components/layout/menu.component.d.ts +16 -10
  261. package/lib/components/layout/services/index.d.ts +1 -1
  262. package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
  263. package/lib/components/layout/topbar-user.component.d.ts +21 -0
  264. package/lib/components/layout/topbar.component.d.ts +26 -28
  265. package/lib/components/layout/version.component.d.ts +19 -19
  266. package/lib/components/tableview/index.d.ts +6 -6
  267. package/lib/components/tableview/models/index.d.ts +1 -1
  268. package/lib/components/tableview/models/table.event.d.ts +17 -17
  269. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +36 -33
  270. package/lib/components/tableview/route/tableview-route.component.d.ts +19 -18
  271. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +38 -38
  272. package/lib/components/tableview/table/column-value/column-value.component.d.ts +35 -35
  273. package/lib/components/tableview/table/table.component.d.ts +117 -115
  274. package/lib/components/tableview/tableview.component.d.ts +49 -48
  275. package/lib/data-providers/base.data-provider.d.ts +14 -14
  276. package/lib/data-providers/editor.data-provider.d.ts +25 -25
  277. package/lib/data-providers/index.d.ts +6 -6
  278. package/lib/data-providers/lookup.data-provider.d.ts +14 -14
  279. package/lib/data-providers/table.data-provider.d.ts +27 -27
  280. package/lib/data-providers/tableview-crud.data-provider.d.ts +8 -8
  281. package/lib/data-providers/tableview.data-provider.d.ts +33 -33
  282. package/lib/descriptors/{action-button.descriptor.d.ts → action/action-button.descriptor.d.ts} +22 -22
  283. package/lib/descriptors/action/action-confirmation.descriptor.d.ts +36 -36
  284. package/lib/descriptors/{action.descriptor.d.ts → action/action.descriptor.d.ts} +225 -223
  285. package/lib/descriptors/action/index.d.ts +3 -0
  286. package/lib/descriptors/{editor.descriptor.d.ts → editor/editor.descriptor.d.ts} +119 -116
  287. package/lib/descriptors/{field-validation.descriptor.d.ts → editor/field-validation.descriptor.d.ts} +19 -19
  288. package/lib/descriptors/{field.descriptor.d.ts → editor/field.descriptor.d.ts} +349 -345
  289. package/lib/descriptors/editor/index.d.ts +3 -0
  290. package/lib/descriptors/{filter.descriptor.d.ts → filter/filter.descriptor.d.ts} +120 -118
  291. package/lib/descriptors/filter/index.d.ts +1 -0
  292. package/lib/descriptors/index.d.ts +1 -11
  293. package/lib/descriptors/interfaces/field-config.interface.d.ts +9 -9
  294. package/lib/descriptors/interfaces/index.d.ts +2 -2
  295. package/lib/descriptors/interfaces/lookup-descriptor.interface.d.ts +17 -17
  296. package/lib/descriptors/model.descriptor.d.ts +18 -18
  297. package/lib/descriptors/{column.descriptor.d.ts → table/column.descriptor.d.ts} +130 -130
  298. package/lib/descriptors/table/index.d.ts +2 -0
  299. package/lib/descriptors/{table.descriptor.d.ts → table/table.descriptor.d.ts} +193 -193
  300. package/lib/descriptors/tableview/index.d.ts +1 -0
  301. package/lib/descriptors/{tableview.descriptor.d.ts → tableview/tableview.descriptor.d.ts} +131 -129
  302. package/lib/descriptors/types/action.type.d.ts +21 -21
  303. package/lib/descriptors/types/column.type.d.ts +18 -18
  304. package/lib/descriptors/types/editor.type.d.ts +6 -6
  305. package/lib/descriptors/types/field.type.d.ts +47 -47
  306. package/lib/descriptors/types/filter.type.d.ts +27 -27
  307. package/lib/descriptors/types/index.d.ts +6 -6
  308. package/lib/descriptors/types/table.type.d.ts +22 -22
  309. package/lib/directives/component.directive.d.ts +20 -16
  310. package/lib/directives/index.d.ts +2 -2
  311. package/lib/directives/template.directive.d.ts +13 -13
  312. package/lib/mng-commons.module.d.ts +100 -99
  313. package/lib/models/column-value.model.d.ts +4 -4
  314. package/lib/models/config.model.d.ts +51 -40
  315. package/lib/models/enum.model.d.ts +6 -6
  316. package/lib/models/error.model.d.ts +14 -14
  317. package/lib/models/index.d.ts +9 -9
  318. package/lib/models/menu.model.d.ts +30 -30
  319. package/lib/models/tableview-attr.model.d.ts +10 -10
  320. package/lib/models/user.model.d.ts +8 -8
  321. package/lib/models/version.model.d.ts +18 -18
  322. package/lib/models/view-container.model.d.ts +43 -43
  323. package/lib/pipes/boolean.pipe.d.ts +7 -7
  324. package/lib/pipes/class-map.pipe.d.ts +7 -7
  325. package/lib/pipes/enum.pipe.d.ts +8 -8
  326. package/lib/pipes/enumerate-async.pipe.d.ts +14 -14
  327. package/lib/pipes/enumerate.pipe.d.ts +21 -21
  328. package/lib/pipes/getter.pipe.d.ts +7 -7
  329. package/lib/pipes/i18n-property.pipe.d.ts +8 -8
  330. package/lib/pipes/index.d.ts +11 -11
  331. package/lib/pipes/json-path.pipe.d.ts +13 -13
  332. package/lib/pipes/locale-default-row-class.pipe.d.ts +10 -10
  333. package/lib/pipes/models/internal/enumrate-pipe-i18n.model.d.ts +5 -5
  334. package/lib/pipes/models/internal/index.d.ts +1 -1
  335. package/lib/pipes/parametrize.pipe.d.ts +13 -13
  336. package/lib/pipes/template.pipe.d.ts +10 -10
  337. package/lib/provide-commons.d.ts +3 -0
  338. package/lib/router/index.d.ts +3 -2
  339. package/lib/router/models/index.d.ts +1 -1
  340. package/lib/router/models/router.model.d.ts +31 -33
  341. package/lib/router/route-builder.d.ts +60 -98
  342. package/lib/router/routes-builder.d.ts +28 -0
  343. package/lib/router/tableview-route-builder.d.ts +44 -37
  344. package/lib/security/authorization.guard.d.ts +11 -11
  345. package/lib/security/authorization.service.d.ts +19 -19
  346. package/lib/security/authorization.util.d.ts +5 -5
  347. package/lib/security/index.d.ts +3 -3
  348. package/lib/security/model/authorization.type.d.ts +6 -6
  349. package/lib/security/model/index.d.ts +3 -3
  350. package/lib/security/model/permission-service.interface.d.ts +6 -6
  351. package/lib/security/model/permissions.model.d.ts +37 -37
  352. package/lib/services/action-executor.service.d.ts +150 -149
  353. package/lib/services/commons.service.d.ts +93 -93
  354. package/lib/services/configuration.service.d.ts +60 -57
  355. package/lib/services/error-mapper.service.d.ts +7 -7
  356. package/lib/services/index.d.ts +6 -6
  357. package/lib/services/internal/commons-init.provider.d.ts +3 -3
  358. package/lib/services/internal/commons-init.service.d.ts +18 -16
  359. package/lib/services/internal/index.d.ts +2 -2
  360. package/lib/services/navigation.service.d.ts +14 -14
  361. package/lib/services/providers/config-service.provider.d.ts +6 -6
  362. package/lib/services/providers/formly-config.provider.d.ts +4 -4
  363. package/lib/services/providers/index.d.ts +2 -2
  364. package/lib/services/router.service.d.ts +22 -0
  365. package/lib/services/tokens/browser-storage.token.d.ts +2 -2
  366. package/lib/services/tokens/commons-init.token.d.ts +3 -3
  367. package/lib/services/tokens/default-setting.token.d.ts +2 -2
  368. package/lib/services/tokens/index.d.ts +4 -4
  369. package/lib/services/tokens/module-config.token.d.ts +3 -3
  370. package/lib/services/version.service.d.ts +13 -13
  371. package/lib/services/view-container.component.service.d.ts +31 -31
  372. package/lib/styles/button-style.builder.d.ts +67 -67
  373. package/lib/styles/index.d.ts +2 -2
  374. package/lib/styles/models/index.d.ts +2 -2
  375. package/lib/styles/models/style-level.enum.d.ts +10 -10
  376. package/lib/styles/models/style-size.enum.d.ts +7 -7
  377. package/lib/styles/styles.util.d.ts +15 -14
  378. package/lib/types/index.d.ts +2 -2
  379. package/lib/types/type.decorator.d.ts +4 -4
  380. package/lib/types/type.model.d.ts +23 -23
  381. package/lib/utils/action-data-provider.util.d.ts +20 -20
  382. package/lib/utils/date.util.d.ts +7 -7
  383. package/lib/utils/editor-formly.util.d.ts +12 -12
  384. package/lib/utils/enum.util.d.ts +50 -50
  385. package/lib/utils/export.util.d.ts +5 -5
  386. package/lib/utils/i18n.util.d.ts +57 -56
  387. package/lib/utils/index.d.ts +10 -10
  388. package/lib/utils/model.util.d.ts +8 -8
  389. package/lib/utils/notification.util.d.ts +13 -12
  390. package/lib/utils/route.util.d.ts +59 -4
  391. package/lib/utils/string.util.d.ts +4 -4
  392. package/lib/utils/tableview.util.d.ts +40 -40
  393. package/lib/utils/type.util.d.ts +57 -57
  394. package/package.json +6 -6
  395. package/public-api.d.ts +40 -34
  396. package/scss/common/layout/_breadcrumb.scss +12 -2
  397. package/scss/common/layout/_exception.scss +1 -1
  398. package/scss/common/layout/_inlinemenu.scss +13 -0
  399. package/scss/common/layout/_login.scss +1 -0
  400. package/scss/common/layout/_rightmenu.scss +5 -0
  401. package/scss/common/layout/menu/_menu_common.scss +1 -1
  402. package/scss/common/theme/designer/_mixins.scss +29 -0
  403. package/scss/common/theme/extensions/_datatable.scss +2 -2
  404. package/scss/common/variables/layout/_layout_dark.scss +0 -1
  405. package/scss/common/variables/layout/_layout_light.scss +0 -1
  406. package/scss/common/variables/theme/_theme_dark.scss +72 -46
  407. package/scss/common/variables/theme/_theme_light.scss +70 -33
  408. package/scss/theme/default/_mng-variables-theme-light.scss +2 -0
  409. package/version-info.json +7 -7
  410. package/esm2020/lib/descriptors/action-button.descriptor.mjs +0 -60
  411. package/esm2020/lib/descriptors/action.descriptor.mjs +0 -577
  412. package/esm2020/lib/descriptors/column.descriptor.mjs +0 -405
  413. package/esm2020/lib/descriptors/editor.descriptor.mjs +0 -290
  414. package/esm2020/lib/descriptors/field-validation.descriptor.mjs +0 -25
  415. package/esm2020/lib/descriptors/field.descriptor.mjs +0 -987
  416. package/esm2020/lib/descriptors/filter.descriptor.mjs +0 -368
  417. package/esm2020/lib/descriptors/table.descriptor.mjs +0 -497
  418. package/esm2020/lib/descriptors/tableview.descriptor.mjs +0 -344
  419. package/mediusinc-mng-commons-1.4.0.tgz +0 -0
@@ -1,275 +1,281 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Optional, Output, ViewChild } from '@angular/core';
2
- import { ConfirmationService } from 'primeng/api';
3
- import { ReplaySubject, combineLatest, distinctUntilChanged, of } from 'rxjs';
4
- import { ActionLinkDescriptor } from '../../descriptors';
5
- import { Permissions } from '../../security/model';
6
- import { I18nUtils } from '../../utils';
7
- import { ActionParameters } from './models';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/router";
10
- import * as i2 from "@ngx-translate/core";
11
- import * as i3 from "../../security";
12
- import * as i4 from "../../services";
13
- import * as i5 from "primeng/api";
14
- import * as i6 from "@angular/common";
15
- import * as i7 from "primeng/tooltip";
16
- import * as i8 from "primeng/button";
17
- import * as i9 from "primeng/confirmdialog";
18
- import * as i10 from "primeng/ripple";
19
- import * as i11 from "primeng/splitbutton";
20
- import * as i12 from "primeng/slidemenu";
21
- import * as i13 from "../../directives/component.directive";
22
- import * as i14 from "../../pipes/parametrize.pipe";
23
- export class MngActionComponent {
24
- constructor(routeService, translate, authorization, actionExecutor, confirmationService, viewContainerService) {
25
- this.routeService = routeService;
26
- this.translate = translate;
27
- this.authorization = authorization;
28
- this.actionExecutor = actionExecutor;
29
- this.confirmationService = confirmationService;
30
- this.viewContainerService = viewContainerService;
31
- this.hostClass = 'mng-action-button';
32
- this.isHostHidden = false;
33
- this.inputDisabled = of(false);
34
- this.inputLoading = of(false);
35
- this.selectedItems = [];
36
- this.finishEventEmitter = new EventEmitter();
37
- this.loadingSubject = new ReplaySubject(1);
38
- this.$loading = this.loadingSubject.asObservable();
39
- this.cmpId = Math.random().toString(36).substring(2);
40
- this.isVisibleSubject = new ReplaySubject(1);
41
- this.$isVisible = this.isVisibleSubject.asObservable().pipe(distinctUntilChanged());
42
- this.isPermittedSubject = new ReplaySubject(1);
43
- this.$isPermitted = this.isPermittedSubject.asObservable().pipe(distinctUntilChanged());
44
- this.isEnabledSubject = new ReplaySubject(1);
45
- this.$isEnabled = this.isEnabledSubject.asObservable().pipe(distinctUntilChanged());
46
- this.labelSubject = new ReplaySubject(1);
47
- this.$label = this.labelSubject.asObservable().pipe(distinctUntilChanged());
48
- this.tooltipSubject = new ReplaySubject(1);
49
- this.$tooltip = this.tooltipSubject.asObservable().pipe(distinctUntilChanged());
50
- this.hasNoTitle = false;
51
- this.subscriptions = [];
52
- this.buttonClass = 'p-button-primary';
53
- this.subactions = [];
54
- this.subactionSubscriptions = [];
55
- this.loadingSubject.next(false);
56
- }
57
- ngOnInit() {
58
- this.viewContainer = this.viewContainerInit ?? this.viewContainerService ?? undefined;
59
- this.route = this.routeInit ?? this.routeService;
60
- this.hasNoTitle = this.action.button.label === null;
61
- this.isEnabledSubject.next(true);
62
- this.isVisibleSubject.next(true);
63
- this.isPermittedSubject.next(true);
64
- this.labelSubject.next(null);
65
- this.tooltipSubject.next(null);
66
- const routeData = this.route.snapshot.data;
67
- if (this.action instanceof ActionLinkDescriptor) {
68
- this.actionLink = this.action;
69
- }
70
- if (this.action.tableviewCategory && routeData.tableviewPermissions) {
71
- if (routeData.tableviewPermissions[this.action.tableviewCategory]) {
72
- this.routePermissions = routeData.tableviewPermissions[this.action.tableviewCategory];
73
- }
74
- }
75
- this.processSubscriptions();
76
- if (this.action.className) {
77
- this.hostClass = this.action.className;
78
- }
79
- const hostVisibilitySubscription = combineLatest([this.$isVisible, this.$isPermitted]).subscribe(([isVisible, isPermitted]) => {
80
- this.isHostHidden = !isVisible || !isPermitted;
81
- });
82
- this.subscriptions.push(hostVisibilitySubscription);
83
- this.buttonClass = this.action.button.styleClass.build(this.hasNoTitle);
84
- }
85
- ngOnChanges(changes) {
86
- if (!(changes['item']?.firstChange ?? true) ||
87
- !(changes['itemId']?.firstChange ?? true) ||
88
- !(changes['actionData']?.firstChange ?? true) ||
89
- (this.action.hasItemsSelection && !(changes['selectedItems']?.firstChange ?? true))) {
90
- this.processSubscriptions();
91
- }
92
- }
93
- ngOnDestroy() {
94
- this.isVisibleSubscription?.unsubscribe();
95
- this.isPermittedSubscription?.unsubscribe();
96
- this.isEnabledSubscription?.unsubscribe();
97
- this.labelSubscription?.unsubscribe();
98
- this.tooltipSubscription?.unsubscribe();
99
- this.subscriptions.forEach(s => s.unsubscribe());
100
- this.subactionSubscriptions.forEach(s => s.unsubscribe());
101
- }
102
- triggerAction(action, parameters, event) {
103
- if (action.subactionsAsMenu) {
104
- this.subactionsMenu?.toggle(event);
105
- return;
106
- }
107
- const actionData = this.actionData ? this.actionData : {};
108
- actionData['cmpId'] = this.cmpId;
109
- parameters ?? (parameters = new ActionParameters(this.itemId, this.item)
110
- .withActionData(actionData)
111
- .withQueryParam(this.queryParam)
112
- .withRoute(this.route)
113
- .withViewContainer(this.viewContainer)
114
- .withSourceComponent(this)
115
- .withHostComponent(this.hostComponent)
116
- .withSelectedItems(this.selectedItems));
117
- const instance = this.actionExecutor.triggerAction(action, parameters);
118
- this.subscriptions.push(instance.result$.subscribe({
119
- next: () => {
120
- this.finishEventEmitter.next(instance);
121
- if (action.hasItemsSelection) {
122
- this.viewContainer?.reloadTable?.({ data: { event: event } });
123
- }
124
- }
125
- }));
126
- this.subscriptions.push(instance.error$.subscribe({
127
- next: () => {
128
- this.finishEventEmitter.next(instance);
129
- }
130
- }));
131
- this.subscriptions.push(instance.isRunLoading$.subscribe({
132
- next: res => {
133
- this.loadingSubject.next(res);
134
- }
135
- }));
136
- }
137
- getConfirmationService() {
138
- return this.confirmationService;
139
- }
140
- getConfirmationServiceInstanceKey(action) {
141
- return `${action.actionName}_${this.cmpId}`;
142
- }
143
- onCustomActionCmpInst(instance) {
144
- const cmpInstSubscription = instance.triggerActionEventEmitter.subscribe(params => this.triggerAction(this.action, params));
145
- this.subscriptions.push(cmpInstSubscription);
146
- }
147
- processSubactions() {
148
- this.subactionSubscriptions.forEach(s => s.unsubscribe());
149
- this.subactionSubscriptions = [];
150
- const menuItems = [];
151
- this.action.subactions;
152
- for (const subaction of this.action.subactions) {
153
- const menuItem = {};
154
- menuItem.icon = subaction.button.icon ?? undefined;
155
- this.subactionSubscriptions.push(I18nUtils.Action.getAsync(this.translate, subaction, 'title', subaction.button.label ?? undefined, this.item).subscribe({
156
- next: res => (menuItem.label = res)
157
- }));
158
- this.subactionSubscriptions.push(I18nUtils.Action.getAsync(this.translate, subaction, 'tooltip', this.action.button.tooltip, this.item).subscribe({
159
- next: res => (menuItem.tooltip = res)
160
- }));
161
- const parameters = new ActionParameters(this.itemId, this.item)
162
- .withActionData(this.actionData)
163
- .withViewContainer(this.viewContainer ?? undefined)
164
- .withSourceComponent(this);
165
- if (subaction.hasItemsSelection) {
166
- parameters.withSelectedItems(this.selectedItems);
167
- }
168
- const context = this.actionExecutor.prepareActionContextValidation(subaction, parameters, this.dataProvider);
169
- if (typeof subaction.isEnabledFunction === 'function') {
170
- this.subactionSubscriptions.push(subaction.isEnabledFunction(context).subscribe({
171
- next: res => (menuItem.disabled = !res)
172
- }));
173
- }
174
- if (typeof subaction.isVisibleFunction === 'function') {
175
- this.subactionSubscriptions.push(subaction.isVisibleFunction(context).subscribe({
176
- next: res => (menuItem.visible = res)
177
- }));
178
- }
179
- menuItem.command = () => this.triggerAction(subaction);
180
- menuItems.push(menuItem);
181
- }
182
- return menuItems;
183
- }
184
- processSubscriptions() {
185
- const parameters = new ActionParameters(this.itemId, this.item)
186
- .withActionData(this.actionData)
187
- .withViewContainer(this.viewContainer ?? undefined)
188
- .withSourceComponent(this);
189
- if (this.action.hasItemsSelection) {
190
- parameters.withSelectedItems(this.selectedItems);
191
- }
192
- const context = this.actionExecutor.prepareActionContextValidation(this.action, parameters, this.dataProvider);
193
- if (typeof this.action.isVisibleFunction === 'function') {
194
- this.isVisibleSubscription?.unsubscribe();
195
- this.isVisibleSubscription = this.action.isVisibleFunction(context).subscribe({
196
- next: res => this.isVisibleSubject.next(res)
197
- });
198
- }
199
- if (typeof this.action.permissions !== 'undefined' || typeof this.routePermissions !== 'undefined') {
200
- this.isPermittedSubscription?.unsubscribe();
201
- const permissions = this.action.permissions && this.routePermissions
202
- ? Permissions.All.of(this.routePermissions, this.action.permissions)
203
- : this.routePermissions ?? this.action.permissions;
204
- this.isVisibleSubscription = this.authorization.isPermitted(permissions, this.route.snapshot, context).subscribe({
205
- next: res => this.isPermittedSubject.next(res)
206
- });
207
- }
208
- if (typeof this.action.isEnabledFunction === 'function') {
209
- this.isEnabledSubscription?.unsubscribe();
210
- this.isEnabledSubscription = this.action.isEnabledFunction(context).subscribe({
211
- next: res => this.isEnabledSubject.next(res)
212
- });
213
- }
214
- if (!this.hasNoTitle) {
215
- this.labelSubscription?.unsubscribe();
216
- this.labelSubscription = I18nUtils.Action.getAsync(this.translate, this.action, 'title', this.action.button.label ?? undefined, this.item).subscribe({
217
- next: i18n => this.labelSubject.next(i18n)
218
- });
219
- }
220
- this.tooltipSubscription?.unsubscribe();
221
- this.tooltipSubscription = I18nUtils.Action.getAsync(this.translate, this.action, 'tooltip', this.action.button.tooltip, this.item).subscribe({
222
- next: i18n => this.tooltipSubject.next(i18n)
223
- });
224
- this.subactions = this.processSubactions();
225
- }
226
- }
227
- MngActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.TranslateService }, { token: i3.MngAuthorizationService }, { token: i4.MngActionExecutorService }, { token: i5.ConfirmationService }, { token: i4.MngViewContainerComponentService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
228
- MngActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngActionComponent, selector: "mng-action", inputs: { action: "action", item: "item", itemId: "itemId", actionData: "actionData", queryParam: "queryParam", dataProvider: "dataProvider", hostComponent: "hostComponent", routeInit: ["route", "routeInit"], inputDisabled: ["disabled", "inputDisabled"], inputLoading: ["loading", "inputLoading"], viewContainerInit: ["viewContainer", "viewContainerInit"], selectedItems: "selectedItems" }, outputs: { finishEventEmitter: "finish" }, host: { properties: { "class": "this.hostClass", "class.m-0": "this.isHostHidden" } }, providers: [ConfirmationService], viewQueries: [{ propertyName: "subactionsMenu", first: true, predicate: ["subactionsMenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"($isVisible | async) && ($isPermitted | async)\">\n <a\n *ngIf=\"actionLink && actionLink.url !== ''; else routerLink\"\n pButton\n pRipple\n [label]=\"($label | async) ?? ''\"\n [icon]=\"$any(action.button.icon)\"\n [href]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.url | parametrize: itemId:item:actionData)\"\n [target]=\"actionLink.target\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [pTooltip]=\"$any($tooltip | async)\"\n [class]=\"buttonClass\"></a>\n <ng-template #routerLink>\n <a\n *ngIf=\"actionLink; else customComponent\"\n pButton\n pRipple\n [icon]=\"$any(action.button.icon)\"\n [label]=\"($label | async) ?? ''\"\n [target]=\"actionLink.target\"\n [replaceUrl]=\"actionLink.replaceUrl\"\n [routerLink]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.pathSegments | parametrize: itemId:item:actionData)\"\n [relativeTo]=\"route\"\n [queryParams]=\"actionLink.queryParams | parametrize: itemId:item:actionData\"\n [queryParamsHandling]=\"actionLink.queryParamsHandling\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [pTooltip]=\"$any($tooltip | async)\"\n [class]=\"buttonClass\"></a>\n </ng-template>\n <ng-template #customComponent>\n <ng-container\n *ngIf=\"action.component; else splitButton\"\n [mngComponent]=\"action.component\"\n [inputs]=\"{\n action: action,\n item: item,\n itemId: itemId,\n actionData: actionData,\n enabled: $isEnabled,\n loading: $loading,\n viewContainer: viewContainer\n }\"\n (instanceCreated)=\"onCustomActionCmpInst($event)\">\n </ng-container>\n </ng-template>\n <ng-template #splitButton>\n <p-splitButton\n *ngIf=\"action.subactions.length > 0 && !action.subactionsAsMenu; else button\"\n [icon]=\"$any(action.button.icon)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (onClick)=\"triggerAction(action)\"\n [class]=\"buttonClass\"\n [model]=\"subactions\">\n </p-splitButton>\n </ng-template>\n <ng-template #button>\n <button\n pButton\n pRipple\n type=\"button\"\n [icon]=\"$any(action.button.icon)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [loading]=\"(($loading | async) ?? false) || ((inputLoading | async) ?? false)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (click)=\"triggerAction(action, undefined, $event)\"\n [class]=\"buttonClass\"></button>\n <p-slideMenu #subactionsMenu [model]=\"subactions\" [popup]=\"true\" [viewportHeight]=\"100\"></p-slideMenu>\n </ng-template>\n <p-confirmDialog\n *ngIf=\"action.runConfirmationDialogDescriptor\"\n [key]=\"action.actionName + '_' + cmpId\"\n [baseZIndex]=\"50\"\n appendTo=\"body\"\n [closable]=\"action.runConfirmationDialogDescriptor.closable\"></p-confirmDialog>\n</ng-container>\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i9.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "directive", type: i10.Ripple, selector: "[pRipple]" }, { kind: "component", type: i11.SplitButton, selector: "p-splitButton", inputs: ["model", "icon", "iconPos", "label", "style", "styleClass", "menuStyle", "menuStyleClass", "disabled", "tabindex", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onClick", "onDropdownClick"] }, { kind: "component", type: i12.SlideMenu, selector: "p-slideMenu", inputs: ["model", "popup", "style", "styleClass", "menuWidth", "viewportHeight", "effectDuration", "easing", "backLabel", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i13.MngComponentDirective, selector: "[mngComponent]", inputs: ["mngComponent", "inputs"], outputs: ["instanceCreated"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.MngParametrizePipe, name: "parametrize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
229
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionComponent, decorators: [{
230
- type: Component,
231
- args: [{ selector: 'mng-action', changeDetection: ChangeDetectionStrategy.OnPush, providers: [ConfirmationService], template: "<ng-container *ngIf=\"($isVisible | async) && ($isPermitted | async)\">\n <a\n *ngIf=\"actionLink && actionLink.url !== ''; else routerLink\"\n pButton\n pRipple\n [label]=\"($label | async) ?? ''\"\n [icon]=\"$any(action.button.icon)\"\n [href]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.url | parametrize: itemId:item:actionData)\"\n [target]=\"actionLink.target\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [pTooltip]=\"$any($tooltip | async)\"\n [class]=\"buttonClass\"></a>\n <ng-template #routerLink>\n <a\n *ngIf=\"actionLink; else customComponent\"\n pButton\n pRipple\n [icon]=\"$any(action.button.icon)\"\n [label]=\"($label | async) ?? ''\"\n [target]=\"actionLink.target\"\n [replaceUrl]=\"actionLink.replaceUrl\"\n [routerLink]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.pathSegments | parametrize: itemId:item:actionData)\"\n [relativeTo]=\"route\"\n [queryParams]=\"actionLink.queryParams | parametrize: itemId:item:actionData\"\n [queryParamsHandling]=\"actionLink.queryParamsHandling\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [pTooltip]=\"$any($tooltip | async)\"\n [class]=\"buttonClass\"></a>\n </ng-template>\n <ng-template #customComponent>\n <ng-container\n *ngIf=\"action.component; else splitButton\"\n [mngComponent]=\"action.component\"\n [inputs]=\"{\n action: action,\n item: item,\n itemId: itemId,\n actionData: actionData,\n enabled: $isEnabled,\n loading: $loading,\n viewContainer: viewContainer\n }\"\n (instanceCreated)=\"onCustomActionCmpInst($event)\">\n </ng-container>\n </ng-template>\n <ng-template #splitButton>\n <p-splitButton\n *ngIf=\"action.subactions.length > 0 && !action.subactionsAsMenu; else button\"\n [icon]=\"$any(action.button.icon)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (onClick)=\"triggerAction(action)\"\n [class]=\"buttonClass\"\n [model]=\"subactions\">\n </p-splitButton>\n </ng-template>\n <ng-template #button>\n <button\n pButton\n pRipple\n type=\"button\"\n [icon]=\"$any(action.button.icon)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [loading]=\"(($loading | async) ?? false) || ((inputLoading | async) ?? false)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (click)=\"triggerAction(action, undefined, $event)\"\n [class]=\"buttonClass\"></button>\n <p-slideMenu #subactionsMenu [model]=\"subactions\" [popup]=\"true\" [viewportHeight]=\"100\"></p-slideMenu>\n </ng-template>\n <p-confirmDialog\n *ngIf=\"action.runConfirmationDialogDescriptor\"\n [key]=\"action.actionName + '_' + cmpId\"\n [baseZIndex]=\"50\"\n appendTo=\"body\"\n [closable]=\"action.runConfirmationDialogDescriptor.closable\"></p-confirmDialog>\n</ng-container>\n", styles: [":host{display:inline-block}\n"] }]
232
- }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.TranslateService }, { type: i3.MngAuthorizationService }, { type: i4.MngActionExecutorService }, { type: i5.ConfirmationService }, { type: i4.MngViewContainerComponentService, decorators: [{
233
- type: Optional
234
- }] }]; }, propDecorators: { hostClass: [{
235
- type: HostBinding,
236
- args: ['class']
237
- }], isHostHidden: [{
238
- type: HostBinding,
239
- args: ['class.m-0']
240
- }], action: [{
241
- type: Input
242
- }], item: [{
243
- type: Input
244
- }], itemId: [{
245
- type: Input
246
- }], actionData: [{
247
- type: Input
248
- }], queryParam: [{
249
- type: Input
250
- }], dataProvider: [{
251
- type: Input
252
- }], hostComponent: [{
253
- type: Input
254
- }], routeInit: [{
255
- type: Input,
256
- args: ['route']
257
- }], inputDisabled: [{
258
- type: Input,
259
- args: ['disabled']
260
- }], inputLoading: [{
261
- type: Input,
262
- args: ['loading']
263
- }], viewContainerInit: [{
264
- type: Input,
265
- args: ['viewContainer']
266
- }], selectedItems: [{
267
- type: Input
268
- }], finishEventEmitter: [{
269
- type: Output,
270
- args: ['finish']
271
- }], subactionsMenu: [{
272
- type: ViewChild,
273
- args: ['subactionsMenu']
274
- }] } });
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQWdDLFFBQVEsRUFBRSxNQUFNLEVBQWlCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUk3SyxPQUFPLEVBQUMsbUJBQW1CLEVBQVcsTUFBTSxhQUFhLENBQUM7QUFFMUQsT0FBTyxFQUFhLGFBQWEsRUFBZ0IsYUFBYSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUl0RyxPQUFPLEVBQW1CLG9CQUFvQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFJekUsT0FBTyxFQUFlLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRy9ELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFzRCxnQkFBZ0IsRUFBNkIsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVM0gsTUFBTSxPQUFPLGtCQUFrQjtJQXdEM0IsWUFDWSxZQUE0QixFQUM1QixTQUEyQixFQUMzQixhQUFzQyxFQUN0QyxjQUF3QyxFQUN4QyxtQkFBd0MsRUFDNUIsb0JBQW1FO1FBTC9FLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBeUI7UUFDdEMsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBQ3hDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDNUIseUJBQW9C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QkFBQyxVQUFVO2dCQUNRLFlBQVk7c0JBQXBDLEtBQUs7dUJBQUMsU0FBUztnQkFDZSxpQkFBaUI7c0JBQS9DLEtBQUs7dUJBQUMsZUFBZTtnQkFDTixhQUFhO3NCQUE1QixLQUFLO2dCQUVtQixrQkFBa0I7c0JBQTFDLE1BQU07dUJBQUMsUUFBUTtnQkFFb0IsY0FBYztzQkFBakQsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29uZmlybWF0aW9uU2VydmljZSwgTWVudUl0ZW19IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7U2xpZGVNZW51fSBmcm9tICdwcmltZW5nL3NsaWRlbWVudSc7XG5pbXBvcnQge09ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG9mfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtNZWRpdXNRdWVyeVBhcmFtfSBmcm9tICcuLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7SURhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yLCBBY3Rpb25MaW5rRGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtJVmlld0NvbnRhaW5lciwgSVZpZXdDb250YWluZXJUYWJsZX0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nUm91dGVyRGF0YX0gZnJvbSAnLi4vLi4vcm91dGVyL21vZGVscyc7XG5pbXBvcnQge01uZ0F1dGhvcml6YXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZWN1cml0eSc7XG5pbXBvcnQge0FQZXJtaXNzaW9ucywgUGVybWlzc2lvbnN9IGZyb20gJy4uLy4uL3NlY3VyaXR5L21vZGVsJztcbmltcG9ydCB7TW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLCBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtJZFR5cGV9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7STE4blV0aWxzfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge0FjdGlvbkNvbnRleHRWYWxpZGF0aW9uLCBBY3Rpb25EYXRhLCBBY3Rpb25JbnN0YW5jZSwgQWN0aW9uUGFyYW1ldGVycywgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7SUFjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi9tb2RlbHMvYWN0aW9uLWNvbXBvbmVudC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbW5nLWFjdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbQ29uZmlybWF0aW9uU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgTW5nQWN0aW9uQ29tcG9uZW50PFQsIFM+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2Uge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKSBob3N0Q2xhc3MgPSAnbW5nLWFjdGlvbi1idXR0b24nO1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MubS0wJykgaXNIb3N0SGlkZGVuID0gZmFsc2U7XG5cbiAgICAvLyBtZXRhZGF0YSBhbmQgZWRpdG9yIG1vZGUgaW5wdXRcbiAgICBASW5wdXQoKSBwdWJsaWMgYWN0aW9uITogQWN0aW9uRGVzY3JpcHRvcjxUPjtcbiAgICBASW5wdXQoKSBwdWJsaWMgaXRlbT86IFQ7XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1JZD86IElkVHlwZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGE7XG4gICAgQElucHV0KCkgcHVibGljIHF1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBob3N0Q29tcG9uZW50PzogdW5rbm93bjtcbiAgICBASW5wdXQoJ3JvdXRlJykgcHVibGljIHJvdXRlSW5pdD86IEFjdGl2YXRlZFJvdXRlO1xuICAgIEBJbnB1dCgnZGlzYWJsZWQnKSBwdWJsaWMgaW5wdXREaXNhYmxlZDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IG9mKGZhbHNlKTtcbiAgICBASW5wdXQoJ2xvYWRpbmcnKSBwdWJsaWMgaW5wdXRMb2FkaW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gb2YoZmFsc2UpO1xuICAgIEBJbnB1dCgndmlld0NvbnRhaW5lcicpIHB1YmxpYyB2aWV3Q29udGFpbmVySW5pdD86IElWaWV3Q29udGFpbmVyPFQsIFM+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBBcnJheTxUPiA9IFtdO1xuXG4gICAgQE91dHB1dCgnZmluaXNoJykgcHVibGljIGZpbmlzaEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8QWN0aW9uSW5zdGFuY2U8VCwgUz4+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdzdWJhY3Rpb25zTWVudScpIHB1YmxpYyBzdWJhY3Rpb25zTWVudT86IFNsaWRlTWVudTtcblxuICAgIHByaXZhdGUgbG9hZGluZ1N1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwdWJsaWMgJGxvYWRpbmc6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgcHVibGljIGNtcElkOiBzdHJpbmcgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XG4gICAgcHJpdmF0ZSBpc1Zpc2libGVTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHJpdmF0ZSBpc1Zpc2libGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICRpc1Zpc2libGUgPSB0aGlzLmlzVmlzaWJsZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICBwcml2YXRlIGlzUGVybWl0dGVkU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHByaXZhdGUgaXNQZXJtaXR0ZWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICRpc1Blcm1pdHRlZCA9IHRoaXMuaXNQZXJtaXR0ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgcHJpdmF0ZSBpc0VuYWJsZWRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHJpdmF0ZSBpc0VuYWJsZWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICRpc0VuYWJsZWQgPSB0aGlzLmlzRW5hYmxlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICBwcml2YXRlIGxhYmVsU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZyB8IG51bGw+KDEpO1xuICAgIHByaXZhdGUgbGFiZWxTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICRsYWJlbCA9IHRoaXMubGFiZWxTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgcHJpdmF0ZSB0b29sdGlwU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZyB8IG51bGw+KDEpO1xuICAgIHByaXZhdGUgdG9vbHRpcFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgJHRvb2x0aXAgPSB0aGlzLnRvb2x0aXBTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+O1xuXG4gICAgcHVibGljIGFjdGlvbkxpbms/OiBBY3Rpb25MaW5rRGVzY3JpcHRvcjxUPjtcbiAgICBwdWJsaWMgaGFzTm9UaXRsZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgcHVibGljIHJvdXRlITogQWN0aXZhdGVkUm91dGU7IC8vIHZhbHVlIHdpbGwgYmUgZGV0ZXJtaW5lZCBpbiBuZ09uSW5pdFxuICAgIHByaXZhdGUgcm91dGVQZXJtaXNzaW9ucz86IEFQZXJtaXNzaW9ucztcblxuICAgIHB1YmxpYyBidXR0b25DbGFzcyA9ICdwLWJ1dHRvbi1wcmltYXJ5JztcbiAgICBwdWJsaWMgc3ViYWN0aW9uczogTWVudUl0ZW1bXSA9IFtdO1xuICAgIHByaXZhdGUgc3ViYWN0aW9uU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJvdXRlU2VydmljZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGF1dGhvcml6YXRpb246IE1uZ0F1dGhvcml6YXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFjdGlvbkV4ZWN1dG9yOiBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2aWV3Q29udGFpbmVyU2VydmljZTogTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2U8VCwgUz4gfCBudWxsXG4gICAgKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPSB0aGlzLnZpZXdDb250YWluZXJJbml0ID8/IHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2UgPz8gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnJvdXRlID0gdGhpcy5yb3V0ZUluaXQgPz8gdGhpcy5yb3V0ZVNlcnZpY2U7XG5cbiAgICAgICAgdGhpcy5oYXNOb1RpdGxlID0gdGhpcy5hY3Rpb24uYnV0dG9uLmxhYmVsID09PSBudWxsO1xuICAgICAgICB0aGlzLmlzRW5hYmxlZFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNQZXJtaXR0ZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMubGFiZWxTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMudG9vbHRpcFN1YmplY3QubmV4dChudWxsKTtcblxuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEgYXMgTW5nUm91dGVyRGF0YTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uTGlua0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uTGluayA9IHRoaXMuYWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5ICYmIHJvdXRlRGF0YS50YWJsZXZpZXdQZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgaWYgKHJvdXRlRGF0YS50YWJsZXZpZXdQZXJtaXNzaW9uc1t0aGlzLmFjdGlvbi50YWJsZXZpZXdDYXRlZ29yeV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlUGVybWlzc2lvbnMgPSByb3V0ZURhdGEudGFibGV2aWV3UGVybWlzc2lvbnNbdGhpcy5hY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc1N1YnNjcmlwdGlvbnMoKTtcblxuICAgICAgICBpZiAodGhpcy5hY3Rpb24uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmhvc3RDbGFzcyA9IHRoaXMuYWN0aW9uLmNsYXNzTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBob3N0VmlzaWJpbGl0eVN1YnNjcmlwdGlvbiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuJGlzVmlzaWJsZSwgdGhpcy4kaXNQZXJtaXR0ZWRdKS5zdWJzY3JpYmUoKFtpc1Zpc2libGUsIGlzUGVybWl0dGVkXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0hvc3RIaWRkZW4gPSAhaXNWaXNpYmxlIHx8ICFpc1Blcm1pdHRlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGhvc3RWaXNpYmlsaXR5U3Vic2NyaXB0aW9uKTtcblxuICAgICAgICB0aGlzLmJ1dHRvbkNsYXNzID0gdGhpcy5hY3Rpb24uYnV0dG9uLnN0eWxlQ2xhc3MuYnVpbGQodGhpcy5oYXNOb1RpdGxlKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEoY2hhbmdlc1snaXRlbSddPy5maXJzdENoYW5nZSA/PyB0cnVlKSB8fFxuICAgICAgICAgICAgIShjaGFuZ2VzWydpdGVtSWQnXT8uZmlyc3RDaGFuZ2UgPz8gdHJ1ZSkgfHxcbiAgICAgICAgICAgICEoY2hhbmdlc1snYWN0aW9uRGF0YSddPy5maXJzdENoYW5nZSA/PyB0cnVlKSB8fFxuICAgICAgICAgICAgKHRoaXMuYWN0aW9uLmhhc0l0ZW1zU2VsZWN0aW9uICYmICEoY2hhbmdlc1snc2VsZWN0ZWRJdGVtcyddPy5maXJzdENoYW5nZSA/PyB0cnVlKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNQZXJtaXR0ZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNFbmFibGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmxhYmVsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnRvb2x0aXBTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPiwgcGFyYW1ldGVycz86IEFjdGlvblBhcmFtZXRlcnM8VD4sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGFjdGlvbi5zdWJhY3Rpb25zQXNNZW51KSB7XG4gICAgICAgICAgICB0aGlzLnN1YmFjdGlvbnNNZW51Py50b2dnbGUoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWN0aW9uRGF0YSA9IHRoaXMuYWN0aW9uRGF0YSA/IHRoaXMuYWN0aW9uRGF0YSA6IHt9O1xuICAgICAgICBhY3Rpb25EYXRhWydjbXBJZCddID0gdGhpcy5jbXBJZDtcblxuICAgICAgICBwYXJhbWV0ZXJzID8/PSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgdGhpcy5pdGVtKVxuICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKGFjdGlvbkRhdGEpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW0odGhpcy5xdWVyeVBhcmFtKVxuICAgICAgICAgICAgLndpdGhSb3V0ZSh0aGlzLnJvdXRlKVxuICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKHRoaXMudmlld0NvbnRhaW5lcilcbiAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KHRoaXMpXG4gICAgICAgICAgICAud2l0aEhvc3RDb21wb25lbnQodGhpcy5ob3N0Q29tcG9uZW50KVxuICAgICAgICAgICAgLndpdGhTZWxlY3RlZEl0ZW1zKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG5cbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnRyaWdnZXJBY3Rpb24oYWN0aW9uLCBwYXJhbWV0ZXJzKTtcblxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIGluc3RhbmNlLnJlc3VsdCQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoRXZlbnRFbWl0dGVyLm5leHQoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc0l0ZW1zU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy52aWV3Q29udGFpbmVyIGFzIElWaWV3Q29udGFpbmVyVGFibGU8VCwgUz4pPy5yZWxvYWRUYWJsZT8uKHtkYXRhOiB7ZXZlbnQ6IGV2ZW50fX0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBpbnN0YW5jZS5lcnJvciQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoRXZlbnRFbWl0dGVyLm5leHQoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgaW5zdGFuY2UuaXNSdW5Mb2FkaW5nJC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChyZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbmZpcm1hdGlvblNlcnZpY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbmZpcm1hdGlvblNlcnZpY2VJbnN0YW5jZUtleShhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55Pikge1xuICAgICAgICByZXR1cm4gYCR7YWN0aW9uLmFjdGlvbk5hbWV9XyR7dGhpcy5jbXBJZH1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkN1c3RvbUFjdGlvbkNtcEluc3QoaW5zdGFuY2U6IElBY3Rpb25Db21wb25lbnQ8VD4pIHtcbiAgICAgICAgY29uc3QgY21wSW5zdFN1YnNjcmlwdGlvbiA9IGluc3RhbmNlLnRyaWdnZXJBY3Rpb25FdmVudEVtaXR0ZXIuc3Vic2NyaWJlKHBhcmFtcyA9PiB0aGlzLnRyaWdnZXJBY3Rpb24odGhpcy5hY3Rpb24sIHBhcmFtcykpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChjbXBJbnN0U3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NTdWJhY3Rpb25zKCk6IE1lbnVJdGVtW10ge1xuICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICAgICAgICB0aGlzLmFjdGlvbi5zdWJhY3Rpb25zO1xuICAgICAgICBmb3IgKGNvbnN0IHN1YmFjdGlvbiBvZiB0aGlzLmFjdGlvbi5zdWJhY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBtZW51SXRlbSA9IHt9IGFzIE1lbnVJdGVtO1xuXG4gICAgICAgICAgICBtZW51SXRlbS5pY29uID0gc3ViYWN0aW9uLmJ1dHRvbi5pY29uID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModGhpcy50cmFuc2xhdGUsIHN1YmFjdGlvbiwgJ3RpdGxlJywgc3ViYWN0aW9uLmJ1dHRvbi5sYWJlbCA/PyB1bmRlZmluZWQsIHRoaXMuaXRlbSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IChtZW51SXRlbS5sYWJlbCA9IHJlcyEpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldEFzeW5jKHRoaXMudHJhbnNsYXRlLCBzdWJhY3Rpb24sICd0b29sdGlwJywgdGhpcy5hY3Rpb24uYnV0dG9uLnRvb2x0aXAsIHRoaXMuaXRlbSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IChtZW51SXRlbS50b29sdGlwID0gcmVzISlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBBY3Rpb25QYXJhbWV0ZXJzKHRoaXMuaXRlbUlkLCB0aGlzLml0ZW0pXG4gICAgICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKHRoaXMuYWN0aW9uRGF0YSlcbiAgICAgICAgICAgICAgICAud2l0aFZpZXdDb250YWluZXIodGhpcy52aWV3Q29udGFpbmVyID8/IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUNvbXBvbmVudCh0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHN1YmFjdGlvbi5oYXNJdGVtc1NlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMud2l0aFNlbGVjdGVkSXRlbXModGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucHJlcGFyZUFjdGlvbkNvbnRleHRWYWxpZGF0aW9uKHN1YmFjdGlvbiwgcGFyYW1ldGVycywgdGhpcy5kYXRhUHJvdmlkZXIpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN1YmFjdGlvbi5pc0VuYWJsZWRGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBzdWJhY3Rpb24uaXNFbmFibGVkRnVuY3Rpb24oY29udGV4dCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiAobWVudUl0ZW0uZGlzYWJsZWQgPSAhcmVzKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN1YmFjdGlvbi5pc1Zpc2libGVGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBzdWJhY3Rpb24uaXNWaXNpYmxlRnVuY3Rpb24oY29udGV4dCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiAobWVudUl0ZW0udmlzaWJsZSA9IHJlcylcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtZW51SXRlbS5jb21tYW5kID0gKCkgPT4gdGhpcy50cmlnZ2VyQWN0aW9uKHN1YmFjdGlvbik7XG5cbiAgICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKG1lbnVJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVudUl0ZW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1N1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgdGhpcy5pdGVtKVxuICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKHRoaXMuYWN0aW9uRGF0YSlcbiAgICAgICAgICAgIC53aXRoVmlld0NvbnRhaW5lcih0aGlzLnZpZXdDb250YWluZXIgPz8gdW5kZWZpbmVkKVxuICAgICAgICAgICAgLndpdGhTb3VyY2VDb21wb25lbnQodGhpcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmhhc0l0ZW1zU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzLndpdGhTZWxlY3RlZEl0ZW1zKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5hY3Rpb25FeGVjdXRvci5wcmVwYXJlQWN0aW9uQ29udGV4dFZhbGlkYXRpb24odGhpcy5hY3Rpb24sIHBhcmFtZXRlcnMsIHRoaXMuZGF0YVByb3ZpZGVyKTtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aW9uLmlzVmlzaWJsZUZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlU3Vic2NyaXB0aW9uID0gdGhpcy5hY3Rpb24uaXNWaXNpYmxlRnVuY3Rpb24oY29udGV4dCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gdGhpcy5pc1Zpc2libGVTdWJqZWN0Lm5leHQocmVzKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGlvbi5wZXJtaXNzaW9ucyAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHRoaXMucm91dGVQZXJtaXNzaW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQZXJtaXR0ZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9XG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb24ucGVybWlzc2lvbnMgJiYgdGhpcy5yb3V0ZVBlcm1pc3Npb25zXG4gICAgICAgICAgICAgICAgICAgID8gUGVybWlzc2lvbnMuQWxsLm9mKHRoaXMucm91dGVQZXJtaXNzaW9ucywgdGhpcy5hY3Rpb24ucGVybWlzc2lvbnMpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5yb3V0ZVBlcm1pc3Npb25zID8/IHRoaXMuYWN0aW9uLnBlcm1pc3Npb25zITtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlU3Vic2NyaXB0aW9uID0gdGhpcy5hdXRob3JpemF0aW9uLmlzUGVybWl0dGVkKHBlcm1pc3Npb25zLCB0aGlzLnJvdXRlLnNuYXBzaG90LCBjb250ZXh0IGFzIEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPHVua25vd24sIHVua25vd24+KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB0aGlzLmlzUGVybWl0dGVkU3ViamVjdC5uZXh0KHJlcylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb24uaXNFbmFibGVkRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFbmFibGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5pc0VuYWJsZWRTdWJzY3JpcHRpb24gPSB0aGlzLmFjdGlvbi5pc0VuYWJsZWRGdW5jdGlvbihjb250ZXh0KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB0aGlzLmlzRW5hYmxlZFN1YmplY3QubmV4dChyZXMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5oYXNOb1RpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5sYWJlbFN1YnNjcmlwdGlvbiA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModGhpcy50cmFuc2xhdGUsIHRoaXMuYWN0aW9uLCAndGl0bGUnLCB0aGlzLmFjdGlvbi5idXR0b24ubGFiZWwgPz8gdW5kZWZpbmVkLCB0aGlzLml0ZW0pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogaTE4biA9PiB0aGlzLmxhYmVsU3ViamVjdC5uZXh0KGkxOG4pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9vbHRpcFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy50b29sdGlwU3Vic2NyaXB0aW9uID0gSTE4blV0aWxzLkFjdGlvbi5nZXRBc3luYyh0aGlzLnRyYW5zbGF0ZSwgdGhpcy5hY3Rpb24sICd0b29sdGlwJywgdGhpcy5hY3Rpb24uYnV0dG9uLnRvb2x0aXAsIHRoaXMuaXRlbSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGkxOG4gPT4gdGhpcy50b29sdGlwU3ViamVjdC5uZXh0KGkxOG4pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc3ViYWN0aW9ucyA9IHRoaXMucHJvY2Vzc1N1YmFjdGlvbnMoKTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiKCRpc1Zpc2libGUgfCBhc3luYykgJiYgKCRpc1Blcm1pdHRlZCB8IGFzeW5jKVwiPlxuICAgIDxhXG4gICAgICAgICpuZ0lmPVwiYWN0aW9uTGluayAmJiBhY3Rpb25MaW5rLnVybCAhPT0gJyc7IGVsc2Ugcm91dGVyTGlua1wiXG4gICAgICAgIHBCdXR0b25cbiAgICAgICAgcFJpcHBsZVxuICAgICAgICBbbGFiZWxdPVwiKCRsYWJlbCB8IGFzeW5jKSA/PyAnJ1wiXG4gICAgICAgIFtpY29uXT1cIiRhbnkoYWN0aW9uLmJ1dHRvbi5pY29uKVwiXG4gICAgICAgIFtocmVmXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpID8gbnVsbCA6IChhY3Rpb25MaW5rLnVybCB8IHBhcmFtZXRyaXplOiBpdGVtSWQ6aXRlbTphY3Rpb25EYXRhKVwiXG4gICAgICAgIFt0YXJnZXRdPVwiYWN0aW9uTGluay50YXJnZXRcIlxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCRpc0VuYWJsZWQgfCBhc3luYykgPT09IGZhbHNlIHx8ICgoaW5wdXREaXNhYmxlZCB8IGFzeW5jKSA/PyBmYWxzZSlcIlxuICAgICAgICBbcFRvb2x0aXBdPVwiJGFueSgkdG9vbHRpcCB8IGFzeW5jKVwiXG4gICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiPjwvYT5cbiAgICA8bmctdGVtcGxhdGUgI3JvdXRlckxpbms+XG4gICAgICAgIDxhXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbkxpbms7IGVsc2UgY3VzdG9tQ29tcG9uZW50XCJcbiAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgIFtpY29uXT1cIiRhbnkoYWN0aW9uLmJ1dHRvbi5pY29uKVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiKCRsYWJlbCB8IGFzeW5jKSA/PyAnJ1wiXG4gICAgICAgICAgICBbdGFyZ2V0XT1cImFjdGlvbkxpbmsudGFyZ2V0XCJcbiAgICAgICAgICAgIFtyZXBsYWNlVXJsXT1cImFjdGlvbkxpbmsucmVwbGFjZVVybFwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKSA/IG51bGwgOiAoYWN0aW9uTGluay5wYXRoU2VnbWVudHMgfCBwYXJhbWV0cml6ZTogaXRlbUlkOml0ZW06YWN0aW9uRGF0YSlcIlxuICAgICAgICAgICAgW3JlbGF0aXZlVG9dPVwicm91dGVcIlxuICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cImFjdGlvbkxpbmsucXVlcnlQYXJhbXMgfCBwYXJhbWV0cml6ZTogaXRlbUlkOml0ZW06YWN0aW9uRGF0YVwiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJhY3Rpb25MaW5rLnF1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCIkYW55KCR0b29sdGlwIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiPjwvYT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tQ29tcG9uZW50PlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5jb21wb25lbnQ7IGVsc2Ugc3BsaXRCdXR0b25cIlxuICAgICAgICAgICAgW21uZ0NvbXBvbmVudF09XCJhY3Rpb24uY29tcG9uZW50XCJcbiAgICAgICAgICAgIFtpbnB1dHNdPVwie1xuICAgICAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgaXRlbUlkOiBpdGVtSWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YTogYWN0aW9uRGF0YSxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiAkaXNFbmFibGVkLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6ICRsb2FkaW5nLFxuICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXI6IHZpZXdDb250YWluZXJcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKGluc3RhbmNlQ3JlYXRlZCk9XCJvbkN1c3RvbUFjdGlvbkNtcEluc3QoJGV2ZW50KVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjc3BsaXRCdXR0b24+XG4gICAgICAgIDxwLXNwbGl0QnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5zdWJhY3Rpb25zLmxlbmd0aCA+IDAgJiYgIWFjdGlvbi5zdWJhY3Rpb25zQXNNZW51OyBlbHNlIGJ1dHRvblwiXG4gICAgICAgICAgICBbaWNvbl09XCIkYW55KGFjdGlvbi5idXR0b24uaWNvbilcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIigkbGFiZWwgfCBhc3luYykgPz8gJydcIlxuICAgICAgICAgICAgW3BUb29sdGlwXT1cIiRhbnkoJHRvb2x0aXAgfCBhc3luYylcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpXCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cInRyaWdnZXJBY3Rpb24oYWN0aW9uKVwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiYnV0dG9uQ2xhc3NcIlxuICAgICAgICAgICAgW21vZGVsXT1cInN1YmFjdGlvbnNcIj5cbiAgICAgICAgPC9wLXNwbGl0QnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNidXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2ljb25dPVwiJGFueShhY3Rpb24uYnV0dG9uLmljb24pXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCIoJGxhYmVsIHwgYXN5bmMpID8/ICcnXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCIkYW55KCR0b29sdGlwIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cIigoJGxvYWRpbmcgfCBhc3luYykgPz8gZmFsc2UpIHx8ICgoaW5wdXRMb2FkaW5nIHwgYXN5bmMpID8/IGZhbHNlKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiKCRpc0VuYWJsZWQgfCBhc3luYykgPT09IGZhbHNlIHx8ICgoaW5wdXREaXNhYmxlZCB8IGFzeW5jKSA/PyBmYWxzZSlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRyaWdnZXJBY3Rpb24oYWN0aW9uLCB1bmRlZmluZWQsICRldmVudClcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCI+PC9idXR0b24+XG4gICAgICAgIDxwLXNsaWRlTWVudSAjc3ViYWN0aW9uc01lbnUgW21vZGVsXT1cInN1YmFjdGlvbnNcIiBbcG9wdXBdPVwidHJ1ZVwiIFt2aWV3cG9ydEhlaWdodF09XCIxMDBcIj48L3Atc2xpZGVNZW51PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPHAtY29uZmlybURpYWxvZ1xuICAgICAgICAqbmdJZj1cImFjdGlvbi5ydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yXCJcbiAgICAgICAgW2tleV09XCJhY3Rpb24uYWN0aW9uTmFtZSArICdfJyArIGNtcElkXCJcbiAgICAgICAgW2Jhc2VaSW5kZXhdPVwiNTBcIlxuICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICBbY2xvc2FibGVdPVwiYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3IuY2xvc2FibGVcIj48L3AtY29uZmlybURpYWxvZz5cbjwvbmctY29udGFpbmVyPlxuIl19
1
+ import { AsyncPipe, NgIf } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Optional, Output, ViewChild } from '@angular/core';
3
+ import { ConfirmationService } from 'primeng/api';
4
+ import { ButtonModule } from 'primeng/button';
5
+ import { ConfirmDialogModule } from 'primeng/confirmdialog';
6
+ import { RippleModule } from 'primeng/ripple';
7
+ import { SlideMenuModule } from 'primeng/slidemenu';
8
+ import { SplitButtonModule } from 'primeng/splitbutton';
9
+ import { TooltipModule } from 'primeng/tooltip';
10
+ import { ReplaySubject, combineLatest, distinctUntilChanged, of } from 'rxjs';
11
+ import { ActionLinkDescriptor } from '../../descriptors/action';
12
+ import { MngComponentDirective } from '../../directives';
13
+ import { MngParametrizePipe } from '../../pipes';
14
+ import { Permissions } from '../../security/model';
15
+ import { I18nUtils } from '../../utils';
16
+ import { ActionParameters } from './models';
17
+ import * as i0 from "@angular/core";
18
+ import * as i1 from "@angular/router";
19
+ import * as i2 from "@ngx-translate/core";
20
+ import * as i3 from "../../security";
21
+ import * as i4 from "../../services";
22
+ import * as i5 from "primeng/api";
23
+ import * as i6 from "primeng/button";
24
+ import * as i7 from "primeng/ripple";
25
+ import * as i8 from "primeng/tooltip";
26
+ import * as i9 from "primeng/confirmdialog";
27
+ import * as i10 from "primeng/splitbutton";
28
+ import * as i11 from "primeng/slidemenu";
29
+ export class MngActionComponent {
30
+ constructor(routeService, translate, authorization, actionExecutor, confirmationService, viewContainerService) {
31
+ this.routeService = routeService;
32
+ this.translate = translate;
33
+ this.authorization = authorization;
34
+ this.actionExecutor = actionExecutor;
35
+ this.confirmationService = confirmationService;
36
+ this.viewContainerService = viewContainerService;
37
+ this.hostClass = 'mng-action-button';
38
+ this.isHostHidden = false;
39
+ this.inputDisabled = of(false);
40
+ this.inputLoading = of(false);
41
+ this.selectedItems = [];
42
+ this.finishEventEmitter = new EventEmitter();
43
+ this.loadingSubject = new ReplaySubject(1);
44
+ this.$loading = this.loadingSubject.asObservable();
45
+ this.cmpId = Math.random().toString(36).substring(2);
46
+ this.isVisibleSubject = new ReplaySubject(1);
47
+ this.$isVisible = this.isVisibleSubject.asObservable().pipe(distinctUntilChanged());
48
+ this.isPermittedSubject = new ReplaySubject(1);
49
+ this.$isPermitted = this.isPermittedSubject.asObservable().pipe(distinctUntilChanged());
50
+ this.isEnabledSubject = new ReplaySubject(1);
51
+ this.$isEnabled = this.isEnabledSubject.asObservable().pipe(distinctUntilChanged());
52
+ this.labelSubject = new ReplaySubject(1);
53
+ this.$label = this.labelSubject.asObservable().pipe(distinctUntilChanged());
54
+ this.tooltipSubject = new ReplaySubject(1);
55
+ this.$tooltip = this.tooltipSubject.asObservable().pipe(distinctUntilChanged());
56
+ this.hasNoTitle = false;
57
+ this.subscriptions = [];
58
+ this.buttonClass = 'p-button-primary';
59
+ this.subactions = [];
60
+ this.subactionSubscriptions = [];
61
+ this.loadingSubject.next(false);
62
+ }
63
+ ngOnInit() {
64
+ this.viewContainer = this.viewContainerInit ?? this.viewContainerService ?? undefined;
65
+ this.route = this.routeInit ?? this.routeService;
66
+ this.hasNoTitle = this.action.button.label === null;
67
+ this.isEnabledSubject.next(true);
68
+ this.isVisibleSubject.next(true);
69
+ this.isPermittedSubject.next(true);
70
+ this.labelSubject.next(null);
71
+ this.tooltipSubject.next(null);
72
+ const routeData = this.route.snapshot.data;
73
+ if (this.action instanceof ActionLinkDescriptor) {
74
+ this.actionLink = this.action;
75
+ }
76
+ if (this.action.tableviewCategory && routeData.tableviewPermissions) {
77
+ if (routeData.tableviewPermissions[this.action.tableviewCategory]) {
78
+ this.routePermissions = routeData.tableviewPermissions[this.action.tableviewCategory];
79
+ }
80
+ }
81
+ this.processSubscriptions();
82
+ if (this.action.className) {
83
+ this.hostClass = this.action.className;
84
+ }
85
+ const hostVisibilitySubscription = combineLatest([this.$isVisible, this.$isPermitted]).subscribe(([isVisible, isPermitted]) => {
86
+ this.isHostHidden = !isVisible || !isPermitted;
87
+ });
88
+ this.subscriptions.push(hostVisibilitySubscription);
89
+ this.buttonClass = this.action.button.styleClass.build(this.hasNoTitle);
90
+ }
91
+ ngOnChanges(changes) {
92
+ if (!(changes['item']?.firstChange ?? true) ||
93
+ !(changes['itemId']?.firstChange ?? true) ||
94
+ !(changes['actionData']?.firstChange ?? true) ||
95
+ (this.action.hasItemsSelection && !(changes['selectedItems']?.firstChange ?? true))) {
96
+ this.processSubscriptions();
97
+ }
98
+ }
99
+ ngOnDestroy() {
100
+ this.isVisibleSubscription?.unsubscribe();
101
+ this.isPermittedSubscription?.unsubscribe();
102
+ this.isEnabledSubscription?.unsubscribe();
103
+ this.labelSubscription?.unsubscribe();
104
+ this.tooltipSubscription?.unsubscribe();
105
+ this.subscriptions.forEach(s => s.unsubscribe());
106
+ this.subactionSubscriptions.forEach(s => s.unsubscribe());
107
+ }
108
+ triggerAction(action, parameters, event) {
109
+ if (action.subactionsAsMenu) {
110
+ this.subactionsMenu?.toggle(event);
111
+ return;
112
+ }
113
+ const actionData = this.actionData ? this.actionData : {};
114
+ actionData['cmpId'] = this.cmpId;
115
+ parameters ?? (parameters = new ActionParameters(this.itemId, this.item)
116
+ .withActionData(actionData)
117
+ .withQueryParam(this.queryParam)
118
+ .withRoute(this.route)
119
+ .withViewContainer(this.viewContainer)
120
+ .withSourceComponent(this)
121
+ .withHostComponent(this.hostComponent)
122
+ .withSelectedItems(this.selectedItems));
123
+ const instance = this.actionExecutor.triggerAction(action, parameters);
124
+ this.subscriptions.push(instance.result$.subscribe({
125
+ next: () => {
126
+ this.finishEventEmitter.next(instance);
127
+ if (action.hasItemsSelection) {
128
+ this.viewContainer?.reloadTable?.({ data: { event: event } });
129
+ }
130
+ }
131
+ }));
132
+ this.subscriptions.push(instance.error$.subscribe({
133
+ next: () => {
134
+ this.finishEventEmitter.next(instance);
135
+ }
136
+ }));
137
+ this.subscriptions.push(instance.isRunLoading$.subscribe({
138
+ next: res => {
139
+ this.loadingSubject.next(res);
140
+ }
141
+ }));
142
+ }
143
+ getConfirmationService() {
144
+ return this.confirmationService;
145
+ }
146
+ getConfirmationServiceInstanceKey(action) {
147
+ return `${action.actionName}_${this.cmpId}`;
148
+ }
149
+ onCustomActionCmpInst(instance) {
150
+ const cmpInstSubscription = instance.triggerActionEventEmitter.subscribe(params => this.triggerAction(this.action, params));
151
+ this.subscriptions.push(cmpInstSubscription);
152
+ }
153
+ processSubactions() {
154
+ this.subactionSubscriptions.forEach(s => s.unsubscribe());
155
+ this.subactionSubscriptions = [];
156
+ const menuItems = [];
157
+ this.action.subactions;
158
+ for (const subaction of this.action.subactions) {
159
+ const menuItem = {};
160
+ menuItem.icon = subaction.button.icon ?? undefined;
161
+ this.subactionSubscriptions.push(I18nUtils.Action.getAsync(this.translate, subaction, 'title', subaction.button.label ?? undefined, this.item).subscribe({
162
+ next: res => (menuItem.label = res)
163
+ }));
164
+ this.subactionSubscriptions.push(I18nUtils.Action.getAsync(this.translate, subaction, 'tooltip', this.action.button.tooltip, this.item).subscribe({
165
+ next: res => (menuItem.tooltip = res)
166
+ }));
167
+ const parameters = new ActionParameters(this.itemId, this.item)
168
+ .withActionData(this.actionData)
169
+ .withViewContainer(this.viewContainer ?? undefined)
170
+ .withSourceComponent(this);
171
+ if (subaction.hasItemsSelection) {
172
+ parameters.withSelectedItems(this.selectedItems);
173
+ }
174
+ const context = this.actionExecutor.prepareActionContextValidation(subaction, parameters, this.dataProvider);
175
+ if (typeof subaction.isEnabledFunction === 'function') {
176
+ this.subactionSubscriptions.push(subaction.isEnabledFunction(context).subscribe({
177
+ next: res => (menuItem.disabled = !res)
178
+ }));
179
+ }
180
+ if (typeof subaction.isVisibleFunction === 'function') {
181
+ this.subactionSubscriptions.push(subaction.isVisibleFunction(context).subscribe({
182
+ next: res => (menuItem.visible = res)
183
+ }));
184
+ }
185
+ menuItem.command = () => this.triggerAction(subaction);
186
+ menuItems.push(menuItem);
187
+ }
188
+ return menuItems;
189
+ }
190
+ processSubscriptions() {
191
+ const parameters = new ActionParameters(this.itemId, this.item)
192
+ .withActionData(this.actionData)
193
+ .withViewContainer(this.viewContainer ?? undefined)
194
+ .withSourceComponent(this);
195
+ if (this.action.hasItemsSelection) {
196
+ parameters.withSelectedItems(this.selectedItems);
197
+ }
198
+ const context = this.actionExecutor.prepareActionContextValidation(this.action, parameters, this.dataProvider);
199
+ if (typeof this.action.isVisibleFunction === 'function') {
200
+ this.isVisibleSubscription?.unsubscribe();
201
+ this.isVisibleSubscription = this.action.isVisibleFunction(context).subscribe({
202
+ next: res => this.isVisibleSubject.next(res)
203
+ });
204
+ }
205
+ if (typeof this.action.permissions !== 'undefined' || typeof this.routePermissions !== 'undefined') {
206
+ this.isPermittedSubscription?.unsubscribe();
207
+ const permissions = this.action.permissions && this.routePermissions
208
+ ? Permissions.All.of(this.routePermissions, this.action.permissions)
209
+ : this.routePermissions ?? this.action.permissions;
210
+ this.isVisibleSubscription = this.authorization.isPermitted(permissions, this.route.snapshot, context).subscribe({
211
+ next: res => this.isPermittedSubject.next(res)
212
+ });
213
+ }
214
+ if (typeof this.action.isEnabledFunction === 'function') {
215
+ this.isEnabledSubscription?.unsubscribe();
216
+ this.isEnabledSubscription = this.action.isEnabledFunction(context).subscribe({
217
+ next: res => this.isEnabledSubject.next(res)
218
+ });
219
+ }
220
+ if (!this.hasNoTitle) {
221
+ this.labelSubscription?.unsubscribe();
222
+ this.labelSubscription = I18nUtils.Action.getAsync(this.translate, this.action, 'title', this.action.button.label ?? undefined, this.item).subscribe({
223
+ next: i18n => this.labelSubject.next(i18n)
224
+ });
225
+ }
226
+ this.tooltipSubscription?.unsubscribe();
227
+ this.tooltipSubscription = I18nUtils.Action.getAsync(this.translate, this.action, 'tooltip', this.action.button.tooltip, this.item).subscribe({
228
+ next: i18n => this.tooltipSubject.next(i18n)
229
+ });
230
+ this.subactions = this.processSubactions();
231
+ }
232
+ }
233
+ MngActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: MngActionComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.TranslateService }, { token: i3.MngAuthorizationService }, { token: i4.MngActionExecutorService }, { token: i5.ConfirmationService }, { token: i4.MngViewContainerComponentService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
234
+ MngActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: MngActionComponent, isStandalone: true, selector: "mng-action", inputs: { action: "action", item: "item", itemId: "itemId", actionData: "actionData", queryParam: "queryParam", dataProvider: "dataProvider", hostComponent: "hostComponent", routeInit: ["route", "routeInit"], inputDisabled: ["disabled", "inputDisabled"], inputLoading: ["loading", "inputLoading"], viewContainerInit: ["viewContainer", "viewContainerInit"], selectedItems: "selectedItems" }, outputs: { finishEventEmitter: "finish" }, host: { properties: { "class": "this.hostClass", "class.m-0": "this.isHostHidden" } }, providers: [ConfirmationService], viewQueries: [{ propertyName: "subactionsMenu", first: true, predicate: ["subactionsMenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"($isVisible | async) && ($isPermitted | async)\">\n <a\n *ngIf=\"actionLink && actionLink.url !== ''; else routerLink\"\n pButton\n pRipple\n [label]=\"($label | async) ?? ''\"\n [icon]=\"$any(action.button.icon)\"\n [href]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.url | parametrize : itemId : item : actionData)\"\n [target]=\"actionLink.target\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [pTooltip]=\"$any($tooltip | async)\"\n [class]=\"buttonClass\"></a>\n <ng-template #routerLink>\n <a\n *ngIf=\"actionLink; else customComponent\"\n pButton\n pRipple\n [icon]=\"$any(action.button.icon)\"\n [label]=\"($label | async) ?? ''\"\n [target]=\"actionLink.target\"\n [replaceUrl]=\"actionLink.replaceUrl\"\n [routerLink]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.pathSegments | parametrize : itemId : item : actionData)\"\n [relativeTo]=\"route\"\n [queryParams]=\"actionLink.queryParams | parametrize : itemId : item : actionData\"\n [queryParamsHandling]=\"actionLink.queryParamsHandling\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [pTooltip]=\"$any($tooltip | async)\"\n [class]=\"buttonClass\"></a>\n </ng-template>\n <ng-template #customComponent>\n <ng-container\n *ngIf=\"action.component; else splitButton\"\n [mngComponent]=\"action.component\"\n [inputs]=\"{\n action: action,\n item: item,\n itemId: itemId,\n actionData: actionData,\n enabled: $isEnabled,\n loading: $loading,\n viewContainer: viewContainer\n }\"\n (instanceCreated)=\"onCustomActionCmpInst($event)\">\n </ng-container>\n </ng-template>\n <ng-template #splitButton>\n <p-splitButton\n *ngIf=\"action.subactions.length > 0 && !action.subactionsAsMenu; else button\"\n [icon]=\"$any(action.button.icon)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (onClick)=\"triggerAction(action)\"\n [class]=\"buttonClass\"\n [model]=\"subactions\">\n </p-splitButton>\n </ng-template>\n <ng-template #button>\n <button\n pButton\n pRipple\n type=\"button\"\n [icon]=\"$any(action.button.icon)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [loading]=\"(($loading | async) ?? false) || ((inputLoading | async) ?? false)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (click)=\"triggerAction(action, undefined, $event)\"\n [class]=\"buttonClass\"></button>\n <p-slideMenu #subactionsMenu [model]=\"subactions\" [popup]=\"true\" [viewportHeight]=\"100\"></p-slideMenu>\n </ng-template>\n <p-confirmDialog\n *ngIf=\"action.runConfirmationDialogDescriptor\"\n [key]=\"action.actionName + '_' + cmpId\"\n [baseZIndex]=\"50\"\n appendTo=\"body\"\n [closable]=\"action.runConfirmationDialogDescriptor.closable\"></p-confirmDialog>\n</ng-container>\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i7.Ripple, selector: "[pRipple]" }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i8.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "pipe", type: MngParametrizePipe, name: "parametrize" }, { kind: "directive", type: MngComponentDirective, selector: "[mngComponent]", inputs: ["mngComponent", "inputs", "attachToHost"], outputs: ["instanceCreated"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i9.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i10.SplitButton, selector: "p-splitButton", inputs: ["model", "icon", "iconPos", "label", "style", "styleClass", "menuStyle", "menuStyleClass", "disabled", "tabindex", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onClick", "onDropdownClick"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: SlideMenuModule }, { kind: "component", type: i11.SlideMenu, selector: "p-slideMenu", inputs: ["model", "popup", "style", "styleClass", "menuWidth", "viewportHeight", "effectDuration", "easing", "backLabel", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: MngActionComponent, decorators: [{
236
+ type: Component,
237
+ args: [{ standalone: true, selector: 'mng-action', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AsyncPipe, NgIf, ButtonModule, RippleModule, TooltipModule, MngParametrizePipe, MngComponentDirective, ConfirmDialogModule, SplitButtonModule, SlideMenuModule], providers: [ConfirmationService], template: "<ng-container *ngIf=\"($isVisible | async) && ($isPermitted | async)\">\n <a\n *ngIf=\"actionLink && actionLink.url !== ''; else routerLink\"\n pButton\n pRipple\n [label]=\"($label | async) ?? ''\"\n [icon]=\"$any(action.button.icon)\"\n [href]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.url | parametrize : itemId : item : actionData)\"\n [target]=\"actionLink.target\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [pTooltip]=\"$any($tooltip | async)\"\n [class]=\"buttonClass\"></a>\n <ng-template #routerLink>\n <a\n *ngIf=\"actionLink; else customComponent\"\n pButton\n pRipple\n [icon]=\"$any(action.button.icon)\"\n [label]=\"($label | async) ?? ''\"\n [target]=\"actionLink.target\"\n [replaceUrl]=\"actionLink.replaceUrl\"\n [routerLink]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.pathSegments | parametrize : itemId : item : actionData)\"\n [relativeTo]=\"route\"\n [queryParams]=\"actionLink.queryParams | parametrize : itemId : item : actionData\"\n [queryParamsHandling]=\"actionLink.queryParamsHandling\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [pTooltip]=\"$any($tooltip | async)\"\n [class]=\"buttonClass\"></a>\n </ng-template>\n <ng-template #customComponent>\n <ng-container\n *ngIf=\"action.component; else splitButton\"\n [mngComponent]=\"action.component\"\n [inputs]=\"{\n action: action,\n item: item,\n itemId: itemId,\n actionData: actionData,\n enabled: $isEnabled,\n loading: $loading,\n viewContainer: viewContainer\n }\"\n (instanceCreated)=\"onCustomActionCmpInst($event)\">\n </ng-container>\n </ng-template>\n <ng-template #splitButton>\n <p-splitButton\n *ngIf=\"action.subactions.length > 0 && !action.subactionsAsMenu; else button\"\n [icon]=\"$any(action.button.icon)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (onClick)=\"triggerAction(action)\"\n [class]=\"buttonClass\"\n [model]=\"subactions\">\n </p-splitButton>\n </ng-template>\n <ng-template #button>\n <button\n pButton\n pRipple\n type=\"button\"\n [icon]=\"$any(action.button.icon)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [loading]=\"(($loading | async) ?? false) || ((inputLoading | async) ?? false)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (click)=\"triggerAction(action, undefined, $event)\"\n [class]=\"buttonClass\"></button>\n <p-slideMenu #subactionsMenu [model]=\"subactions\" [popup]=\"true\" [viewportHeight]=\"100\"></p-slideMenu>\n </ng-template>\n <p-confirmDialog\n *ngIf=\"action.runConfirmationDialogDescriptor\"\n [key]=\"action.actionName + '_' + cmpId\"\n [baseZIndex]=\"50\"\n appendTo=\"body\"\n [closable]=\"action.runConfirmationDialogDescriptor.closable\"></p-confirmDialog>\n</ng-container>\n", styles: [":host{display:inline-block}\n"] }]
238
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.TranslateService }, { type: i3.MngAuthorizationService }, { type: i4.MngActionExecutorService }, { type: i5.ConfirmationService }, { type: i4.MngViewContainerComponentService, decorators: [{
239
+ type: Optional
240
+ }] }]; }, propDecorators: { hostClass: [{
241
+ type: HostBinding,
242
+ args: ['class']
243
+ }], isHostHidden: [{
244
+ type: HostBinding,
245
+ args: ['class.m-0']
246
+ }], action: [{
247
+ type: Input
248
+ }], item: [{
249
+ type: Input
250
+ }], itemId: [{
251
+ type: Input
252
+ }], actionData: [{
253
+ type: Input
254
+ }], queryParam: [{
255
+ type: Input
256
+ }], dataProvider: [{
257
+ type: Input
258
+ }], hostComponent: [{
259
+ type: Input
260
+ }], routeInit: [{
261
+ type: Input,
262
+ args: ['route']
263
+ }], inputDisabled: [{
264
+ type: Input,
265
+ args: ['disabled']
266
+ }], inputLoading: [{
267
+ type: Input,
268
+ args: ['loading']
269
+ }], viewContainerInit: [{
270
+ type: Input,
271
+ args: ['viewContainer']
272
+ }], selectedItems: [{
273
+ type: Input
274
+ }], finishEventEmitter: [{
275
+ type: Output,
276
+ args: ['finish']
277
+ }], subactionsMenu: [{
278
+ type: ViewChild,
279
+ args: ['subactionsMenu']
280
+ }] } });
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBZ0MsUUFBUSxFQUFFLE1BQU0sRUFBaUIsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSTdLLE9BQU8sRUFBQyxtQkFBbUIsRUFBVyxNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBWSxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFhLGFBQWEsRUFBZ0IsYUFBYSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUl0RyxPQUFPLEVBQW1CLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDaEYsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFdkQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sYUFBYSxDQUFD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Q3BDcEMsaXBIQThFQSxrRkQzQ2MsU0FBUyw4Q0FBRSxJQUFJLDRGQUFFLFlBQVksc0tBQUUsWUFBWSw2RkFBRSxhQUFhLGlXQUFFLGtCQUFrQixvREFBRSxxQkFBcUIsNElBQUUsbUJBQW1CLGtsQkFBRSxpQkFBaUIsOGtCQUFFLGVBQWU7MkZBRy9KLGtCQUFrQjtrQkFUOUIsU0FBUztpQ0FDTSxJQUFJLFlBQ04sWUFBWSxtQkFHTCx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsYUFDOUosQ0FBQyxtQkFBbUIsQ0FBQzs7MEJBZ0UzQixRQUFROzRDQTdEUyxTQUFTO3NCQUE5QixXQUFXO3VCQUFDLE9BQU87Z0JBQ00sWUFBWTtzQkFBckMsV0FBVzt1QkFBQyxXQUFXO2dCQUdSLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ2lCLFNBQVM7c0JBQS9CLEtBQUs7dUJBQUMsT0FBTztnQkFDWSxhQUFhO3NCQUF0QyxLQUFLO3VCQUFDLFVBQVU7Z0JBQ1EsWUFBWTtzQkFBcEMsS0FBSzt1QkFBQyxTQUFTO2dCQUNlLGlCQUFpQjtzQkFBL0MsS0FBSzt1QkFBQyxlQUFlO2dCQUNOLGFBQWE7c0JBQTVCLEtBQUs7Z0JBRW1CLGtCQUFrQjtzQkFBMUMsTUFBTTt1QkFBQyxRQUFRO2dCQUVvQixjQUFjO3NCQUFqRCxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlLCBOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2UsIE1lbnVJdGVtfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0J1dHRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHtDb25maXJtRGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2NvbmZpcm1kaWFsb2cnO1xuaW1wb3J0IHtSaXBwbGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcmlwcGxlJztcbmltcG9ydCB7U2xpZGVNZW51LCBTbGlkZU1lbnVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvc2xpZGVtZW51JztcbmltcG9ydCB7U3BsaXRCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvc3BsaXRidXR0b24nO1xuaW1wb3J0IHtUb29sdGlwTW9kdWxlfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbX0gZnJvbSAnLi4vLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uTGlua0Rlc2NyaXB0b3J9IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5pbXBvcnQge01uZ0NvbXBvbmVudERpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyLCBJVmlld0NvbnRhaW5lclRhYmxlfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdQYXJhbWV0cml6ZVBpcGV9IGZyb20gJy4uLy4uL3BpcGVzJztcbmltcG9ydCB7TW5nUm91dGVyRGF0YX0gZnJvbSAnLi4vLi4vcm91dGVyL21vZGVscyc7XG5pbXBvcnQge01uZ0F1dGhvcml6YXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZWN1cml0eSc7XG5pbXBvcnQge0FQZXJtaXNzaW9ucywgUGVybWlzc2lvbnN9IGZyb20gJy4uLy4uL3NlY3VyaXR5L21vZGVsJztcbmltcG9ydCB7TW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLCBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtJZFR5cGV9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7STE4blV0aWxzfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge0FjdGlvbkNvbnRleHRWYWxpZGF0aW9uLCBBY3Rpb25EYXRhLCBBY3Rpb25JbnN0YW5jZSwgQWN0aW9uUGFyYW1ldGVycywgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7SUFjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi9tb2RlbHMvYWN0aW9uLWNvbXBvbmVudC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYWN0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hY3Rpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBOZ0lmLCBCdXR0b25Nb2R1bGUsIFJpcHBsZU1vZHVsZSwgVG9vbHRpcE1vZHVsZSwgTW5nUGFyYW1ldHJpemVQaXBlLCBNbmdDb21wb25lbnREaXJlY3RpdmUsIENvbmZpcm1EaWFsb2dNb2R1bGUsIFNwbGl0QnV0dG9uTW9kdWxlLCBTbGlkZU1lbnVNb2R1bGVdLFxuICAgIHByb3ZpZGVyczogW0NvbmZpcm1hdGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIE1uZ0FjdGlvbkNvbXBvbmVudDxULCBTPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlIHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgaG9zdENsYXNzID0gJ21uZy1hY3Rpb24tYnV0dG9uJztcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm0tMCcpIGlzSG9zdEhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gbWV0YWRhdGEgYW5kIGVkaXRvciBtb2RlIGlucHV0XG4gICAgQElucHV0KCkgcHVibGljIGFjdGlvbiE6IEFjdGlvbkRlc2NyaXB0b3I8VD47XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW0/OiBUO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtSWQ/OiBJZFR5cGU7XG4gICAgQElucHV0KCkgcHVibGljIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbTtcbiAgICBASW5wdXQoKSBwdWJsaWMgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPjtcbiAgICBASW5wdXQoKSBwdWJsaWMgaG9zdENvbXBvbmVudD86IHVua25vd247XG4gICAgQElucHV0KCdyb3V0ZScpIHB1YmxpYyByb3V0ZUluaXQ/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgICBASW5wdXQoJ2Rpc2FibGVkJykgcHVibGljIGlucHV0RGlzYWJsZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBvZihmYWxzZSk7XG4gICAgQElucHV0KCdsb2FkaW5nJykgcHVibGljIGlucHV0TG9hZGluZzogT2JzZXJ2YWJsZTxib29sZWFuPiA9IG9mKGZhbHNlKTtcbiAgICBASW5wdXQoJ3ZpZXdDb250YWluZXInKSBwdWJsaWMgdmlld0NvbnRhaW5lckluaXQ/OiBJVmlld0NvbnRhaW5lcjxULCBTPjtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWRJdGVtczogQXJyYXk8VD4gPSBbXTtcblxuICAgIEBPdXRwdXQoJ2ZpbmlzaCcpIHB1YmxpYyBmaW5pc2hFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEFjdGlvbkluc3RhbmNlPFQsIFM+PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3ViYWN0aW9uc01lbnUnKSBwdWJsaWMgc3ViYWN0aW9uc01lbnU/OiBTbGlkZU1lbnU7XG5cbiAgICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHVibGljICRsb2FkaW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgIHB1YmxpYyBjbXBJZDogc3RyaW5nID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpO1xuICAgIHByaXZhdGUgaXNWaXNpYmxlU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHByaXZhdGUgaXNWaXNpYmxlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyAkaXNWaXNpYmxlID0gdGhpcy5pc1Zpc2libGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgcHJpdmF0ZSBpc1Blcm1pdHRlZFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwcml2YXRlIGlzUGVybWl0dGVkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyAkaXNQZXJtaXR0ZWQgPSB0aGlzLmlzUGVybWl0dGVkU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIHByaXZhdGUgaXNFbmFibGVkU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHByaXZhdGUgaXNFbmFibGVkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyAkaXNFbmFibGVkID0gdGhpcy5pc0VuYWJsZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgcHJpdmF0ZSBsYWJlbFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmcgfCBudWxsPigxKTtcbiAgICBwcml2YXRlIGxhYmVsU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyAkbGFiZWwgPSB0aGlzLmxhYmVsU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIHByaXZhdGUgdG9vbHRpcFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmcgfCBudWxsPigxKTtcbiAgICBwcml2YXRlIHRvb2x0aXBTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICR0b29sdGlwID0gdGhpcy50b29sdGlwU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuXG4gICAgcHVibGljIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPjtcblxuICAgIHB1YmxpYyBhY3Rpb25MaW5rPzogQWN0aW9uTGlua0Rlc2NyaXB0b3I8VD47XG4gICAgcHVibGljIGhhc05vVGl0bGUgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIHB1YmxpYyByb3V0ZSE6IEFjdGl2YXRlZFJvdXRlOyAvLyB2YWx1ZSB3aWxsIGJlIGRldGVybWluZWQgaW4gbmdPbkluaXRcbiAgICBwcml2YXRlIHJvdXRlUGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnM7XG5cbiAgICBwdWJsaWMgYnV0dG9uQ2xhc3MgPSAncC1idXR0b24tcHJpbWFyeSc7XG4gICAgcHVibGljIHN1YmFjdGlvbnM6IE1lbnVJdGVtW10gPSBbXTtcbiAgICBwcml2YXRlIHN1YmFjdGlvblN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByb3V0ZVNlcnZpY2U6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhdXRob3JpemF0aW9uOiBNbmdBdXRob3JpemF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhY3Rpb25FeGVjdXRvcjogTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdmlld0NvbnRhaW5lclNlcnZpY2U6IE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlPFQsIFM+IHwgbnVsbFxuICAgICkge1xuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyID0gdGhpcy52aWV3Q29udGFpbmVySW5pdCA/PyB0aGlzLnZpZXdDb250YWluZXJTZXJ2aWNlID8/IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5yb3V0ZSA9IHRoaXMucm91dGVJbml0ID8/IHRoaXMucm91dGVTZXJ2aWNlO1xuXG4gICAgICAgIHRoaXMuaGFzTm9UaXRsZSA9IHRoaXMuYWN0aW9uLmJ1dHRvbi5sYWJlbCA9PT0gbnVsbDtcbiAgICAgICAgdGhpcy5pc0VuYWJsZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmlzUGVybWl0dGVkU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmxhYmVsU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLnRvb2x0aXBTdWJqZWN0Lm5leHQobnVsbCk7XG5cbiAgICAgICAgY29uc3Qgcm91dGVEYXRhID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhIGFzIE1uZ1JvdXRlckRhdGE7XG4gICAgICAgIGlmICh0aGlzLmFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkxpbmtEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkxpbmsgPSB0aGlzLmFjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbi50YWJsZXZpZXdDYXRlZ29yeSAmJiByb3V0ZURhdGEudGFibGV2aWV3UGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGlmIChyb3V0ZURhdGEudGFibGV2aWV3UGVybWlzc2lvbnNbdGhpcy5hY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZVBlcm1pc3Npb25zID0gcm91dGVEYXRhLnRhYmxldmlld1Blcm1pc3Npb25zW3RoaXMuYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NTdWJzY3JpcHRpb25zKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5ob3N0Q2xhc3MgPSB0aGlzLmFjdGlvbi5jbGFzc05hbWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG9zdFZpc2liaWxpdHlTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLiRpc1Zpc2libGUsIHRoaXMuJGlzUGVybWl0dGVkXSkuc3Vic2NyaWJlKChbaXNWaXNpYmxlLCBpc1Blcm1pdHRlZF0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNIb3N0SGlkZGVuID0gIWlzVmlzaWJsZSB8fCAhaXNQZXJtaXR0ZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChob3N0VmlzaWJpbGl0eVN1YnNjcmlwdGlvbik7XG5cbiAgICAgICAgdGhpcy5idXR0b25DbGFzcyA9IHRoaXMuYWN0aW9uLmJ1dHRvbi5zdHlsZUNsYXNzLmJ1aWxkKHRoaXMuaGFzTm9UaXRsZSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKGNoYW5nZXNbJ2l0ZW0nXT8uZmlyc3RDaGFuZ2UgPz8gdHJ1ZSkgfHxcbiAgICAgICAgICAgICEoY2hhbmdlc1snaXRlbUlkJ10/LmZpcnN0Q2hhbmdlID8/IHRydWUpIHx8XG4gICAgICAgICAgICAhKGNoYW5nZXNbJ2FjdGlvbkRhdGEnXT8uZmlyc3RDaGFuZ2UgPz8gdHJ1ZSkgfHxcbiAgICAgICAgICAgICh0aGlzLmFjdGlvbi5oYXNJdGVtc1NlbGVjdGlvbiAmJiAhKGNoYW5nZXNbJ3NlbGVjdGVkSXRlbXMnXT8uZmlyc3RDaGFuZ2UgPz8gdHJ1ZSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmlzUGVybWl0dGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmlzRW5hYmxlZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5sYWJlbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy50b29sdGlwU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlckFjdGlvbihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIHBhcmFtZXRlcnM/OiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmIChhY3Rpb24uc3ViYWN0aW9uc0FzTWVudSkge1xuICAgICAgICAgICAgdGhpcy5zdWJhY3Rpb25zTWVudT8udG9nZ2xlKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGlvbkRhdGEgPSB0aGlzLmFjdGlvbkRhdGEgPyB0aGlzLmFjdGlvbkRhdGEgOiB7fTtcbiAgICAgICAgYWN0aW9uRGF0YVsnY21wSWQnXSA9IHRoaXMuY21wSWQ7XG5cbiAgICAgICAgcGFyYW1ldGVycyA/Pz0gbmV3IEFjdGlvblBhcmFtZXRlcnModGhpcy5pdGVtSWQsIHRoaXMuaXRlbSlcbiAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YShhY3Rpb25EYXRhKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtKHRoaXMucXVlcnlQYXJhbSlcbiAgICAgICAgICAgIC53aXRoUm91dGUodGhpcy5yb3V0ZSlcbiAgICAgICAgICAgIC53aXRoVmlld0NvbnRhaW5lcih0aGlzLnZpZXdDb250YWluZXIpXG4gICAgICAgICAgICAud2l0aFNvdXJjZUNvbXBvbmVudCh0aGlzKVxuICAgICAgICAgICAgLndpdGhIb3N0Q29tcG9uZW50KHRoaXMuaG9zdENvbXBvbmVudClcbiAgICAgICAgICAgIC53aXRoU2VsZWN0ZWRJdGVtcyh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5hY3Rpb25FeGVjdXRvci50cmlnZ2VyQWN0aW9uKGFjdGlvbiwgcGFyYW1ldGVycyk7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBpbnN0YW5jZS5yZXN1bHQkLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaEV2ZW50RW1pdHRlci5uZXh0KGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNJdGVtc1NlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMudmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lclRhYmxlPFQsIFM+KT8ucmVsb2FkVGFibGU/Lih7ZGF0YToge2V2ZW50OiBldmVudH19KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgaW5zdGFuY2UuZXJyb3IkLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaEV2ZW50RW1pdHRlci5uZXh0KGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIGluc3RhbmNlLmlzUnVuTG9hZGluZyQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb25maXJtYXRpb25TZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb25maXJtYXRpb25TZXJ2aWNlSW5zdGFuY2VLZXkoYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4pIHtcbiAgICAgICAgcmV0dXJuIGAke2FjdGlvbi5hY3Rpb25OYW1lfV8ke3RoaXMuY21wSWR9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DdXN0b21BY3Rpb25DbXBJbnN0KGluc3RhbmNlOiBJQWN0aW9uQ29tcG9uZW50PFQ+KSB7XG4gICAgICAgIGNvbnN0IGNtcEluc3RTdWJzY3JpcHRpb24gPSBpbnN0YW5jZS50cmlnZ2VyQWN0aW9uRXZlbnRFbWl0dGVyLnN1YnNjcmliZShwYXJhbXMgPT4gdGhpcy50cmlnZ2VyQWN0aW9uKHRoaXMuYWN0aW9uLCBwYXJhbXMpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goY21wSW5zdFN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzU3ViYWN0aW9ucygpOiBNZW51SXRlbVtdIHtcbiAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgICAgICBjb25zdCBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcbiAgICAgICAgdGhpcy5hY3Rpb24uc3ViYWN0aW9ucztcbiAgICAgICAgZm9yIChjb25zdCBzdWJhY3Rpb24gb2YgdGhpcy5hY3Rpb24uc3ViYWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgbWVudUl0ZW0gPSB7fSBhcyBNZW51SXRlbTtcblxuICAgICAgICAgICAgbWVudUl0ZW0uaWNvbiA9IHN1YmFjdGlvbi5idXR0b24uaWNvbiA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldEFzeW5jKHRoaXMudHJhbnNsYXRlLCBzdWJhY3Rpb24sICd0aXRsZScsIHN1YmFjdGlvbi5idXR0b24ubGFiZWwgPz8gdW5kZWZpbmVkLCB0aGlzLml0ZW0pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiAobWVudUl0ZW0ubGFiZWwgPSByZXMhKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgSTE4blV0aWxzLkFjdGlvbi5nZXRBc3luYyh0aGlzLnRyYW5zbGF0ZSwgc3ViYWN0aW9uLCAndG9vbHRpcCcsIHRoaXMuYWN0aW9uLmJ1dHRvbi50b29sdGlwLCB0aGlzLml0ZW0pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiAobWVudUl0ZW0udG9vbHRpcCA9IHJlcyEpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgdGhpcy5pdGVtKVxuICAgICAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YSh0aGlzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKHRoaXMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgLndpdGhTb3VyY2VDb21wb25lbnQodGhpcyk7XG5cbiAgICAgICAgICAgIGlmIChzdWJhY3Rpb24uaGFzSXRlbXNTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLndpdGhTZWxlY3RlZEl0ZW1zKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbihzdWJhY3Rpb24sIHBhcmFtZXRlcnMsIHRoaXMuZGF0YVByb3ZpZGVyKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJhY3Rpb24uaXNFbmFibGVkRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgc3ViYWN0aW9uLmlzRW5hYmxlZEZ1bmN0aW9uKGNvbnRleHQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gKG1lbnVJdGVtLmRpc2FibGVkID0gIXJlcylcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJhY3Rpb24uaXNWaXNpYmxlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgc3ViYWN0aW9uLmlzVmlzaWJsZUZ1bmN0aW9uKGNvbnRleHQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gKG1lbnVJdGVtLnZpc2libGUgPSByZXMpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWVudUl0ZW0uY29tbWFuZCA9ICgpID0+IHRoaXMudHJpZ2dlckFjdGlvbihzdWJhY3Rpb24pO1xuXG4gICAgICAgICAgICBtZW51SXRlbXMucHVzaChtZW51SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0gbmV3IEFjdGlvblBhcmFtZXRlcnModGhpcy5pdGVtSWQsIHRoaXMuaXRlbSlcbiAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YSh0aGlzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAud2l0aFZpZXdDb250YWluZXIodGhpcy52aWV3Q29udGFpbmVyID8/IHVuZGVmaW5lZClcbiAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KHRoaXMpO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbi5oYXNJdGVtc1NlbGVjdGlvbikge1xuICAgICAgICAgICAgcGFyYW1ldGVycy53aXRoU2VsZWN0ZWRJdGVtcyh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucHJlcGFyZUFjdGlvbkNvbnRleHRWYWxpZGF0aW9uKHRoaXMuYWN0aW9uLCBwYXJhbWV0ZXJzLCB0aGlzLmRhdGFQcm92aWRlcik7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGlvbi5pc1Zpc2libGVGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZVN1YnNjcmlwdGlvbiA9IHRoaXMuYWN0aW9uLmlzVmlzaWJsZUZ1bmN0aW9uKGNvbnRleHQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IHRoaXMuaXNWaXNpYmxlU3ViamVjdC5uZXh0KHJlcylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb24ucGVybWlzc2lvbnMgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB0aGlzLnJvdXRlUGVybWlzc2lvbnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmlzUGVybWl0dGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPVxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uLnBlcm1pc3Npb25zICYmIHRoaXMucm91dGVQZXJtaXNzaW9uc1xuICAgICAgICAgICAgICAgICAgICA/IFBlcm1pc3Npb25zLkFsbC5vZih0aGlzLnJvdXRlUGVybWlzc2lvbnMsIHRoaXMuYWN0aW9uLnBlcm1pc3Npb25zKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucm91dGVQZXJtaXNzaW9ucyA/PyB0aGlzLmFjdGlvbi5wZXJtaXNzaW9ucyE7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZVN1YnNjcmlwdGlvbiA9IHRoaXMuYXV0aG9yaXphdGlvbi5pc1Blcm1pdHRlZChwZXJtaXNzaW9ucywgdGhpcy5yb3V0ZS5zbmFwc2hvdCwgY29udGV4dCBhcyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjx1bmtub3duLCB1bmtub3duPikuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gdGhpcy5pc1Blcm1pdHRlZFN1YmplY3QubmV4dChyZXMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aW9uLmlzRW5hYmxlZEZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmlzRW5hYmxlZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuaXNFbmFibGVkU3Vic2NyaXB0aW9uID0gdGhpcy5hY3Rpb24uaXNFbmFibGVkRnVuY3Rpb24oY29udGV4dCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gdGhpcy5pc0VuYWJsZWRTdWJqZWN0Lm5leHQocmVzKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaGFzTm9UaXRsZSkge1xuICAgICAgICAgICAgdGhpcy5sYWJlbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMubGFiZWxTdWJzY3JpcHRpb24gPSBJMThuVXRpbHMuQWN0aW9uLmdldEFzeW5jKHRoaXMudHJhbnNsYXRlLCB0aGlzLmFjdGlvbiwgJ3RpdGxlJywgdGhpcy5hY3Rpb24uYnV0dG9uLmxhYmVsID8/IHVuZGVmaW5lZCwgdGhpcy5pdGVtKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGkxOG4gPT4gdGhpcy5sYWJlbFN1YmplY3QubmV4dChpMThuKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvb2x0aXBTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMudG9vbHRpcFN1YnNjcmlwdGlvbiA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModGhpcy50cmFuc2xhdGUsIHRoaXMuYWN0aW9uLCAndG9vbHRpcCcsIHRoaXMuYWN0aW9uLmJ1dHRvbi50b29sdGlwLCB0aGlzLml0ZW0pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBpMThuID0+IHRoaXMudG9vbHRpcFN1YmplY3QubmV4dChpMThuKVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN1YmFjdGlvbnMgPSB0aGlzLnByb2Nlc3NTdWJhY3Rpb25zKCk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIigkaXNWaXNpYmxlIHwgYXN5bmMpICYmICgkaXNQZXJtaXR0ZWQgfCBhc3luYylcIj5cbiAgICA8YVxuICAgICAgICAqbmdJZj1cImFjdGlvbkxpbmsgJiYgYWN0aW9uTGluay51cmwgIT09ICcnOyBlbHNlIHJvdXRlckxpbmtcIlxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIHBSaXBwbGVcbiAgICAgICAgW2xhYmVsXT1cIigkbGFiZWwgfCBhc3luYykgPz8gJydcIlxuICAgICAgICBbaWNvbl09XCIkYW55KGFjdGlvbi5idXR0b24uaWNvbilcIlxuICAgICAgICBbaHJlZl09XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKSA/IG51bGwgOiAoYWN0aW9uTGluay51cmwgfCBwYXJhbWV0cml6ZSA6IGl0ZW1JZCA6IGl0ZW0gOiBhY3Rpb25EYXRhKVwiXG4gICAgICAgIFt0YXJnZXRdPVwiYWN0aW9uTGluay50YXJnZXRcIlxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCRpc0VuYWJsZWQgfCBhc3luYykgPT09IGZhbHNlIHx8ICgoaW5wdXREaXNhYmxlZCB8IGFzeW5jKSA/PyBmYWxzZSlcIlxuICAgICAgICBbcFRvb2x0aXBdPVwiJGFueSgkdG9vbHRpcCB8IGFzeW5jKVwiXG4gICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiPjwvYT5cbiAgICA8bmctdGVtcGxhdGUgI3JvdXRlckxpbms+XG4gICAgICAgIDxhXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbkxpbms7IGVsc2UgY3VzdG9tQ29tcG9uZW50XCJcbiAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgIFtpY29uXT1cIiRhbnkoYWN0aW9uLmJ1dHRvbi5pY29uKVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiKCRsYWJlbCB8IGFzeW5jKSA/PyAnJ1wiXG4gICAgICAgICAgICBbdGFyZ2V0XT1cImFjdGlvbkxpbmsudGFyZ2V0XCJcbiAgICAgICAgICAgIFtyZXBsYWNlVXJsXT1cImFjdGlvbkxpbmsucmVwbGFjZVVybFwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKSA/IG51bGwgOiAoYWN0aW9uTGluay5wYXRoU2VnbWVudHMgfCBwYXJhbWV0cml6ZSA6IGl0ZW1JZCA6IGl0ZW0gOiBhY3Rpb25EYXRhKVwiXG4gICAgICAgICAgICBbcmVsYXRpdmVUb109XCJyb3V0ZVwiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwiYWN0aW9uTGluay5xdWVyeVBhcmFtcyB8IHBhcmFtZXRyaXplIDogaXRlbUlkIDogaXRlbSA6IGFjdGlvbkRhdGFcIlxuICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zSGFuZGxpbmddPVwiYWN0aW9uTGluay5xdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKVwiXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJGFueSgkdG9vbHRpcCB8IGFzeW5jKVwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiYnV0dG9uQ2xhc3NcIj48L2E+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2N1c3RvbUNvbXBvbmVudD5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uY29tcG9uZW50OyBlbHNlIHNwbGl0QnV0dG9uXCJcbiAgICAgICAgICAgIFttbmdDb21wb25lbnRdPVwiYWN0aW9uLmNvbXBvbmVudFwiXG4gICAgICAgICAgICBbaW5wdXRzXT1cIntcbiAgICAgICAgICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICAgIGFjdGlvbkRhdGE6IGFjdGlvbkRhdGEsXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogJGlzRW5hYmxlZCxcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiAkbG9hZGluZyxcbiAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyOiB2aWV3Q29udGFpbmVyXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChpbnN0YW5jZUNyZWF0ZWQpPVwib25DdXN0b21BY3Rpb25DbXBJbnN0KCRldmVudClcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI3NwbGl0QnV0dG9uPlxuICAgICAgICA8cC1zcGxpdEJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc3ViYWN0aW9ucy5sZW5ndGggPiAwICYmICFhY3Rpb24uc3ViYWN0aW9uc0FzTWVudTsgZWxzZSBidXR0b25cIlxuICAgICAgICAgICAgW2ljb25dPVwiJGFueShhY3Rpb24uYnV0dG9uLmljb24pXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCIoJGxhYmVsIHwgYXN5bmMpID8/ICcnXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCIkYW55KCR0b29sdGlwIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKVwiXG4gICAgICAgICAgICAob25DbGljayk9XCJ0cmlnZ2VyQWN0aW9uKGFjdGlvbilcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCJcbiAgICAgICAgICAgIFttb2RlbF09XCJzdWJhY3Rpb25zXCI+XG4gICAgICAgIDwvcC1zcGxpdEJ1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtpY29uXT1cIiRhbnkoYWN0aW9uLmJ1dHRvbi5pY29uKVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiKCRsYWJlbCB8IGFzeW5jKSA/PyAnJ1wiXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJGFueSgkdG9vbHRpcCB8IGFzeW5jKVwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCIoKCRsb2FkaW5nIHwgYXN5bmMpID8/IGZhbHNlKSB8fCAoKGlucHV0TG9hZGluZyB8IGFzeW5jKSA/PyBmYWxzZSlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0cmlnZ2VyQWN0aW9uKGFjdGlvbiwgdW5kZWZpbmVkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiPjwvYnV0dG9uPlxuICAgICAgICA8cC1zbGlkZU1lbnUgI3N1YmFjdGlvbnNNZW51IFttb2RlbF09XCJzdWJhY3Rpb25zXCIgW3BvcHVwXT1cInRydWVcIiBbdmlld3BvcnRIZWlnaHRdPVwiMTAwXCI+PC9wLXNsaWRlTWVudT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxwLWNvbmZpcm1EaWFsb2dcbiAgICAgICAgKm5nSWY9XCJhY3Rpb24ucnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvclwiXG4gICAgICAgIFtrZXldPVwiYWN0aW9uLmFjdGlvbk5hbWUgKyAnXycgKyBjbXBJZFwiXG4gICAgICAgIFtiYXNlWkluZGV4XT1cIjUwXCJcbiAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgW2Nsb3NhYmxlXT1cImFjdGlvbi5ydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yLmNsb3NhYmxlXCI+PC9wLWNvbmZpcm1EaWFsb2c+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==