@alfresco/aca-content 5.1.1 → 5.2.0-11950694546

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 (408) hide show
  1. package/assets/app.extensions.json +9 -0
  2. package/assets/i18n/ar.json +600 -599
  3. package/assets/i18n/cs.json +600 -599
  4. package/assets/i18n/da.json +600 -599
  5. package/assets/i18n/de.json +600 -599
  6. package/assets/i18n/en.json +40 -1
  7. package/assets/i18n/es.json +600 -599
  8. package/assets/i18n/fi.json +600 -599
  9. package/assets/i18n/fr.json +600 -599
  10. package/assets/i18n/it.json +600 -599
  11. package/assets/i18n/ja.json +600 -599
  12. package/assets/i18n/nb.json +600 -599
  13. package/assets/i18n/nl.json +600 -599
  14. package/assets/i18n/pl.json +600 -599
  15. package/assets/i18n/pt-BR.json +600 -599
  16. package/assets/i18n/ru.json +600 -599
  17. package/assets/i18n/sv.json +600 -599
  18. package/assets/i18n/zh-CN.json +600 -599
  19. package/esm2022/about/about.component.mjs +70 -0
  20. package/esm2022/about/aca-about.module.mjs +47 -0
  21. package/esm2022/folder-rules/folder-rules.module.mjs +116 -0
  22. package/esm2022/folder-rules/manage-rules/manage-rules.smart-component.mjs +276 -0
  23. package/esm2022/folder-rules/rule-details/actions/rule-action-list.ui-component.mjs +117 -0
  24. package/esm2022/folder-rules/rule-details/actions/rule-action.ui-component.mjs +356 -0
  25. package/esm2022/folder-rules/rule-details/conditions/rule-composite-condition.ui-component.mjs +171 -0
  26. package/esm2022/folder-rules/rule-details/conditions/rule-simple-condition.ui-component.mjs +233 -0
  27. package/esm2022/folder-rules/rule-details/edit-rule-dialog.ui-component.mjs +80 -0
  28. package/esm2022/folder-rules/rule-details/options/rule-options.ui-component.mjs +129 -0
  29. package/esm2022/folder-rules/rule-details/rule-details.ui-component.mjs +188 -0
  30. package/esm2022/folder-rules/rule-details/triggers/rule-triggers.ui-component.mjs +87 -0
  31. package/esm2022/folder-rules/rule-details/validators/rule-actions.validator.mjs +36 -0
  32. package/esm2022/folder-rules/rule-list/rule-list/rule-list.ui-component.mjs +164 -0
  33. package/esm2022/folder-rules/rule-list/rule-list-grouping/rule-list-grouping.ui-component.mjs +80 -0
  34. package/esm2022/folder-rules/rule-list/rule-list-item/rule-list-item.ui-component.mjs +59 -0
  35. package/esm2022/folder-rules/rule-set-picker/rule-set-picker.smart-component.mjs +122 -0
  36. package/esm2022/folder-rules/services/actions.service.mjs +117 -0
  37. package/esm2022/folder-rules/services/folder-rule-sets.service.mjs +230 -0
  38. package/esm2022/folder-rules/services/folder-rules.service.mjs +195 -0
  39. package/esm2022/lib/aca-content.module.mjs +303 -0
  40. package/esm2022/lib/aca-content.routes.mjs +369 -0
  41. package/esm2022/lib/components/bulk-actions-dropdown/bulk-actions-dropdown.component.mjs +79 -0
  42. package/{esm2020 → esm2022}/lib/components/common/language-picker/language-picker.component.mjs +9 -8
  43. package/esm2022/lib/components/common/location-link/location-link.component.mjs +182 -0
  44. package/{esm2020 → esm2022}/lib/components/common/logout/logout.component.mjs +8 -6
  45. package/esm2022/lib/components/common/toggle-shared/toggle-shared.component.mjs +76 -0
  46. package/esm2022/lib/components/common/user-info/user-info.component.mjs +46 -0
  47. package/esm2022/lib/components/context-menu/base-context-menu.directive.mjs +77 -0
  48. package/esm2022/lib/components/context-menu/context-menu-item.component.mjs +65 -0
  49. package/esm2022/lib/components/context-menu/context-menu-outside-event.directive.mjs +57 -0
  50. package/esm2022/lib/components/context-menu/context-menu-overlay.mjs +33 -0
  51. package/esm2022/lib/components/context-menu/context-menu.component.mjs +84 -0
  52. package/esm2022/lib/components/context-menu/context-menu.service.mjs +127 -0
  53. package/esm2022/lib/components/context-menu/custom-context-menu-actions.token.mjs +26 -0
  54. package/esm2022/lib/components/context-menu/custom-context-menu.component.mjs +79 -0
  55. package/esm2022/lib/components/details/details.component.mjs +155 -0
  56. package/esm2022/lib/components/dl-custom-components/datatable-cell-badges/datatable-cell-badges.component.mjs +70 -0
  57. package/esm2022/lib/components/dl-custom-components/name-column/name-column.component.mjs +102 -0
  58. package/esm2022/lib/components/dl-custom-components/tags-column/tags-column.component.mjs +52 -0
  59. package/esm2022/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.mjs +77 -0
  60. package/esm2022/lib/components/favorite-libraries/favorite-libraries.component.mjs +126 -0
  61. package/esm2022/lib/components/favorites/favorites.component.mjs +105 -0
  62. package/esm2022/lib/components/files/files.component.mjs +337 -0
  63. package/esm2022/lib/components/home/home.component.mjs +46 -0
  64. package/esm2022/lib/components/info-drawer/comments-tab/comments-tab.component.mjs +62 -0
  65. package/esm2022/lib/components/info-drawer/info.drawer.module.mjs +74 -0
  66. package/esm2022/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.mjs +210 -0
  67. package/esm2022/lib/components/info-drawer/library-metadata-tab/library-metadata-tab.component.mjs +47 -0
  68. package/esm2022/lib/components/info-drawer/metadata-tab/metadata-tab.component.mjs +141 -0
  69. package/esm2022/lib/components/info-drawer/versions-tab/versions-tab.component.mjs +107 -0
  70. package/esm2022/lib/components/knowledge-retrieval/search-ai/agents-button/agents-button.component.mjs +132 -0
  71. package/esm2022/lib/components/knowledge-retrieval/search-ai/search-ai-input/search-ai-input.component.mjs +176 -0
  72. package/esm2022/lib/components/knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component.mjs +77 -0
  73. package/esm2022/lib/components/knowledge-retrieval/search-ai/search-ai-results/search-ai-results.component.mjs +207 -0
  74. package/esm2022/lib/components/libraries/libraries.component.mjs +81 -0
  75. package/esm2022/lib/components/recent-files/recent-files.component.mjs +80 -0
  76. package/esm2022/lib/components/search/search-action-menu/search-action-menu.component.mjs +66 -0
  77. package/esm2022/lib/components/search/search-input/search-input.component.mjs +294 -0
  78. package/esm2022/lib/components/search/search-input-control/search-input-control.component.mjs +88 -0
  79. package/esm2022/lib/components/search/search-libraries-results/search-libraries-query-builder.service.mjs +93 -0
  80. package/esm2022/lib/components/search/search-libraries-results/search-libraries-results.component.mjs +155 -0
  81. package/esm2022/lib/components/search/search-navigation.service.mjs +62 -0
  82. package/esm2022/lib/components/search/search-results/search-results.component.mjs +278 -0
  83. package/esm2022/lib/components/search/search-results-row/search-results-row.component.mjs +145 -0
  84. package/esm2022/lib/components/search/search-save/dialog/delete/saved-search-delete-dialog.component.mjs +82 -0
  85. package/esm2022/lib/components/search/search-save/dialog/edit/saved-search-edit-dialog.component.mjs +116 -0
  86. package/esm2022/lib/components/search/search-save/dialog/save-search-dialog.component.mjs +125 -0
  87. package/esm2022/lib/components/search/search-save/dialog/saved-search-form.interface.mjs +25 -0
  88. package/esm2022/lib/components/search/search-save/dialog/unique-search-name-validator.mjs +45 -0
  89. package/esm2022/lib/components/search/search-save/directive/save-search.directive.mjs +64 -0
  90. package/esm2022/lib/components/search/search-save/list/saved-searches-list-ui.service.mjs +51 -0
  91. package/esm2022/lib/components/search/search-save/list/smart-list/saved-searches-list-schema.mjs +44 -0
  92. package/esm2022/lib/components/search/search-save/list/smart-list/saved-searches-smart-list.component.mjs +50 -0
  93. package/esm2022/lib/components/search/search-save/list/ui-list/saved-searches-list.ui-component.mjs +153 -0
  94. package/esm2022/lib/components/search/search-save/sidenav/save-search-sidenav.component.mjs +89 -0
  95. package/esm2022/lib/components/shared-files/shared-files.component.mjs +85 -0
  96. package/esm2022/lib/components/shared-link-view/shared-link-view.component.mjs +86 -0
  97. package/esm2022/lib/components/sidenav/components/button-menu.component.mjs +66 -0
  98. package/esm2022/lib/components/sidenav/components/expand-menu.component.mjs +73 -0
  99. package/esm2022/lib/components/sidenav/components/sidenav-header.component.mjs +60 -0
  100. package/esm2022/lib/components/sidenav/directives/action.directive.mjs +86 -0
  101. package/esm2022/lib/components/sidenav/directives/active-link.directive.mjs +100 -0
  102. package/esm2022/lib/components/sidenav/directives/expansion-panel.directive.mjs +103 -0
  103. package/esm2022/lib/components/sidenav/directives/menu-panel.directive.mjs +99 -0
  104. package/esm2022/lib/components/sidenav/sidenav.component.mjs +97 -0
  105. package/esm2022/lib/components/sidenav/user-menu/user-menu.component.mjs +57 -0
  106. package/esm2022/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.mjs +143 -0
  107. package/esm2022/lib/components/toolbar/toggle-favorite/toggle-favorite.component.mjs +91 -0
  108. package/esm2022/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.mjs +108 -0
  109. package/esm2022/lib/components/toolbar/toggle-info-drawer/toggle-info-drawer.component.mjs +77 -0
  110. package/esm2022/lib/components/toolbar/toggle-join-library/toggle-join-library-button.component.mjs +107 -0
  111. package/{esm2020 → esm2022}/lib/components/toolbar/toggle-join-library/toggle-join-library-menu.component.mjs +7 -6
  112. package/esm2022/lib/components/toolbar/view-node/view-node.component.mjs +128 -0
  113. package/esm2022/lib/components/trashcan/trashcan.component.mjs +66 -0
  114. package/esm2022/lib/components/upload-files-dialog/upload-files-dialog.component.mjs +50 -0
  115. package/esm2022/lib/components/view-profile/view-profile.component.mjs +195 -0
  116. package/esm2022/lib/dialogs/node-template/create-from-template.dialog.mjs +127 -0
  117. package/esm2022/lib/directives/document-list.directive.mjs +203 -0
  118. package/esm2022/lib/extensions/core.extensions.module.mjs +56 -0
  119. package/esm2022/lib/services/content-management.service.mjs +892 -0
  120. package/esm2022/lib/services/content-url.service.mjs +74 -0
  121. package/esm2022/lib/services/modal-ai.service.mjs +65 -0
  122. package/esm2022/lib/services/node-actions.service.mjs +609 -0
  123. package/esm2022/lib/services/node-template.service.mjs +145 -0
  124. package/esm2022/lib/services/search-ai-navigation.service.mjs +63 -0
  125. package/esm2022/lib/store/app-store.module.mjs +101 -0
  126. package/esm2022/lib/store/effects/app.effects.mjs +46 -0
  127. package/esm2022/lib/store/effects/contextmenu.effects.mjs +65 -0
  128. package/esm2022/lib/store/effects/download.effects.mjs +153 -0
  129. package/esm2022/lib/store/effects/favorite.effects.mjs +72 -0
  130. package/esm2022/lib/store/effects/library.effects.mjs +108 -0
  131. package/esm2022/lib/store/effects/node.effects.mjs +318 -0
  132. package/esm2022/lib/store/effects/search-ai.effects.mjs +54 -0
  133. package/esm2022/lib/store/effects/search.effects.mjs +52 -0
  134. package/esm2022/lib/store/effects/template.effects.mjs +116 -0
  135. package/esm2022/lib/store/effects/upload.effects.mjs +166 -0
  136. package/esm2022/lib/store/effects/viewer.effects.mjs +169 -0
  137. package/esm2022/lib/utils/aca-search-utils.mjs +129 -0
  138. package/esm2022/ms-office/actions/aos.actions.mjs +32 -0
  139. package/esm2022/ms-office/aos-extension.module.mjs +53 -0
  140. package/esm2022/ms-office/aos-extension.service.mjs +136 -0
  141. package/esm2022/ms-office/effects/aos.effects.mjs +45 -0
  142. package/esm2022/public-api.mjs +33 -0
  143. package/esm2022/viewer/lib/components/preview/preview.component.mjs +244 -0
  144. package/esm2022/viewer/lib/components/viewer/viewer.component.mjs +260 -0
  145. package/esm2022/viewer/lib/services/viewer.service.mjs +229 -0
  146. package/esm2022/viewer/lib/viewer.module.mjs +53 -0
  147. package/{fesm2015 → fesm2022}/alfresco-aca-content-about.mjs +17 -19
  148. package/fesm2022/alfresco-aca-content-about.mjs.map +1 -0
  149. package/{fesm2020 → fesm2022}/alfresco-aca-content-folder-rules.mjs +376 -357
  150. package/fesm2022/alfresco-aca-content-folder-rules.mjs.map +1 -0
  151. package/{fesm2020 → fesm2022}/alfresco-aca-content-ms-office.mjs +28 -26
  152. package/fesm2022/alfresco-aca-content-ms-office.mjs.map +1 -0
  153. package/{fesm2020 → fesm2022}/alfresco-aca-content-viewer.mjs +110 -83
  154. package/fesm2022/alfresco-aca-content-viewer.mjs.map +1 -0
  155. package/fesm2022/alfresco-aca-content.mjs +10996 -0
  156. package/fesm2022/alfresco-aca-content.mjs.map +1 -0
  157. package/folder-rules/manage-rules/manage-rules.smart-component.d.ts +3 -5
  158. package/folder-rules/rule-details/actions/rule-action-list.ui-component.d.ts +1 -1
  159. package/folder-rules/rule-details/actions/rule-action.ui-component.d.ts +5 -6
  160. package/folder-rules/rule-details/conditions/rule-composite-condition.ui-component.d.ts +1 -1
  161. package/folder-rules/rule-details/conditions/rule-simple-condition.ui-component.d.ts +4 -5
  162. package/folder-rules/rule-details/options/rule-options.ui-component.d.ts +1 -1
  163. package/folder-rules/rule-details/rule-details.ui-component.d.ts +5 -6
  164. package/folder-rules/rule-list/rule-list/rule-list.ui-component.d.ts +4 -5
  165. package/folder-rules/rule-list/rule-list-grouping/rule-list-grouping.ui-component.d.ts +1 -1
  166. package/folder-rules/rule-list/rule-list-item/rule-list-item.ui-component.d.ts +1 -1
  167. package/folder-rules/rule-set-picker/rule-set-picker.smart-component.d.ts +3 -5
  168. package/folder-rules/services/folder-rule-sets.service.d.ts +4 -4
  169. package/folder-rules/services/folder-rules.service.d.ts +1 -1
  170. package/lib/components/bulk-actions-dropdown/bulk-actions-dropdown.component.d.ts +7 -13
  171. package/lib/components/common/location-link/location-link.component.d.ts +1 -1
  172. package/lib/components/common/toggle-shared/toggle-shared.component.d.ts +5 -6
  173. package/lib/components/context-menu/base-context-menu.directive.d.ts +20 -0
  174. package/lib/components/context-menu/context-menu-item.component.d.ts +1 -1
  175. package/lib/components/context-menu/context-menu-outside-event.directive.d.ts +4 -5
  176. package/lib/components/context-menu/context-menu.component.d.ts +4 -15
  177. package/lib/components/context-menu/context-menu.service.d.ts +4 -1
  178. package/lib/components/{knowledge-retrieval/search-ai/search-ai-utils.d.ts → context-menu/custom-context-menu-actions.token.d.ts} +2 -2
  179. package/lib/components/context-menu/custom-context-menu.component.d.ts +36 -0
  180. package/lib/components/details/details.component.d.ts +1 -2
  181. package/lib/components/dl-custom-components/datatable-cell-badges/datatable-cell-badges.component.d.ts +4 -5
  182. package/lib/components/dl-custom-components/name-column/name-column.component.d.ts +3 -4
  183. package/lib/components/dl-custom-components/tags-column/tags-column.component.d.ts +1 -1
  184. package/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.d.ts +1 -1
  185. package/lib/components/files/files.component.d.ts +1 -1
  186. package/lib/components/info-drawer/comments-tab/comments-tab.component.d.ts +1 -1
  187. package/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.d.ts +5 -7
  188. package/lib/components/info-drawer/library-metadata-tab/library-metadata-tab.component.d.ts +1 -1
  189. package/lib/components/info-drawer/metadata-tab/metadata-tab.component.d.ts +7 -8
  190. package/lib/components/info-drawer/versions-tab/versions-tab.component.d.ts +1 -1
  191. package/lib/components/knowledge-retrieval/search-ai/agents-button/agents-button.component.d.ts +4 -6
  192. package/lib/components/knowledge-retrieval/search-ai/search-ai-input/search-ai-input.component.d.ts +6 -8
  193. package/lib/components/knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component.d.ts +8 -8
  194. package/lib/components/knowledge-retrieval/search-ai/search-ai-results/search-ai-results.component.d.ts +4 -6
  195. package/lib/components/search/search-input/search-input.component.d.ts +13 -16
  196. package/lib/components/search/search-input-control/search-input-control.component.d.ts +3 -6
  197. package/lib/components/search/search-libraries-results/search-libraries-results.component.d.ts +0 -1
  198. package/lib/components/search/search-results/search-results.component.d.ts +14 -9
  199. package/lib/components/search/search-results-row/search-results-row.component.d.ts +4 -5
  200. package/lib/components/search/search-save/dialog/delete/saved-search-delete-dialog.component.d.ts +16 -0
  201. package/lib/components/search/search-save/dialog/edit/saved-search-edit-dialog.component.d.ts +22 -0
  202. package/lib/components/search/search-save/dialog/save-search-dialog.component.d.ts +23 -0
  203. package/lib/components/search/search-save/dialog/saved-search-form.interface.d.ts +28 -0
  204. package/lib/components/search/search-save/dialog/unique-search-name-validator.d.ts +34 -0
  205. package/lib/components/search/search-save/directive/save-search.directive.d.ts +13 -0
  206. package/lib/components/search/search-save/list/saved-searches-list-ui.service.d.ts +9 -0
  207. package/lib/components/search/search-save/list/smart-list/saved-searches-list-schema.d.ts +33 -0
  208. package/lib/components/search/search-save/list/smart-list/saved-searches-smart-list.component.d.ts +13 -0
  209. package/lib/components/search/search-save/list/ui-list/saved-searches-list.ui-component.d.ts +66 -0
  210. package/lib/components/search/search-save/sidenav/save-search-sidenav.component.d.ts +42 -0
  211. package/lib/components/shared-link-view/shared-link-view.component.d.ts +4 -5
  212. package/lib/components/sidenav/components/button-menu.component.d.ts +1 -1
  213. package/lib/components/sidenav/components/expand-menu.component.d.ts +3 -2
  214. package/lib/components/sidenav/components/sidenav-header.component.d.ts +3 -4
  215. package/lib/components/sidenav/directives/action.directive.d.ts +28 -1
  216. package/lib/components/sidenav/directives/active-link.directive.d.ts +3 -3
  217. package/lib/components/sidenav/directives/expansion-panel.directive.d.ts +4 -5
  218. package/lib/components/sidenav/directives/menu-panel.directive.d.ts +4 -5
  219. package/lib/components/sidenav/sidenav.component.d.ts +7 -7
  220. package/lib/components/sidenav/user-menu/user-menu.component.d.ts +1 -1
  221. package/lib/components/toolbar/toggle-favorite/toggle-favorite.component.d.ts +1 -1
  222. package/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.d.ts +3 -4
  223. package/lib/components/toolbar/view-node/view-node.component.d.ts +1 -1
  224. package/lib/components/upload-files-dialog/upload-files-dialog.component.d.ts +1 -27
  225. package/lib/components/view-profile/view-profile.component.d.ts +2 -4
  226. package/lib/directives/document-list.directive.d.ts +3 -5
  227. package/lib/services/search-ai-navigation.service.d.ts +4 -2
  228. package/lib/store/effects/app.effects.d.ts +2 -3
  229. package/lib/store/effects/contextmenu.effects.d.ts +3 -3
  230. package/lib/store/effects/download.effects.d.ts +0 -30
  231. package/lib/store/effects/favorite.effects.d.ts +0 -28
  232. package/lib/store/effects/library.effects.d.ts +2 -7
  233. package/lib/store/effects/node.effects.d.ts +7 -38
  234. package/lib/store/effects/search-ai.effects.d.ts +0 -4
  235. package/lib/store/effects/search.effects.d.ts +3 -30
  236. package/lib/store/effects/template.effects.d.ts +5 -7
  237. package/lib/store/effects/upload.effects.d.ts +8 -32
  238. package/lib/store/effects/viewer.effects.d.ts +0 -29
  239. package/lib/utils/aca-search-utils.d.ts +67 -0
  240. package/ms-office/effects/aos.effects.d.ts +0 -3
  241. package/package.json +21 -35
  242. package/public-api.d.ts +1 -0
  243. package/ui/overrides/adf-pagination.theme.scss +0 -4
  244. package/ui/theme.scss +9 -4
  245. package/viewer/lib/components/preview/preview.component.d.ts +3 -4
  246. package/viewer/lib/components/viewer/viewer.component.d.ts +2 -2
  247. package/assets/images/agent-avatar-blue.png +0 -0
  248. package/assets/images/agent-avatar-gold.png +0 -0
  249. package/assets/images/agent-avatar-pink.png +0 -0
  250. package/esm2020/about/about.component.mjs +0 -71
  251. package/esm2020/about/aca-about.module.mjs +0 -46
  252. package/esm2020/folder-rules/folder-rules.module.mjs +0 -115
  253. package/esm2020/folder-rules/manage-rules/manage-rules.smart-component.mjs +0 -261
  254. package/esm2020/folder-rules/rule-details/actions/rule-action-list.ui-component.mjs +0 -117
  255. package/esm2020/folder-rules/rule-details/actions/rule-action.ui-component.mjs +0 -351
  256. package/esm2020/folder-rules/rule-details/conditions/rule-composite-condition.ui-component.mjs +0 -172
  257. package/esm2020/folder-rules/rule-details/conditions/rule-simple-condition.ui-component.mjs +0 -234
  258. package/esm2020/folder-rules/rule-details/edit-rule-dialog.ui-component.mjs +0 -74
  259. package/esm2020/folder-rules/rule-details/options/rule-options.ui-component.mjs +0 -129
  260. package/esm2020/folder-rules/rule-details/rule-details.ui-component.mjs +0 -185
  261. package/esm2020/folder-rules/rule-details/triggers/rule-triggers.ui-component.mjs +0 -88
  262. package/esm2020/folder-rules/rule-details/validators/rule-actions.validator.mjs +0 -37
  263. package/esm2020/folder-rules/rule-list/rule-list/rule-list.ui-component.mjs +0 -164
  264. package/esm2020/folder-rules/rule-list/rule-list-grouping/rule-list-grouping.ui-component.mjs +0 -81
  265. package/esm2020/folder-rules/rule-list/rule-list-item/rule-list-item.ui-component.mjs +0 -58
  266. package/esm2020/folder-rules/rule-set-picker/rule-set-picker.smart-component.mjs +0 -120
  267. package/esm2020/folder-rules/services/actions.service.mjs +0 -114
  268. package/esm2020/folder-rules/services/folder-rule-sets.service.mjs +0 -225
  269. package/esm2020/folder-rules/services/folder-rules.service.mjs +0 -193
  270. package/esm2020/lib/aca-content.module.mjs +0 -299
  271. package/esm2020/lib/aca-content.routes.mjs +0 -359
  272. package/esm2020/lib/components/bulk-actions-dropdown/bulk-actions-dropdown.component.mjs +0 -83
  273. package/esm2020/lib/components/common/location-link/location-link.component.mjs +0 -180
  274. package/esm2020/lib/components/common/toggle-shared/toggle-shared.component.mjs +0 -76
  275. package/esm2020/lib/components/common/user-info/user-info.component.mjs +0 -47
  276. package/esm2020/lib/components/context-menu/context-menu-item.component.mjs +0 -62
  277. package/esm2020/lib/components/context-menu/context-menu-outside-event.directive.mjs +0 -63
  278. package/esm2020/lib/components/context-menu/context-menu-overlay.mjs +0 -32
  279. package/esm2020/lib/components/context-menu/context-menu.component.mjs +0 -114
  280. package/esm2020/lib/components/context-menu/context-menu.service.mjs +0 -99
  281. package/esm2020/lib/components/details/details.component.mjs +0 -147
  282. package/esm2020/lib/components/dl-custom-components/datatable-cell-badges/datatable-cell-badges.component.mjs +0 -71
  283. package/esm2020/lib/components/dl-custom-components/name-column/name-column.component.mjs +0 -101
  284. package/esm2020/lib/components/dl-custom-components/tags-column/tags-column.component.mjs +0 -48
  285. package/esm2020/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.mjs +0 -75
  286. package/esm2020/lib/components/favorite-libraries/favorite-libraries.component.mjs +0 -120
  287. package/esm2020/lib/components/favorites/favorites.component.mjs +0 -103
  288. package/esm2020/lib/components/files/files.component.mjs +0 -330
  289. package/esm2020/lib/components/home/home.component.mjs +0 -47
  290. package/esm2020/lib/components/info-drawer/comments-tab/comments-tab.component.mjs +0 -59
  291. package/esm2020/lib/components/info-drawer/info.drawer.module.mjs +0 -73
  292. package/esm2020/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.mjs +0 -206
  293. package/esm2020/lib/components/info-drawer/library-metadata-tab/library-metadata-tab.component.mjs +0 -45
  294. package/esm2020/lib/components/info-drawer/metadata-tab/metadata-tab.component.mjs +0 -134
  295. package/esm2020/lib/components/info-drawer/versions-tab/versions-tab.component.mjs +0 -95
  296. package/esm2020/lib/components/knowledge-retrieval/search-ai/agents-button/agents-button.component.mjs +0 -129
  297. package/esm2020/lib/components/knowledge-retrieval/search-ai/search-ai-input/search-ai-input.component.mjs +0 -171
  298. package/esm2020/lib/components/knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component.mjs +0 -82
  299. package/esm2020/lib/components/knowledge-retrieval/search-ai/search-ai-results/search-ai-results.component.mjs +0 -199
  300. package/esm2020/lib/components/knowledge-retrieval/search-ai/search-ai-utils.mjs +0 -33
  301. package/esm2020/lib/components/libraries/libraries.component.mjs +0 -79
  302. package/esm2020/lib/components/recent-files/recent-files.component.mjs +0 -82
  303. package/esm2020/lib/components/search/search-action-menu/search-action-menu.component.mjs +0 -64
  304. package/esm2020/lib/components/search/search-input/search-input.component.mjs +0 -301
  305. package/esm2020/lib/components/search/search-input-control/search-input-control.component.mjs +0 -94
  306. package/esm2020/lib/components/search/search-libraries-results/search-libraries-query-builder.service.mjs +0 -90
  307. package/esm2020/lib/components/search/search-libraries-results/search-libraries-results.component.mjs +0 -153
  308. package/esm2020/lib/components/search/search-navigation.service.mjs +0 -60
  309. package/esm2020/lib/components/search/search-results/search-results.component.mjs +0 -255
  310. package/esm2020/lib/components/search/search-results-row/search-results-row.component.mjs +0 -142
  311. package/esm2020/lib/components/shared-files/shared-files.component.mjs +0 -83
  312. package/esm2020/lib/components/shared-link-view/shared-link-view.component.mjs +0 -82
  313. package/esm2020/lib/components/sidenav/components/button-menu.component.mjs +0 -62
  314. package/esm2020/lib/components/sidenav/components/expand-menu.component.mjs +0 -67
  315. package/esm2020/lib/components/sidenav/components/sidenav-header.component.mjs +0 -66
  316. package/esm2020/lib/components/sidenav/directives/action.directive.mjs +0 -75
  317. package/esm2020/lib/components/sidenav/directives/active-link.directive.mjs +0 -93
  318. package/esm2020/lib/components/sidenav/directives/expansion-panel.directive.mjs +0 -102
  319. package/esm2020/lib/components/sidenav/directives/menu-panel.directive.mjs +0 -99
  320. package/esm2020/lib/components/sidenav/sidenav.component.mjs +0 -89
  321. package/esm2020/lib/components/sidenav/user-menu/user-menu.component.mjs +0 -56
  322. package/esm2020/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.mjs +0 -137
  323. package/esm2020/lib/components/toolbar/toggle-favorite/toggle-favorite.component.mjs +0 -86
  324. package/esm2020/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.mjs +0 -107
  325. package/esm2020/lib/components/toolbar/toggle-info-drawer/toggle-info-drawer.component.mjs +0 -74
  326. package/esm2020/lib/components/toolbar/toggle-join-library/toggle-join-library-button.component.mjs +0 -105
  327. package/esm2020/lib/components/toolbar/view-node/view-node.component.mjs +0 -122
  328. package/esm2020/lib/components/trashcan/trashcan.component.mjs +0 -68
  329. package/esm2020/lib/components/upload-files-dialog/upload-files-dialog.component.mjs +0 -52
  330. package/esm2020/lib/components/view-profile/view-profile.component.mjs +0 -193
  331. package/esm2020/lib/dialogs/node-template/create-from-template.dialog.mjs +0 -120
  332. package/esm2020/lib/directives/document-list.directive.mjs +0 -199
  333. package/esm2020/lib/extensions/core.extensions.module.mjs +0 -55
  334. package/esm2020/lib/services/content-management.service.mjs +0 -873
  335. package/esm2020/lib/services/content-url.service.mjs +0 -71
  336. package/esm2020/lib/services/modal-ai.service.mjs +0 -66
  337. package/esm2020/lib/services/node-actions.service.mjs +0 -600
  338. package/esm2020/lib/services/node-template.service.mjs +0 -144
  339. package/esm2020/lib/services/search-ai-navigation.service.mjs +0 -52
  340. package/esm2020/lib/store/app-store.module.mjs +0 -102
  341. package/esm2020/lib/store/effects/app.effects.mjs +0 -49
  342. package/esm2020/lib/store/effects/contextmenu.effects.mjs +0 -55
  343. package/esm2020/lib/store/effects/download.effects.mjs +0 -159
  344. package/esm2020/lib/store/effects/favorite.effects.mjs +0 -76
  345. package/esm2020/lib/store/effects/library.effects.mjs +0 -113
  346. package/esm2020/lib/store/effects/node.effects.mjs +0 -325
  347. package/esm2020/lib/store/effects/search-ai.effects.mjs +0 -57
  348. package/esm2020/lib/store/effects/search.effects.mjs +0 -60
  349. package/esm2020/lib/store/effects/template.effects.mjs +0 -121
  350. package/esm2020/lib/store/effects/upload.effects.mjs +0 -166
  351. package/esm2020/lib/store/effects/viewer.effects.mjs +0 -175
  352. package/esm2020/ms-office/actions/aos.actions.mjs +0 -31
  353. package/esm2020/ms-office/aos-extension.module.mjs +0 -52
  354. package/esm2020/ms-office/aos-extension.service.mjs +0 -132
  355. package/esm2020/ms-office/effects/aos.effects.mjs +0 -48
  356. package/esm2020/public-api.mjs +0 -32
  357. package/esm2020/viewer/lib/components/preview/preview.component.mjs +0 -236
  358. package/esm2020/viewer/lib/components/viewer/viewer.component.mjs +0 -240
  359. package/esm2020/viewer/lib/services/viewer.service.mjs +0 -226
  360. package/esm2020/viewer/lib/viewer.module.mjs +0 -52
  361. package/fesm2015/alfresco-aca-content-about.mjs.map +0 -1
  362. package/fesm2015/alfresco-aca-content-folder-rules.mjs +0 -2662
  363. package/fesm2015/alfresco-aca-content-folder-rules.mjs.map +0 -1
  364. package/fesm2015/alfresco-aca-content-ms-office.mjs +0 -256
  365. package/fesm2015/alfresco-aca-content-ms-office.mjs.map +0 -1
  366. package/fesm2015/alfresco-aca-content-viewer.mjs +0 -700
  367. package/fesm2015/alfresco-aca-content-viewer.mjs.map +0 -1
  368. package/fesm2015/alfresco-aca-content.mjs +0 -9835
  369. package/fesm2015/alfresco-aca-content.mjs.map +0 -1
  370. package/fesm2020/alfresco-aca-content-about.mjs +0 -193
  371. package/fesm2020/alfresco-aca-content-about.mjs.map +0 -1
  372. package/fesm2020/alfresco-aca-content-folder-rules.mjs.map +0 -1
  373. package/fesm2020/alfresco-aca-content-ms-office.mjs.map +0 -1
  374. package/fesm2020/alfresco-aca-content-viewer.mjs.map +0 -1
  375. package/fesm2020/alfresco-aca-content.mjs +0 -9934
  376. package/fesm2020/alfresco-aca-content.mjs.map +0 -1
  377. /package/{esm2020 → esm2022}/about/alfresco-aca-content-about.mjs +0 -0
  378. /package/{esm2020 → esm2022}/about/dev-mode.tokens.mjs +0 -0
  379. /package/{esm2020 → esm2022}/about/package-json.token.mjs +0 -0
  380. /package/{esm2020 → esm2022}/about/public-api.mjs +0 -0
  381. /package/{esm2020 → esm2022}/alfresco-aca-content.mjs +0 -0
  382. /package/{esm2020 → esm2022}/folder-rules/alfresco-aca-content-folder-rules.mjs +0 -0
  383. /package/{esm2020 → esm2022}/folder-rules/folder-rules.rules.mjs +0 -0
  384. /package/{esm2020 → esm2022}/folder-rules/model/action-parameter-constraint.model.mjs +0 -0
  385. /package/{esm2020 → esm2022}/folder-rules/model/rule-action.model.mjs +0 -0
  386. /package/{esm2020 → esm2022}/folder-rules/model/rule-composite-condition.model.mjs +0 -0
  387. /package/{esm2020 → esm2022}/folder-rules/model/rule-grouping-item.model.mjs +0 -0
  388. /package/{esm2020 → esm2022}/folder-rules/model/rule-set.model.mjs +0 -0
  389. /package/{esm2020 → esm2022}/folder-rules/model/rule-simple-condition.model.mjs +0 -0
  390. /package/{esm2020 → esm2022}/folder-rules/model/rule.model.mjs +0 -0
  391. /package/{esm2020 → esm2022}/folder-rules/public-api.mjs +0 -0
  392. /package/{esm2020 → esm2022}/folder-rules/rule-details/conditions/rule-condition-comparators.mjs +0 -0
  393. /package/{esm2020 → esm2022}/folder-rules/rule-details/conditions/rule-condition-fields.mjs +0 -0
  394. /package/{esm2020 → esm2022}/folder-rules/rule-details/validators/rule-composite-condition.validator.mjs +0 -0
  395. /package/{esm2020 → esm2022}/lib/components/common/index.mjs +0 -0
  396. /package/{esm2020 → esm2022}/lib/components/context-menu/direction.token.mjs +0 -0
  397. /package/{esm2020 → esm2022}/lib/components/context-menu/interfaces.mjs +0 -0
  398. /package/{esm2020 → esm2022}/lib/components/search/index.mjs +0 -0
  399. /package/{esm2020 → esm2022}/lib/components/sidenav/index.mjs +0 -0
  400. /package/{esm2020 → esm2022}/lib/components/toolbar/index.mjs +0 -0
  401. /package/{esm2020 → esm2022}/lib/components/view-profile/view-profile.guard.mjs +0 -0
  402. /package/{esm2020 → esm2022}/lib/store/effects.mjs +0 -0
  403. /package/{esm2020 → esm2022}/lib/store/initial-state.mjs +0 -0
  404. /package/{esm2020 → esm2022}/lib/store/reducers/app.reducer.mjs +0 -0
  405. /package/{esm2020 → esm2022}/ms-office/alfresco-aca-content-ms-office.mjs +0 -0
  406. /package/{esm2020 → esm2022}/ms-office/public-api.mjs +0 -0
  407. /package/{esm2020 → esm2022}/viewer/alfresco-aca-content-viewer.mjs +0 -0
  408. /package/{esm2020 → esm2022}/viewer/public-api.mjs +0 -0
