@alfresco/adf-content-services 8.1.0-15604953499 → 8.1.0-15607239857

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/esm2022/adf-content-services.mjs +5 -0
  2. package/esm2022/lib/agent/index.mjs +18 -0
  3. package/esm2022/lib/agent/public-api.mjs +18 -0
  4. package/esm2022/lib/agent/services/agent.service.mjs +60 -0
  5. package/esm2022/lib/alfresco-icon/alfresco-icon.component.mjs +27 -0
  6. package/esm2022/lib/api-factories/alfresco-api-no-auth.service.mjs +42 -0
  7. package/esm2022/lib/api-factories/alfresco-api-v2-loader.service.mjs +77 -0
  8. package/esm2022/lib/api-factories/index.mjs +18 -0
  9. package/esm2022/lib/api-factories/public-api.mjs +19 -0
  10. package/esm2022/lib/aspect-list/aspect-list-dialog-data.interface.mjs +18 -0
  11. package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +78 -0
  12. package/esm2022/lib/aspect-list/aspect-list.component.mjs +140 -0
  13. package/esm2022/lib/aspect-list/aspect-list.module.mjs +35 -0
  14. package/esm2022/lib/aspect-list/index.mjs +18 -0
  15. package/esm2022/lib/aspect-list/public-api.mjs +24 -0
  16. package/esm2022/lib/aspect-list/services/aspect-list.service.mjs +83 -0
  17. package/esm2022/lib/aspect-list/services/dialog-aspect-list.service.mjs +86 -0
  18. package/esm2022/lib/aspect-list/services/node-aspect.service.mjs +52 -0
  19. package/esm2022/lib/auth-loader/content-auth-loader-factory.mjs +26 -0
  20. package/esm2022/lib/auth-loader/content-auth-loader.service.mjs +42 -0
  21. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +167 -0
  22. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +35 -0
  23. package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +66 -0
  24. package/esm2022/lib/breadcrumb/index.mjs +18 -0
  25. package/esm2022/lib/breadcrumb/public-api.mjs +20 -0
  26. package/esm2022/lib/category/categories-management/categories-management-mode.mjs +22 -0
  27. package/esm2022/lib/category/categories-management/categories-management.component.mjs +309 -0
  28. package/esm2022/lib/category/category.module.mjs +33 -0
  29. package/esm2022/lib/category/index.mjs +18 -0
  30. package/esm2022/lib/category/models/category-node.interface.mjs +18 -0
  31. package/esm2022/lib/category/public-api.mjs +23 -0
  32. package/esm2022/lib/category/services/category-tree-datasource.service.mjs +80 -0
  33. package/esm2022/lib/category/services/category.service.mjs +159 -0
  34. package/esm2022/lib/common/events/file.event.mjs +46 -0
  35. package/esm2022/lib/common/index.mjs +18 -0
  36. package/esm2022/lib/common/interfaces/saved-search.interface.mjs +18 -0
  37. package/esm2022/lib/common/interfaces/search-configuration.interface.mjs +18 -0
  38. package/esm2022/lib/common/mocks/ecm-user.service.mock.mjs +37 -0
  39. package/esm2022/lib/common/models/allowable-operations.enum.mjs +30 -0
  40. package/esm2022/lib/common/models/ecm-company.model.mjs +19 -0
  41. package/esm2022/lib/common/models/ecm-user.model.mjs +45 -0
  42. package/esm2022/lib/common/models/file.model.mjs +53 -0
  43. package/esm2022/lib/common/models/node-metadata.model.mjs +23 -0
  44. package/esm2022/lib/common/models/permissions.enum.mjs +32 -0
  45. package/esm2022/lib/common/public-api.mjs +37 -0
  46. package/esm2022/lib/common/services/card-view-content-update.service.mjs +55 -0
  47. package/esm2022/lib/common/services/content.service.mjs +180 -0
  48. package/esm2022/lib/common/services/discovery-api.service.mjs +79 -0
  49. package/esm2022/lib/common/services/favorites-api.service.mjs +84 -0
  50. package/esm2022/lib/common/services/nodes-api.service.mjs +251 -0
  51. package/esm2022/lib/common/services/people-content.service.mjs +138 -0
  52. package/esm2022/lib/common/services/rendition.service.mjs +270 -0
  53. package/esm2022/lib/common/services/saved-searches.service.mjs +206 -0
  54. package/esm2022/lib/common/services/sites.service.mjs +243 -0
  55. package/esm2022/lib/common/services/upload.service.mjs +391 -0
  56. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +55 -0
  57. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +491 -0
  58. package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +129 -0
  59. package/esm2022/lib/content-metadata/content-metadata.module.mjs +36 -0
  60. package/esm2022/lib/content-metadata/index.mjs +18 -0
  61. package/esm2022/lib/content-metadata/interfaces/aspect-oriented-config.interface.mjs +18 -0
  62. package/esm2022/lib/content-metadata/interfaces/card-view-group.interface.mjs +18 -0
  63. package/esm2022/lib/content-metadata/interfaces/content-metadata-config.interface.mjs +18 -0
  64. package/esm2022/lib/content-metadata/interfaces/content-metadata-custom-panel.interface.mjs +18 -0
  65. package/esm2022/lib/content-metadata/interfaces/content-metadata-panel.interface.mjs +18 -0
  66. package/esm2022/lib/content-metadata/interfaces/content-metadata.interfaces.mjs +28 -0
  67. package/esm2022/lib/content-metadata/interfaces/indifferent-config.interface.mjs +18 -0
  68. package/esm2022/lib/content-metadata/interfaces/layout-oriented-config.interface.mjs +18 -0
  69. package/esm2022/lib/content-metadata/interfaces/organised-property-group.interface.mjs +18 -0
  70. package/esm2022/lib/content-metadata/interfaces/preset-config.interface.mjs +18 -0
  71. package/esm2022/lib/content-metadata/interfaces/property-group.interface.mjs +18 -0
  72. package/esm2022/lib/content-metadata/interfaces/property.interface.mjs +18 -0
  73. package/esm2022/lib/content-metadata/public-api.mjs +31 -0
  74. package/esm2022/lib/content-metadata/services/basic-properties.service.mjs +107 -0
  75. package/esm2022/lib/content-metadata/services/config/aspect-oriented-config.service.mjs +106 -0
  76. package/esm2022/lib/content-metadata/services/config/content-metadata-config.factory.mjs +76 -0
  77. package/esm2022/lib/content-metadata/services/config/indifferent-config.service.mjs +40 -0
  78. package/esm2022/lib/content-metadata/services/config/layout-oriented-config.service.mjs +108 -0
  79. package/esm2022/lib/content-metadata/services/config/property-group-reader.mjs +33 -0
  80. package/esm2022/lib/content-metadata/services/content-metadata.service.mjs +99 -0
  81. package/esm2022/lib/content-metadata/services/content-type-property.service.mjs +134 -0
  82. package/esm2022/lib/content-metadata/services/property-descriptors.service.mjs +52 -0
  83. package/esm2022/lib/content-metadata/services/property-groups-translator.service.mjs +169 -0
  84. package/esm2022/lib/content-node-selector/content-node-dialog.service.mjs +256 -0
  85. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +618 -0
  86. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.mjs +66 -0
  87. package/esm2022/lib/content-node-selector/content-node-selector.component-data.interface.mjs +18 -0
  88. package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +206 -0
  89. package/esm2022/lib/content-node-selector/content-node-selector.module.mjs +50 -0
  90. package/esm2022/lib/content-node-selector/index.mjs +18 -0
  91. package/esm2022/lib/content-node-selector/name-location-cell/name-location-cell.component.mjs +48 -0
  92. package/esm2022/lib/content-node-selector/public-api.mjs +25 -0
  93. package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +168 -0
  94. package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +288 -0
  95. package/esm2022/lib/content-node-share/content-node-share.directive.mjs +102 -0
  96. package/esm2022/lib/content-node-share/content-node-share.module.mjs +35 -0
  97. package/esm2022/lib/content-node-share/content-node-share.settings.mjs +18 -0
  98. package/esm2022/lib/content-node-share/index.mjs +18 -0
  99. package/esm2022/lib/content-node-share/public-api.mjs +22 -0
  100. package/esm2022/lib/content-node-share/services/shared-links-api.service.mjs +83 -0
  101. package/esm2022/lib/content-type/content-type-dialog.component.mjs +58 -0
  102. package/esm2022/lib/content-type/content-type-metadata.interface.mjs +18 -0
  103. package/esm2022/lib/content-type/content-type.service.mjs +52 -0
  104. package/esm2022/lib/content-type/index.mjs +20 -0
  105. package/esm2022/lib/content.module.mjs +277 -0
  106. package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +52 -0
  107. package/esm2022/lib/dialogs/dialog.module.mjs +52 -0
  108. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.mjs +111 -0
  109. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.module.mjs +38 -0
  110. package/esm2022/lib/dialogs/download-zip/services/download-zip.service.mjs +66 -0
  111. package/esm2022/lib/dialogs/folder/folder-name.validators.mjs +44 -0
  112. package/esm2022/lib/dialogs/folder/folder.dialog.mjs +147 -0
  113. package/esm2022/lib/dialogs/index.mjs +18 -0
  114. package/esm2022/lib/dialogs/library/library.dialog.mjs +225 -0
  115. package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +116 -0
  116. package/esm2022/lib/dialogs/public-api.mjs +25 -0
  117. package/esm2022/lib/directives/auto-focus.directive.mjs +38 -0
  118. package/esm2022/lib/directives/check-allowable-operation.directive.mjs +126 -0
  119. package/esm2022/lib/directives/content-directive.module.mjs +75 -0
  120. package/esm2022/lib/directives/index.mjs +18 -0
  121. package/esm2022/lib/directives/library-favorite.directive.mjs +119 -0
  122. package/esm2022/lib/directives/library-membership.directive.mjs +202 -0
  123. package/esm2022/lib/directives/node-counter.directive.mjs +60 -0
  124. package/esm2022/lib/directives/node-delete.directive.mjs +177 -0
  125. package/esm2022/lib/directives/node-download.directive.mjs +138 -0
  126. package/esm2022/lib/directives/node-favorite.directive.mjs +193 -0
  127. package/esm2022/lib/directives/node-lock.directive.mjs +57 -0
  128. package/esm2022/lib/directives/node-restore.directive.mjs +218 -0
  129. package/esm2022/lib/directives/public-api.mjs +28 -0
  130. package/esm2022/lib/document-list/components/content-action/content-action-list.component.mjs +60 -0
  131. package/esm2022/lib/document-list/components/content-action/content-action.component.mjs +196 -0
  132. package/esm2022/lib/document-list/components/document-list.component.mjs +964 -0
  133. package/esm2022/lib/document-list/components/document-list.token.mjs +21 -0
  134. package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +43 -0
  135. package/esm2022/lib/document-list/components/filter-header/filter-header.component.mjs +107 -0
  136. package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +133 -0
  137. package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +93 -0
  138. package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +88 -0
  139. package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +120 -0
  140. package/esm2022/lib/document-list/components/node.event.mjs +30 -0
  141. package/esm2022/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.mjs +83 -0
  142. package/esm2022/lib/document-list/data/image-resolver.model.mjs +18 -0
  143. package/esm2022/lib/document-list/data/row-filter.model.mjs +18 -0
  144. package/esm2022/lib/document-list/data/share-data-row.model.mjs +102 -0
  145. package/esm2022/lib/document-list/data/share-datatable-adapter.mjs +258 -0
  146. package/esm2022/lib/document-list/document-list.module.mjs +79 -0
  147. package/esm2022/lib/document-list/index.mjs +18 -0
  148. package/esm2022/lib/document-list/interfaces/document-list-loader.interface.mjs +18 -0
  149. package/esm2022/lib/document-list/models/content-action.model.mjs +59 -0
  150. package/esm2022/lib/document-list/models/document-folder.model.mjs +23 -0
  151. package/esm2022/lib/document-list/models/node-action.enum.mjs +27 -0
  152. package/esm2022/lib/document-list/models/permissions-style.model.mjs +27 -0
  153. package/esm2022/lib/document-list/models/permissions.model.mjs +26 -0
  154. package/esm2022/lib/document-list/models/preset.model.mjs +257 -0
  155. package/esm2022/lib/document-list/public-api.mjs +47 -0
  156. package/esm2022/lib/document-list/services/custom-resources.service.mjs +377 -0
  157. package/esm2022/lib/document-list/services/document-actions.service.mjs +142 -0
  158. package/esm2022/lib/document-list/services/document-list.service.mjs +175 -0
  159. package/esm2022/lib/document-list/services/folder-actions.service.mjs +137 -0
  160. package/esm2022/lib/document-list/services/lock.service.mjs +72 -0
  161. package/esm2022/lib/document-list/services/node-actions.service.mjs +122 -0
  162. package/esm2022/lib/group/index.mjs +18 -0
  163. package/esm2022/lib/group/public-api.mjs +18 -0
  164. package/esm2022/lib/group/services/group.service.mjs +84 -0
  165. package/esm2022/lib/infinite-scroll-datasource/index.mjs +18 -0
  166. package/esm2022/lib/infinite-scroll-datasource/infinite-scroll-datasource.mjs +69 -0
  167. package/esm2022/lib/infinite-scroll-datasource/public-api.mjs +18 -0
  168. package/esm2022/lib/interfaces/base-card-view-content-update.interface.mjs +18 -0
  169. package/esm2022/lib/interfaces/index.mjs +18 -0
  170. package/esm2022/lib/interfaces/library-entity.interface.mjs +18 -0
  171. package/esm2022/lib/interfaces/library-membership-error-event.interface.mjs +18 -0
  172. package/esm2022/lib/interfaces/library-membership-toggle-event.interface.mjs +18 -0
  173. package/esm2022/lib/interfaces/node-allowable-operation-subject.interface.mjs +18 -0
  174. package/esm2022/lib/interfaces/public-api.mjs +23 -0
  175. package/esm2022/lib/interfaces/restore-message-model.interface.mjs +19 -0
  176. package/esm2022/lib/legal-hold/index.mjs +18 -0
  177. package/esm2022/lib/legal-hold/public-api.mjs +18 -0
  178. package/esm2022/lib/legal-hold/services/legal-hold.service.mjs +136 -0
  179. package/esm2022/lib/material.module.mjs +183 -0
  180. package/esm2022/lib/mock/alfresco-api.service.mock.mjs +43 -0
  181. package/esm2022/lib/mock/date-range-search-filter.mock.mjs +65 -0
  182. package/esm2022/lib/mock/document-library.model.mock.mjs +84 -0
  183. package/esm2022/lib/mock/document-list.component.mock.mjs +364 -0
  184. package/esm2022/lib/mock/index.mjs +18 -0
  185. package/esm2022/lib/mock/new-version-uploader.service.mock.mjs +161 -0
  186. package/esm2022/lib/mock/public-api.mjs +27 -0
  187. package/esm2022/lib/mock/search-filter-mock.mjs +637 -0
  188. package/esm2022/lib/mock/search-query.mock.mjs +40 -0
  189. package/esm2022/lib/mock/search.component.mock.mjs +165 -0
  190. package/esm2022/lib/mock/search.service.mock.mjs +61 -0
  191. package/esm2022/lib/mock/sites-dropdown.component.mock.mjs +281 -0
  192. package/esm2022/lib/new-version-uploader/index.mjs +18 -0
  193. package/esm2022/lib/new-version-uploader/models/index.mjs +18 -0
  194. package/esm2022/lib/new-version-uploader/models/new-version-uploader.model.mjs +24 -0
  195. package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +75 -0
  196. package/esm2022/lib/new-version-uploader/new-version-uploader.module.mjs +33 -0
  197. package/esm2022/lib/new-version-uploader/new-version-uploader.service.mjs +103 -0
  198. package/esm2022/lib/new-version-uploader/public-api.mjs +21 -0
  199. package/esm2022/lib/node-comments/index.mjs +18 -0
  200. package/esm2022/lib/node-comments/node-comments.component.mjs +44 -0
  201. package/esm2022/lib/node-comments/node-comments.module.mjs +33 -0
  202. package/esm2022/lib/node-comments/public-api.mjs +20 -0
  203. package/esm2022/lib/node-comments/services/node-comments.service.mjs +85 -0
  204. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog-data.interface.mjs +18 -0
  205. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +124 -0
  206. package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +103 -0
  207. package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +70 -0
  208. package/esm2022/lib/permission-manager/components/add-permission/search-config-permission.service.mjs +45 -0
  209. package/esm2022/lib/permission-manager/components/inherited-button.directive.mjs +67 -0
  210. package/esm2022/lib/permission-manager/components/node-path-column/node-path-column.component.mjs +56 -0
  211. package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +103 -0
  212. package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +88 -0
  213. package/esm2022/lib/permission-manager/components/permission-list/permission-list.service.mjs +219 -0
  214. package/esm2022/lib/permission-manager/components/pop-over.directive.mjs +134 -0
  215. package/esm2022/lib/permission-manager/components/user-icon-column/user-icon-column.component.mjs +88 -0
  216. package/esm2022/lib/permission-manager/components/user-name-column/user-name-column.component.mjs +82 -0
  217. package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +112 -0
  218. package/esm2022/lib/permission-manager/index.mjs +18 -0
  219. package/esm2022/lib/permission-manager/models/member.model.mjs +59 -0
  220. package/esm2022/lib/permission-manager/models/permission.model.mjs +29 -0
  221. package/esm2022/lib/permission-manager/models/role.model.mjs +18 -0
  222. package/esm2022/lib/permission-manager/permission-manager.module.mjs +84 -0
  223. package/esm2022/lib/permission-manager/public-api.mjs +36 -0
  224. package/esm2022/lib/permission-manager/services/node-permission-dialog.service.mjs +78 -0
  225. package/esm2022/lib/permission-manager/services/node-permission.service.mjs +299 -0
  226. package/esm2022/lib/pipes/content-pipe.module.mjs +37 -0
  227. package/esm2022/lib/pipes/index.mjs +18 -0
  228. package/esm2022/lib/pipes/node-name-tooltip.pipe.mjs +69 -0
  229. package/esm2022/lib/pipes/public-api.mjs +19 -0
  230. package/esm2022/lib/prediction/index.mjs +18 -0
  231. package/esm2022/lib/prediction/public-api.mjs +18 -0
  232. package/esm2022/lib/prediction/services/index.mjs +18 -0
  233. package/esm2022/lib/prediction/services/prediction.service.mjs +57 -0
  234. package/esm2022/lib/search/components/empty-search-result.component.mjs +27 -0
  235. package/esm2022/lib/search/components/index.mjs +43 -0
  236. package/esm2022/lib/search/components/reset-search.directive.mjs +41 -0
  237. package/esm2022/lib/search/components/search-check-list/index.mjs +18 -0
  238. package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +159 -0
  239. package/esm2022/lib/search/components/search-chip-autocomplete-input/index.mjs +18 -0
  240. package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +170 -0
  241. package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +47 -0
  242. package/esm2022/lib/search/components/search-control.component.mjs +181 -0
  243. package/esm2022/lib/search/components/search-date-range-tabbed/index.mjs +22 -0
  244. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/date-range-type.mjs +23 -0
  245. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/in-last-date-type.mjs +23 -0
  246. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +197 -0
  247. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.mjs +18 -0
  248. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.mjs +201 -0
  249. package/esm2022/lib/search/components/search-datetime-range/index.mjs +18 -0
  250. package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +224 -0
  251. package/esm2022/lib/search/components/search-facet-field/index.mjs +18 -0
  252. package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +133 -0
  253. package/esm2022/lib/search/components/search-filter/index.mjs +19 -0
  254. package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +46 -0
  255. package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +81 -0
  256. package/esm2022/lib/search/components/search-filter-autocomplete-chips/index.mjs +18 -0
  257. package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +155 -0
  258. package/esm2022/lib/search/components/search-filter-chips/index.mjs +23 -0
  259. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +105 -0
  260. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +110 -0
  261. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.mjs +129 -0
  262. package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +64 -0
  263. package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +44 -0
  264. package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +110 -0
  265. package/esm2022/lib/search/components/search-filter-container/index.mjs +18 -0
  266. package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +123 -0
  267. package/esm2022/lib/search/components/search-filter-tabbed/index.mjs +19 -0
  268. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tab.directive.mjs +36 -0
  269. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +64 -0
  270. package/esm2022/lib/search/components/search-form/index.mjs +18 -0
  271. package/esm2022/lib/search/components/search-form/search-form.component.mjs +53 -0
  272. package/esm2022/lib/search/components/search-input/index.mjs +18 -0
  273. package/esm2022/lib/search/components/search-input/search-input.component.mjs +109 -0
  274. package/esm2022/lib/search/components/search-logical-filter/index.mjs +18 -0
  275. package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +164 -0
  276. package/esm2022/lib/search/components/search-number-range/index.mjs +18 -0
  277. package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +155 -0
  278. package/esm2022/lib/search/components/search-panel/index.mjs +18 -0
  279. package/esm2022/lib/search/components/search-panel/search-panel.component.mjs +44 -0
  280. package/esm2022/lib/search/components/search-properties/file-size-condition.mjs +18 -0
  281. package/esm2022/lib/search/components/search-properties/file-size-operator.enum.mjs +23 -0
  282. package/esm2022/lib/search/components/search-properties/file-size-unit.enum.mjs +26 -0
  283. package/esm2022/lib/search/components/search-properties/index.mjs +22 -0
  284. package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +244 -0
  285. package/esm2022/lib/search/components/search-properties/search-properties.mjs +18 -0
  286. package/esm2022/lib/search/components/search-radio/index.mjs +18 -0
  287. package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +146 -0
  288. package/esm2022/lib/search/components/search-slider/index.mjs +18 -0
  289. package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +120 -0
  290. package/esm2022/lib/search/components/search-sorting-picker/index.mjs +18 -0
  291. package/esm2022/lib/search/components/search-sorting-picker/search-sorting-picker.component.mjs +77 -0
  292. package/esm2022/lib/search/components/search-text/index.mjs +18 -0
  293. package/esm2022/lib/search/components/search-text/search-text.component.mjs +135 -0
  294. package/esm2022/lib/search/components/search-widget-container/index.mjs +18 -0
  295. package/esm2022/lib/search/components/search-widget-container/search-widget-container.component.mjs +113 -0
  296. package/esm2022/lib/search/components/search.component.mjs +153 -0
  297. package/esm2022/lib/search/forms/index.mjs +19 -0
  298. package/esm2022/lib/search/forms/live-error-state-matcher.mjs +23 -0
  299. package/esm2022/lib/search/forms/search-term-validator.mjs +26 -0
  300. package/esm2022/lib/search/index.mjs +18 -0
  301. package/esm2022/lib/search/mocks/index.mjs +18 -0
  302. package/esm2022/lib/search/mocks/search.service.mock.mjs +56 -0
  303. package/esm2022/lib/search/models/autocomplete-option.interface.mjs +22 -0
  304. package/esm2022/lib/search/models/facet-field-bucket.interface.mjs +18 -0
  305. package/esm2022/lib/search/models/facet-field.interface.mjs +29 -0
  306. package/esm2022/lib/search/models/facet-query.interface.mjs +18 -0
  307. package/esm2022/lib/search/models/facet-widget.interface.mjs +18 -0
  308. package/esm2022/lib/search/models/filter-query.interface.mjs +18 -0
  309. package/esm2022/lib/search/models/filter-search.interface.mjs +18 -0
  310. package/esm2022/lib/search/models/index.mjs +34 -0
  311. package/esm2022/lib/search/models/response-facet-query-list.model.mjs +31 -0
  312. package/esm2022/lib/search/models/search-category.interface.mjs +18 -0
  313. package/esm2022/lib/search/models/search-configuration.interface.mjs +18 -0
  314. package/esm2022/lib/search/models/search-filter-list.model.mjs +148 -0
  315. package/esm2022/lib/search/models/search-form.interface.mjs +18 -0
  316. package/esm2022/lib/search/models/search-range.interface.mjs +18 -0
  317. package/esm2022/lib/search/models/search-sorting-definition.interface.mjs +18 -0
  318. package/esm2022/lib/search/models/search-widget-settings.interface.mjs +18 -0
  319. package/esm2022/lib/search/models/search-widget.interface.mjs +18 -0
  320. package/esm2022/lib/search/models/tabbed-facet-field.interface.mjs +18 -0
  321. package/esm2022/lib/search/public-api.mjs +24 -0
  322. package/esm2022/lib/search/search-configuration.token.mjs +19 -0
  323. package/esm2022/lib/search/search.module.mjs +192 -0
  324. package/esm2022/lib/search/services/base-query-builder.service.mjs +509 -0
  325. package/esm2022/lib/search/services/index.mjs +24 -0
  326. package/esm2022/lib/search/services/search-configuration.service.mjs +50 -0
  327. package/esm2022/lib/search/services/search-facet-filters.service.mjs +374 -0
  328. package/esm2022/lib/search/services/search-filter.service.mjs +56 -0
  329. package/esm2022/lib/search/services/search-header-query-builder.service.mjs +136 -0
  330. package/esm2022/lib/search/services/search-query-builder.service.mjs +48 -0
  331. package/esm2022/lib/search/services/search.service.mjs +89 -0
  332. package/esm2022/lib/search-ai/index.mjs +18 -0
  333. package/esm2022/lib/search-ai/models/search-ai-input-state.mjs +18 -0
  334. package/esm2022/lib/search-ai/public-api.mjs +19 -0
  335. package/esm2022/lib/search-ai/services/search-ai.service.mjs +103 -0
  336. package/esm2022/lib/security/index.mjs +18 -0
  337. package/esm2022/lib/security/public-api.mjs +18 -0
  338. package/esm2022/lib/security/services/models/security-controls-group-response.interface.mjs +18 -0
  339. package/esm2022/lib/security/services/models/security-controls-mark-response.interface.mjs +18 -0
  340. package/esm2022/lib/security/services/security-controls-groups-marks-security.service.mjs +274 -0
  341. package/esm2022/lib/security-options-loader/security-options-loader.service.mjs +43 -0
  342. package/esm2022/lib/services/alfresco-api.interface.mjs +18 -0
  343. package/esm2022/lib/services/alfresco-api.service.mjs +120 -0
  344. package/esm2022/lib/services/index.mjs +18 -0
  345. package/esm2022/lib/services/public-api.mjs +18 -0
  346. package/esm2022/lib/tag/index.mjs +18 -0
  347. package/esm2022/lib/tag/public-api.mjs +24 -0
  348. package/esm2022/lib/tag/services/tag.service.mjs +171 -0
  349. package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +115 -0
  350. package/esm2022/lib/tag/tag-list/tag-list.component.mjs +98 -0
  351. package/esm2022/lib/tag/tag-node-list/tag-node-list.component.mjs +80 -0
  352. package/esm2022/lib/tag/tag.module.mjs +37 -0
  353. package/esm2022/lib/tag/tags-creator/tags-creator-mode.mjs +27 -0
  354. package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +371 -0
  355. package/esm2022/lib/testing/content.testing.module.mjs +56 -0
  356. package/esm2022/lib/tree/components/tree.component.mjs +313 -0
  357. package/esm2022/lib/tree/index.mjs +18 -0
  358. package/esm2022/lib/tree/models/tree-context-menu-result.interface.mjs +18 -0
  359. package/esm2022/lib/tree/models/tree-node.interface.mjs +22 -0
  360. package/esm2022/lib/tree/models/tree-response.interface.mjs +18 -0
  361. package/esm2022/lib/tree/public-api.mjs +23 -0
  362. package/esm2022/lib/tree/services/tree.service.mjs +134 -0
  363. package/esm2022/lib/tree/tree.module.mjs +33 -0
  364. package/esm2022/lib/tree-view/components/tree-view.component.mjs +76 -0
  365. package/esm2022/lib/tree-view/data/tree-view-datasource.mjs +99 -0
  366. package/esm2022/lib/tree-view/index.mjs +18 -0
  367. package/esm2022/lib/tree-view/models/tree-view.model.mjs +28 -0
  368. package/esm2022/lib/tree-view/public-api.mjs +22 -0
  369. package/esm2022/lib/tree-view/services/tree-view.service.mjs +38 -0
  370. package/esm2022/lib/tree-view/tree-view.module.mjs +33 -0
  371. package/esm2022/lib/upload/components/base-upload/upload-base.mjs +176 -0
  372. package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +191 -0
  373. package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +93 -0
  374. package/esm2022/lib/upload/components/file-uploading-list.component.mjs +124 -0
  375. package/esm2022/lib/upload/components/upload-button.component.mjs +134 -0
  376. package/esm2022/lib/upload/components/upload-drag-area.component.mjs +112 -0
  377. package/esm2022/lib/upload/components/upload-files.event.mjs +41 -0
  378. package/esm2022/lib/upload/components/upload-version-button.component.mjs +55 -0
  379. package/esm2022/lib/upload/directives/file-draggable.directive.mjs +154 -0
  380. package/esm2022/lib/upload/directives/toggle-icon.directive.mjs +75 -0
  381. package/esm2022/lib/upload/index.mjs +18 -0
  382. package/esm2022/lib/upload/pipes/file-upload-error.pipe.mjs +39 -0
  383. package/esm2022/lib/upload/public-api.mjs +29 -0
  384. package/esm2022/lib/upload/upload.module.mjs +72 -0
  385. package/esm2022/lib/version-compatibility/index.mjs +18 -0
  386. package/esm2022/lib/version-compatibility/public-api.mjs +20 -0
  387. package/esm2022/lib/version-compatibility/version-compatibility-factory.mjs +26 -0
  388. package/esm2022/lib/version-compatibility/version-compatibility.directive.mjs +53 -0
  389. package/esm2022/lib/version-compatibility/version-compatibility.module.mjs +33 -0
  390. package/esm2022/lib/version-compatibility/version-compatibility.service.mjs +76 -0
  391. package/esm2022/lib/version-manager/content-version.service.mjs +53 -0
  392. package/esm2022/lib/version-manager/index.mjs +18 -0
  393. package/esm2022/lib/version-manager/public-api.mjs +23 -0
  394. package/esm2022/lib/version-manager/version-comparison.component.mjs +43 -0
  395. package/esm2022/lib/version-manager/version-list.component.mjs +216 -0
  396. package/esm2022/lib/version-manager/version-manager.component.mjs +146 -0
  397. package/esm2022/lib/version-manager/version-manager.module.mjs +48 -0
  398. package/esm2022/lib/version-manager/version-upload.component.mjs +155 -0
  399. package/esm2022/lib/viewer/alfresco-viewer.module.mjs +33 -0
  400. package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +401 -0
  401. package/esm2022/lib/viewer/index.mjs +18 -0
  402. package/esm2022/lib/viewer/public-api.mjs +19 -0
  403. package/esm2022/public-api.mjs +56 -0
  404. package/fesm2022/adf-content-services.mjs +739 -734
  405. package/fesm2022/adf-content-services.mjs.map +1 -1
  406. package/lib/new-version-uploader/new-version-uploader.dialog.scss +1 -1
  407. package/lib/upload/components/base-upload/upload-base.d.ts +1 -1
  408. package/package.json +5 -3