@@ -0,0 +1,356 @@
1
+ /*!
2
+ * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
3
+ *
4
+ * Alfresco Example Content Application
5
+ *
6
+ * This file is part of the Alfresco Example Content Application.
7
+ * If the software was purchased under a paid Alfresco license, the terms of
8
+ * the paid license agreement will prevail. Otherwise, the software is
9
+ * provided under the following open source license terms:
10
+ *
11
+ * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
12
+ * it under the terms of the GNU Lesser General Public License as published by
13
+ * the Free Software Foundation, either version 3 of the License, or
14
+ * (at your option) any later version.
15
+ *
16
+ * The Alfresco Example Content Application is distributed in the hope that it will be useful,
17
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
+ * GNU Lesser General Public License for more details.
20
+ *
21
+ * You should have received a copy of the GNU Lesser General Public License
22
+ * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
23
+ */
24
+ import { Component, DestroyRef, forwardRef, inject, Input, ViewEncapsulation } from '@angular/core';
25
+ import { FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators } from '@angular/forms';
26
+ import { CardViewBoolItemModel, CardViewModule, CardViewSelectItemModel, CardViewTextItemModel, CardViewUpdateService } from '@alfresco/adf-core';
27
+ import { from, of, Subject } from 'rxjs';
28
+ import { map } from 'rxjs/operators';
29
+ import { CategorySelectorDialogComponent, CategoryService, ContentNodeSelectorComponent, NodeAction, SecurityControlsService, TagService } from '@alfresco/adf-content-services';
30
+ import { MatDialog } from '@angular/material/dialog';
31
+ import { TranslateModule, TranslateService } from '@ngx-translate/core';
32
+ import { CommonModule } from '@angular/common';
33
+ import { MatFormFieldModule } from '@angular/material/form-field';
34
+ import { MatSelectModule } from '@angular/material/select';
35
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
36
+ import * as i0 from "@angular/core";
37
+ import * as i1 from "@alfresco/adf-core";
38
+ import * as i2 from "@angular/material/dialog";
39
+ import * as i3 from "@ngx-translate/core";
40
+ import * as i4 from "@alfresco/adf-content-services";
41
+ import * as i5 from "@angular/common";
42
+ import * as i6 from "@angular/forms";
43
+ import * as i7 from "@angular/material/form-field";
44
+ import * as i8 from "@angular/material/select";
45
+ import * as i9 from "@angular/material/core";
46
+ class RuleActionUiComponent {
47
+ cardViewUpdateService;
48
+ dialog;
49
+ translate;
50
+ tagService;
51
+ categoryService;
52
+ securityControlsService;
53
+ nodeId = '';
54
+ actionDefinitions;
55
+ readOnly = false;
56
+ _parameterConstraints = [];
57
+ get parameterConstraints() {
58
+ return this._parameterConstraints;
59
+ }
60
+ set parameterConstraints(value) {
61
+ this._parameterConstraints = value.map((obj) => ({
62
+ ...obj,
63
+ constraints: this.parseConstraintsToSelectOptions(obj.constraints)
64
+ }));
65
+ }
66
+ tagsRelatedPropertiesAndAspects = ['cm:tagscope', 'cm:tagScopeCache', 'cm:taggable'];
67
+ categoriesRelatedPropertiesAndAspects = ['cm:categories', 'cm:generalclassifiable'];
68
+ paramsToFormatDisplayedValue = ['securityMarkId', 'securityGroupId'];
69
+ isFullWidth = false;
70
+ form = new FormGroup({
71
+ actionDefinitionId: new FormControl('', Validators.required)
72
+ });
73
+ cardViewItems = [];
74
+ parameters = {};
75
+ get selectedActionDefinitionId() {
76
+ return this.form.get('actionDefinitionId').value;
77
+ }
78
+ get selectedActionDefinition() {
79
+ return this.actionDefinitions.find((actionDefinition) => actionDefinition.id === this.selectedActionDefinitionId);
80
+ }
81
+ onChange = () => undefined;
82
+ onTouch = () => undefined;
83
+ destroyRef = inject(DestroyRef);
84
+ constructor(cardViewUpdateService, dialog, translate, tagService, categoryService, securityControlsService) {
85
+ this.cardViewUpdateService = cardViewUpdateService;
86
+ this.dialog = dialog;
87
+ this.translate = translate;
88
+ this.tagService = tagService;
89
+ this.categoryService = categoryService;
90
+ this.securityControlsService = securityControlsService;
91
+ }
92
+ writeValue(action) {
93
+ this.form.setValue({
94
+ actionDefinitionId: action.actionDefinitionId
95
+ });
96
+ this.parameters = {
97
+ ...this.parameters,
98
+ ...action.params
99
+ };
100
+ this.setCardViewProperties();
101
+ if (this.parameters?.securityGroupId) {
102
+ this.loadSecurityMarkOptions();
103
+ }
104
+ }
105
+ registerOnChange(fn) {
106
+ this.onChange = fn;
107
+ }
108
+ registerOnTouched(fn) {
109
+ this.onTouch = fn;
110
+ }
111
+ ngOnInit() {
112
+ this.actionDefinitions = this.actionDefinitions.sort((firstActionDefinition, secondActionDefinition) => firstActionDefinition.title.localeCompare(secondActionDefinition.title));
113
+ this.form.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
114
+ this.setDefaultParameters();
115
+ this.setCardViewProperties();
116
+ this.onChange({
117
+ actionDefinitionId: this.selectedActionDefinitionId,
118
+ params: this.parameters
119
+ });
120
+ this.onTouch();
121
+ });
122
+ this.cardViewUpdateService.itemUpdated$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((updateNotification) => {
123
+ const isSecurityGroupUpdated = updateNotification.target.key === 'securityGroupId';
124
+ if (isSecurityGroupUpdated) {
125
+ this.parameters.securityMarkId = null;
126
+ }
127
+ this.parameters = this.clearEmptyParameters({
128
+ ...this.parameters,
129
+ ...updateNotification.changed
130
+ });
131
+ this.onChange({
132
+ actionDefinitionId: this.selectedActionDefinitionId,
133
+ params: this.parameters
134
+ });
135
+ this.onTouch();
136
+ if (isSecurityGroupUpdated) {
137
+ this.setCardViewProperties();
138
+ this.loadSecurityMarkOptions();
139
+ }
140
+ });
141
+ }
142
+ ngOnChanges(changes) {
143
+ const readOnly = changes['readOnly']?.currentValue;
144
+ if (readOnly !== undefined && readOnly !== null) {
145
+ if (readOnly) {
146
+ this.readOnly = true;
147
+ this.form.disable();
148
+ }
149
+ else {
150
+ this.readOnly = false;
151
+ this.form.enable();
152
+ }
153
+ }
154
+ }
155
+ setCardViewProperties(securityMarkOptions) {
156
+ const disabledTags = !this.tagService.areTagsEnabled();
157
+ const disabledCategories = !this.categoryService.areCategoriesEnabled();
158
+ this.cardViewItems = (this.selectedActionDefinition?.parameterDefinitions ?? []).map((paramDef) => {
159
+ const constraintsForDropdownBox = paramDef.name === 'securityMarkId'
160
+ ? { name: paramDef.name, constraints: securityMarkOptions || [] }
161
+ : this._parameterConstraints.find((obj) => obj.name === paramDef.name);
162
+ const cardViewPropertiesModel = {
163
+ label: paramDef.displayLabel + (paramDef.mandatory ? ' *' : ''),
164
+ key: paramDef.name,
165
+ editable: true,
166
+ ...(paramDef.mandatory
167
+ ? {
168
+ validators: [
169
+ {
170
+ message: 'ACA_FOLDER_RULES.RULE_DETAILS.ERROR.REQUIRED',
171
+ isValid: (value) => !!value
172
+ }
173
+ ]
174
+ }
175
+ : {})
176
+ };
177
+ switch (paramDef.type) {
178
+ case 'd:boolean':
179
+ return new CardViewBoolItemModel({
180
+ ...cardViewPropertiesModel,
181
+ value: this.parameters[paramDef.name] ?? false
182
+ });
183
+ case 'd:noderef':
184
+ if (!constraintsForDropdownBox && !this.readOnly && paramDef.name !== 'category-value') {
185
+ return new CardViewTextItemModel({
186
+ ...cardViewPropertiesModel,
187
+ icon: 'folder',
188
+ default: '',
189
+ clickable: true,
190
+ clickCallBack: this.openSelectorDialog.bind(this, paramDef.name),
191
+ value: this.parameters[paramDef.name]
192
+ });
193
+ }
194
+ else if (paramDef.name === 'category-value' && !this.readOnly) {
195
+ return new CardViewTextItemModel({
196
+ ...cardViewPropertiesModel,
197
+ icon: 'library_add',
198
+ default: '',
199
+ clickable: true,
200
+ clickCallBack: this.openCatDialog.bind(this, paramDef.name),
201
+ value: this.parameters[paramDef.name]
202
+ });
203
+ }
204
+ // falls through
205
+ default:
206
+ if (constraintsForDropdownBox && !this.readOnly) {
207
+ return new CardViewSelectItemModel({
208
+ ...cardViewPropertiesModel,
209
+ value: this.parameters[paramDef.name] ?? '',
210
+ options$: of(constraintsForDropdownBox.constraints).pipe(map((options) => {
211
+ return options.filter((option) => !((disabledTags && this.tagsRelatedPropertiesAndAspects.includes(option.key)) ||
212
+ (disabledCategories && this.categoriesRelatedPropertiesAndAspects.includes(option.key))));
213
+ }))
214
+ });
215
+ }
216
+ return new CardViewTextItemModel({
217
+ ...cardViewPropertiesModel,
218
+ value: constraintsForDropdownBox && this.readOnly && this.paramsToFormatDisplayedValue.includes(paramDef.name)
219
+ ? constraintsForDropdownBox.constraints.find((constraint) => constraint.key === this.parameters[paramDef.name])?.label ?? ''
220
+ : this.parameters[paramDef.name] ?? ''
221
+ });
222
+ }
223
+ });
224
+ }
225
+ openSelectorDialog(paramDefName) {
226
+ const data = {
227
+ selectionMode: 'single',
228
+ title: this.translate.instant('ACA_FOLDER_RULES.RULE_DETAILS.PLACEHOLDER.CHOOSE_FOLDER'),
229
+ actionName: NodeAction.CHOOSE,
230
+ currentFolderId: this.nodeId,
231
+ select: new Subject()
232
+ };
233
+ this.dialog.open(ContentNodeSelectorComponent, {
234
+ data,
235
+ panelClass: 'adf-content-node-selector-dialog',
236
+ width: '630px'
237
+ });
238
+ data.select.subscribe((selections) => {
239
+ if (selections[0].id) {
240
+ this.writeValue({
241
+ actionDefinitionId: this.selectedActionDefinitionId,
242
+ params: {
243
+ ...this.parameters,
244
+ [paramDefName]: selections[0].id
245
+ }
246
+ });
247
+ this.onChange({
248
+ actionDefinitionId: this.selectedActionDefinitionId,
249
+ params: this.parameters
250
+ });
251
+ this.onTouch();
252
+ }
253
+ }, (error) => {
254
+ console.error(error);
255
+ }, () => {
256
+ this.dialog.closeAll();
257
+ });
258
+ }
259
+ openCatDialog(paramDefName) {
260
+ const data = {
261
+ select: new Subject(),
262
+ multiSelect: false
263
+ };
264
+ this.dialog.open(CategorySelectorDialogComponent, {
265
+ data,
266
+ width: '630px'
267
+ });
268
+ data.select.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((selections) => {
269
+ if (selections[0].id) {
270
+ this.writeValue({
271
+ actionDefinitionId: this.selectedActionDefinitionId,
272
+ params: {
273
+ ...this.parameters,
274
+ [paramDefName]: selections[0].id
275
+ }
276
+ });
277
+ this.onChange({
278
+ actionDefinitionId: this.selectedActionDefinitionId,
279
+ params: this.parameters
280
+ });
281
+ this.onTouch();
282
+ }
283
+ });
284
+ }
285
+ setDefaultParameters() {
286
+ this.parameters = {};
287
+ (this.selectedActionDefinition?.parameterDefinitions ?? []).forEach((paramDef) => {
288
+ if (paramDef.type === 'd:boolean') {
289
+ this.parameters[paramDef.name] = false;
290
+ }
291
+ });
292
+ }
293
+ parseConstraintsToSelectOptions(constraints) {
294
+ return constraints
295
+ .sort((a, b) => {
296
+ if (!a.label && b.label) {
297
+ return 1;
298
+ }
299
+ if (!b.label && a.label) {
300
+ return -1;
301
+ }
302
+ return a.label?.localeCompare(b.label) ?? -1;
303
+ })
304
+ .map((constraint) => ({
305
+ key: constraint.value,
306
+ label: constraint.label ? `${constraint.label} [${constraint.value}]` : constraint.value
307
+ }));
308
+ }
309
+ clearEmptyParameters(params) {
310
+ Object.keys(params).forEach((key) => (params[key] === null || params[key] === undefined || params[key] === '') && delete params[key]);
311
+ return params;
312
+ }
313
+ loadSecurityMarkOptions() {
314
+ if (this.parameters?.securityGroupId) {
315
+ from(this.securityControlsService.getSecurityMark(this.parameters.securityGroupId))
316
+ .pipe(map((securityMarks) => securityMarks.entries.map((entry) => this.formatSecurityMarkConstraint(entry))))
317
+ .subscribe((res) => this.setCardViewProperties(this.parseConstraintsToSelectOptions(res)));
318
+ }
319
+ }
320
+ formatSecurityMarkConstraint(securityMark) {
321
+ return {
322
+ value: securityMark.id,
323
+ label: securityMark.name
324
+ };
325
+ }
326
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: RuleActionUiComponent, deps: [{ token: i1.CardViewUpdateService }, { token: i2.MatDialog }, { token: i3.TranslateService }, { token: i4.TagService }, { token: i4.CategoryService }, { token: i4.SecurityControlsService }], target: i0.ɵɵFactoryTarget.Component });
327
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: RuleActionUiComponent, isStandalone: true, selector: "aca-rule-action", inputs: { nodeId: "nodeId", actionDefinitions: "actionDefinitions", readOnly: "readOnly", parameterConstraints: "parameterConstraints" }, host: { classAttribute: "aca-rule-action" }, providers: [
328
+ {
329
+ provide: NG_VALUE_ACCESSOR,
330
+ multi: true,
331
+ useExisting: forwardRef(() => RuleActionUiComponent)
332
+ },
333
+ CardViewUpdateService
334
+ ], usesOnChanges: true, ngImport: i0, template: "<form class=\"aca-rule-action__form\" [formGroup]=\"form\">\n\n <mat-form-field class=\"aca-rule-action-full-width\" appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-select\n formControlName=\"actionDefinitionId\"\n data-automation-id=\"rule-action-select\"\n [placeholder]=\"'ACA_FOLDER_RULES.RULE_DETAILS.ACTION_SELECT_PLACEHOLDER' | translate\">\n <mat-option\n *ngFor=\"let actionDefinition of actionDefinitions\"\n [value]=\"actionDefinition.id\">\n {{ actionDefinition.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <adf-card-view\n *ngIf=\"cardViewItems?.length > 0\"\n data-automation-id=\"rule-action-card-view\"\n [properties]=\"cardViewItems\"\n class=\"aca-rule-action-full-width\"\n [editable]=\"!readOnly\" />\n\n</form>\n", styles: [".aca-rule-action__form{display:flex;flex-direction:row;gap:20px}.aca-rule-action__form adf-card-view{margin-top:-15px}.aca-rule-action__form adf-card-view .adf-property-list .adf-property adf-card-view-item-dispatcher adf-card-view-textitem{display:inline-block;width:100%}.aca-rule-action__form adf-card-view .adf-property-list .adf-property adf-card-view-item-dispatcher adf-card-view-textitem .adf-textitem-clickable{padding-top:0}.aca-rule-action__form adf-card-view .adf-property-list .adf-property adf-card-view-item-dispatcher adf-card-view-textitem .adf-textitem-action .adf-textitem-icon{margin-left:-10px}.aca-rule-action-full-width{height:-moz-fit-content;height:fit-content;flex:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "ngmodule", type: CardViewModule }, { kind: "component", type: i1.CardViewComponent, selector: "adf-card-view", inputs: ["properties", "editable", "displayEmpty", "displayNoneOption", "displayClearAction", "copyToClipboardAction", "useChipsForMultiValueProperty", "multiValueSeparator", "displayLabelForChips"] }], encapsulation: i0.ViewEncapsulation.None });
335
+ }
336
+ export { RuleActionUiComponent };
337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: RuleActionUiComponent, decorators: [{
338
+ type: Component,
339
+ args: [{ standalone: true, imports: [CommonModule, TranslateModule, ReactiveFormsModule, MatFormFieldModule, MatSelectModule, CardViewModule], selector: 'aca-rule-action', encapsulation: ViewEncapsulation.None, host: { class: 'aca-rule-action' }, providers: [
340
+ {
341
+ provide: NG_VALUE_ACCESSOR,
342
+ multi: true,
343
+ useExisting: forwardRef(() => RuleActionUiComponent)
344
+ },
345
+ CardViewUpdateService
346
+ ], template: "<form class=\"aca-rule-action__form\" [formGroup]=\"form\">\n\n <mat-form-field class=\"aca-rule-action-full-width\" appearance=\"fill\" subscriptSizing=\"dynamic\">\n <mat-select\n formControlName=\"actionDefinitionId\"\n data-automation-id=\"rule-action-select\"\n [placeholder]=\"'ACA_FOLDER_RULES.RULE_DETAILS.ACTION_SELECT_PLACEHOLDER' | translate\">\n <mat-option\n *ngFor=\"let actionDefinition of actionDefinitions\"\n [value]=\"actionDefinition.id\">\n {{ actionDefinition.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <adf-card-view\n *ngIf=\"cardViewItems?.length > 0\"\n data-automation-id=\"rule-action-card-view\"\n [properties]=\"cardViewItems\"\n class=\"aca-rule-action-full-width\"\n [editable]=\"!readOnly\" />\n\n</form>\n", styles: [".aca-rule-action__form{display:flex;flex-direction:row;gap:20px}.aca-rule-action__form adf-card-view{margin-top:-15px}.aca-rule-action__form adf-card-view .adf-property-list .adf-property adf-card-view-item-dispatcher adf-card-view-textitem{display:inline-block;width:100%}.aca-rule-action__form adf-card-view .adf-property-list .adf-property adf-card-view-item-dispatcher adf-card-view-textitem .adf-textitem-clickable{padding-top:0}.aca-rule-action__form adf-card-view .adf-property-list .adf-property adf-card-view-item-dispatcher adf-card-view-textitem .adf-textitem-action .adf-textitem-icon{margin-left:-10px}.aca-rule-action-full-width{height:-moz-fit-content;height:fit-content;flex:1}\n"] }]
347
+ }], ctorParameters: function () { return [{ type: i1.CardViewUpdateService }, { type: i2.MatDialog }, { type: i3.TranslateService }, { type: i4.TagService }, { type: i4.CategoryService }, { type: i4.SecurityControlsService }]; }, propDecorators: { nodeId: [{
348
+ type: Input
349
+ }], actionDefinitions: [{
350
+ type: Input
351
+ }], readOnly: [{
352
+ type: Input
353
+ }], parameterConstraints: [{
354
+ type: Input
355
+ }] } });
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1hY3Rpb24udWktY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLWNvbnRlbnQvZm9sZGVyLXJ1bGVzL3NyYy9ydWxlLWRldGFpbHMvYWN0aW9ucy9ydWxlLWFjdGlvbi51aS1jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtY29udGVudC9mb2xkZXItcnVsZXMvc3JjL3J1bGUtZGV0YWlscy9hY3Rpb25zL3J1bGUtYWN0aW9uLnVpLWNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQW9DLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RJLE9BQU8sRUFBd0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsSSxPQUFPLEVBQ0wscUJBQXFCLEVBRXJCLGNBQWMsRUFDZCx1QkFBdUIsRUFFdkIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUV0QixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUNMLCtCQUErQixFQUUvQixlQUFlLEVBQ2YsNEJBQTRCLEVBRTVCLFVBQVUsRUFDVix1QkFBdUIsRUFDdkIsVUFBVSxFQUNYLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFl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QUFFLGVBQWUsdVRBQUUsY0FBYzs7U0FldEcscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBakJqQyxTQUFTO2lDQUNJLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxZQUN4RyxpQkFBaUIsaUJBR1osaUJBQWlCLENBQUMsSUFBSSxRQUMvQixFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxhQUN2Qjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzt5QkFDckQ7d0JBQ0QscUJBQXFCO3FCQUN0QjtnUUFJRCxNQUFNO3NCQURMLEtBQUs7Z0JBSU4saUJBQWlCO3NCQURoQixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFLRixvQkFBb0I7c0JBRHZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjQgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb25cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uLlxuICogSWYgdGhlIHNvZnR3YXJlIHdhcyBwdXJjaGFzZWQgdW5kZXIgYSBwYWlkIEFsZnJlc2NvIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZlxuICogdGhlIHBhaWQgbGljZW5zZSBhZ3JlZW1lbnQgd2lsbCBwcmV2YWlsLiBPdGhlcndpc2UsIHRoZSBzb2Z0d2FyZSBpc1xuICogcHJvdmlkZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zOlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGZyb20gSHlsYW5kIFNvZnR3YXJlLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBmb3J3YXJkUmVmLCBpbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGlvbkRlZmluaXRpb25UcmFuc2Zvcm1lZCwgUnVsZUFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVsL3J1bGUtYWN0aW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIENhcmRWaWV3Qm9vbEl0ZW1Nb2RlbCxcbiAgQ2FyZFZpZXdJdGVtLFxuICBDYXJkVmlld01vZHVsZSxcbiAgQ2FyZFZpZXdTZWxlY3RJdGVtTW9kZWwsXG4gIENhcmRWaWV3U2VsZWN0SXRlbU9wdGlvbixcbiAgQ2FyZFZpZXdUZXh0SXRlbU1vZGVsLFxuICBDYXJkVmlld1VwZGF0ZVNlcnZpY2UsXG4gIFVwZGF0ZU5vdGlmaWNhdGlvblxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgQWN0aW9uUGFyYW1ldGVyRGVmaW5pdGlvbiwgQ2F0ZWdvcnksIE5vZGUsIFNlY3VyaXR5TWFyayB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgZnJvbSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGlvblBhcmFtZXRlckNvbnN0cmFpbnQsIENvbnN0cmFpbnRWYWx1ZSB9IGZyb20gJy4uLy4uL21vZGVsL2FjdGlvbi1wYXJhbWV0ZXItY29uc3RyYWludC5tb2RlbCc7XG5pbXBvcnQge1xuICBDYXRlZ29yeVNlbGVjdG9yRGlhbG9nQ29tcG9uZW50LFxuICBDYXRlZ29yeVNlbGVjdG9yRGlhbG9nT3B0aW9ucyxcbiAgQ2F0ZWdvcnlTZXJ2aWNlLFxuICBDb250ZW50Tm9kZVNlbGVjdG9yQ29tcG9uZW50LFxuICBDb250ZW50Tm9kZVNlbGVjdG9yQ29tcG9uZW50RGF0YSxcbiAgTm9kZUFjdGlvbixcbiAgU2VjdXJpdHlDb250cm9sc1NlcnZpY2UsXG4gIFRhZ1NlcnZpY2Vcbn0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb250ZW50LXNlcnZpY2VzJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0U2VsZWN0TW9kdWxlLCBDYXJkVmlld01vZHVsZV0sXG4gIHNlbGVjdG9yOiAnYWNhLXJ1bGUtYWN0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3J1bGUtYWN0aW9uLnVpLWNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcnVsZS1hY3Rpb24udWktY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDogeyBjbGFzczogJ2FjYS1ydWxlLWFjdGlvbicgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJ1bGVBY3Rpb25VaUNvbXBvbmVudClcbiAgICB9LFxuICAgIENhcmRWaWV3VXBkYXRlU2VydmljZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFJ1bGVBY3Rpb25VaUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIG5vZGVJZCA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIGFjdGlvbkRlZmluaXRpb25zOiBBY3Rpb25EZWZpbml0aW9uVHJhbnNmb3JtZWRbXTtcblxuICBASW5wdXQoKVxuICByZWFkT25seSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3BhcmFtZXRlckNvbnN0cmFpbnRzID0gW107XG4gIEBJbnB1dCgpXG4gIGdldCBwYXJhbWV0ZXJDb25zdHJhaW50cygpOiBBY3Rpb25QYXJhbWV0ZXJDb25zdHJhaW50W10ge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbWV0ZXJDb25zdHJhaW50cztcbiAgfVxuXG4gIHNldCBwYXJhbWV0ZXJDb25zdHJhaW50cyh2YWx1ZSkge1xuICAgIHRoaXMuX3BhcmFtZXRlckNvbnN0cmFpbnRzID0gdmFsdWUubWFwKChvYmopID0+ICh7XG4gICAgICAuLi5vYmosXG4gICAgICBjb25zdHJhaW50czogdGhpcy5wYXJzZUNvbnN0cmFpbnRzVG9TZWxlY3RPcHRpb25zKG9iai5jb25zdHJhaW50cylcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHRhZ3NSZWxhdGVkUHJvcGVydGllc0FuZEFzcGVjdHMgPSBbJ2NtOnRhZ3Njb3BlJywgJ2NtOnRhZ1Njb3BlQ2FjaGUnLCAnY206dGFnZ2FibGUnXTtcbiAgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yaWVzUmVsYXRlZFByb3BlcnRpZXNBbmRBc3BlY3RzID0gWydjbTpjYXRlZ29yaWVzJywgJ2NtOmdlbmVyYWxjbGFzc2lmaWFibGUnXTtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJhbXNUb0Zvcm1hdERpc3BsYXllZFZhbHVlID0gWydzZWN1cml0eU1hcmtJZCcsICdzZWN1cml0eUdyb3VwSWQnXTtcblxuICBpc0Z1bGxXaWR0aCA9IGZhbHNlO1xuXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBhY3Rpb25EZWZpbml0aW9uSWQ6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgfSk7XG5cbiAgY2FyZFZpZXdJdGVtczogQ2FyZFZpZXdJdGVtW10gPSBbXTtcbiAgcGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7fTtcblxuICBnZXQgc2VsZWN0ZWRBY3Rpb25EZWZpbml0aW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnYWN0aW9uRGVmaW5pdGlvbklkJykudmFsdWU7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRBY3Rpb25EZWZpbml0aW9uKCk6IEFjdGlvbkRlZmluaXRpb25UcmFuc2Zvcm1lZCB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uRGVmaW5pdGlvbnMuZmluZCgoYWN0aW9uRGVmaW5pdGlvbjogQWN0aW9uRGVmaW5pdGlvblRyYW5zZm9ybWVkKSA9PiBhY3Rpb25EZWZpbml0aW9uLmlkID09PSB0aGlzLnNlbGVjdGVkQWN0aW9uRGVmaW5pdGlvbklkKTtcbiAgfVxuXG4gIG9uQ2hhbmdlOiAoYWN0aW9uOiBSdWxlQWN0aW9uKSA9PiB2b2lkID0gKCkgPT4gdW5kZWZpbmVkO1xuICBvblRvdWNoOiAoKSA9PiB2b2lkID0gKCkgPT4gdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNhcmRWaWV3VXBkYXRlU2VydmljZTogQ2FyZFZpZXdVcGRhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0YWdTZXJ2aWNlOiBUYWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2F0ZWdvcnlTZXJ2aWNlOiBDYXRlZ29yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWN1cml0eUNvbnRyb2xzU2VydmljZTogU2VjdXJpdHlDb250cm9sc1NlcnZpY2VcbiAgKSB7fVxuXG4gIHdyaXRlVmFsdWUoYWN0aW9uOiBSdWxlQWN0aW9uKSB7XG4gICAgdGhpcy5mb3JtLnNldFZhbHVlKHtcbiAgICAgIGFjdGlvbkRlZmluaXRpb25JZDogYWN0aW9uLmFjdGlvbkRlZmluaXRpb25JZFxuICAgIH0pO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IHtcbiAgICAgIC4uLnRoaXMucGFyYW1ldGVycyxcbiAgICAgIC4uLmFjdGlvbi5wYXJhbXNcbiAgICB9O1xuICAgIHRoaXMuc2V0Q2FyZFZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgaWYgKHRoaXMucGFyYW1ldGVycz8uc2VjdXJpdHlHcm91cElkKSB7XG4gICAgICB0aGlzLmxvYWRTZWN1cml0eU1hcmtPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKGFjdGlvbjogUnVsZUFjdGlvbikgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYWN0aW9uRGVmaW5pdGlvbnMgPSB0aGlzLmFjdGlvbkRlZmluaXRpb25zLnNvcnQoKGZpcnN0QWN0aW9uRGVmaW5pdGlvbiwgc2Vjb25kQWN0aW9uRGVmaW5pdGlvbikgPT5cbiAgICAgIGZpcnN0QWN0aW9uRGVmaW5pdGlvbi50aXRsZS5sb2NhbGVDb21wYXJlKHNlY29uZEFjdGlvbkRlZmluaXRpb24udGl0bGUpXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0RGVmYXVsdFBhcmFtZXRlcnMoKTtcbiAgICAgIHRoaXMuc2V0Q2FyZFZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHtcbiAgICAgICAgYWN0aW9uRGVmaW5pdGlvbklkOiB0aGlzLnNlbGVjdGVkQWN0aW9uRGVmaW5pdGlvbklkLFxuICAgICAgICBwYXJhbXM6IHRoaXMucGFyYW1ldGVyc1xuICAgICAgfSk7XG4gICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2FyZFZpZXdVcGRhdGVTZXJ2aWNlLml0ZW1VcGRhdGVkJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHVwZGF0ZU5vdGlmaWNhdGlvbjogVXBkYXRlTm90aWZpY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBpc1NlY3VyaXR5R3JvdXBVcGRhdGVkID0gdXBkYXRlTm90aWZpY2F0aW9uLnRhcmdldC5rZXkgPT09ICdzZWN1cml0eUdyb3VwSWQnO1xuICAgICAgaWYgKGlzU2VjdXJpdHlHcm91cFVwZGF0ZWQpIHtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNlY3VyaXR5TWFya0lkID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gdGhpcy5jbGVhckVtcHR5UGFyYW1ldGVycyh7XG4gICAgICAgIC4uLnRoaXMucGFyYW1ldGVycyxcbiAgICAgICAgLi4udXBkYXRlTm90aWZpY2F0aW9uLmNoYW5nZWRcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vbkNoYW5nZSh7XG4gICAgICAgIGFjdGlvbkRlZmluaXRpb25JZDogdGhpcy5zZWxlY3RlZEFjdGlvbkRlZmluaXRpb25JZCxcbiAgICAgICAgcGFyYW1zOiB0aGlzLnBhcmFtZXRlcnNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vblRvdWNoKCk7XG5cbiAgICAgIGlmIChpc1NlY3VyaXR5R3JvdXBVcGRhdGVkKSB7XG4gICAgICAgIHRoaXMuc2V0Q2FyZFZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMubG9hZFNlY3VyaXR5TWFya09wdGlvbnMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCByZWFkT25seSA9IGNoYW5nZXNbJ3JlYWRPbmx5J10/LmN1cnJlbnRWYWx1ZTtcbiAgICBpZiAocmVhZE9ubHkgIT09IHVuZGVmaW5lZCAmJiByZWFkT25seSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHJlYWRPbmx5KSB7XG4gICAgICAgIHRoaXMucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmZvcm0uZGlzYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWFkT25seSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcm0uZW5hYmxlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0Q2FyZFZpZXdQcm9wZXJ0aWVzKHNlY3VyaXR5TWFya09wdGlvbnM/OiBDYXJkVmlld1NlbGVjdEl0ZW1PcHRpb248c3RyaW5nPltdKSB7XG4gICAgY29uc3QgZGlzYWJsZWRUYWdzID0gIXRoaXMudGFnU2VydmljZS5hcmVUYWdzRW5hYmxlZCgpO1xuICAgIGNvbnN0IGRpc2FibGVkQ2F0ZWdvcmllcyA9ICF0aGlzLmNhdGVnb3J5U2VydmljZS5hcmVDYXRlZ29yaWVzRW5hYmxlZCgpO1xuICAgIHRoaXMuY2FyZFZpZXdJdGVtcyA9ICh0aGlzLnNlbGVjdGVkQWN0aW9uRGVmaW5pdGlvbj8ucGFyYW1ldGVyRGVmaW5pdGlvbnMgPz8gW10pLm1hcCgocGFyYW1EZWYpID0+IHtcbiAgICAgIGNvbnN0IGNvbnN0cmFpbnRzRm9yRHJvcGRvd25Cb3ggPVxuICAgICAgICBwYXJhbURlZi5uYW1lID09PSAnc2VjdXJpdHlNYXJrSWQnXG4gICAgICAgICAgPyB7IG5hbWU6IHBhcmFtRGVmLm5hbWUsIGNvbnN0cmFpbnRzOiBzZWN1cml0eU1hcmtPcHRpb25zIHx8IFtdIH1cbiAgICAgICAgICA6IHRoaXMuX3BhcmFtZXRlckNvbnN0cmFpbnRzLmZpbmQoKG9iaikgPT4gb2JqLm5hbWUgPT09IHBhcmFtRGVmLm5hbWUpO1xuICAgICAgY29uc3QgY2FyZFZpZXdQcm9wZXJ0aWVzTW9kZWwgPSB7XG4gICAgICAgIGxhYmVsOiBwYXJhbURlZi5kaXNwbGF5TGFiZWwgKyAocGFyYW1EZWYubWFuZGF0b3J5ID8gJyAqJyA6ICcnKSxcbiAgICAgICAga2V5OiBwYXJhbURlZi5uYW1lLFxuICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgLi4uKHBhcmFtRGVmLm1hbmRhdG9yeVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0FDQV9GT0xERVJfUlVMRVMuUlVMRV9ERVRBSUxTLkVSUk9SLlJFUVVJUkVEJyxcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gISF2YWx1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgICAgc3dpdGNoIChwYXJhbURlZi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2Q6Ym9vbGVhbic6XG4gICAgICAgICAgcmV0dXJuIG5ldyBDYXJkVmlld0Jvb2xJdGVtTW9kZWwoe1xuICAgICAgICAgICAgLi4uY2FyZFZpZXdQcm9wZXJ0aWVzTW9kZWwsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5wYXJhbWV0ZXJzW3BhcmFtRGVmLm5hbWVdID8/IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgJ2Q6bm9kZXJlZic6XG4gICAgICAgICAgaWYgKCFjb25zdHJhaW50c0ZvckRyb3Bkb3duQm94ICYmICF0aGlzLnJlYWRPbmx5ICYmIHBhcmFtRGVmLm5hbWUgIT09ICdjYXRlZ29yeS12YWx1ZScpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2FyZFZpZXdUZXh0SXRlbU1vZGVsKHtcbiAgICAgICAgICAgICAgLi4uY2FyZFZpZXdQcm9wZXJ0aWVzTW9kZWwsXG4gICAgICAgICAgICAgIGljb246ICdmb2xkZXInLFxuICAgICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgICAgICAgY2xpY2thYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBjbGlja0NhbGxCYWNrOiB0aGlzLm9wZW5TZWxlY3RvckRpYWxvZy5iaW5kKHRoaXMsIHBhcmFtRGVmLm5hbWUpLFxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5wYXJhbWV0ZXJzW3BhcmFtRGVmLm5hbWVdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtRGVmLm5hbWUgPT09ICdjYXRlZ29yeS12YWx1ZScgJiYgIXRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2FyZFZpZXdUZXh0SXRlbU1vZGVsKHtcbiAgICAgICAgICAgICAgLi4uY2FyZFZpZXdQcm9wZXJ0aWVzTW9kZWwsXG4gICAgICAgICAgICAgIGljb246ICdsaWJyYXJ5X2FkZCcsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICAgICAgICBjbGlja2FibGU6IHRydWUsXG4gICAgICAgICAgICAgIGNsaWNrQ2FsbEJhY2s6IHRoaXMub3BlbkNhdERpYWxvZy5iaW5kKHRoaXMsIHBhcmFtRGVmLm5hbWUpLFxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5wYXJhbWV0ZXJzW3BhcmFtRGVmLm5hbWVdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIC8vICBmYWxscyB0aHJvdWdoXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGNvbnN0cmFpbnRzRm9yRHJvcGRvd25Cb3ggJiYgIXRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2FyZFZpZXdTZWxlY3RJdGVtTW9kZWwoe1xuICAgICAgICAgICAgICAuLi5jYXJkVmlld1Byb3BlcnRpZXNNb2RlbCxcbiAgICAgICAgICAgICAgdmFsdWU6ICh0aGlzLnBhcmFtZXRlcnNbcGFyYW1EZWYubmFtZV0gYXMgc3RyaW5nKSA/PyAnJyxcbiAgICAgICAgICAgICAgb3B0aW9ucyQ6IG9mKGNvbnN0cmFpbnRzRm9yRHJvcGRvd25Cb3guY29uc3RyYWludHMpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChvcHRpb24pID0+XG4gICAgICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgICAgIChkaXNhYmxlZFRhZ3MgJiYgdGhpcy50YWdzUmVsYXRlZFByb3BlcnRpZXNBbmRBc3BlY3RzLmluY2x1ZGVzKG9wdGlvbi5rZXkpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGRpc2FibGVkQ2F0ZWdvcmllcyAmJiB0aGlzLmNhdGVnb3JpZXNSZWxhdGVkUHJvcGVydGllc0FuZEFzcGVjdHMuaW5jbHVkZXMob3B0aW9uLmtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBDYXJkVmlld1RleHRJdGVtTW9kZWwoe1xuICAgICAgICAgICAgLi4uY2FyZFZpZXdQcm9wZXJ0aWVzTW9kZWwsXG4gICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgY29uc3RyYWludHNGb3JEcm9wZG93bkJveCAmJiB0aGlzLnJlYWRPbmx5ICYmIHRoaXMucGFyYW1zVG9Gb3JtYXREaXNwbGF5ZWRWYWx1ZS5pbmNsdWRlcyhwYXJhbURlZi5uYW1lKVxuICAgICAgICAgICAgICAgID8gY29uc3RyYWludHNGb3JEcm9wZG93bkJveC5jb25zdHJhaW50cy5maW5kKChjb25zdHJhaW50KSA9PiBjb25zdHJhaW50LmtleSA9PT0gdGhpcy5wYXJhbWV0ZXJzW3BhcmFtRGVmLm5hbWVdKT8ubGFiZWwgPz8gJydcbiAgICAgICAgICAgICAgICA6IHRoaXMucGFyYW1ldGVyc1twYXJhbURlZi5uYW1lXSA/PyAnJ1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuU2VsZWN0b3JEaWFsb2cocGFyYW1EZWZOYW1lKSB7XG4gICAgY29uc3QgZGF0YTogQ29udGVudE5vZGVTZWxlY3RvckNvbXBvbmVudERhdGEgPSB7XG4gICAgICBzZWxlY3Rpb25Nb2RlOiAnc2luZ2xlJyxcbiAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdBQ0FfRk9MREVSX1JVTEVTLlJVTEVfREVUQUlMUy5QTEFDRUhPTERFUi5DSE9PU0VfRk9MREVSJyksXG4gICAgICBhY3Rpb25OYW1lOiBOb2RlQWN0aW9uLkNIT09TRSxcbiAgICAgIGN1cnJlbnRGb2xkZXJJZDogdGhpcy5ub2RlSWQsXG4gICAgICBzZWxlY3Q6IG5ldyBTdWJqZWN0PE5vZGVbXT4oKVxuICAgIH07XG5cbiAgICB0aGlzLmRpYWxvZy5vcGVuKENvbnRlbnROb2RlU2VsZWN0b3JDb21wb25lbnQsIHtcbiAgICAgIGRhdGEsXG4gICAgICBwYW5lbENsYXNzOiAnYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1kaWFsb2cnLFxuICAgICAgd2lkdGg6ICc2MzBweCdcbiAgICB9KTtcblxuICAgIGRhdGEuc2VsZWN0LnN1YnNjcmliZShcbiAgICAgIChzZWxlY3Rpb25zOiBOb2RlW10pID0+IHtcbiAgICAgICAgaWYgKHNlbGVjdGlvbnNbMF0uaWQpIHtcbiAgICAgICAgICB0aGlzLndyaXRlVmFsdWUoe1xuICAgICAgICAgICAgYWN0aW9uRGVmaW5pdGlvbklkOiB0aGlzLnNlbGVjdGVkQWN0aW9uRGVmaW5pdGlvbklkLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMucGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgW3BhcmFtRGVmTmFtZV06IHNlbGVjdGlvbnNbMF0uaWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHtcbiAgICAgICAgICAgIGFjdGlvbkRlZmluaXRpb25JZDogdGhpcy5zZWxlY3RlZEFjdGlvbkRlZmluaXRpb25JZCxcbiAgICAgICAgICAgIHBhcmFtczogdGhpcy5wYXJhbWV0ZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5vblRvdWNoKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5DYXREaWFsb2cocGFyYW1EZWZOYW1lKSB7XG4gICAgY29uc3QgZGF0YTogQ2F0ZWdvcnlTZWxlY3RvckRpYWxvZ09wdGlvbnMgPSB7XG4gICAgICBzZWxlY3Q6IG5ldyBTdWJqZWN0PENhdGVnb3J5W10+KCksXG4gICAgICBtdWx0aVNlbGVjdDogZmFsc2VcbiAgICB9O1xuXG4gICAgdGhpcy5kaWFsb2cub3BlbihDYXRlZ29yeVNlbGVjdG9yRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhLFxuICAgICAgd2lkdGg6ICc2MzBweCdcbiAgICB9KTtcblxuICAgIGRhdGEuc2VsZWN0LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoc2VsZWN0aW9uczogQ2F0ZWdvcnlbXSkgPT4ge1xuICAgICAgaWYgKHNlbGVjdGlvbnNbMF0uaWQpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHtcbiAgICAgICAgICBhY3Rpb25EZWZpbml0aW9uSWQ6IHRoaXMuc2VsZWN0ZWRBY3Rpb25EZWZpbml0aW9uSWQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAuLi50aGlzLnBhcmFtZXRlcnMsXG4gICAgICAgICAgICBbcGFyYW1EZWZOYW1lXTogc2VsZWN0aW9uc1swXS5pZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25DaGFuZ2Uoe1xuICAgICAgICAgIGFjdGlvbkRlZmluaXRpb25JZDogdGhpcy5zZWxlY3RlZEFjdGlvbkRlZmluaXRpb25JZCxcbiAgICAgICAgICBwYXJhbXM6IHRoaXMucGFyYW1ldGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vblRvdWNoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXREZWZhdWx0UGFyYW1ldGVycygpIHtcbiAgICB0aGlzLnBhcmFtZXRlcnMgPSB7fTtcbiAgICAodGhpcy5zZWxlY3RlZEFjdGlvbkRlZmluaXRpb24/LnBhcmFtZXRlckRlZmluaXRpb25zID8/IFtdKS5mb3JFYWNoKChwYXJhbURlZjogQWN0aW9uUGFyYW1ldGVyRGVmaW5pdGlvbikgPT4ge1xuICAgICAgaWYgKHBhcmFtRGVmLnR5cGUgPT09ICdkOmJvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMucGFyYW1ldGVyc1twYXJhbURlZi5uYW1lXSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNvbnN0cmFpbnRzVG9TZWxlY3RPcHRpb25zKGNvbnN0cmFpbnRzOiBDb25zdHJhaW50VmFsdWVbXSk6IENhcmRWaWV3U2VsZWN0SXRlbU9wdGlvbjx1bmtub3duPltdIHtcbiAgICByZXR1cm4gY29uc3RyYWludHNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGlmICghYS5sYWJlbCAmJiBiLmxhYmVsKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFiLmxhYmVsICYmIGEubGFiZWwpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEubGFiZWw/LmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkgPz8gLTE7XG4gICAgICB9KVxuICAgICAgLm1hcCgoY29uc3RyYWludCkgPT4gKHtcbiAgICAgICAga2V5OiBjb25zdHJhaW50LnZhbHVlLFxuICAgICAgICBsYWJlbDogY29uc3RyYWludC5sYWJlbCA/IGAke2NvbnN0cmFpbnQubGFiZWx9IFske2NvbnN0cmFpbnQudmFsdWV9XWAgOiBjb25zdHJhaW50LnZhbHVlXG4gICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRW1wdHlQYXJhbWV0ZXJzKHBhcmFtczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSB7XG4gICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IChwYXJhbXNba2V5XSA9PT0gbnVsbCB8fCBwYXJhbXNba2V5XSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtc1trZXldID09PSAnJykgJiYgZGVsZXRlIHBhcmFtc1trZXldKTtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgbG9hZFNlY3VyaXR5TWFya09wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFyYW1ldGVycz8uc2VjdXJpdHlHcm91cElkKSB7XG4gICAgICBmcm9tKHRoaXMuc2VjdXJpdHlDb250cm9sc1NlcnZpY2UuZ2V0U2VjdXJpdHlNYXJrKHRoaXMucGFyYW1ldGVycy5zZWN1cml0eUdyb3VwSWQgYXMgc3RyaW5nKSlcbiAgICAgICAgLnBpcGUobWFwKChzZWN1cml0eU1hcmtzKSA9PiBzZWN1cml0eU1hcmtzLmVudHJpZXMubWFwKChlbnRyeSkgPT4gdGhpcy5mb3JtYXRTZWN1cml0eU1hcmtDb25zdHJhaW50KGVudHJ5KSkpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHRoaXMuc2V0Q2FyZFZpZXdQcm9wZXJ0aWVzKHRoaXMucGFyc2VDb25zdHJhaW50c1RvU2VsZWN0T3B0aW9ucyhyZXMpIGFzIENhcmRWaWV3U2VsZWN0SXRlbU9wdGlvbjxzdHJpbmc+W10pKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFNlY3VyaXR5TWFya0NvbnN0cmFpbnQoc2VjdXJpdHlNYXJrOiBTZWN1cml0eU1hcmspOiBDb25zdHJhaW50VmFsdWUge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogc2VjdXJpdHlNYXJrLmlkLFxuICAgICAgbGFiZWw6IHNlY3VyaXR5TWFyay5uYW1lXG4gICAgfTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJhY2EtcnVsZS1hY3Rpb25fX2Zvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cblxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJhY2EtcnVsZS1hY3Rpb24tZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJmaWxsXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgIDxtYXQtc2VsZWN0XG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJhY3Rpb25EZWZpbml0aW9uSWRcIlxuICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwicnVsZS1hY3Rpb24tc2VsZWN0XCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInQUNBX0ZPTERFUl9SVUxFUy5SVUxFX0RFVEFJTFMuQUNUSU9OX1NFTEVDVF9QTEFDRUhPTERFUicgfCB0cmFuc2xhdGVcIj5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb25EZWZpbml0aW9uIG9mIGFjdGlvbkRlZmluaXRpb25zXCJcbiAgICAgICAgW3ZhbHVlXT1cImFjdGlvbkRlZmluaXRpb24uaWRcIj5cbiAgICAgICAge3sgYWN0aW9uRGVmaW5pdGlvbi50aXRsZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8YWRmLWNhcmQtdmlld1xuICAgICpuZ0lmPVwiY2FyZFZpZXdJdGVtcz8ubGVuZ3RoID4gMFwiXG4gICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwicnVsZS1hY3Rpb24tY2FyZC12aWV3XCJcbiAgICBbcHJvcGVydGllc109XCJjYXJkVmlld0l0ZW1zXCJcbiAgICBjbGFzcz1cImFjYS1ydWxlLWFjdGlvbi1mdWxsLXdpZHRoXCJcbiAgICBbZWRpdGFibGVdPVwiIXJlYWRPbmx5XCIgLz5cblxuPC9mb3JtPlxuIl19