@@ -0,0 +1,176 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { TranslationService } from '@alfresco/adf-core';
18
+ import { FileModel } from '../../../common/models/file.model';
19
+ import { UploadService } from '../../../common/services/upload.service';
20
+ import { DestroyRef, Directive, EventEmitter, inject, Input, NgZone, Output } from '@angular/core';
21
+ import { UploadFilesEvent } from '../upload-files.event';
22
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
23
+ import * as i0 from "@angular/core";
24
+ // eslint-disable-next-line @angular-eslint/directive-class-suffix
25
+ export class UploadBase {
26
+ constructor() {
27
+ this.uploadService = inject(UploadService);
28
+ this.translationService = inject(TranslationService);
29
+ this.ngZone = inject(NgZone);
30
+ /**
31
+ * The ID of the root. Use the nodeId for
32
+ * Content Services or the taskId/processId for Process Services.
33
+ */
34
+ this.rootFolderId = '-root-';
35
+ /** Toggles component disabled state (if there is no node permission checking). */
36
+ this.disabled = false;
37
+ /** Filter for accepted file types. */
38
+ this.acceptedFilesType = '*';
39
+ /** Toggles versioning. */
40
+ this.versioning = false;
41
+ /** majorVersion boolean field to true to indicate a major version should be created. */
42
+ this.majorVersion = false;
43
+ /** Custom node type for uploaded file */
44
+ this.nodeType = 'cm:content';
45
+ /** Emitted when the file is uploaded successfully. */
46
+ this.success = new EventEmitter();
47
+ /** Emitted when an error occurs. */
48
+ this.error = new EventEmitter();
49
+ /** Emitted when the upload begins. */
50
+ this.beginUpload = new EventEmitter();
51
+ /** Emitted when dropping a file over another file to update the version. */
52
+ this.updateFileVersion = new EventEmitter();
53
+ this.destroyRef = inject(DestroyRef);
54
+ }
55
+ ngOnInit() {
56
+ this.uploadService.fileUploadError
57
+ .pipe(takeUntilDestroyed(this.destroyRef))
58
+ .subscribe(error => this.error.emit(error));
59
+ }
60
+ /**
61
+ * Upload a list of file in the specified path
62
+ *
63
+ * @param files files to upload
64
+ */
65
+ uploadFiles(files) {
66
+ const filteredFiles = files.map((file) => this.createFileModel(file, this.rootFolderId, ((file).webkitRelativePath || '').replace(/\/[^/]*$/, '')));
67
+ this.uploadQueue(filteredFiles);
68
+ }
69
+ uploadFilesInfo(files) {
70
+ const filteredFiles = files.map((fileInfo) => this.createFileModel(fileInfo.file, this.rootFolderId, fileInfo.relativeFolder));
71
+ this.uploadQueue(filteredFiles);
72
+ }
73
+ uploadQueue(files) {
74
+ const filteredFiles = files.filter(this.isFileAcceptable.bind(this)).filter(this.isFileSizeAcceptable.bind(this));
75
+ this.ngZone.run(() => {
76
+ const event = new UploadFilesEvent([...filteredFiles], this.uploadService, this.success, this.error);
77
+ this.beginUpload.emit(event);
78
+ if (!event.defaultPrevented) {
79
+ if (filteredFiles.length > 0) {
80
+ this.uploadService.addToQueue(...filteredFiles);
81
+ this.uploadService.uploadFilesInTheQueue(this.success, this.error);
82
+ }
83
+ }
84
+ });
85
+ }
86
+ /**
87
+ * Checks if the given file is allowed by the extension filters
88
+ *
89
+ * @param file FileModel
90
+ * @returns `true` if file is acceptable, otherwise `false`
91
+ */
92
+ isFileAcceptable(file) {
93
+ if (this.acceptedFilesType === '*') {
94
+ return true;
95
+ }
96
+ const allowedExtensions = this.acceptedFilesType.split(',').map((ext) => ext.trim().replace(/^\./, ''));
97
+ return allowedExtensions.indexOf(file.extension) !== -1;
98
+ }
99
+ /**
100
+ * Creates FileModel from File
101
+ *
102
+ * @param file file instance
103
+ * @param parentId parent id
104
+ * @param path upload path
105
+ * @param id model id
106
+ * @returns file model
107
+ */
108
+ createFileModel(file, parentId, path, id) {
109
+ return new FileModel(file, {
110
+ comment: this.comment,
111
+ majorVersion: this.majorVersion,
112
+ newVersion: this.versioning,
113
+ parentId,
114
+ path,
115
+ nodeType: this.nodeType
116
+ }, id);
117
+ }
118
+ isFileSizeAllowed(file) {
119
+ let isFileSizeAllowed = true;
120
+ if (this.isMaxFileSizeDefined()) {
121
+ isFileSizeAllowed = this.isFileSizeCorrect(file);
122
+ }
123
+ return isFileSizeAllowed;
124
+ }
125
+ isMaxFileSizeDefined() {
126
+ return this.maxFilesSize !== undefined && this.maxFilesSize !== null;
127
+ }
128
+ isFileSizeCorrect(file) {
129
+ return this.maxFilesSize >= 0 && file.size <= this.maxFilesSize;
130
+ }
131
+ /**
132
+ * Checks if the given file is an acceptable size
133
+ *
134
+ * @param file FileModel
135
+ * @returns `true` if file size is acceptable, otherwise `false`
136
+ */
137
+ isFileSizeAcceptable(file) {
138
+ let acceptableSize = true;
139
+ if (!this.isFileSizeAllowed(file)) {
140
+ acceptableSize = false;
141
+ const message = this.translationService.instant('FILE_UPLOAD.MESSAGES.EXCEED_MAX_FILE_SIZE', { fileName: file.name });
142
+ this.error.emit(message);
143
+ }
144
+ return acceptableSize;
145
+ }
146
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UploadBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
147
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: UploadBase, inputs: { maxFilesSize: "maxFilesSize", rootFolderId: "rootFolderId", disabled: "disabled", acceptedFilesType: "acceptedFilesType", versioning: "versioning", majorVersion: "majorVersion", comment: "comment", nodeType: "nodeType" }, outputs: { success: "success", error: "error", beginUpload: "beginUpload", updateFileVersion: "updateFileVersion" }, ngImport: i0 }); }
148
+ }
149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UploadBase, decorators: [{
150
+ type: Directive
151
+ }], propDecorators: { maxFilesSize: [{
152
+ type: Input
153
+ }], rootFolderId: [{
154
+ type: Input
155
+ }], disabled: [{
156
+ type: Input
157
+ }], acceptedFilesType: [{
158
+ type: Input
159
+ }], versioning: [{
160
+ type: Input
161
+ }], majorVersion: [{
162
+ type: Input
163
+ }], comment: [{
164
+ type: Input
165
+ }], nodeType: [{
166
+ type: Input
167
+ }], success: [{
168
+ type: Output
169
+ }], error: [{
170
+ type: Output
171
+ }], beginUpload: [{
172
+ type: Output
173
+ }], updateFileVersion: [{
174
+ type: Output
175
+ }] } });
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3VwbG9hZC9jb21wb25lbnRzL2Jhc2UtdXBsb2FkL3VwbG9hZC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBWSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFHaEUsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBZ0IsVUFBVTtJQUZoQztRQUdjLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RDLHVCQUFrQixHQUF1QixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNwRSxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBU2xDOzs7V0FHRztRQUVILGlCQUFZLEdBQVcsUUFBUSxDQUFDO1FBRWhDLGtGQUFrRjtRQUVsRixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLHNDQUFzQztRQUV0QyxzQkFBaUIsR0FBVyxHQUFHLENBQUM7UUFFaEMsMEJBQTBCO1FBRTFCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFNUIsd0ZBQXdGO1FBRXhGLGlCQUFZLEdBQVksS0FBSyxDQUFD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QUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLG9CQUFvQixDQUFDLElBQWU7UUFDeEMsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBRTFCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBRXZCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFFdEgsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7K0dBbkxpQixVQUFVO21HQUFWLFVBQVU7OzRGQUFWLFVBQVU7a0JBRi9CLFNBQVM7OEJBWU4sWUFBWTtzQkFEWCxLQUFLO2dCQVFOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixPQUFPO3NCQUROLE1BQU07Z0JBS1AsS0FBSztzQkFESixNQUFNO2dCQUtQLFdBQVc7c0JBRFYsTUFBTTtnQkFLUCxpQkFBaUI7c0JBRGhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEZpbGVJbmZvLCBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZEVycm9yRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZXZlbnRzL2ZpbGUuZXZlbnQnO1xuaW1wb3J0IHsgRmlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL21vZGVscy9maWxlLm1vZGVsJztcbmltcG9ydCB7IFVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vc2VydmljZXMvdXBsb2FkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVzdHJveVJlZiwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE5nWm9uZSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVwbG9hZEZpbGVzRXZlbnQgfSBmcm9tICcuLi91cGxvYWQtZmlsZXMuZXZlbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFVwbG9hZEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByb3RlY3RlZCB1cGxvYWRTZXJ2aWNlID0gaW5qZWN0KFVwbG9hZFNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSA9IGluamVjdChUcmFuc2xhdGlvblNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgYSBsaW1pdCBvbiB0aGUgbWF4aW11bSBzaXplIChpbiBieXRlcykgb2YgYSBmaWxlIHRvIGJlIHVwbG9hZGVkLlxuICAgICAqIEhhcyBubyBlZmZlY3QgaWYgdW5kZWZpbmVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4RmlsZXNTaXplOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgSUQgb2YgdGhlIHJvb3QuIFVzZSB0aGUgbm9kZUlkIGZvclxuICAgICAqIENvbnRlbnQgU2VydmljZXMgb3IgdGhlIHRhc2tJZC9wcm9jZXNzSWQgZm9yIFByb2Nlc3MgU2VydmljZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb290Rm9sZGVySWQ6IHN0cmluZyA9ICctcm9vdC0nO1xuXG4gICAgLyoqIFRvZ2dsZXMgY29tcG9uZW50IGRpc2FibGVkIHN0YXRlIChpZiB0aGVyZSBpcyBubyBub2RlIHBlcm1pc3Npb24gY2hlY2tpbmcpLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBGaWx0ZXIgZm9yIGFjY2VwdGVkIGZpbGUgdHlwZXMuICovXG4gICAgQElucHV0KClcbiAgICBhY2NlcHRlZEZpbGVzVHlwZTogc3RyaW5nID0gJyonO1xuXG4gICAgLyoqIFRvZ2dsZXMgdmVyc2lvbmluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHZlcnNpb25pbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBtYWpvclZlcnNpb24gYm9vbGVhbiBmaWVsZCB0byB0cnVlIHRvIGluZGljYXRlIGEgbWFqb3IgdmVyc2lvbiBzaG91bGQgYmUgY3JlYXRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1ham9yVmVyc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZW4geW91IG92ZXJ3cml0ZSBleGlzdGluZyBjb250ZW50LCB5b3UgY2FuIHVzZSB0aGUgY29tbWVudCBmaWVsZCB0byBhZGQgYSB2ZXJzaW9uIGNvbW1lbnQgdGhhdCBhcHBlYXJzIGluIHRoZSB2ZXJzaW9uIGhpc3RvcnkgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbW1lbnQ6IHN0cmluZztcblxuICAgIC8qKiBDdXN0b20gbm9kZSB0eXBlIGZvciB1cGxvYWRlZCBmaWxlICovXG4gICAgQElucHV0KClcbiAgICBub2RlVHlwZTogc3RyaW5nID0gJ2NtOmNvbnRlbnQnO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgZmlsZSBpcyB1cGxvYWRlZCBzdWNjZXNzZnVsbHkuICovXG4gICAgQE91dHB1dCgpXG4gICAgc3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlVXBsb2FkRXJyb3JFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVwbG9hZCBiZWdpbnMuICovXG4gICAgQE91dHB1dCgpXG4gICAgYmVnaW5VcGxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPFVwbG9hZEZpbGVzRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGRyb3BwaW5nIGEgZmlsZSBvdmVyIGFub3RoZXIgZmlsZSB0byB1cGRhdGUgdGhlIHZlcnNpb24uICovXG4gICAgQE91dHB1dCgpXG4gICAgdXBkYXRlRmlsZVZlcnNpb24gPSBuZXcgRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50PigpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkRXJyb3JcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShlcnJvciA9PiB0aGlzLmVycm9yLmVtaXQoZXJyb3IpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGxvYWQgYSBsaXN0IG9mIGZpbGUgaW4gdGhlIHNwZWNpZmllZCBwYXRoXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZXMgZmlsZXMgdG8gdXBsb2FkXG4gICAgICovXG4gICAgdXBsb2FkRmlsZXMoZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEZpbGVzOiBGaWxlTW9kZWxbXSA9IGZpbGVzLm1hcDxGaWxlTW9kZWw+KChmaWxlOiBGaWxlKSA9PlxuICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWxlTW9kZWwoZmlsZSwgdGhpcy5yb290Rm9sZGVySWQsICgoZmlsZSkud2Via2l0UmVsYXRpdmVQYXRoIHx8ICcnKS5yZXBsYWNlKC9cXC9bXi9dKiQvLCAnJykpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy51cGxvYWRRdWV1ZShmaWx0ZXJlZEZpbGVzKTtcbiAgICB9XG5cbiAgICB1cGxvYWRGaWxlc0luZm8oZmlsZXM6IEZpbGVJbmZvW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRGaWxlczogRmlsZU1vZGVsW10gPSBmaWxlcy5tYXA8RmlsZU1vZGVsPigoZmlsZUluZm86IEZpbGVJbmZvKSA9PlxuICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWxlTW9kZWwoZmlsZUluZm8uZmlsZSwgdGhpcy5yb290Rm9sZGVySWQsIGZpbGVJbmZvLnJlbGF0aXZlRm9sZGVyKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMudXBsb2FkUXVldWUoZmlsdGVyZWRGaWxlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGxvYWRRdWV1ZShmaWxlczogRmlsZU1vZGVsW10pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRGaWxlcyA9IGZpbGVzLmZpbHRlcih0aGlzLmlzRmlsZUFjY2VwdGFibGUuYmluZCh0aGlzKSkuZmlsdGVyKHRoaXMuaXNGaWxlU2l6ZUFjY2VwdGFibGUuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFVwbG9hZEZpbGVzRXZlbnQoWy4uLmZpbHRlcmVkRmlsZXNdLCB0aGlzLnVwbG9hZFNlcnZpY2UsIHRoaXMuc3VjY2VzcywgdGhpcy5lcnJvcik7XG4gICAgICAgICAgICB0aGlzLmJlZ2luVXBsb2FkLmVtaXQoZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkU2VydmljZS5hZGRUb1F1ZXVlKC4uLmZpbHRlcmVkRmlsZXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFNlcnZpY2UudXBsb2FkRmlsZXNJblRoZVF1ZXVlKHRoaXMuc3VjY2VzcywgdGhpcy5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIGZpbGUgaXMgYWxsb3dlZCBieSB0aGUgZXh0ZW5zaW9uIGZpbHRlcnNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlIEZpbGVNb2RlbFxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiBmaWxlIGlzIGFjY2VwdGFibGUsIG90aGVyd2lzZSBgZmFsc2VgXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzRmlsZUFjY2VwdGFibGUoZmlsZTogRmlsZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmFjY2VwdGVkRmlsZXNUeXBlID09PSAnKicpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWxsb3dlZEV4dGVuc2lvbnMgPSB0aGlzLmFjY2VwdGVkRmlsZXNUeXBlLnNwbGl0KCcsJykubWFwKChleHQpID0+IGV4dC50cmltKCkucmVwbGFjZSgvXlxcLi8sICcnKSk7XG5cbiAgICAgICAgcmV0dXJuIGFsbG93ZWRFeHRlbnNpb25zLmluZGV4T2YoZmlsZS5leHRlbnNpb24pICE9PSAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIEZpbGVNb2RlbCBmcm9tIEZpbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlIGZpbGUgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gcGFyZW50SWQgcGFyZW50IGlkXG4gICAgICogQHBhcmFtIHBhdGggdXBsb2FkIHBhdGhcbiAgICAgKiBAcGFyYW0gaWQgbW9kZWwgaWRcbiAgICAgKiBAcmV0dXJucyBmaWxlIG1vZGVsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUZpbGVNb2RlbChmaWxlOiBGaWxlLCBwYXJlbnRJZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGlkPzogc3RyaW5nKTogRmlsZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxlTW9kZWwoXG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1lbnQ6IHRoaXMuY29tbWVudCxcbiAgICAgICAgICAgICAgICBtYWpvclZlcnNpb246IHRoaXMubWFqb3JWZXJzaW9uLFxuICAgICAgICAgICAgICAgIG5ld1ZlcnNpb246IHRoaXMudmVyc2lvbmluZyxcbiAgICAgICAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICAgIG5vZGVUeXBlOiB0aGlzLm5vZGVUeXBlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNGaWxlU2l6ZUFsbG93ZWQoZmlsZTogRmlsZU1vZGVsKSB7XG4gICAgICAgIGxldCBpc0ZpbGVTaXplQWxsb3dlZCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmlzTWF4RmlsZVNpemVEZWZpbmVkKCkpIHtcbiAgICAgICAgICAgIGlzRmlsZVNpemVBbGxvd2VkID0gdGhpcy5pc0ZpbGVTaXplQ29ycmVjdChmaWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc0ZpbGVTaXplQWxsb3dlZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNNYXhGaWxlU2l6ZURlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1heEZpbGVzU2l6ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMubWF4RmlsZXNTaXplICE9PSBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc0ZpbGVTaXplQ29ycmVjdChmaWxlOiBGaWxlTW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF4RmlsZXNTaXplID49IDAgJiYgZmlsZS5zaXplIDw9IHRoaXMubWF4RmlsZXNTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyBhbiBhY2NlcHRhYmxlIHNpemVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlIEZpbGVNb2RlbFxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiBmaWxlIHNpemUgaXMgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzRmlsZVNpemVBY2NlcHRhYmxlKGZpbGU6IEZpbGVNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgYWNjZXB0YWJsZVNpemUgPSB0cnVlO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0ZpbGVTaXplQWxsb3dlZChmaWxlKSkge1xuICAgICAgICAgICAgYWNjZXB0YWJsZVNpemUgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmluc3RhbnQoJ0ZJTEVfVVBMT0FELk1FU1NBR0VTLkVYQ0VFRF9NQVhfRklMRV9TSVpFJywgeyBmaWxlTmFtZTogZmlsZS5uYW1lIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQobWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjZXB0YWJsZVNpemU7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,191 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { UserPreferencesService } from '@alfresco/adf-core';
18
+ import { ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, HostBinding, inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
19
+ import { merge, Subject } from 'rxjs';
20
+ import { FileUploadingListComponent } from './file-uploading-list.component';
21
+ import { delay } from 'rxjs/operators';
22
+ import { UploadService } from '../../common/services/upload.service';
23
+ import { FileUploadStatus } from '../../common/models/file.model';
24
+ import { CommonModule } from '@angular/common';
25
+ import { MatButtonModule } from '@angular/material/button';
26
+ import { TranslateModule } from '@ngx-translate/core';
27
+ import { MatIconModule } from '@angular/material/icon';
28
+ import { FileUploadingListRowComponent } from './file-uploading-list-row.component';
29
+ import { A11yModule } from '@angular/cdk/a11y';
30
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
31
+ import * as i0 from "@angular/core";
32
+ import * as i1 from "../../common/services/upload.service";
33
+ import * as i2 from "@alfresco/adf-core";
34
+ import * as i3 from "@angular/common";
35
+ import * as i4 from "@angular/material/button";
36
+ import * as i5 from "@ngx-translate/core";
37
+ import * as i6 from "@angular/material/icon";
38
+ import * as i7 from "@angular/cdk/a11y";
39
+ export class FileUploadingDialogComponent {
40
+ get isPositionRight() {
41
+ return (this.direction === 'ltr' && this.position === 'right') || (this.direction === 'rtl' && this.position === 'left') || null;
42
+ }
43
+ get isPositionLeft() {
44
+ return (this.direction === 'ltr' && this.position === 'left') || (this.direction === 'rtl' && this.position === 'right') || null;
45
+ }
46
+ constructor(uploadService, changeDetector, userPreferencesService, elementRef) {
47
+ this.uploadService = uploadService;
48
+ this.changeDetector = changeDetector;
49
+ this.userPreferencesService = userPreferencesService;
50
+ this.elementRef = elementRef;
51
+ /** Dialog direction. Can be 'ltr' or 'rtl. */
52
+ this.direction = 'ltr';
53
+ /** Dialog position. Can be 'left' or 'right'. */
54
+ this.position = 'right';
55
+ /** Makes the dialog always visible even when there are no uploads. */
56
+ this.alwaysVisible = false;
57
+ /** Emitted when a file in the list has an error. */
58
+ this.error = new EventEmitter();
59
+ this.filesUploadingList = [];
60
+ this.isDialogActive = false;
61
+ this.totalCompleted = 0;
62
+ this.totalErrors = 0;
63
+ this.isDialogMinimized = false;
64
+ this.isConfirmation = false;
65
+ this.dialogActive = new Subject();
66
+ this.destroyRef = inject(DestroyRef);
67
+ }
68
+ ngOnInit() {
69
+ this.dialogActive.pipe(delay(100), takeUntilDestroyed(this.destroyRef)).subscribe(() => {
70
+ const element = this.elementRef.nativeElement.querySelector('#upload-dialog');
71
+ if (element) {
72
+ element.focus();
73
+ }
74
+ });
75
+ this.uploadService.queueChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((fileList) => {
76
+ this.filesUploadingList = fileList;
77
+ if (this.filesUploadingList.length && !this.isDialogActive) {
78
+ this.isDialogActive = true;
79
+ this.dialogActive.next(undefined);
80
+ }
81
+ else {
82
+ this.dialogActive.next(undefined);
83
+ }
84
+ });
85
+ merge(this.uploadService.fileUploadComplete, this.uploadService.fileUploadDeleted)
86
+ .pipe(takeUntilDestroyed(this.destroyRef))
87
+ .subscribe((event) => {
88
+ this.totalCompleted = event.totalComplete;
89
+ this.changeDetector.detectChanges();
90
+ });
91
+ this.uploadService.fileUploadError.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {
92
+ this.totalErrors = event.totalError;
93
+ this.changeDetector.detectChanges();
94
+ });
95
+ this.uploadService.fileUpload.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
96
+ this.changeDetector.detectChanges();
97
+ });
98
+ this.uploadService.fileDeleted.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((objId) => {
99
+ if (this.filesUploadingList) {
100
+ const uploadedFile = this.filesUploadingList.find((file) => (file.data ? file.data.entry.id === objId : false));
101
+ if (uploadedFile) {
102
+ uploadedFile.status = FileUploadStatus.Cancelled;
103
+ this.changeDetector.detectChanges();
104
+ }
105
+ }
106
+ });
107
+ this.userPreferencesService
108
+ .select('textOrientation')
109
+ .pipe(takeUntilDestroyed(this.destroyRef))
110
+ .subscribe((textOrientation) => {
111
+ this.direction = textOrientation;
112
+ });
113
+ }
114
+ /**
115
+ * Toggle confirmation message.
116
+ */
117
+ toggleConfirmation() {
118
+ this.isConfirmation = !this.isConfirmation;
119
+ if (!this.isConfirmation) {
120
+ this.dialogActive.next(undefined);
121
+ }
122
+ if (this.isDialogMinimized) {
123
+ this.isDialogMinimized = false;
124
+ }
125
+ }
126
+ /**
127
+ * Cancel uploads and hide confirmation
128
+ */
129
+ cancelAllUploads() {
130
+ this.toggleConfirmation();
131
+ this.dialogActive.next(undefined);
132
+ this.uploadList.cancelAllFiles();
133
+ }
134
+ /**
135
+ * Toggle dialog minimized state.
136
+ */
137
+ toggleMinimized() {
138
+ this.isDialogMinimized = !this.isDialogMinimized;
139
+ this.changeDetector.detectChanges();
140
+ }
141
+ /**
142
+ * Dismiss dialog
143
+ */
144
+ close() {
145
+ this.isConfirmation = false;
146
+ this.totalCompleted = 0;
147
+ this.totalErrors = 0;
148
+ this.filesUploadingList = [];
149
+ this.isDialogActive = false;
150
+ this.isDialogMinimized = false;
151
+ this.uploadService.clearQueue();
152
+ this.changeDetector.detectChanges();
153
+ }
154
+ ngOnDestroy() {
155
+ this.uploadService.clearQueue();
156
+ }
157
+ canShowDialog() {
158
+ return this.isDialogActive || this.alwaysVisible;
159
+ }
160
+ canShowCancelAll() {
161
+ return this.filesUploadingList?.length && this.hasUploadInProgress();
162
+ }
163
+ canCloseDialog() {
164
+ return !this.hasUploadInProgress() && !this.alwaysVisible;
165
+ }
166
+ hasUploadInProgress() {
167
+ return !this.uploadList?.isUploadCompleted() && !this.uploadList?.isUploadCancelled();
168
+ }
169
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileUploadingDialogComponent, deps: [{ token: i1.UploadService }, { token: i0.ChangeDetectorRef }, { token: i2.UserPreferencesService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
170
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FileUploadingDialogComponent, isStandalone: true, selector: "adf-file-uploading-dialog", inputs: { position: "position", alwaysVisible: "alwaysVisible" }, outputs: { error: "error" }, host: { properties: { "attr.adfUploadDialogRight": "this.isPositionRight", "attr.adfUploadDialogLeft": "this.isPositionLeft" } }, viewQueries: [{ propertyName: "uploadList", first: true, predicate: ["uploadList"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"canShowDialog()\"\n role=\"dialog\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG'| translate\"\n tabindex=\"0\"\n class=\"adf-upload-dialog\"\n id=\"upload-dialog\"\n [class.adf-upload-dialog--minimized]=\"isDialogMinimized\">\n <header class=\"adf-upload-dialog__header\">\n <button\n mat-icon-button\n class=\"adf-upload-dialog__header-button\"\n [attr.data-automation-id]=\"'adf-upload-dialog__toggle-minimize'\"\n [attr.aria-label]=\"(isDialogMinimized ?\n 'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_MAXIMIZE':\n 'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_MINIMIZE') | translate\"\n [disabled]=\"isConfirmation\"\n [attr.aria-expanded]=\"!isDialogMinimized\"\n (click)=\"toggleMinimized()\">\n <mat-icon\n class=\"adf-upload-dialog__header-button-icon\">\n {{ isDialogMinimized ? 'keyboard_arrow_up' : 'keyboard_arrow_down' }}\n </mat-icon>\n </button>\n\n <span\n class=\"adf-upload-dialog__title\"\n *ngIf=\"!uploadList.isUploadCancelled()\">\n {{ 'FILE_UPLOAD.MESSAGES.UPLOAD_PROGRESS'\n | translate: {\n completed: totalCompleted,\n total: filesUploadingList.length\n }\n }}\n </span>\n\n <span\n class=\"adf-upload-dialog__title\"\n *ngIf=\"uploadList.isUploadCancelled()\">\n {{ 'FILE_UPLOAD.MESSAGES.UPLOAD_CANCELED' | translate }}\n </span>\n </header>\n\n <section class=\"adf-upload-dialog__info\"\n *ngIf=\"totalErrors\">\n {{\n (totalErrors > 1\n ? 'FILE_UPLOAD.MESSAGES.UPLOAD_ERRORS'\n : 'FILE_UPLOAD.MESSAGES.UPLOAD_ERROR')\n | translate: { total: totalErrors }\n }}\n </section>\n\n <section class=\"adf-upload-dialog__content\"\n [class.adf-upload-dialog--padding]=\"isConfirmation\">\n <adf-file-uploading-list\n class=\"adf-file-uploading-list\"\n [class.adf-upload-dialog--hide]=\"isConfirmation\"\n #uploadList\n [files]=\"filesUploadingList\">\n <ng-template let-file=\"$implicit\">\n <adf-file-uploading-list-row\n [file]=\"file\"\n (cancel)=\"uploadList.cancelFile(file)\" />\n </ng-template>\n </adf-file-uploading-list>\n\n <div\n aria-live=\"polite\"\n aria-labelledby=\"confirmationTitle\"\n aria-describedby=\"confirmationDescription\"\n class=\"adf-upload-dialog__confirmation\"\n [class.adf-upload-dialog--hide]=\"!isConfirmation\">\n <p role=\"heading\" aria-level=\"2\" id=\"confirmationTitle\" class=\"adf-upload-dialog__confirmation--title\">\n {{ 'ADF_FILE_UPLOAD.CONFIRMATION.MESSAGE.TITLE' | translate }}\n </p>\n <p id=\"confirmationDescription\" class=\"adf-upload-dialog__confirmation--text\">\n {{ 'ADF_FILE_UPLOAD.CONFIRMATION.MESSAGE.TEXT' | translate }}\n </p>\n </div>\n </section>\n\n <footer class=\"adf-upload-dialog__actions\" *ngIf=\"!isConfirmation\">\n <button\n id=\"adf-upload-dialog-cancel-all\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.STOP_ALL' | translate\"\n color=\"primary\"\n mat-button\n *ngIf=\"canShowCancelAll()\"\n (click)=\"toggleConfirmation()\"\n >{{ 'ADF_FILE_UPLOAD.BUTTON.STOP_ALL' | translate }}</button>\n\n <button\n id=\"adf-upload-dialog-close\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_CLOSE' | translate\"\n *ngIf=\"canCloseDialog()\"\n mat-button\n color=\"primary\"\n (click)=\"close()\"\n >{{ 'ADF_FILE_UPLOAD.BUTTON.CLOSE' | translate }}</button>\n </footer>\n\n <footer class=\"adf-upload-dialog__actions\"\n *ngIf=\"isConfirmation\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <button\n id=\"adf-upload-dialog-cancel\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.CONFIRMATION.CANCEL' | translate\"\n mat-button\n (click)=\"cancelAllUploads()\"\n >{{ 'ADF_FILE_UPLOAD.CONFIRMATION.BUTTON.CANCEL' | translate }}</button>\n\n <button\n id=\"adf-upload-dialog-confirm\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.CONFIRMATION.CONTINUE' | translate\"\n mat-button\n color=\"primary\"\n (click)=\"toggleConfirmation()\"\n >{{ 'ADF_FILE_UPLOAD.CONFIRMATION.BUTTON.CONTINUE' | translate }}</button>\n </footer>\n</div>\n", styles: [".adf-upload-dialog{background:var(--adf-theme-background-dialog-color);color:var(--adf-theme-foreground-text-color-054);position:fixed;bottom:20px;width:40%;box-shadow:1px 5px 15px #888;z-index:999}.adf-upload-dialog--padding{padding:1em}.adf-upload-dialog--hide.adf-upload-dialog__confirmation,.adf-upload-dialog--hide.adf-file-uploading-list{display:none}.adf-upload-dialog--minimized{width:20%}.adf-upload-dialog--minimized .adf-upload-dialog__content{display:none}.adf-upload-dialog .adf-upload-dialog__header{padding:1em;display:flex;align-items:center}.adf-upload-dialog .adf-upload-dialog__header .adf-upload-dialog__header-button:is(button){min-width:0;height:24px;width:24px;padding:0;line-height:0;color:var(--adf-theme-foreground-text-color-054)}.adf-upload-dialog__title{margin-left:.5em;flex:1 1 auto}.adf-upload-dialog__info{padding:0 1em 1em}.adf-upload-dialog__content{overflow:auto;max-height:194px;border-top:1px solid var(--adf-theme-foreground-text-color-014);border-bottom:1px solid var(--adf-theme-foreground-text-color-014)}.adf-upload-dialog__confirmation{padding:0 .5em}.adf-upload-dialog__confirmation--title{font-size:var(--theme-subheading-2-font-size);line-height:1.5;letter-spacing:-.4px;color:var(--adf-theme-foreground-text-color-087)}.adf-upload-dialog__confirmation--text{margin-bottom:0}.adf-upload-dialog__actions{display:flex;justify-content:flex-end;padding:1em}.adf-upload-dialog__actions>button{width:auto;min-width:40px;text-transform:uppercase;padding:0 16px}[adfUploadDialogLeft] .adf-upload-dialog{left:25px}[adfUploadDialogRight] .adf-upload-dialog{right:25px}@media screen and (width >= 380px) and (width <= 768px){.adf-upload-dialog{width:60%}.adf-file-uploading-row .adf-file-uploading-row__group{min-width:0}}@media screen and (width <= 380px){.adf-upload-dialog{width:85%}.adf-file-uploading-row .adf-file-uploading-row__group{min-width:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FileUploadingListComponent, selector: "adf-file-uploading-list", inputs: ["files"], outputs: ["error"] }, { kind: "component", type: FileUploadingListRowComponent, selector: "adf-file-uploading-list-row", inputs: ["file"], outputs: ["cancel"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i7.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], encapsulation: i0.ViewEncapsulation.None }); }
171
+ }
172
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileUploadingDialogComponent, decorators: [{
173
+ type: Component,
174
+ args: [{ selector: 'adf-file-uploading-dialog', standalone: true, imports: [CommonModule, MatButtonModule, TranslateModule, MatIconModule, FileUploadingListComponent, FileUploadingListRowComponent, A11yModule], encapsulation: ViewEncapsulation.None, template: "<div *ngIf=\"canShowDialog()\"\n role=\"dialog\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG'| translate\"\n tabindex=\"0\"\n class=\"adf-upload-dialog\"\n id=\"upload-dialog\"\n [class.adf-upload-dialog--minimized]=\"isDialogMinimized\">\n <header class=\"adf-upload-dialog__header\">\n <button\n mat-icon-button\n class=\"adf-upload-dialog__header-button\"\n [attr.data-automation-id]=\"'adf-upload-dialog__toggle-minimize'\"\n [attr.aria-label]=\"(isDialogMinimized ?\n 'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_MAXIMIZE':\n 'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_MINIMIZE') | translate\"\n [disabled]=\"isConfirmation\"\n [attr.aria-expanded]=\"!isDialogMinimized\"\n (click)=\"toggleMinimized()\">\n <mat-icon\n class=\"adf-upload-dialog__header-button-icon\">\n {{ isDialogMinimized ? 'keyboard_arrow_up' : 'keyboard_arrow_down' }}\n </mat-icon>\n </button>\n\n <span\n class=\"adf-upload-dialog__title\"\n *ngIf=\"!uploadList.isUploadCancelled()\">\n {{ 'FILE_UPLOAD.MESSAGES.UPLOAD_PROGRESS'\n | translate: {\n completed: totalCompleted,\n total: filesUploadingList.length\n }\n }}\n </span>\n\n <span\n class=\"adf-upload-dialog__title\"\n *ngIf=\"uploadList.isUploadCancelled()\">\n {{ 'FILE_UPLOAD.MESSAGES.UPLOAD_CANCELED' | translate }}\n </span>\n </header>\n\n <section class=\"adf-upload-dialog__info\"\n *ngIf=\"totalErrors\">\n {{\n (totalErrors > 1\n ? 'FILE_UPLOAD.MESSAGES.UPLOAD_ERRORS'\n : 'FILE_UPLOAD.MESSAGES.UPLOAD_ERROR')\n | translate: { total: totalErrors }\n }}\n </section>\n\n <section class=\"adf-upload-dialog__content\"\n [class.adf-upload-dialog--padding]=\"isConfirmation\">\n <adf-file-uploading-list\n class=\"adf-file-uploading-list\"\n [class.adf-upload-dialog--hide]=\"isConfirmation\"\n #uploadList\n [files]=\"filesUploadingList\">\n <ng-template let-file=\"$implicit\">\n <adf-file-uploading-list-row\n [file]=\"file\"\n (cancel)=\"uploadList.cancelFile(file)\" />\n </ng-template>\n </adf-file-uploading-list>\n\n <div\n aria-live=\"polite\"\n aria-labelledby=\"confirmationTitle\"\n aria-describedby=\"confirmationDescription\"\n class=\"adf-upload-dialog__confirmation\"\n [class.adf-upload-dialog--hide]=\"!isConfirmation\">\n <p role=\"heading\" aria-level=\"2\" id=\"confirmationTitle\" class=\"adf-upload-dialog__confirmation--title\">\n {{ 'ADF_FILE_UPLOAD.CONFIRMATION.MESSAGE.TITLE' | translate }}\n </p>\n <p id=\"confirmationDescription\" class=\"adf-upload-dialog__confirmation--text\">\n {{ 'ADF_FILE_UPLOAD.CONFIRMATION.MESSAGE.TEXT' | translate }}\n </p>\n </div>\n </section>\n\n <footer class=\"adf-upload-dialog__actions\" *ngIf=\"!isConfirmation\">\n <button\n id=\"adf-upload-dialog-cancel-all\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.STOP_ALL' | translate\"\n color=\"primary\"\n mat-button\n *ngIf=\"canShowCancelAll()\"\n (click)=\"toggleConfirmation()\"\n >{{ 'ADF_FILE_UPLOAD.BUTTON.STOP_ALL' | translate }}</button>\n\n <button\n id=\"adf-upload-dialog-close\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_CLOSE' | translate\"\n *ngIf=\"canCloseDialog()\"\n mat-button\n color=\"primary\"\n (click)=\"close()\"\n >{{ 'ADF_FILE_UPLOAD.BUTTON.CLOSE' | translate }}</button>\n </footer>\n\n <footer class=\"adf-upload-dialog__actions\"\n *ngIf=\"isConfirmation\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <button\n id=\"adf-upload-dialog-cancel\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.CONFIRMATION.CANCEL' | translate\"\n mat-button\n (click)=\"cancelAllUploads()\"\n >{{ 'ADF_FILE_UPLOAD.CONFIRMATION.BUTTON.CANCEL' | translate }}</button>\n\n <button\n id=\"adf-upload-dialog-confirm\"\n [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.CONFIRMATION.CONTINUE' | translate\"\n mat-button\n color=\"primary\"\n (click)=\"toggleConfirmation()\"\n >{{ 'ADF_FILE_UPLOAD.CONFIRMATION.BUTTON.CONTINUE' | translate }}</button>\n </footer>\n</div>\n", styles: [".adf-upload-dialog{background:var(--adf-theme-background-dialog-color);color:var(--adf-theme-foreground-text-color-054);position:fixed;bottom:20px;width:40%;box-shadow:1px 5px 15px #888;z-index:999}.adf-upload-dialog--padding{padding:1em}.adf-upload-dialog--hide.adf-upload-dialog__confirmation,.adf-upload-dialog--hide.adf-file-uploading-list{display:none}.adf-upload-dialog--minimized{width:20%}.adf-upload-dialog--minimized .adf-upload-dialog__content{display:none}.adf-upload-dialog .adf-upload-dialog__header{padding:1em;display:flex;align-items:center}.adf-upload-dialog .adf-upload-dialog__header .adf-upload-dialog__header-button:is(button){min-width:0;height:24px;width:24px;padding:0;line-height:0;color:var(--adf-theme-foreground-text-color-054)}.adf-upload-dialog__title{margin-left:.5em;flex:1 1 auto}.adf-upload-dialog__info{padding:0 1em 1em}.adf-upload-dialog__content{overflow:auto;max-height:194px;border-top:1px solid var(--adf-theme-foreground-text-color-014);border-bottom:1px solid var(--adf-theme-foreground-text-color-014)}.adf-upload-dialog__confirmation{padding:0 .5em}.adf-upload-dialog__confirmation--title{font-size:var(--theme-subheading-2-font-size);line-height:1.5;letter-spacing:-.4px;color:var(--adf-theme-foreground-text-color-087)}.adf-upload-dialog__confirmation--text{margin-bottom:0}.adf-upload-dialog__actions{display:flex;justify-content:flex-end;padding:1em}.adf-upload-dialog__actions>button{width:auto;min-width:40px;text-transform:uppercase;padding:0 16px}[adfUploadDialogLeft] .adf-upload-dialog{left:25px}[adfUploadDialogRight] .adf-upload-dialog{right:25px}@media screen and (width >= 380px) and (width <= 768px){.adf-upload-dialog{width:60%}.adf-file-uploading-row .adf-file-uploading-row__group{min-width:0}}@media screen and (width <= 380px){.adf-upload-dialog{width:85%}.adf-file-uploading-row .adf-file-uploading-row__group{min-width:0}}\n"] }]
175
+ }], ctorParameters: () => [{ type: i1.UploadService }, { type: i0.ChangeDetectorRef }, { type: i2.UserPreferencesService }, { type: i0.ElementRef }], propDecorators: { uploadList: [{
176
+ type: ViewChild,
177
+ args: ['uploadList']
178
+ }], position: [{
179
+ type: Input
180
+ }], alwaysVisible: [{
181
+ type: Input
182
+ }], error: [{
183
+ type: Output
184
+ }], isPositionRight: [{
185
+ type: HostBinding,
186
+ args: ['attr.adfUploadDialogRight']
187
+ }], isPositionLeft: [{
188
+ type: HostBinding,
189
+ args: ['attr.adfUploadDialogLeft']
190
+ }] } });
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWRpbmctZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdXBsb2FkL2NvbXBvbmVudHMvZmlsZS11cGxvYWRpbmctZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdXBsb2FkL2NvbXBvbmVudHMvZmlsZS11cGxvYWRpbmctZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVELE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFhLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FB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SSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0lBQzFGLENBQUM7K0dBbktRLDRCQUE0QjttR0FBNUIsNEJBQTRCLGdhQ3hEekMsODFKQXVIQSw2NUREcEVjLFlBQVksa0lBQUUsZUFBZSx3VUFBRSxlQUFlLDJGQUFFLGFBQWEsb0xBQUUsMEJBQTBCLDJHQUFFLDZCQUE2Qiw4R0FBRSxVQUFVOzs0RkFLckksNEJBQTRCO2tCQVJ4QyxTQUFTOytCQUNJLDJCQUEyQixjQUN6QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsNkJBQTZCLEVBQUUsVUFBVSxDQUFDLGlCQUdoSSxpQkFBaUIsQ0FBQyxJQUFJO2dMQU9yQyxVQUFVO3NCQURULFNBQVM7dUJBQUMsWUFBWTtnQkFLdkIsUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFLTixLQUFLO3NCQURKLE1BQU07Z0JBSUksZUFBZTtzQkFEekIsV0FBVzt1QkFBQywyQkFBMkI7Z0JBSzdCLGNBQWM7c0JBRHhCLFdBQVc7dUJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1lcmdlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkaW5nTGlzdENvbXBvbmVudCB9IGZyb20gJy4vZmlsZS11cGxvYWRpbmctbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlcnZpY2VzL3VwbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVNb2RlbCwgRmlsZVVwbG9hZFN0YXR1cyB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvZmlsZS5tb2RlbCc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkQ29tcGxldGVFdmVudCwgRmlsZVVwbG9hZERlbGV0ZUV2ZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2V2ZW50cy9maWxlLmV2ZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBGaWxlVXBsb2FkaW5nTGlzdFJvd0NvbXBvbmVudCB9IGZyb20gJy4vZmlsZS11cGxvYWRpbmctbGlzdC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IEExMXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWZpbGUtdXBsb2FkaW5nLWRpYWxvZycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgRmlsZVVwbG9hZGluZ0xpc3RDb21wb25lbnQsIEZpbGVVcGxvYWRpbmdMaXN0Um93Q29tcG9uZW50LCBBMTF5TW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsZS11cGxvYWRpbmctZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWxlLXVwbG9hZGluZy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRpbmdEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIERpYWxvZyBkaXJlY3Rpb24uIENhbiBiZSAnbHRyJyBvciAncnRsLiAqL1xuICAgIHByaXZhdGUgZGlyZWN0aW9uOiBEaXJlY3Rpb24gPSAnbHRyJztcblxuICAgIEBWaWV3Q2hpbGQoJ3VwbG9hZExpc3QnKVxuICAgIHVwbG9hZExpc3Q6IEZpbGVVcGxvYWRpbmdMaXN0Q29tcG9uZW50O1xuXG4gICAgLyoqIERpYWxvZyBwb3NpdGlvbi4gQ2FuIGJlICdsZWZ0JyBvciAncmlnaHQnLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcG9zaXRpb246IHN0cmluZyA9ICdyaWdodCc7XG5cbiAgICAvKiogTWFrZXMgdGhlIGRpYWxvZyBhbHdheXMgdmlzaWJsZSBldmVuIHdoZW4gdGhlcmUgYXJlIG5vIHVwbG9hZHMuICovXG4gICAgQElucHV0KClcbiAgICBhbHdheXNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgZmlsZSBpbiB0aGUgbGlzdCBoYXMgYW4gZXJyb3IuICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3I6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFkZlVwbG9hZERpYWxvZ1JpZ2h0JylcbiAgICBwdWJsaWMgZ2V0IGlzUG9zaXRpb25SaWdodCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmRpcmVjdGlvbiA9PT0gJ2x0cicgJiYgdGhpcy5wb3NpdGlvbiA9PT0gJ3JpZ2h0JykgfHwgKHRoaXMuZGlyZWN0aW9uID09PSAncnRsJyAmJiB0aGlzLnBvc2l0aW9uID09PSAnbGVmdCcpIHx8IG51bGw7XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hZGZVcGxvYWREaWFsb2dMZWZ0JylcbiAgICBwdWJsaWMgZ2V0IGlzUG9zaXRpb25MZWZ0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuZGlyZWN0aW9uID09PSAnbHRyJyAmJiB0aGlzLnBvc2l0aW9uID09PSAnbGVmdCcpIHx8ICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3J0bCcgJiYgdGhpcy5wb3NpdGlvbiA9PT0gJ3JpZ2h0JykgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBmaWxlc1VwbG9hZGluZ0xpc3Q6IEZpbGVNb2RlbFtdID0gW107XG4gICAgaXNEaWFsb2dBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICB0b3RhbENvbXBsZXRlZDogbnVtYmVyID0gMDtcbiAgICB0b3RhbEVycm9yczogbnVtYmVyID0gMDtcbiAgICBpc0RpYWxvZ01pbmltaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlzQ29uZmlybWF0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGRpYWxvZ0FjdGl2ZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB1cGxvYWRTZXJ2aWNlOiBVcGxvYWRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dBY3RpdmUucGlwZShkZWxheSgxMDApLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQ6IGFueSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyN1cGxvYWQtZGlhbG9nJyk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLnF1ZXVlQ2hhbmdlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGZpbGVMaXN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbGVzVXBsb2FkaW5nTGlzdCA9IGZpbGVMaXN0O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5maWxlc1VwbG9hZGluZ0xpc3QubGVuZ3RoICYmICF0aGlzLmlzRGlhbG9nQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxvZ0FjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dBY3RpdmUubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0FjdGl2ZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1lcmdlKHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkQ29tcGxldGUsIHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkRGVsZXRlZClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEZpbGVVcGxvYWRDb21wbGV0ZUV2ZW50IHwgRmlsZVVwbG9hZERlbGV0ZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbENvbXBsZXRlZCA9IGV2ZW50LnRvdGFsQ29tcGxldGU7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwbG9hZFNlcnZpY2UuZmlsZVVwbG9hZEVycm9yLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG90YWxFcnJvcnMgPSBldmVudC50b3RhbEVycm9yO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmZpbGVEZWxldGVkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgob2JqSWQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVzVXBsb2FkaW5nTGlzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZGVkRmlsZSA9IHRoaXMuZmlsZXNVcGxvYWRpbmdMaXN0LmZpbmQoKGZpbGUpID0+IChmaWxlLmRhdGEgPyBmaWxlLmRhdGEuZW50cnkuaWQgPT09IG9iaklkIDogZmFsc2UpKTtcbiAgICAgICAgICAgICAgICBpZiAodXBsb2FkZWRGaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZGVkRmlsZS5zdGF0dXMgPSBGaWxlVXBsb2FkU3RhdHVzLkNhbmNlbGxlZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVzZXJQcmVmZXJlbmNlc1NlcnZpY2VcbiAgICAgICAgICAgIC5zZWxlY3QoJ3RleHRPcmllbnRhdGlvbicpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHRleHRPcmllbnRhdGlvbjogRGlyZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSB0ZXh0T3JpZW50YXRpb247XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgY29uZmlybWF0aW9uIG1lc3NhZ2UuXG4gICAgICovXG4gICAgdG9nZ2xlQ29uZmlybWF0aW9uKCkge1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uID0gIXRoaXMuaXNDb25maXJtYXRpb247XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzQ29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ0FjdGl2ZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0RpYWxvZ01pbmltaXplZCkge1xuICAgICAgICAgICAgdGhpcy5pc0RpYWxvZ01pbmltaXplZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FuY2VsIHVwbG9hZHMgYW5kIGhpZGUgY29uZmlybWF0aW9uXG4gICAgICovXG4gICAgY2FuY2VsQWxsVXBsb2FkcygpIHtcbiAgICAgICAgdGhpcy50b2dnbGVDb25maXJtYXRpb24oKTtcbiAgICAgICAgdGhpcy5kaWFsb2dBY3RpdmUubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLnVwbG9hZExpc3QuY2FuY2VsQWxsRmlsZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgZGlhbG9nIG1pbmltaXplZCBzdGF0ZS5cbiAgICAgKi9cbiAgICB0b2dnbGVNaW5pbWl6ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNEaWFsb2dNaW5pbWl6ZWQgPSAhdGhpcy5pc0RpYWxvZ01pbmltaXplZDtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzbWlzcyBkaWFsb2dcbiAgICAgKi9cbiAgICBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvdGFsQ29tcGxldGVkID0gMDtcbiAgICAgICAgdGhpcy50b3RhbEVycm9ycyA9IDA7XG4gICAgICAgIHRoaXMuZmlsZXNVcGxvYWRpbmdMaXN0ID0gW107XG4gICAgICAgIHRoaXMuaXNEaWFsb2dBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0RpYWxvZ01pbmltaXplZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVwbG9hZFNlcnZpY2UuY2xlYXJRdWV1ZSgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmNsZWFyUXVldWUoKTtcbiAgICB9XG5cbiAgICBjYW5TaG93RGlhbG9nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0RpYWxvZ0FjdGl2ZSB8fCB0aGlzLmFsd2F5c1Zpc2libGU7XG4gICAgfVxuXG4gICAgY2FuU2hvd0NhbmNlbEFsbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsZXNVcGxvYWRpbmdMaXN0Py5sZW5ndGggJiYgdGhpcy5oYXNVcGxvYWRJblByb2dyZXNzKCk7XG4gICAgfVxuXG4gICAgY2FuQ2xvc2VEaWFsb2coKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5oYXNVcGxvYWRJblByb2dyZXNzKCkgJiYgIXRoaXMuYWx3YXlzVmlzaWJsZTtcbiAgICB9XG5cbiAgICBoYXNVcGxvYWRJblByb2dyZXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMudXBsb2FkTGlzdD8uaXNVcGxvYWRDb21wbGV0ZWQoKSAmJiAhdGhpcy51cGxvYWRMaXN0Py5pc1VwbG9hZENhbmNlbGxlZCgpO1xuICAgIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJjYW5TaG93RGlhbG9nKClcIlxuICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGX0ZJTEVfVVBMT0FELkFSSUEtTEFCRUwuRElBTE9HJ3wgdHJhbnNsYXRlXCJcbiAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ1wiXG4gICAgIGlkPVwidXBsb2FkLWRpYWxvZ1wiXG4gICAgIFtjbGFzcy5hZGYtdXBsb2FkLWRpYWxvZy0tbWluaW1pemVkXT1cImlzRGlhbG9nTWluaW1pemVkXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cImFkZi11cGxvYWQtZGlhbG9nX19oZWFkZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImFkZi11cGxvYWQtZGlhbG9nX19oZWFkZXItYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLXVwbG9hZC1kaWFsb2dfX3RvZ2dsZS1taW5pbWl6ZSdcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoaXNEaWFsb2dNaW5pbWl6ZWQgP1xuICAgICAgICAgICAgICAgICdBREZfRklMRV9VUExPQUQuQVJJQS1MQUJFTC5ESUFMT0dfTUFYSU1JWkUnOlxuICAgICAgICAgICAgICAgICdBREZfRklMRV9VUExPQUQuQVJJQS1MQUJFTC5ESUFMT0dfTUlOSU1JWkUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNDb25maXJtYXRpb25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhaXNEaWFsb2dNaW5pbWl6ZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1pbmltaXplZCgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi11cGxvYWQtZGlhbG9nX19oZWFkZXItYnV0dG9uLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaXNEaWFsb2dNaW5pbWl6ZWQgPyAna2V5Ym9hcmRfYXJyb3dfdXAnIDogJ2tleWJvYXJkX2Fycm93X2Rvd24nIH19XG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ19fdGl0bGVcIlxuICAgICAgICAgICAgKm5nSWY9XCIhdXBsb2FkTGlzdC5pc1VwbG9hZENhbmNlbGxlZCgpXCI+XG4gICAgICAgICAgICB7eyAnRklMRV9VUExPQUQuTUVTU0FHRVMuVVBMT0FEX1BST0dSRVNTJ1xuICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogdG90YWxDb21wbGV0ZWQsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiBmaWxlc1VwbG9hZGluZ0xpc3QubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImFkZi11cGxvYWQtZGlhbG9nX190aXRsZVwiXG4gICAgICAgICAgICAqbmdJZj1cInVwbG9hZExpc3QuaXNVcGxvYWRDYW5jZWxsZWQoKVwiPlxuICAgICAgICAgICAge3sgJ0ZJTEVfVVBMT0FELk1FU1NBR0VTLlVQTE9BRF9DQU5DRUxFRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvaGVhZGVyPlxuXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ19faW5mb1wiXG4gICAgICAgICpuZ0lmPVwidG90YWxFcnJvcnNcIj5cbiAgICAgICAge3tcbiAgICAgICAgICAgICh0b3RhbEVycm9ycyA+IDFcbiAgICAgICAgICAgICAgICAgPyAnRklMRV9VUExPQUQuTUVTU0FHRVMuVVBMT0FEX0VSUk9SUydcbiAgICAgICAgICAgICAgICAgOiAnRklMRV9VUExPQUQuTUVTU0FHRVMuVVBMT0FEX0VSUk9SJylcbiAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgdG90YWw6IHRvdGFsRXJyb3JzIH1cbiAgICAgICAgfX1cbiAgICA8L3NlY3Rpb24+XG5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImFkZi11cGxvYWQtZGlhbG9nX19jb250ZW50XCJcbiAgICAgICAgW2NsYXNzLmFkZi11cGxvYWQtZGlhbG9nLS1wYWRkaW5nXT1cImlzQ29uZmlybWF0aW9uXCI+XG4gICAgICAgIDxhZGYtZmlsZS11cGxvYWRpbmctbGlzdFxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtZmlsZS11cGxvYWRpbmctbGlzdFwiXG4gICAgICAgICAgICBbY2xhc3MuYWRmLXVwbG9hZC1kaWFsb2ctLWhpZGVdPVwiaXNDb25maXJtYXRpb25cIlxuICAgICAgICAgICAgI3VwbG9hZExpc3RcbiAgICAgICAgICAgIFtmaWxlc109XCJmaWxlc1VwbG9hZGluZ0xpc3RcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWZpbGU9XCIkaW1wbGljaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgIDxhZGYtZmlsZS11cGxvYWRpbmctbGlzdC1yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlXT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNhbmNlbCk9XCJ1cGxvYWRMaXN0LmNhbmNlbEZpbGUoZmlsZSlcIiAvPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYWRmLWZpbGUtdXBsb2FkaW5nLWxpc3Q+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImNvbmZpcm1hdGlvblRpdGxlXCJcbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJjb25maXJtYXRpb25EZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi11cGxvYWQtZGlhbG9nX19jb25maXJtYXRpb25cIlxuICAgICAgICAgICAgW2NsYXNzLmFkZi11cGxvYWQtZGlhbG9nLS1oaWRlXT1cIiFpc0NvbmZpcm1hdGlvblwiPlxuICAgICAgICAgICAgICAgIDxwIHJvbGU9XCJoZWFkaW5nXCIgYXJpYS1sZXZlbD1cIjJcIiBpZD1cImNvbmZpcm1hdGlvblRpdGxlXCIgY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ19fY29uZmlybWF0aW9uLS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQURGX0ZJTEVfVVBMT0FELkNPTkZJUk1BVElPTi5NRVNTQUdFLlRJVExFJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8cCBpZD1cImNvbmZpcm1hdGlvbkRlc2NyaXB0aW9uXCIgY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ19fY29uZmlybWF0aW9uLS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdBREZfRklMRV9VUExPQUQuQ09ORklSTUFUSU9OLk1FU1NBR0UuVEVYVCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxmb290ZXIgY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ19fYWN0aW9uc1wiICpuZ0lmPVwiIWlzQ29uZmlybWF0aW9uXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGlkPVwiYWRmLXVwbG9hZC1kaWFsb2ctY2FuY2VsLWFsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfRklMRV9VUExPQUQuQVJJQS1MQUJFTC5TVE9QX0FMTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiY2FuU2hvd0NhbmNlbEFsbCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb25maXJtYXRpb24oKVwiXG4gICAgICAgID57eyAnQURGX0ZJTEVfVVBMT0FELkJVVFRPTi5TVE9QX0FMTCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBpZD1cImFkZi11cGxvYWQtZGlhbG9nLWNsb3NlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERl9GSUxFX1VQTE9BRC5BUklBLUxBQkVMLkRJQUxPR19DTE9TRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKm5nSWY9XCJjYW5DbG9zZURpYWxvZygpXCJcbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICAgID57eyAnQURGX0ZJTEVfVVBMT0FELkJVVFRPTi5DTE9TRScgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgICA8L2Zvb3Rlcj5cblxuICAgIDxmb290ZXIgY2xhc3M9XCJhZGYtdXBsb2FkLWRpYWxvZ19fYWN0aW9uc1wiXG4gICAgICAgICAgICAqbmdJZj1cImlzQ29uZmlybWF0aW9uXCIgY2RrVHJhcEZvY3VzIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBpZD1cImFkZi11cGxvYWQtZGlhbG9nLWNhbmNlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfRklMRV9VUExPQUQuQVJJQS1MQUJFTC5DT05GSVJNQVRJT04uQ0FOQ0VMJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsQWxsVXBsb2FkcygpXCJcbiAgICAgICAgPnt7ICdBREZfRklMRV9VUExPQUQuQ09ORklSTUFUSU9OLkJVVFRPTi5DQU5DRUwnIHwgdHJhbnNsYXRlIH19PC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgaWQ9XCJhZGYtdXBsb2FkLWRpYWxvZy1jb25maXJtXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERl9GSUxFX1VQTE9BRC5BUklBLUxBQkVMLkNPTkZJUk1BVElPTi5DT05USU5VRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb25maXJtYXRpb24oKVwiXG4gICAgICAgID57eyAnQURGX0ZJTEVfVVBMT0FELkNPTkZJUk1BVElPTi5CVVRUT04uQ09OVElOVUUnIHwgdHJhbnNsYXRlIH19PC9idXR0b24+XG4gICAgPC9mb290ZXI+XG48L2Rpdj5cbiJdfQ==