@alfresco/aca-content 4.0.0-A.2-9984

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 (255) hide show
  1. package/README.md +24 -0
  2. package/assets/app.extensions.json +2496 -0
  3. package/assets/i18n/ar.json +634 -0
  4. package/assets/i18n/cs.json +634 -0
  5. package/assets/i18n/da.json +634 -0
  6. package/assets/i18n/de.json +634 -0
  7. package/assets/i18n/en.json +634 -0
  8. package/assets/i18n/es.json +634 -0
  9. package/assets/i18n/fi.json +634 -0
  10. package/assets/i18n/fr.json +634 -0
  11. package/assets/i18n/it.json +634 -0
  12. package/assets/i18n/ja.json +634 -0
  13. package/assets/i18n/nb.json +634 -0
  14. package/assets/i18n/nl.json +634 -0
  15. package/assets/i18n/pl.json +634 -0
  16. package/assets/i18n/pt-BR.json +634 -0
  17. package/assets/i18n/ru.json +634 -0
  18. package/assets/i18n/sv.json +634 -0
  19. package/assets/i18n/zh-CN.json +634 -0
  20. package/assets/images/Wallpaper-BG-generic.svg +39 -0
  21. package/assets/images/adf-move-file-24px.svg +1 -0
  22. package/assets/images/baseline-library_books-24px.svg +2 -0
  23. package/assets/images/baseline-lock-24px.svg +1 -0
  24. package/assets/images/join-library.svg +32 -0
  25. package/assets/images/mastHead-bg-shapesPattern.svg +53 -0
  26. package/esm2020/alfresco-aca-content.mjs +5 -0
  27. package/esm2020/lib/aca-content.module.mjs +364 -0
  28. package/esm2020/lib/aca-content.routes.mjs +582 -0
  29. package/esm2020/lib/components/common/common.module.mjs +49 -0
  30. package/esm2020/lib/components/common/language-picker/language-picker.component.mjs +58 -0
  31. package/esm2020/lib/components/common/location-link/location-link.component.mjs +178 -0
  32. package/esm2020/lib/components/common/logout/logout.component.mjs +61 -0
  33. package/esm2020/lib/components/common/toggle-shared/toggle-shared.component.mjs +66 -0
  34. package/esm2020/lib/components/context-menu/context-menu-item.component.mjs +59 -0
  35. package/esm2020/lib/components/context-menu/context-menu-outside-event.directive.mjs +66 -0
  36. package/esm2020/lib/components/context-menu/context-menu-overlay.mjs +33 -0
  37. package/esm2020/lib/components/context-menu/context-menu.component.mjs +103 -0
  38. package/esm2020/lib/components/context-menu/context-menu.module.mjs +77 -0
  39. package/esm2020/lib/components/context-menu/context-menu.service.mjs +104 -0
  40. package/esm2020/lib/components/context-menu/direction.token.mjs +30 -0
  41. package/esm2020/lib/components/context-menu/interfaces.mjs +26 -0
  42. package/esm2020/lib/components/create-menu/create-menu.component.mjs +74 -0
  43. package/esm2020/lib/components/create-menu/create-menu.module.mjs +45 -0
  44. package/esm2020/lib/components/details/details.component.mjs +100 -0
  45. package/esm2020/lib/components/dl-custom-components/document-list-custom-components.module.mjs +49 -0
  46. package/esm2020/lib/components/dl-custom-components/name-column/name-column.component.mjs +93 -0
  47. package/esm2020/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.mjs +52 -0
  48. package/esm2020/lib/components/favorite-libraries/favorite-libraries.component.mjs +114 -0
  49. package/esm2020/lib/components/favorites/favorites.component.mjs +99 -0
  50. package/esm2020/lib/components/files/files.component.mjs +312 -0
  51. package/esm2020/lib/components/header/header.component.mjs +98 -0
  52. package/esm2020/lib/components/header/header.module.mjs +46 -0
  53. package/esm2020/lib/components/home/home.component.mjs +50 -0
  54. package/esm2020/lib/components/info-drawer/comments-tab/comments-tab.component.mjs +57 -0
  55. package/esm2020/lib/components/info-drawer/info.drawer.module.mjs +93 -0
  56. package/esm2020/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.mjs +144 -0
  57. package/esm2020/lib/components/info-drawer/library-metadata-tab/library-metadata-tab.component.mjs +43 -0
  58. package/esm2020/lib/components/info-drawer/metadata-tab/metadata-tab.component.mjs +89 -0
  59. package/esm2020/lib/components/info-drawer/versions-tab/versions-tab.component.mjs +96 -0
  60. package/esm2020/lib/components/layout/app-layout/app-layout.component.mjs +147 -0
  61. package/esm2020/lib/components/layout/layout.module.mjs +75 -0
  62. package/esm2020/lib/components/libraries/libraries.component.mjs +71 -0
  63. package/esm2020/lib/components/main-action/main-action.component.mjs +60 -0
  64. package/esm2020/lib/components/main-action/main-action.module.mjs +46 -0
  65. package/esm2020/lib/components/node-version/node-version-form.component.mjs +71 -0
  66. package/esm2020/lib/components/node-version/node-version.module.mjs +79 -0
  67. package/esm2020/lib/components/recent-files/recent-files.component.mjs +82 -0
  68. package/esm2020/lib/components/search/search-action-menu/search-action-menu.component.mjs +60 -0
  69. package/esm2020/lib/components/search/search-input/search-input.component.mjs +263 -0
  70. package/esm2020/lib/components/search/search-input-control/search-input-control.component.mjs +88 -0
  71. package/esm2020/lib/components/search/search-input.module.mjs +48 -0
  72. package/esm2020/lib/components/search/search-libraries-results/search-libraries-query-builder.service.mjs +92 -0
  73. package/esm2020/lib/components/search/search-libraries-results/search-libraries-results.component.mjs +140 -0
  74. package/esm2020/lib/components/search/search-results/search-results.component.mjs +218 -0
  75. package/esm2020/lib/components/search/search-results-row/search-results-row.component.mjs +94 -0
  76. package/esm2020/lib/components/search/search-results.module.mjs +86 -0
  77. package/esm2020/lib/components/shared-files/shared-files.component.mjs +79 -0
  78. package/esm2020/lib/components/shared-link-view/shared-link-view.component.mjs +81 -0
  79. package/esm2020/lib/components/shared-link-view/shared-link-view.module.mjs +66 -0
  80. package/esm2020/lib/components/sidenav/components/button-menu.component.mjs +58 -0
  81. package/esm2020/lib/components/sidenav/components/expand-menu.component.mjs +54 -0
  82. package/esm2020/lib/components/sidenav/directives/action.directive.mjs +75 -0
  83. package/esm2020/lib/components/sidenav/directives/active-link.directive.mjs +93 -0
  84. package/esm2020/lib/components/sidenav/directives/expansion-panel.directive.mjs +102 -0
  85. package/esm2020/lib/components/sidenav/directives/menu-panel.directive.mjs +99 -0
  86. package/esm2020/lib/components/sidenav/sidenav-wrapper/sidenav-wrapper.component.mjs +45 -0
  87. package/esm2020/lib/components/sidenav/sidenav.component.mjs +76 -0
  88. package/esm2020/lib/components/sidenav/sidenav.module.mjs +104 -0
  89. package/esm2020/lib/components/toolbar/document-display-mode/document-display-mode.component.mjs +85 -0
  90. package/esm2020/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.mjs +151 -0
  91. package/esm2020/lib/components/toolbar/toggle-favorite/toggle-favorite.component.mjs +80 -0
  92. package/esm2020/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.mjs +102 -0
  93. package/esm2020/lib/components/toolbar/toggle-info-drawer/toggle-info-drawer.component.mjs +76 -0
  94. package/esm2020/lib/components/toolbar/toggle-join-library/toggle-join-library-button.component.mjs +99 -0
  95. package/esm2020/lib/components/toolbar/toggle-join-library/toggle-join-library-menu.component.mjs +81 -0
  96. package/esm2020/lib/components/toolbar/toolbar.module.mjs +89 -0
  97. package/esm2020/lib/components/toolbar/view-node/view-node.component.mjs +102 -0
  98. package/esm2020/lib/components/trashcan/trashcan.component.mjs +64 -0
  99. package/esm2020/lib/components/trashcan/trashcan.module.mjs +71 -0
  100. package/esm2020/lib/components/upload-files-dialog/upload-files-dialog.component.mjs +34 -0
  101. package/esm2020/lib/components/view-profile/view-profile.component.mjs +158 -0
  102. package/esm2020/lib/components/view-profile/view-profile.guard.mjs +31 -0
  103. package/esm2020/lib/components/view-profile/view-profile.module.mjs +43 -0
  104. package/esm2020/lib/dialogs/node-template/create-from-template.dialog.mjs +120 -0
  105. package/esm2020/lib/directives/directives.module.mjs +43 -0
  106. package/esm2020/lib/directives/document-list.directive.mjs +142 -0
  107. package/esm2020/lib/extensions/core.extensions.module.mjs +66 -0
  108. package/esm2020/lib/material.module.mjs +58 -0
  109. package/esm2020/lib/services/content-management.service.mjs +871 -0
  110. package/esm2020/lib/services/content-service-extension.service.mjs +47 -0
  111. package/esm2020/lib/services/content-url.service.mjs +73 -0
  112. package/esm2020/lib/services/node-actions.service.mjs +601 -0
  113. package/esm2020/lib/services/node-template.service.mjs +150 -0
  114. package/esm2020/lib/store/app-store.module.mjs +96 -0
  115. package/esm2020/lib/store/effects/app.effects.mjs +62 -0
  116. package/esm2020/lib/store/effects/contextmenu.effects.mjs +56 -0
  117. package/esm2020/lib/store/effects/download.effects.mjs +160 -0
  118. package/esm2020/lib/store/effects/favorite.effects.mjs +77 -0
  119. package/esm2020/lib/store/effects/library.effects.mjs +112 -0
  120. package/esm2020/lib/store/effects/node.effects.mjs +310 -0
  121. package/esm2020/lib/store/effects/search.effects.mjs +55 -0
  122. package/esm2020/lib/store/effects/template.effects.mjs +122 -0
  123. package/esm2020/lib/store/effects/upload.effects.mjs +169 -0
  124. package/esm2020/lib/store/effects/viewer.effects.mjs +176 -0
  125. package/esm2020/lib/store/effects.mjs +36 -0
  126. package/esm2020/lib/store/initial-state.mjs +66 -0
  127. package/esm2020/lib/store/reducers/app.reducer.mjs +218 -0
  128. package/esm2020/public-api.mjs +9 -0
  129. package/fesm2015/alfresco-aca-content.mjs +9937 -0
  130. package/fesm2015/alfresco-aca-content.mjs.map +1 -0
  131. package/fesm2020/alfresco-aca-content.mjs +10103 -0
  132. package/fesm2020/alfresco-aca-content.mjs.map +1 -0
  133. package/index.d.ts +5 -0
  134. package/lib/aca-content.module.d.ts +49 -0
  135. package/lib/aca-content.routes.d.ts +28 -0
  136. package/lib/components/common/common.module.d.ts +14 -0
  137. package/lib/components/common/language-picker/language-picker.component.d.ts +5 -0
  138. package/lib/components/common/location-link/location-link.component.d.ts +49 -0
  139. package/lib/components/common/logout/logout.component.d.ts +10 -0
  140. package/lib/components/common/toggle-shared/toggle-shared.component.d.ts +44 -0
  141. package/lib/components/context-menu/context-menu-item.component.d.ts +13 -0
  142. package/lib/components/context-menu/context-menu-outside-event.directive.d.ts +36 -0
  143. package/lib/components/context-menu/context-menu-overlay.d.ts +30 -0
  144. package/lib/components/context-menu/context-menu.component.d.ts +49 -0
  145. package/lib/components/context-menu/context-menu.module.d.ts +18 -0
  146. package/lib/components/context-menu/context-menu.service.d.ts +44 -0
  147. package/lib/components/context-menu/direction.token.d.ts +26 -0
  148. package/lib/components/context-menu/interfaces.d.ts +31 -0
  149. package/lib/components/create-menu/create-menu.component.d.ts +43 -0
  150. package/lib/components/create-menu/create-menu.module.d.ts +10 -0
  151. package/lib/components/details/details.component.d.ts +47 -0
  152. package/lib/components/dl-custom-components/document-list-custom-components.module.d.ts +13 -0
  153. package/lib/components/dl-custom-components/name-column/name-column.component.d.ts +43 -0
  154. package/lib/components/dl-custom-components/thumbnail-column/thumbnail-column.component.d.ts +17 -0
  155. package/lib/components/favorite-libraries/favorite-libraries.component.d.ts +55 -0
  156. package/lib/components/favorites/favorites.component.d.ts +50 -0
  157. package/lib/components/files/files.component.d.ts +80 -0
  158. package/lib/components/header/header.component.d.ts +59 -0
  159. package/lib/components/header/header.module.d.ts +11 -0
  160. package/lib/components/home/home.component.d.ts +37 -0
  161. package/lib/components/info-drawer/comments-tab/comments-tab.component.d.ts +11 -0
  162. package/lib/components/info-drawer/info.drawer.module.d.ts +19 -0
  163. package/lib/components/info-drawer/library-metadata-tab/library-metadata-form.component.d.ts +65 -0
  164. package/lib/components/info-drawer/library-metadata-tab/library-metadata-tab.component.d.ts +7 -0
  165. package/lib/components/info-drawer/metadata-tab/metadata-tab.component.d.ts +50 -0
  166. package/lib/components/info-drawer/versions-tab/versions-tab.component.d.ts +36 -0
  167. package/lib/components/layout/app-layout/app-layout.component.d.ts +63 -0
  168. package/lib/components/layout/layout.module.d.ts +16 -0
  169. package/lib/components/libraries/libraries.component.d.ts +45 -0
  170. package/lib/components/main-action/main-action.component.d.ts +42 -0
  171. package/lib/components/main-action/main-action.module.d.ts +11 -0
  172. package/lib/components/node-version/node-version-form.component.d.ts +47 -0
  173. package/lib/components/node-version/node-version.module.d.ts +16 -0
  174. package/lib/components/recent-files/recent-files.component.d.ts +49 -0
  175. package/lib/components/search/search-action-menu/search-action-menu.component.d.ts +39 -0
  176. package/lib/components/search/search-input/search-input.component.d.ts +82 -0
  177. package/lib/components/search/search-input-control/search-input-control.component.d.ts +51 -0
  178. package/lib/components/search/search-input.module.d.ts +12 -0
  179. package/lib/components/search/search-libraries-results/search-libraries-query-builder.service.d.ts +57 -0
  180. package/lib/components/search/search-libraries-results/search-libraries-results.component.d.ts +58 -0
  181. package/lib/components/search/search-results/search-results.component.d.ts +70 -0
  182. package/lib/components/search/search-results-row/search-results-row.component.d.ts +49 -0
  183. package/lib/components/search/search-results.module.d.ts +21 -0
  184. package/lib/components/shared-files/shared-files.component.d.ts +48 -0
  185. package/lib/components/shared-link-view/shared-link-view.component.d.ts +48 -0
  186. package/lib/components/shared-link-view/shared-link-view.module.d.ts +14 -0
  187. package/lib/components/sidenav/components/button-menu.component.d.ts +38 -0
  188. package/lib/components/sidenav/components/expand-menu.component.d.ts +36 -0
  189. package/lib/components/sidenav/directives/action.directive.d.ts +14 -0
  190. package/lib/components/sidenav/directives/active-link.directive.d.ts +46 -0
  191. package/lib/components/sidenav/directives/expansion-panel.directive.d.ts +45 -0
  192. package/lib/components/sidenav/directives/menu-panel.directive.d.ts +43 -0
  193. package/lib/components/sidenav/sidenav-wrapper/sidenav-wrapper.component.d.ts +12 -0
  194. package/lib/components/sidenav/sidenav.component.d.ts +44 -0
  195. package/lib/components/sidenav/sidenav.module.d.ts +21 -0
  196. package/lib/components/toolbar/document-display-mode/document-display-mode.component.d.ts +13 -0
  197. package/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.d.ts +48 -0
  198. package/lib/components/toolbar/toggle-favorite/toggle-favorite.component.d.ts +43 -0
  199. package/lib/components/toolbar/toggle-favorite-library/toggle-favorite-library.component.d.ts +43 -0
  200. package/lib/components/toolbar/toggle-info-drawer/toggle-info-drawer.component.d.ts +11 -0
  201. package/lib/components/toolbar/toggle-join-library/toggle-join-library-button.component.d.ts +42 -0
  202. package/lib/components/toolbar/toggle-join-library/toggle-join-library-menu.component.d.ts +10 -0
  203. package/lib/components/toolbar/toolbar.module.d.ts +20 -0
  204. package/lib/components/toolbar/view-node/view-node.component.d.ts +17 -0
  205. package/lib/components/trashcan/trashcan.component.d.ts +43 -0
  206. package/lib/components/trashcan/trashcan.module.d.ts +15 -0
  207. package/lib/components/upload-files-dialog/upload-files-dialog.component.d.ts +14 -0
  208. package/lib/components/view-profile/view-profile.component.d.ts +36 -0
  209. package/lib/components/view-profile/view-profile.guard.d.ts +12 -0
  210. package/lib/components/view-profile/view-profile.module.d.ts +9 -0
  211. package/lib/dialogs/node-template/create-from-template.dialog.d.ts +50 -0
  212. package/lib/directives/directives.module.d.ts +9 -0
  213. package/lib/directives/document-list.directive.d.ts +57 -0
  214. package/lib/extensions/core.extensions.module.d.ts +14 -0
  215. package/lib/material.module.d.ts +14 -0
  216. package/lib/services/content-management.service.d.ts +101 -0
  217. package/lib/services/content-service-extension.service.d.ts +11 -0
  218. package/lib/services/content-url.service.d.ts +17 -0
  219. package/lib/services/node-actions.service.d.ts +93 -0
  220. package/lib/services/node-template.service.d.ts +34 -0
  221. package/lib/store/app-store.module.d.ts +10 -0
  222. package/lib/store/effects/app.effects.d.ts +42 -0
  223. package/lib/store/effects/contextmenu.effects.d.ts +12 -0
  224. package/lib/store/effects/download.effects.d.ts +50 -0
  225. package/lib/store/effects/favorite.effects.d.ts +39 -0
  226. package/lib/store/effects/library.effects.d.ts +44 -0
  227. package/lib/store/effects/node.effects.d.ts +57 -0
  228. package/lib/store/effects/search.effects.d.ts +35 -0
  229. package/lib/store/effects/template.effects.d.ts +55 -0
  230. package/lib/store/effects/upload.effects.d.ts +53 -0
  231. package/lib/store/effects/viewer.effects.d.ts +56 -0
  232. package/lib/store/effects.d.ts +35 -0
  233. package/lib/store/initial-state.d.ts +27 -0
  234. package/lib/store/reducers/app.reducer.d.ts +27 -0
  235. package/package.json +34 -0
  236. package/public-api.d.ts +5 -0
  237. package/ui/application.scss +49 -0
  238. package/ui/colors.scss +98 -0
  239. package/ui/custom-theme.scss +28 -0
  240. package/ui/dynamic-theme/custom-background-color.scss +16 -0
  241. package/ui/dynamic-theme/custom-palette-creator.scss +138 -0
  242. package/ui/dynamic-theme/custom-text-color.scss +8 -0
  243. package/ui/dynamic-theme/custom-theme-palettes.scss +29 -0
  244. package/ui/dynamic-theme/custom-theme.scss.tpl +60 -0
  245. package/ui/dynamic-theme/index.scss +1 -0
  246. package/ui/dynamic-theme/theme-configuration.scss.tpl +14 -0
  247. package/ui/dynamic-theme/typography.scss +63 -0
  248. package/ui/mixins.scss +26 -0
  249. package/ui/overrides/adf-about.theme.scss +39 -0
  250. package/ui/overrides/adf-pagination.theme.scss +47 -0
  251. package/ui/overrides/adf-style-fixes.theme.scss +18 -0
  252. package/ui/overrides/ay11.scss +204 -0
  253. package/ui/theme.scss +57 -0
  254. package/ui/variables/font-family.scss +1 -0
  255. package/ui/variables/variables.scss +83 -0
@@ -0,0 +1,34 @@
1
+ /*
2
+ * Copyright © 2005 - 2021 Alfresco Software, Ltd. All rights reserved.
3
+ *
4
+ * License rights for this program may be obtained from Alfresco Software, Ltd.
5
+ * pursuant to a written agreement and any use of this program without such an
6
+ * agreement is prohibited.
7
+ */
8
+ import { Component, ViewEncapsulation } from '@angular/core';
9
+ import { Subject } from 'rxjs';
10
+ import { delay, takeUntil } from 'rxjs/operators';
11
+ import { Store } from '@ngrx/store';
12
+ import { getFileUploadingDialog } from '@alfresco/aca-shared/store';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@ngrx/store";
15
+ import * as i2 from "@angular/common";
16
+ import * as i3 from "@alfresco/adf-content-services";
17
+ export class UploadFilesDialogComponent {
18
+ constructor(store) {
19
+ this.store = store;
20
+ this.onDestroy$ = new Subject();
21
+ this.showFileUploadingDialog$ = this.store.select(getFileUploadingDialog).pipe(delay(0), takeUntil(this.onDestroy$));
22
+ }
23
+ ngOnDestroy() {
24
+ this.onDestroy$.next(true);
25
+ this.onDestroy$.complete();
26
+ }
27
+ }
28
+ UploadFilesDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: UploadFilesDialogComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component });
29
+ UploadFilesDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: UploadFilesDialogComponent, selector: "aca-upload-files-dialog", ngImport: i0, template: "<adf-file-uploading-dialog *ngIf=\"showFileUploadingDialog$ | async\" position=\"left\">\n</adf-file-uploading-dialog>", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.FileUploadingDialogComponent, selector: "adf-file-uploading-dialog", inputs: ["position", "alwaysVisible"], outputs: ["error"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: UploadFilesDialogComponent, decorators: [{
31
+ type: Component,
32
+ args: [{ selector: 'aca-upload-files-dialog', encapsulation: ViewEncapsulation.None, template: "<adf-file-uploading-dialog *ngIf=\"showFileUploadingDialog$ | async\" position=\"left\">\n</adf-file-uploading-dialog>" }]
33
+ }], ctorParameters: function () { return [{ type: i1.Store }]; } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGVzLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtY29udGVudC9zcmMvbGliL2NvbXBvbmVudHMvdXBsb2FkLWZpbGVzLWRpYWxvZy91cGxvYWQtZmlsZXMtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L3NyYy9saWIvY29tcG9uZW50cy91cGxvYWQtZmlsZXMtZGlhbG9nL3VwbG9hZC1maWxlcy1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBYSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQVksc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUFPOUUsTUFBTSxPQUFPLDBCQUEwQjtJQUtyQyxZQUFvQixLQUFzQjtRQUF0QixVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQUZsQyxlQUFVLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7UUFHNUQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7O3VIQVpVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLCtEQ25CdkMsd0hBQzRCOzJGRGtCZiwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UseUJBQXlCLGlCQUVwQixpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCDCqSAyMDA1IC0gMjAyMSBBbGZyZXNjbyBTb2Z0d2FyZSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2UgcmlnaHRzIGZvciB0aGlzIHByb2dyYW0gbWF5IGJlIG9idGFpbmVkIGZyb20gQWxmcmVzY28gU29mdHdhcmUsIEx0ZC5cbiAqIHB1cnN1YW50IHRvIGEgd3JpdHRlbiBhZ3JlZW1lbnQgYW5kIGFueSB1c2Ugb2YgdGhpcyBwcm9ncmFtIHdpdGhvdXQgc3VjaCBhblxuICogYWdyZWVtZW50IGlzIHByb2hpYml0ZWQuXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBBcHBTdG9yZSwgZ2V0RmlsZVVwbG9hZGluZ0RpYWxvZyB9IGZyb20gJ0BhbGZyZXNjby9hY2Etc2hhcmVkL3N0b3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNhLXVwbG9hZC1maWxlcy1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWZpbGVzLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkRmlsZXNEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBzaG93RmlsZVVwbG9hZGluZ0RpYWxvZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgcHJpdmF0ZSBvbkRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZTxBcHBTdG9yZT4pIHtcbiAgICB0aGlzLnNob3dGaWxlVXBsb2FkaW5nRGlhbG9nJCA9IHRoaXMuc3RvcmUuc2VsZWN0KGdldEZpbGVVcGxvYWRpbmdEaWFsb2cpLnBpcGUoZGVsYXkoMCksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMub25EZXN0cm95JC5uZXh0KHRydWUpO1xuICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8YWRmLWZpbGUtdXBsb2FkaW5nLWRpYWxvZyAqbmdJZj1cInNob3dGaWxlVXBsb2FkaW5nRGlhbG9nJCB8IGFzeW5jXCIgcG9zaXRpb249XCJsZWZ0XCI+XG48L2FkZi1maWxlLXVwbG9hZGluZy1kaWFsb2c+Il19
@@ -0,0 +1,158 @@
1
+ /*
2
+ * Copyright © 2005 - 2021 Alfresco Software, Ltd. All rights reserved.
3
+ *
4
+ * License rights for this program may be obtained from Alfresco Software, Ltd.
5
+ * pursuant to a written agreement and any use of this program without such an
6
+ * agreement is prohibited.
7
+ */
8
+ import { AlfrescoApiService } from '@alfresco/adf-core';
9
+ import { PeopleApi } from '@alfresco/js-api';
10
+ import { Component, ViewEncapsulation } from '@angular/core';
11
+ import { FormControl, FormGroup, Validators } from '@angular/forms';
12
+ import { Router } from '@angular/router';
13
+ import { throwError } from 'rxjs';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@angular/router";
16
+ import * as i2 from "@alfresco/adf-core";
17
+ import * as i3 from "@angular/common";
18
+ import * as i4 from "@angular/forms";
19
+ import * as i5 from "@angular/material/button";
20
+ import * as i6 from "@angular/material/icon";
21
+ import * as i7 from "@angular/material/form-field";
22
+ import * as i8 from "@angular/material/divider";
23
+ import * as i9 from "@ngx-translate/core";
24
+ export class ViewProfileComponent {
25
+ constructor(router, apiService) {
26
+ this.router = router;
27
+ this.generalSectionDropdown = true;
28
+ this.generalSectionButtonsToggle = true;
29
+ this.loginSectionDropdown = false;
30
+ this.loginSectionButtonsToggle = true;
31
+ this.passwordSectionDropdown = false;
32
+ this.contactSectionDropdown = false;
33
+ this.contactSectionButtonsToggle = true;
34
+ this.peopleApi = new PeopleApi(apiService.getInstance());
35
+ }
36
+ ngOnInit() {
37
+ this.populateForm(this.personDetails);
38
+ this.peopleApi
39
+ .getPerson('-me-')
40
+ .then((userInfo) => {
41
+ this.personDetails = userInfo?.entry;
42
+ this.populateForm(userInfo?.entry);
43
+ })
44
+ .catch((error) => {
45
+ throwError(error);
46
+ });
47
+ }
48
+ populateForm(userInfo) {
49
+ this.profileForm = new FormGroup({
50
+ jobTitle: new FormControl(userInfo?.jobTitle || ''),
51
+ location: new FormControl(userInfo?.location || ''),
52
+ telephone: new FormControl(userInfo?.telephone || '', [Validators.pattern('^([0-9]+-)*[0-9]+$')]),
53
+ mobile: new FormControl(userInfo?.mobile || '', [Validators.pattern('^([0-9]+-)*[0-9]+$')]),
54
+ oldPassword: new FormControl(''),
55
+ newPassword: new FormControl(''),
56
+ verifyPassword: new FormControl(''),
57
+ companyName: new FormControl(userInfo?.company?.organization || ''),
58
+ companyPostCode: new FormControl(userInfo?.company?.postcode || ''),
59
+ companyAddress: new FormControl(userInfo?.company?.address1 || ''),
60
+ companyTelephone: new FormControl(userInfo?.company?.telephone || '', [Validators.pattern('^([0-9]+-)*[0-9]+$')]),
61
+ companyEmail: new FormControl(userInfo?.company?.email || '', [Validators.email])
62
+ });
63
+ }
64
+ navigateToPersonalFiles() {
65
+ this.router.navigate(['/personal-files'], {
66
+ replaceUrl: true
67
+ });
68
+ }
69
+ toggleGeneralDropdown() {
70
+ this.generalSectionDropdown = !this.generalSectionDropdown;
71
+ if (!this.generalSectionDropdown) {
72
+ this.generalSectionButtonsToggle = true;
73
+ }
74
+ }
75
+ toggleGeneralButtons() {
76
+ this.generalSectionButtonsToggle = !this.generalSectionButtonsToggle;
77
+ if (!this.generalSectionButtonsToggle) {
78
+ this.generalSectionDropdown = true;
79
+ }
80
+ }
81
+ onSaveGeneralData(event) {
82
+ this.generalSectionButtonsToggle = !this.generalSectionButtonsToggle;
83
+ this.updatePersonDetails(event);
84
+ }
85
+ onSaveLoginData() {
86
+ this.passwordSectionDropdown = !this.passwordSectionDropdown;
87
+ this.loginSectionButtonsToggle = !this.loginSectionButtonsToggle;
88
+ }
89
+ onSaveCompanyData(event) {
90
+ this.contactSectionButtonsToggle = !this.contactSectionButtonsToggle;
91
+ this.updatePersonDetails(event);
92
+ }
93
+ toggleLoginDropdown() {
94
+ this.loginSectionDropdown = !this.loginSectionDropdown;
95
+ if (!this.loginSectionDropdown) {
96
+ this.loginSectionButtonsToggle = true;
97
+ }
98
+ }
99
+ toggleLoginButtons() {
100
+ this.loginSectionButtonsToggle = !this.loginSectionButtonsToggle;
101
+ this.passwordSectionDropdown = !this.passwordSectionDropdown;
102
+ if (!this.loginSectionButtonsToggle) {
103
+ this.loginSectionDropdown = true;
104
+ this.passwordSectionDropdown = true;
105
+ }
106
+ }
107
+ toggleContactDropdown() {
108
+ this.contactSectionDropdown = !this.contactSectionDropdown;
109
+ if (!this.contactSectionDropdown) {
110
+ this.contactSectionButtonsToggle = true;
111
+ }
112
+ }
113
+ toggleContactButtons() {
114
+ this.contactSectionButtonsToggle = !this.contactSectionButtonsToggle;
115
+ if (!this.contactSectionButtonsToggle) {
116
+ this.contactSectionDropdown = true;
117
+ }
118
+ }
119
+ updatePersonDetails(event) {
120
+ if (this.profileForm.valid) {
121
+ this.peopleApi
122
+ .updatePerson('-me-', {
123
+ jobTitle: event.value.jobTitle,
124
+ location: event.value.location,
125
+ telephone: event.value.telephone,
126
+ mobile: event.value.mobile,
127
+ company: {
128
+ organization: event.value.companyName,
129
+ postcode: event.value.companyPostCode,
130
+ address1: event.value.companyAddress,
131
+ telephone: event.value.companyTelephone,
132
+ email: event.value.companyEmail
133
+ }
134
+ })
135
+ .then((person) => {
136
+ this.personDetails = person?.entry;
137
+ this.populateForm(person?.entry);
138
+ })
139
+ .catch((error) => {
140
+ this.populateForm(this.personDetails);
141
+ throwError(error);
142
+ });
143
+ }
144
+ else {
145
+ this.populateForm(this.personDetails);
146
+ }
147
+ }
148
+ isSaveButtonDisabled() {
149
+ return this.profileForm.invalid;
150
+ }
151
+ }
152
+ ViewProfileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: ViewProfileComponent, deps: [{ token: i1.Router }, { token: i2.AlfrescoApiService }], target: i0.ɵɵFactoryTarget.Component });
153
+ ViewProfileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: ViewProfileComponent, selector: "app-view-profile", ngImport: i0, template: "<div class=\"app-profile-container\">\n <div class=\"app-profile-row\">\n <div class=\"app-profile-title\">\n <mat-icon class=\"app-profile-icon\" (click)=\"navigateToPersonalFiles()\" id=\"backButton\">arrow_back</mat-icon>\n <h3 class=\"app-profile\">{{'APP.EDIT_PROFILE.MY_PROFILE' | translate}}</h3>\n </div>\n <mat-divider class=\"app-mat-divider\"></mat-divider>\n </div>\n <div class=\"app-profile-general-row\" [formGroup]=\"profileForm\">\n <div class=\"app-profile-general\">\n <div class=\"app-profile-general-section\">\n <mat-icon class=\"app-profile-general-icon\" (click)=\"toggleGeneralDropdown()\" id=\"toggle-general-dropdown\">\n {{ generalSectionDropdown ? 'expand_more' : 'chevron_right'}}</mat-icon>\n <h4 class=\"app-general-title\">{{'APP.EDIT_PROFILE.GENERAL' | translate}}</h4>\n </div>\n <div class=\"app-general-edit-btn\" *ngIf=\"generalSectionButtonsToggle\">\n <button mat-raised-button (click)=\"toggleGeneralButtons()\" id=\"general-edit-button\"\n class=\"app-general-edit\">{{'APP.EDIT_PROFILE.EDIT' | translate}}</button>\n </div>\n <div class=\"app-general-edit-btn\" *ngIf=\"!generalSectionButtonsToggle\">\n <button mat-raised-button class=\"app-general-cancel-btn\" id=\"general-cancel-button\"\n (click)=\"toggleGeneralButtons()\">{{'APP.EDIT_PROFILE.CANCEL' | translate}}</button>\n <button mat-raised-button class=\"app-general-save-btn\" id=\"general-save-button\" [disabled]=\"isSaveButtonDisabled()\"\n (click)=\"onSaveGeneralData(profileForm)\">{{'APP.EDIT_PROFILE.SAVE' | translate}}</button>\n </div>\n </div>\n <mat-divider class=\"app-mat-divider\" *ngIf=\"generalSectionDropdown\"></mat-divider>\n <div *ngIf=\"generalSectionDropdown\">\n <div class=\"app-general-dropdown\">\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.FIRST_NAME' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\">{{personDetails?.firstName}}</p>\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.LAST_NAME' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\">{{personDetails?.lastName}}</p>\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.JOB_TITLE' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"generalSectionButtonsToggle\">{{personDetails?.jobTitle}}</p>\n <input type=\"text\" value=\"\" formControlName=\"jobTitle\" *ngIf=\"!generalSectionButtonsToggle\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.LOCATION' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"generalSectionButtonsToggle\">{{personDetails?.location}}</p>\n <input type=\"text\" value=\"\" formControlName=\"location\" *ngIf=\"!generalSectionButtonsToggle\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.TELEPHONE' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"generalSectionButtonsToggle\">{{personDetails?.telephone}}</p>\n <input type=\"tel\" name=\"Telephone\" value=\"\" formControlName=\"telephone\" *ngIf=\"!generalSectionButtonsToggle\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n <mat-error class=\"app-error-message\" *ngIf=\"profileForm.get('telephone').invalid\">\n {{ 'APP.EDIT_PROFILE.INVALID_INPUT' | translate }}\n </mat-error>\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.MOBILE' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"generalSectionButtonsToggle\">{{personDetails?.mobile}}</p>\n <input type=\"tel\" value=\"\" formControlName=\"mobile\" *ngIf=\"!generalSectionButtonsToggle\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n <mat-error class=\"app-error-message\" *ngIf=\"profileForm.get('mobile').invalid\">\n {{ 'APP.EDIT_PROFILE.INVALID_INPUT' | translate }}\n </mat-error>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"app-profile-contact-row\" [formGroup]=\"profileForm\">\n <div class=\"app-profile-general profile-general-bottom-radius\">\n <div class=\"app-profile-general-section\">\n <mat-icon class=\"app-profile-general-icon\" (click)=\"toggleContactDropdown()\" id=\"toggle-contact-dropdown\">\n {{ contactSectionDropdown ? 'expand_more' : 'chevron_right'}}</mat-icon>\n <h4 class=\"app-general-title\">{{'APP.EDIT_PROFILE.COMPANY_DETAILS' | translate}}</h4>\n </div>\n\n <div class=\"app-general-edit-btn\" *ngIf=\"contactSectionButtonsToggle\">\n <button mat-raised-button class=\"app-general-edit\" id=\"contact-edit-button\"\n (click)=\"toggleContactButtons()\">{{'APP.EDIT_PROFILE.EDIT' | translate}}</button>\n </div>\n <div class=\"app-general-edit-btn\" *ngIf=\"!contactSectionButtonsToggle\">\n <button mat-raised-button class=\"app-general-cancel-btn\" id=\"contact-cancel-button\"\n (click)=\"toggleContactButtons()\">{{'APP.EDIT_PROFILE.CANCEL' | translate}}</button>\n <button mat-raised-button class=\"app-general-save-btn\" id=\"contact-save-button\" [disabled]=\"isSaveButtonDisabled()\"\n (click)=\"onSaveCompanyData(profileForm)\">{{'APP.EDIT_PROFILE.SAVE' | translate}}</button>\n </div>\n </div>\n <mat-divider class=\"app-mat-divider\" *ngIf=\"contactSectionDropdown\"></mat-divider>\n <div *ngIf=\"contactSectionDropdown\">\n <div class=\"app-general-dropdown\">\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.NAME' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"contactSectionButtonsToggle\">{{personDetails?.company?.organization}}</p>\n <input type=\"text\" value=\"\" *ngIf=\"!contactSectionButtonsToggle\" formControlName=\"companyName\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.ADDRESS' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"contactSectionButtonsToggle\">{{personDetails?.company?.address1}}</p>\n <input type=\"text\" value=\"\" *ngIf=\"!contactSectionButtonsToggle\" formControlName=\"companyAddress\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.POSTCODE' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"contactSectionButtonsToggle\">{{personDetails?.company?.postcode}}</p>\n <input type=\"text\" value=\"\" *ngIf=\"!contactSectionButtonsToggle\" formControlName=\"companyPostCode\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.TELEPHONE' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"contactSectionButtonsToggle\">{{personDetails?.company?.telephone}}</p>\n <input type=\"tel\" value=\"\" *ngIf=\"!contactSectionButtonsToggle\" formControlName=\"companyTelephone\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n <mat-error class=\"app-error-message\" *ngIf=\"profileForm.get('companyTelephone').invalid\">\n {{ 'APP.EDIT_PROFILE.INVALID_INPUT' | translate }}\n </mat-error>\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.EMAIL' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"contactSectionButtonsToggle\">{{personDetails?.company?.email}}</p>\n <input type=\"text\" value=\"\" *ngIf=\"!contactSectionButtonsToggle\" formControlName=\"companyEmail\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n <mat-error class=\"app-error-message\" *ngIf=\"profileForm.get('companyEmail').invalid\">\n {{ 'APP.EDIT_PROFILE.INVALID_INPUT' | translate }}\n </mat-error>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["app-view-profile{letter-spacing:.5px}app-view-profile .app-profile-container{margin-top:1rem;overflow:scroll;height:100%;width:100%}app-view-profile .app-profile-row{width:100%}app-view-profile .app-profile-title{display:flex;margin-left:2rem}app-view-profile .app-profile{cursor:pointer}app-view-profile .app-profile-general-row{margin:2rem 0 0 2rem;width:70%;border:1px solid var(--theme-grey-background-color);border-radius:1rem}app-view-profile .app-profile-icon{margin-right:1rem;margin-top:1rem;cursor:pointer}app-view-profile .app-profile-general-icon{cursor:pointer}app-view-profile .app-profile-text{letter-spacing:.5px}app-view-profile .app-profile-general{display:flex;padding-left:1rem}app-view-profile .app-profile-general-bottom-radius{border-bottom-left-radius:0;border-bottom-right-radius:0}app-view-profile .app-profile-general-section{display:flex;width:60%;padding-top:1rem;cursor:pointer}app-view-profile .app-general-title{margin-left:.6rem;margin-top:4px;letter-spacing:.5px}app-view-profile .app-general-edit-btn{width:60%;text-align:end}app-view-profile .app-mat-divider{border-top-width:2px;border-top-color:var(--theme-grey-background-color);padding-left:-1px;padding-right:1px}app-view-profile .app-selected:focus{border:2px solid var(--theme-blue-button-color)!important;border-radius:6px;outline:none!important;box-shadow:0 0 2px --theme-blue-button-color}app-view-profile .app-profile-row{width:100%;margin:2rem 0 0}app-view-profile .app-general-edit{margin:.7rem;background:var(--theme-grey-text-background-color);height:30px;margin:1rem}app-view-profile .app-general-edit:hover{background:var(--theme-grey-hover-background-color)}app-view-profile .app-general-cancel-btn{height:30px;margin:1rem 1rem 1rem .5rem;background-color:var(--theme-grey-text-background-color);padding-top:.25px}app-view-profile .app-general-save-btn{width:75px;height:30px;margin:1rem 1rem 1rem .5rem;color:#fff;background-color:var(--theme-blue-button-color)}app-view-profile .app-general-dropdown-divider{border-top-color:var(--theme-grey-divider-color)}app-view-profile .app-general-dropdown{padding:0rem 1rem}app-view-profile .app-general-dropdown-details{display:flex}app-view-profile .app-profile-general-dropdown-heading{color:var(--theme-heading-color);width:20%;font-weight:400;letter-spacing:.5px}app-view-profile .app-profile-general-dropdown-details{margin-top:1.3rem;letter-spacing:.5px}app-view-profile .app-profile-general-dropdown-input-details{width:24%;height:25px;border:none;margin-top:1.3rem;background-color:var(--theme-dropdown-color)}app-view-profile .app-profile-login-row{margin:2rem 0 0 2rem;width:70%;border:1px solid var(--theme-grey-background-color);border-radius:1rem}app-view-profile .app-profile-login{display:flex;padding-left:1rem}app-view-profile .app-profile-login-dropdown-details{width:24%;height:25px;border:none;margin-top:1.3rem;background-color:var(--theme-dropdown-color)}app-view-profile .app-profile-login-dropdown-heading-forgot{margin-top:1.3rem;color:var(--theme-heading-color);margin-left:16rem}app-view-profile .app-profile-company-row{margin-top:2rem}app-view-profile .app-profile-contact-row{margin:2rem 0 5rem 2rem;width:70%;border:1px solid var(--theme-grey-background-color);border-radius:1rem}app-view-profile .app-error-message{padding-top:2rem;padding-left:.5rem}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i8.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: ViewProfileComponent, decorators: [{
155
+ type: Component,
156
+ args: [{ selector: 'app-view-profile', encapsulation: ViewEncapsulation.None, template: "<div class=\"app-profile-container\">\n <div class=\"app-profile-row\">\n <div class=\"app-profile-title\">\n <mat-icon class=\"app-profile-icon\" (click)=\"navigateToPersonalFiles()\" id=\"backButton\">arrow_back</mat-icon>\n <h3 class=\"app-profile\">{{'APP.EDIT_PROFILE.MY_PROFILE' | translate}}</h3>\n </div>\n <mat-divider class=\"app-mat-divider\"></mat-divider>\n </div>\n <div class=\"app-profile-general-row\" [formGroup]=\"profileForm\">\n <div class=\"app-profile-general\">\n <div class=\"app-profile-general-section\">\n <mat-icon class=\"app-profile-general-icon\" (click)=\"toggleGeneralDropdown()\" id=\"toggle-general-dropdown\">\n {{ generalSectionDropdown ? 'expand_more' : 'chevron_right'}}</mat-icon>\n <h4 class=\"app-general-title\">{{'APP.EDIT_PROFILE.GENERAL' | translate}}</h4>\n </div>\n <div class=\"app-general-edit-btn\" *ngIf=\"generalSectionButtonsToggle\">\n <button mat-raised-button (click)=\"toggleGeneralButtons()\" id=\"general-edit-button\"\n class=\"app-general-edit\">{{'APP.EDIT_PROFILE.EDIT' | translate}}</button>\n </div>\n <div class=\"app-general-edit-btn\" *ngIf=\"!generalSectionButtonsToggle\">\n <button mat-raised-button class=\"app-general-cancel-btn\" id=\"general-cancel-button\"\n (click)=\"toggleGeneralButtons()\">{{'APP.EDIT_PROFILE.CANCEL' | translate}}</button>\n <button mat-raised-button class=\"app-general-save-btn\" id=\"general-save-button\" [disabled]=\"isSaveButtonDisabled()\"\n (click)=\"onSaveGeneralData(profileForm)\">{{'APP.EDIT_PROFILE.SAVE' | translate}}</button>\n </div>\n </div>\n <mat-divider class=\"app-mat-divider\" *ngIf=\"generalSectionDropdown\"></mat-divider>\n <div *ngIf=\"generalSectionDropdown\">\n <div class=\"app-general-dropdown\">\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.FIRST_NAME' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\">{{personDetails?.firstName}}</p>\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.LAST_NAME' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\">{{personDetails?.lastName}}</p>\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.JOB_TITLE' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"generalSectionButtonsToggle\">{{personDetails?.jobTitle}}</p>\n <input type=\"text\" value=\"\" formControlName=\"jobTitle\" *ngIf=\"!generalSectionButtonsToggle\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.LOCATION' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"generalSectionButtonsToggle\">{{personDetails?.location}}</p>\n <input type=\"text\" value=\"\" formControlName=\"location\" *ngIf=\"!generalSectionButtonsToggle\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.TELEPHONE' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"generalSectionButtonsToggle\">{{personDetails?.telephone}}</p>\n <input type=\"tel\" name=\"Telephone\" value=\"\" formControlName=\"telephone\" *ngIf=\"!generalSectionButtonsToggle\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n <mat-error class=\"app-error-message\" *ngIf=\"profileForm.get('telephone').invalid\">\n {{ 'APP.EDIT_PROFILE.INVALID_INPUT' | translate }}\n </mat-error>\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.MOBILE' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"generalSectionButtonsToggle\">{{personDetails?.mobile}}</p>\n <input type=\"tel\" value=\"\" formControlName=\"mobile\" *ngIf=\"!generalSectionButtonsToggle\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n <mat-error class=\"app-error-message\" *ngIf=\"profileForm.get('mobile').invalid\">\n {{ 'APP.EDIT_PROFILE.INVALID_INPUT' | translate }}\n </mat-error>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"app-profile-contact-row\" [formGroup]=\"profileForm\">\n <div class=\"app-profile-general profile-general-bottom-radius\">\n <div class=\"app-profile-general-section\">\n <mat-icon class=\"app-profile-general-icon\" (click)=\"toggleContactDropdown()\" id=\"toggle-contact-dropdown\">\n {{ contactSectionDropdown ? 'expand_more' : 'chevron_right'}}</mat-icon>\n <h4 class=\"app-general-title\">{{'APP.EDIT_PROFILE.COMPANY_DETAILS' | translate}}</h4>\n </div>\n\n <div class=\"app-general-edit-btn\" *ngIf=\"contactSectionButtonsToggle\">\n <button mat-raised-button class=\"app-general-edit\" id=\"contact-edit-button\"\n (click)=\"toggleContactButtons()\">{{'APP.EDIT_PROFILE.EDIT' | translate}}</button>\n </div>\n <div class=\"app-general-edit-btn\" *ngIf=\"!contactSectionButtonsToggle\">\n <button mat-raised-button class=\"app-general-cancel-btn\" id=\"contact-cancel-button\"\n (click)=\"toggleContactButtons()\">{{'APP.EDIT_PROFILE.CANCEL' | translate}}</button>\n <button mat-raised-button class=\"app-general-save-btn\" id=\"contact-save-button\" [disabled]=\"isSaveButtonDisabled()\"\n (click)=\"onSaveCompanyData(profileForm)\">{{'APP.EDIT_PROFILE.SAVE' | translate}}</button>\n </div>\n </div>\n <mat-divider class=\"app-mat-divider\" *ngIf=\"contactSectionDropdown\"></mat-divider>\n <div *ngIf=\"contactSectionDropdown\">\n <div class=\"app-general-dropdown\">\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.NAME' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"contactSectionButtonsToggle\">{{personDetails?.company?.organization}}</p>\n <input type=\"text\" value=\"\" *ngIf=\"!contactSectionButtonsToggle\" formControlName=\"companyName\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.ADDRESS' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"contactSectionButtonsToggle\">{{personDetails?.company?.address1}}</p>\n <input type=\"text\" value=\"\" *ngIf=\"!contactSectionButtonsToggle\" formControlName=\"companyAddress\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.POSTCODE' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"contactSectionButtonsToggle\">{{personDetails?.company?.postcode}}</p>\n <input type=\"text\" value=\"\" *ngIf=\"!contactSectionButtonsToggle\" formControlName=\"companyPostCode\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.TELEPHONE' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"contactSectionButtonsToggle\">{{personDetails?.company?.telephone}}</p>\n <input type=\"tel\" value=\"\" *ngIf=\"!contactSectionButtonsToggle\" formControlName=\"companyTelephone\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n <mat-error class=\"app-error-message\" *ngIf=\"profileForm.get('companyTelephone').invalid\">\n {{ 'APP.EDIT_PROFILE.INVALID_INPUT' | translate }}\n </mat-error>\n </div>\n <mat-divider class=\"app-general-dropdown-divider\"></mat-divider>\n <div class=\"app-general-dropdown-details\">\n <h4 class=\"app-profile-general-dropdown-heading\">{{'APP.EDIT_PROFILE.EMAIL' | translate}}</h4>\n <p class=\"app-profile-general-dropdown-details\" *ngIf=\"contactSectionButtonsToggle\">{{personDetails?.company?.email}}</p>\n <input type=\"text\" value=\"\" *ngIf=\"!contactSectionButtonsToggle\" formControlName=\"companyEmail\"\n class=\"app-profile-general-dropdown-input-details app-selected\">\n <mat-error class=\"app-error-message\" *ngIf=\"profileForm.get('companyEmail').invalid\">\n {{ 'APP.EDIT_PROFILE.INVALID_INPUT' | translate }}\n </mat-error>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["app-view-profile{letter-spacing:.5px}app-view-profile .app-profile-container{margin-top:1rem;overflow:scroll;height:100%;width:100%}app-view-profile .app-profile-row{width:100%}app-view-profile .app-profile-title{display:flex;margin-left:2rem}app-view-profile .app-profile{cursor:pointer}app-view-profile .app-profile-general-row{margin:2rem 0 0 2rem;width:70%;border:1px solid var(--theme-grey-background-color);border-radius:1rem}app-view-profile .app-profile-icon{margin-right:1rem;margin-top:1rem;cursor:pointer}app-view-profile .app-profile-general-icon{cursor:pointer}app-view-profile .app-profile-text{letter-spacing:.5px}app-view-profile .app-profile-general{display:flex;padding-left:1rem}app-view-profile .app-profile-general-bottom-radius{border-bottom-left-radius:0;border-bottom-right-radius:0}app-view-profile .app-profile-general-section{display:flex;width:60%;padding-top:1rem;cursor:pointer}app-view-profile .app-general-title{margin-left:.6rem;margin-top:4px;letter-spacing:.5px}app-view-profile .app-general-edit-btn{width:60%;text-align:end}app-view-profile .app-mat-divider{border-top-width:2px;border-top-color:var(--theme-grey-background-color);padding-left:-1px;padding-right:1px}app-view-profile .app-selected:focus{border:2px solid var(--theme-blue-button-color)!important;border-radius:6px;outline:none!important;box-shadow:0 0 2px --theme-blue-button-color}app-view-profile .app-profile-row{width:100%;margin:2rem 0 0}app-view-profile .app-general-edit{margin:.7rem;background:var(--theme-grey-text-background-color);height:30px;margin:1rem}app-view-profile .app-general-edit:hover{background:var(--theme-grey-hover-background-color)}app-view-profile .app-general-cancel-btn{height:30px;margin:1rem 1rem 1rem .5rem;background-color:var(--theme-grey-text-background-color);padding-top:.25px}app-view-profile .app-general-save-btn{width:75px;height:30px;margin:1rem 1rem 1rem .5rem;color:#fff;background-color:var(--theme-blue-button-color)}app-view-profile .app-general-dropdown-divider{border-top-color:var(--theme-grey-divider-color)}app-view-profile .app-general-dropdown{padding:0rem 1rem}app-view-profile .app-general-dropdown-details{display:flex}app-view-profile .app-profile-general-dropdown-heading{color:var(--theme-heading-color);width:20%;font-weight:400;letter-spacing:.5px}app-view-profile .app-profile-general-dropdown-details{margin-top:1.3rem;letter-spacing:.5px}app-view-profile .app-profile-general-dropdown-input-details{width:24%;height:25px;border:none;margin-top:1.3rem;background-color:var(--theme-dropdown-color)}app-view-profile .app-profile-login-row{margin:2rem 0 0 2rem;width:70%;border:1px solid var(--theme-grey-background-color);border-radius:1rem}app-view-profile .app-profile-login{display:flex;padding-left:1rem}app-view-profile .app-profile-login-dropdown-details{width:24%;height:25px;border:none;margin-top:1.3rem;background-color:var(--theme-dropdown-color)}app-view-profile .app-profile-login-dropdown-heading-forgot{margin-top:1.3rem;color:var(--theme-heading-color);margin-left:16rem}app-view-profile .app-profile-company-row{margin-top:2rem}app-view-profile .app-profile-contact-row{margin:2rem 0 5rem 2rem;width:70%;border:1px solid var(--theme-grey-background-color);border-radius:1rem}app-view-profile .app-error-message{padding-top:2rem;padding-left:.5rem}\n"] }]
157
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.AlfrescoApiService }]; } });
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1wcm9maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L3NyYy9saWIvY29tcG9uZW50cy92aWV3LXByb2ZpbGUvdmlldy1wcm9maWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L3NyYy9saWIvY29tcG9uZW50cy92aWV3LXByb2ZpbGUvdmlldy1wcm9maWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7OztBQVFsQyxNQUFNLE9BQU8sb0JBQW9CO0lBZ0IvQixZQUFvQixNQUFjLEVBQUUsVUFBOEI7UUFBOUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVZsQywyQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDOUIsZ0NBQTJCLEdBQUcsSUFBSSxDQUFDO1FBRW5DLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3Qiw4QkFBeUIsR0FBRyxJQUFJLENBQUM7UUFDakMsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBRWhDLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUMvQixnQ0FBMkIsR0FBRyxJQUFJLENBQUM7UUFHakMsSUFB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RUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuQyxDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3RDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQixDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUNsQyxDQUFDOztpSEF4SlUsb0JBQW9CO3FHQUFwQixvQkFBb0Isd0RDcEJqQyxvMFRBOElBOzJGRDFIYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGlCQUdiLGlCQUFpQixDQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IMKpIDIwMDUgLSAyMDIxIEFsZnJlc2NvIFNvZnR3YXJlLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZSByaWdodHMgZm9yIHRoaXMgcHJvZ3JhbSBtYXkgYmUgb2J0YWluZWQgZnJvbSBBbGZyZXNjbyBTb2Z0d2FyZSwgTHRkLlxuICogcHVyc3VhbnQgdG8gYSB3cml0dGVuIGFncmVlbWVudCBhbmQgYW55IHVzZSBvZiB0aGlzIHByb2dyYW0gd2l0aG91dCBzdWNoIGFuXG4gKiBhZ3JlZW1lbnQgaXMgcHJvaGliaXRlZC5cbiAqL1xuaW1wb3J0IHsgQWxmcmVzY29BcGlTZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IFBlb3BsZUFwaSwgUGVyc29uIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdmlldy1wcm9maWxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXctcHJvZmlsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZpZXctcHJvZmlsZS5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFZpZXdQcm9maWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcGVvcGxlQXBpOiBQZW9wbGVBcGk7XG5cbiAgcHJvZmlsZUZvcm06IEZvcm1Hcm91cDtcbiAgcGVyc29uRGV0YWlsczogUGVyc29uO1xuXG4gIGdlbmVyYWxTZWN0aW9uRHJvcGRvd24gPSB0cnVlO1xuICBnZW5lcmFsU2VjdGlvbkJ1dHRvbnNUb2dnbGUgPSB0cnVlO1xuXG4gIGxvZ2luU2VjdGlvbkRyb3Bkb3duID0gZmFsc2U7XG4gIGxvZ2luU2VjdGlvbkJ1dHRvbnNUb2dnbGUgPSB0cnVlO1xuICBwYXNzd29yZFNlY3Rpb25Ecm9wZG93biA9IGZhbHNlO1xuXG4gIGNvbnRhY3RTZWN0aW9uRHJvcGRvd24gPSBmYWxzZTtcbiAgY29udGFjdFNlY3Rpb25CdXR0b25zVG9nZ2xlID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBhcGlTZXJ2aWNlOiBBbGZyZXNjb0FwaVNlcnZpY2UpIHtcbiAgICB0aGlzLnBlb3BsZUFwaSA9IG5ldyBQZW9wbGVBcGkoYXBpU2VydmljZS5nZXRJbnN0YW5jZSgpKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucG9wdWxhdGVGb3JtKHRoaXMucGVyc29uRGV0YWlscyk7XG4gICAgdGhpcy5wZW9wbGVBcGlcbiAgICAgIC5nZXRQZXJzb24oJy1tZS0nKVxuICAgICAgLnRoZW4oKHVzZXJJbmZvKSA9PiB7XG4gICAgICAgIHRoaXMucGVyc29uRGV0YWlscyA9IHVzZXJJbmZvPy5lbnRyeTtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUZvcm0odXNlckluZm8/LmVudHJ5KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgfSk7XG4gIH1cblxuICBwb3B1bGF0ZUZvcm0odXNlckluZm86IFBlcnNvbikge1xuICAgIHRoaXMucHJvZmlsZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIGpvYlRpdGxlOiBuZXcgRm9ybUNvbnRyb2wodXNlckluZm8/LmpvYlRpdGxlIHx8ICcnKSxcbiAgICAgIGxvY2F0aW9uOiBuZXcgRm9ybUNvbnRyb2wodXNlckluZm8/LmxvY2F0aW9uIHx8ICcnKSxcbiAgICAgIHRlbGVwaG9uZTogbmV3IEZvcm1Db250cm9sKHVzZXJJbmZvPy50ZWxlcGhvbmUgfHwgJycsIFtWYWxpZGF0b3JzLnBhdHRlcm4oJ14oWzAtOV0rLSkqWzAtOV0rJCcpXSksXG4gICAgICBtb2JpbGU6IG5ldyBGb3JtQ29udHJvbCh1c2VySW5mbz8ubW9iaWxlIHx8ICcnLCBbVmFsaWRhdG9ycy5wYXR0ZXJuKCdeKFswLTldKy0pKlswLTldKyQnKV0pLFxuICAgICAgb2xkUGFzc3dvcmQ6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBuZXdQYXNzd29yZDogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIHZlcmlmeVBhc3N3b3JkOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgY29tcGFueU5hbWU6IG5ldyBGb3JtQ29udHJvbCh1c2VySW5mbz8uY29tcGFueT8ub3JnYW5pemF0aW9uIHx8ICcnKSxcbiAgICAgIGNvbXBhbnlQb3N0Q29kZTogbmV3IEZvcm1Db250cm9sKHVzZXJJbmZvPy5jb21wYW55Py5wb3N0Y29kZSB8fCAnJyksXG4gICAgICBjb21wYW55QWRkcmVzczogbmV3IEZvcm1Db250cm9sKHVzZXJJbmZvPy5jb21wYW55Py5hZGRyZXNzMSB8fCAnJyksXG4gICAgICBjb21wYW55VGVsZXBob25lOiBuZXcgRm9ybUNvbnRyb2wodXNlckluZm8/LmNvbXBhbnk/LnRlbGVwaG9uZSB8fCAnJywgW1ZhbGlkYXRvcnMucGF0dGVybignXihbMC05XSstKSpbMC05XSskJyldKSxcbiAgICAgIGNvbXBhbnlFbWFpbDogbmV3IEZvcm1Db250cm9sKHVzZXJJbmZvPy5jb21wYW55Py5lbWFpbCB8fCAnJywgW1ZhbGlkYXRvcnMuZW1haWxdKVxuICAgIH0pO1xuICB9XG5cbiAgbmF2aWdhdGVUb1BlcnNvbmFsRmlsZXMoKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcGVyc29uYWwtZmlsZXMnXSwge1xuICAgICAgcmVwbGFjZVVybDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlR2VuZXJhbERyb3Bkb3duKCkge1xuICAgIHRoaXMuZ2VuZXJhbFNlY3Rpb25Ecm9wZG93biA9ICF0aGlzLmdlbmVyYWxTZWN0aW9uRHJvcGRvd247XG5cbiAgICBpZiAoIXRoaXMuZ2VuZXJhbFNlY3Rpb25Ecm9wZG93bikge1xuICAgICAgdGhpcy5nZW5lcmFsU2VjdGlvbkJ1dHRvbnNUb2dnbGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUdlbmVyYWxCdXR0b25zKCkge1xuICAgIHRoaXMuZ2VuZXJhbFNlY3Rpb25CdXR0b25zVG9nZ2xlID0gIXRoaXMuZ2VuZXJhbFNlY3Rpb25CdXR0b25zVG9nZ2xlO1xuXG4gICAgaWYgKCF0aGlzLmdlbmVyYWxTZWN0aW9uQnV0dG9uc1RvZ2dsZSkge1xuICAgICAgdGhpcy5nZW5lcmFsU2VjdGlvbkRyb3Bkb3duID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBvblNhdmVHZW5lcmFsRGF0YShldmVudCkge1xuICAgIHRoaXMuZ2VuZXJhbFNlY3Rpb25CdXR0b25zVG9nZ2xlID0gIXRoaXMuZ2VuZXJhbFNlY3Rpb25CdXR0b25zVG9nZ2xlO1xuICAgIHRoaXMudXBkYXRlUGVyc29uRGV0YWlscyhldmVudCk7XG4gIH1cblxuICBvblNhdmVMb2dpbkRhdGEoKSB7XG4gICAgdGhpcy5wYXNzd29yZFNlY3Rpb25Ecm9wZG93biA9ICF0aGlzLnBhc3N3b3JkU2VjdGlvbkRyb3Bkb3duO1xuICAgIHRoaXMubG9naW5TZWN0aW9uQnV0dG9uc1RvZ2dsZSA9ICF0aGlzLmxvZ2luU2VjdGlvbkJ1dHRvbnNUb2dnbGU7XG4gIH1cblxuICBvblNhdmVDb21wYW55RGF0YShldmVudCkge1xuICAgIHRoaXMuY29udGFjdFNlY3Rpb25CdXR0b25zVG9nZ2xlID0gIXRoaXMuY29udGFjdFNlY3Rpb25CdXR0b25zVG9nZ2xlO1xuICAgIHRoaXMudXBkYXRlUGVyc29uRGV0YWlscyhldmVudCk7XG4gIH1cblxuICB0b2dnbGVMb2dpbkRyb3Bkb3duKCkge1xuICAgIHRoaXMubG9naW5TZWN0aW9uRHJvcGRvd24gPSAhdGhpcy5sb2dpblNlY3Rpb25Ecm9wZG93bjtcblxuICAgIGlmICghdGhpcy5sb2dpblNlY3Rpb25Ecm9wZG93bikge1xuICAgICAgdGhpcy5sb2dpblNlY3Rpb25CdXR0b25zVG9nZ2xlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVMb2dpbkJ1dHRvbnMoKSB7XG4gICAgdGhpcy5sb2dpblNlY3Rpb25CdXR0b25zVG9nZ2xlID0gIXRoaXMubG9naW5TZWN0aW9uQnV0dG9uc1RvZ2dsZTtcbiAgICB0aGlzLnBhc3N3b3JkU2VjdGlvbkRyb3Bkb3duID0gIXRoaXMucGFzc3dvcmRTZWN0aW9uRHJvcGRvd247XG5cbiAgICBpZiAoIXRoaXMubG9naW5TZWN0aW9uQnV0dG9uc1RvZ2dsZSkge1xuICAgICAgdGhpcy5sb2dpblNlY3Rpb25Ecm9wZG93biA9IHRydWU7XG4gICAgICB0aGlzLnBhc3N3b3JkU2VjdGlvbkRyb3Bkb3duID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVDb250YWN0RHJvcGRvd24oKSB7XG4gICAgdGhpcy5jb250YWN0U2VjdGlvbkRyb3Bkb3duID0gIXRoaXMuY29udGFjdFNlY3Rpb25Ecm9wZG93bjtcblxuICAgIGlmICghdGhpcy5jb250YWN0U2VjdGlvbkRyb3Bkb3duKSB7XG4gICAgICB0aGlzLmNvbnRhY3RTZWN0aW9uQnV0dG9uc1RvZ2dsZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQ29udGFjdEJ1dHRvbnMoKSB7XG4gICAgdGhpcy5jb250YWN0U2VjdGlvbkJ1dHRvbnNUb2dnbGUgPSAhdGhpcy5jb250YWN0U2VjdGlvbkJ1dHRvbnNUb2dnbGU7XG5cbiAgICBpZiAoIXRoaXMuY29udGFjdFNlY3Rpb25CdXR0b25zVG9nZ2xlKSB7XG4gICAgICB0aGlzLmNvbnRhY3RTZWN0aW9uRHJvcGRvd24gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVBlcnNvbkRldGFpbHMoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5wcm9maWxlRm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5wZW9wbGVBcGlcbiAgICAgICAgLnVwZGF0ZVBlcnNvbignLW1lLScsIHtcbiAgICAgICAgICBqb2JUaXRsZTogZXZlbnQudmFsdWUuam9iVGl0bGUsXG4gICAgICAgICAgbG9jYXRpb246IGV2ZW50LnZhbHVlLmxvY2F0aW9uLFxuICAgICAgICAgIHRlbGVwaG9uZTogZXZlbnQudmFsdWUudGVsZXBob25lLFxuICAgICAgICAgIG1vYmlsZTogZXZlbnQudmFsdWUubW9iaWxlLFxuICAgICAgICAgIGNvbXBhbnk6IHtcbiAgICAgICAgICAgIG9yZ2FuaXphdGlvbjogZXZlbnQudmFsdWUuY29tcGFueU5hbWUsXG4gICAgICAgICAgICBwb3N0Y29kZTogZXZlbnQudmFsdWUuY29tcGFueVBvc3RDb2RlLFxuICAgICAgICAgICAgYWRkcmVzczE6IGV2ZW50LnZhbHVlLmNvbXBhbnlBZGRyZXNzLFxuICAgICAgICAgICAgdGVsZXBob25lOiBldmVudC52YWx1ZS5jb21wYW55VGVsZXBob25lLFxuICAgICAgICAgICAgZW1haWw6IGV2ZW50LnZhbHVlLmNvbXBhbnlFbWFpbFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHBlcnNvbikgPT4ge1xuICAgICAgICAgIHRoaXMucGVyc29uRGV0YWlscyA9IHBlcnNvbj8uZW50cnk7XG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZUZvcm0ocGVyc29uPy5lbnRyeSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlRm9ybSh0aGlzLnBlcnNvbkRldGFpbHMpO1xuICAgICAgICAgIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb3B1bGF0ZUZvcm0odGhpcy5wZXJzb25EZXRhaWxzKTtcbiAgICB9XG4gIH1cblxuICBpc1NhdmVCdXR0b25EaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9maWxlRm9ybS5pbnZhbGlkO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXBwLXByb2ZpbGUtY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJhcHAtcHJvZmlsZS1yb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXBwLXByb2ZpbGUtdGl0bGVcIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFwcC1wcm9maWxlLWljb25cIiAoY2xpY2spPVwibmF2aWdhdGVUb1BlcnNvbmFsRmlsZXMoKVwiIGlkPVwiYmFja0J1dHRvblwiPmFycm93X2JhY2s8L21hdC1pY29uPlxuICAgICAgPGgzIGNsYXNzPVwiYXBwLXByb2ZpbGVcIj57eydBUFAuRURJVF9QUk9GSUxFLk1ZX1BST0ZJTEUnIHwgdHJhbnNsYXRlfX08L2gzPlxuICAgIDwvZGl2PlxuICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cImFwcC1tYXQtZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1yb3dcIiBbZm9ybUdyb3VwXT1cInByb2ZpbGVGb3JtXCI+XG4gICAgPGRpdiBjbGFzcz1cImFwcC1wcm9maWxlLWdlbmVyYWxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhcHAtcHJvZmlsZS1nZW5lcmFsLXNlY3Rpb25cIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1pY29uXCIgKGNsaWNrKT1cInRvZ2dsZUdlbmVyYWxEcm9wZG93bigpXCIgaWQ9XCJ0b2dnbGUtZ2VuZXJhbC1kcm9wZG93blwiPlxuICAgICAgICAgIHt7IGdlbmVyYWxTZWN0aW9uRHJvcGRvd24gPyAgJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0J319PC9tYXQtaWNvbj5cbiAgICAgICAgPGg0IGNsYXNzPVwiYXBwLWdlbmVyYWwtdGl0bGVcIj57eydBUFAuRURJVF9QUk9GSUxFLkdFTkVSQUwnIHwgdHJhbnNsYXRlfX08L2g0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXBwLWdlbmVyYWwtZWRpdC1idG5cIiAqbmdJZj1cImdlbmVyYWxTZWN0aW9uQnV0dG9uc1RvZ2dsZVwiPlxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJ0b2dnbGVHZW5lcmFsQnV0dG9ucygpXCIgaWQ9XCJnZW5lcmFsLWVkaXQtYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImFwcC1nZW5lcmFsLWVkaXRcIj57eydBUFAuRURJVF9QUk9GSUxFLkVESVQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImFwcC1nZW5lcmFsLWVkaXQtYnRuXCIgKm5nSWY9XCIhZ2VuZXJhbFNlY3Rpb25CdXR0b25zVG9nZ2xlXCI+XG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJhcHAtZ2VuZXJhbC1jYW5jZWwtYnRuXCIgaWQ9XCJnZW5lcmFsLWNhbmNlbC1idXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVHZW5lcmFsQnV0dG9ucygpXCI+e3snQVBQLkVESVRfUFJPRklMRS5DQU5DRUwnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImFwcC1nZW5lcmFsLXNhdmUtYnRuXCIgaWQ9XCJnZW5lcmFsLXNhdmUtYnV0dG9uXCIgW2Rpc2FibGVkXT1cImlzU2F2ZUJ1dHRvbkRpc2FibGVkKClcIlxuICAgICAgICAgIChjbGljayk9XCJvblNhdmVHZW5lcmFsRGF0YShwcm9maWxlRm9ybSlcIj57eydBUFAuRURJVF9QUk9GSUxFLlNBVkUnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cImFwcC1tYXQtZGl2aWRlclwiICpuZ0lmPVwiZ2VuZXJhbFNlY3Rpb25Ecm9wZG93blwiPjwvbWF0LWRpdmlkZXI+XG4gICAgPGRpdiAqbmdJZj1cImdlbmVyYWxTZWN0aW9uRHJvcGRvd25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhcHAtZ2VuZXJhbC1kcm9wZG93blwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWdlbmVyYWwtZHJvcGRvd24tZGV0YWlsc1wiPlxuICAgICAgICAgIDxoNCBjbGFzcz1cImFwcC1wcm9maWxlLWdlbmVyYWwtZHJvcGRvd24taGVhZGluZ1wiPnt7J0FQUC5FRElUX1BST0ZJTEUuRklSU1RfTkFNRScgfCB0cmFuc2xhdGV9fTwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJhcHAtcHJvZmlsZS1nZW5lcmFsLWRyb3Bkb3duLWRldGFpbHNcIj57e3BlcnNvbkRldGFpbHM/LmZpcnN0TmFtZX19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwiYXBwLWdlbmVyYWwtZHJvcGRvd24tZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtZ2VuZXJhbC1kcm9wZG93bi1kZXRhaWxzXCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1oZWFkaW5nXCI+e3snQVBQLkVESVRfUFJPRklMRS5MQVNUX05BTUUnIHwgdHJhbnNsYXRlfX08L2g0PlxuICAgICAgICAgIDxwIGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1kZXRhaWxzXCI+e3twZXJzb25EZXRhaWxzPy5sYXN0TmFtZX19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwiYXBwLWdlbmVyYWwtZHJvcGRvd24tZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtZ2VuZXJhbC1kcm9wZG93bi1kZXRhaWxzXCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1oZWFkaW5nXCI+e3snQVBQLkVESVRfUFJPRklMRS5KT0JfVElUTEUnIHwgdHJhbnNsYXRlfX08L2g0PlxuICAgICAgICAgIDxwIGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1kZXRhaWxzXCIgKm5nSWY9XCJnZW5lcmFsU2VjdGlvbkJ1dHRvbnNUb2dnbGVcIj57e3BlcnNvbkRldGFpbHM/LmpvYlRpdGxlfX08L3A+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJcIiBmb3JtQ29udHJvbE5hbWU9XCJqb2JUaXRsZVwiICpuZ0lmPVwiIWdlbmVyYWxTZWN0aW9uQnV0dG9uc1RvZ2dsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImFwcC1wcm9maWxlLWdlbmVyYWwtZHJvcGRvd24taW5wdXQtZGV0YWlscyBhcHAtc2VsZWN0ZWRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cImFwcC1nZW5lcmFsLWRyb3Bkb3duLWRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWdlbmVyYWwtZHJvcGRvd24tZGV0YWlsc1wiPlxuICAgICAgICAgIDxoNCBjbGFzcz1cImFwcC1wcm9maWxlLWdlbmVyYWwtZHJvcGRvd24taGVhZGluZ1wiPnt7J0FQUC5FRElUX1BST0ZJTEUuTE9DQVRJT04nIHwgdHJhbnNsYXRlfX08L2g0PlxuICAgICAgICAgIDxwIGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1kZXRhaWxzXCIgICpuZ0lmPVwiZ2VuZXJhbFNlY3Rpb25CdXR0b25zVG9nZ2xlXCI+e3twZXJzb25EZXRhaWxzPy5sb2NhdGlvbn19PC9wPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgZm9ybUNvbnRyb2xOYW1lPVwibG9jYXRpb25cIiAqbmdJZj1cIiFnZW5lcmFsU2VjdGlvbkJ1dHRvbnNUb2dnbGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJhcHAtcHJvZmlsZS1nZW5lcmFsLWRyb3Bkb3duLWlucHV0LWRldGFpbHMgYXBwLXNlbGVjdGVkXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJhcHAtZ2VuZXJhbC1kcm9wZG93bi1kaXZpZGVyXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1nZW5lcmFsLWRyb3Bkb3duLWRldGFpbHNcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJhcHAtcHJvZmlsZS1nZW5lcmFsLWRyb3Bkb3duLWhlYWRpbmdcIj57eydBUFAuRURJVF9QUk9GSUxFLlRFTEVQSE9ORScgfCB0cmFuc2xhdGV9fTwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJhcHAtcHJvZmlsZS1nZW5lcmFsLWRyb3Bkb3duLWRldGFpbHNcIiAqbmdJZj1cImdlbmVyYWxTZWN0aW9uQnV0dG9uc1RvZ2dsZVwiPnt7cGVyc29uRGV0YWlscz8udGVsZXBob25lfX08L3A+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZWxcIiBuYW1lPVwiVGVsZXBob25lXCIgdmFsdWU9XCJcIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZWxlcGhvbmVcIiAqbmdJZj1cIiFnZW5lcmFsU2VjdGlvbkJ1dHRvbnNUb2dnbGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJhcHAtcHJvZmlsZS1nZW5lcmFsLWRyb3Bkb3duLWlucHV0LWRldGFpbHMgYXBwLXNlbGVjdGVkXCI+XG4gICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFwcC1lcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJwcm9maWxlRm9ybS5nZXQoJ3RlbGVwaG9uZScpLmludmFsaWRcIj5cbiAgICAgICAgICAgIHt7ICdBUFAuRURJVF9QUk9GSUxFLklOVkFMSURfSU5QVVQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJhcHAtZ2VuZXJhbC1kcm9wZG93bi1kaXZpZGVyXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1nZW5lcmFsLWRyb3Bkb3duLWRldGFpbHNcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJhcHAtcHJvZmlsZS1nZW5lcmFsLWRyb3Bkb3duLWhlYWRpbmdcIj57eydBUFAuRURJVF9QUk9GSUxFLk1PQklMRScgfCB0cmFuc2xhdGV9fTwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJhcHAtcHJvZmlsZS1nZW5lcmFsLWRyb3Bkb3duLWRldGFpbHNcIiAqbmdJZj1cImdlbmVyYWxTZWN0aW9uQnV0dG9uc1RvZ2dsZVwiPnt7cGVyc29uRGV0YWlscz8ubW9iaWxlfX08L3A+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGVsXCIgdmFsdWU9XCJcIiBmb3JtQ29udHJvbE5hbWU9XCJtb2JpbGVcIiAqbmdJZj1cIiFnZW5lcmFsU2VjdGlvbkJ1dHRvbnNUb2dnbGVcIlxuICAgICAgICAgIGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1pbnB1dC1kZXRhaWxzIGFwcC1zZWxlY3RlZFwiPlxuICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiYXBwLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cInByb2ZpbGVGb3JtLmdldCgnbW9iaWxlJykuaW52YWxpZFwiPlxuICAgICAgICAgIHt7ICdBUFAuRURJVF9QUk9GSUxFLklOVkFMSURfSU5QVVQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYXBwLXByb2ZpbGUtY29udGFjdC1yb3dcIiBbZm9ybUdyb3VwXT1cInByb2ZpbGVGb3JtXCI+XG4gICAgPGRpdiBjbGFzcz1cImFwcC1wcm9maWxlLWdlbmVyYWwgcHJvZmlsZS1nZW5lcmFsLWJvdHRvbS1yYWRpdXNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhcHAtcHJvZmlsZS1nZW5lcmFsLXNlY3Rpb25cIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1pY29uXCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3REcm9wZG93bigpXCIgaWQ9XCJ0b2dnbGUtY29udGFjdC1kcm9wZG93blwiPlxuICAgICAgICAgIHt7IGNvbnRhY3RTZWN0aW9uRHJvcGRvd24gPyAgJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0J319PC9tYXQtaWNvbj5cbiAgICAgICAgPGg0IGNsYXNzPVwiYXBwLWdlbmVyYWwtdGl0bGVcIj57eydBUFAuRURJVF9QUk9GSUxFLkNPTVBBTllfREVUQUlMUycgfCB0cmFuc2xhdGV9fTwvaDQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImFwcC1nZW5lcmFsLWVkaXQtYnRuXCIgKm5nSWY9XCJjb250YWN0U2VjdGlvbkJ1dHRvbnNUb2dnbGVcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImFwcC1nZW5lcmFsLWVkaXRcIiBpZD1cImNvbnRhY3QtZWRpdC1idXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb250YWN0QnV0dG9ucygpXCI+e3snQVBQLkVESVRfUFJPRklMRS5FRElUJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhcHAtZ2VuZXJhbC1lZGl0LWJ0blwiICpuZ0lmPVwiIWNvbnRhY3RTZWN0aW9uQnV0dG9uc1RvZ2dsZVwiPlxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwiYXBwLWdlbmVyYWwtY2FuY2VsLWJ0blwiIGlkPVwiY29udGFjdC1jYW5jZWwtYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29udGFjdEJ1dHRvbnMoKVwiPnt7J0FQUC5FRElUX1BST0ZJTEUuQ0FOQ0VMJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gIGNsYXNzPVwiYXBwLWdlbmVyYWwtc2F2ZS1idG5cIiBpZD1cImNvbnRhY3Qtc2F2ZS1idXR0b25cIiBbZGlzYWJsZWRdPVwiaXNTYXZlQnV0dG9uRGlzYWJsZWQoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU2F2ZUNvbXBhbnlEYXRhKHByb2ZpbGVGb3JtKVwiPnt7J0FQUC5FRElUX1BST0ZJTEUuU0FWRScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwiYXBwLW1hdC1kaXZpZGVyXCIgKm5nSWY9XCJjb250YWN0U2VjdGlvbkRyb3Bkb3duXCI+PC9tYXQtZGl2aWRlcj5cbiAgICA8ZGl2ICpuZ0lmPVwiY29udGFjdFNlY3Rpb25Ecm9wZG93blwiPlxuICAgICAgPGRpdiBjbGFzcz1cImFwcC1nZW5lcmFsLWRyb3Bkb3duXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtZ2VuZXJhbC1kcm9wZG93bi1kZXRhaWxzXCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1oZWFkaW5nXCI+e3snQVBQLkVESVRfUFJPRklMRS5OQU1FJyB8IHRyYW5zbGF0ZX19PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImFwcC1wcm9maWxlLWdlbmVyYWwtZHJvcGRvd24tZGV0YWlsc1wiICpuZ0lmPVwiY29udGFjdFNlY3Rpb25CdXR0b25zVG9nZ2xlXCI+e3twZXJzb25EZXRhaWxzPy5jb21wYW55Py5vcmdhbml6YXRpb259fTwvcD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT1cIlwiICpuZ0lmPVwiIWNvbnRhY3RTZWN0aW9uQnV0dG9uc1RvZ2dsZVwiIGZvcm1Db250cm9sTmFtZT1cImNvbXBhbnlOYW1lXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1pbnB1dC1kZXRhaWxzIGFwcC1zZWxlY3RlZFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwiYXBwLWdlbmVyYWwtZHJvcGRvd24tZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtZ2VuZXJhbC1kcm9wZG93bi1kZXRhaWxzXCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1oZWFkaW5nXCI+e3snQVBQLkVESVRfUFJPRklMRS5BRERSRVNTJyB8IHRyYW5zbGF0ZX19PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImFwcC1wcm9maWxlLWdlbmVyYWwtZHJvcGRvd24tZGV0YWlsc1wiICpuZ0lmPVwiY29udGFjdFNlY3Rpb25CdXR0b25zVG9nZ2xlXCI+e3twZXJzb25EZXRhaWxzPy5jb21wYW55Py5hZGRyZXNzMX19PC9wPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgKm5nSWY9XCIhY29udGFjdFNlY3Rpb25CdXR0b25zVG9nZ2xlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGFueUFkZHJlc3NcIlxuICAgICAgICAgICAgY2xhc3M9XCJhcHAtcHJvZmlsZS1nZW5lcmFsLWRyb3Bkb3duLWlucHV0LWRldGFpbHMgYXBwLXNlbGVjdGVkXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJhcHAtZ2VuZXJhbC1kcm9wZG93bi1kaXZpZGVyXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1nZW5lcmFsLWRyb3Bkb3duLWRldGFpbHNcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJhcHAtcHJvZmlsZS1nZW5lcmFsLWRyb3Bkb3duLWhlYWRpbmdcIj57eydBUFAuRURJVF9QUk9GSUxFLlBPU1RDT0RFJyB8IHRyYW5zbGF0ZX19PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImFwcC1wcm9maWxlLWdlbmVyYWwtZHJvcGRvd24tZGV0YWlsc1wiICpuZ0lmPVwiY29udGFjdFNlY3Rpb25CdXR0b25zVG9nZ2xlXCI+e3twZXJzb25EZXRhaWxzPy5jb21wYW55Py5wb3N0Y29kZX19PC9wPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgKm5nSWY9XCIhY29udGFjdFNlY3Rpb25CdXR0b25zVG9nZ2xlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGFueVBvc3RDb2RlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1pbnB1dC1kZXRhaWxzIGFwcC1zZWxlY3RlZFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwiYXBwLWdlbmVyYWwtZHJvcGRvd24tZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtZ2VuZXJhbC1kcm9wZG93bi1kZXRhaWxzXCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1oZWFkaW5nXCI+e3snQVBQLkVESVRfUFJPRklMRS5URUxFUEhPTkUnIHwgdHJhbnNsYXRlfX08L2g0PlxuICAgICAgICAgIDxwIGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1kZXRhaWxzXCIgKm5nSWY9XCJjb250YWN0U2VjdGlvbkJ1dHRvbnNUb2dnbGVcIj57e3BlcnNvbkRldGFpbHM/LmNvbXBhbnk/LnRlbGVwaG9uZX19PC9wPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGVsXCIgdmFsdWU9XCJcIiAqbmdJZj1cIiFjb250YWN0U2VjdGlvbkJ1dHRvbnNUb2dnbGVcIiBmb3JtQ29udHJvbE5hbWU9XCJjb21wYW55VGVsZXBob25lXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1pbnB1dC1kZXRhaWxzIGFwcC1zZWxlY3RlZFwiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJhcHAtZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwicHJvZmlsZUZvcm0uZ2V0KCdjb21wYW55VGVsZXBob25lJykuaW52YWxpZFwiPlxuICAgICAgICAgICAge3sgJ0FQUC5FRElUX1BST0ZJTEUuSU5WQUxJRF9JTlBVVCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cImFwcC1nZW5lcmFsLWRyb3Bkb3duLWRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWdlbmVyYWwtZHJvcGRvd24tZGV0YWlsc1wiPlxuICAgICAgICAgIDxoNCBjbGFzcz1cImFwcC1wcm9maWxlLWdlbmVyYWwtZHJvcGRvd24taGVhZGluZ1wiPnt7J0FQUC5FRElUX1BST0ZJTEUuRU1BSUwnIHwgdHJhbnNsYXRlfX08L2g0PlxuICAgICAgICAgIDxwIGNsYXNzPVwiYXBwLXByb2ZpbGUtZ2VuZXJhbC1kcm9wZG93bi1kZXRhaWxzXCIgKm5nSWY9XCJjb250YWN0U2VjdGlvbkJ1dHRvbnNUb2dnbGVcIj57e3BlcnNvbkRldGFpbHM/LmNvbXBhbnk/LmVtYWlsfX08L3A+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJcIiAqbmdJZj1cIiFjb250YWN0U2VjdGlvbkJ1dHRvbnNUb2dnbGVcIiBmb3JtQ29udHJvbE5hbWU9XCJjb21wYW55RW1haWxcIlxuICAgICAgICAgICAgY2xhc3M9XCJhcHAtcHJvZmlsZS1nZW5lcmFsLWRyb3Bkb3duLWlucHV0LWRldGFpbHMgYXBwLXNlbGVjdGVkXCI+XG4gICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFwcC1lcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJwcm9maWxlRm9ybS5nZXQoJ2NvbXBhbnlFbWFpbCcpLmludmFsaWRcIj5cbiAgICAgICAgICAgIHt7ICdBUFAuRURJVF9QUk9GSUxFLklOVkFMSURfSU5QVVQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,31 @@
1
+ /*
2
+ * Copyright © 2005 - 2021 Alfresco Software, Ltd. All rights reserved.
3
+ *
4
+ * License rights for this program may be obtained from Alfresco Software, Ltd.
5
+ * pursuant to a written agreement and any use of this program without such an
6
+ * agreement is prohibited.
7
+ */
8
+ import { Injectable } from '@angular/core';
9
+ import { AuthenticationService } from '@alfresco/adf-core';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@alfresco/adf-core";
12
+ export class ViewProfileRuleGuard {
13
+ constructor(authService) {
14
+ this.authService = authService;
15
+ }
16
+ canActivate(_) {
17
+ return this.isEcmLoggedIn() || this.authService.isOauth();
18
+ }
19
+ isEcmLoggedIn() {
20
+ return this.authService.isEcmLoggedIn() || (this.authService.isECMProvider() && this.authService.isKerberosEnabled());
21
+ }
22
+ }
23
+ ViewProfileRuleGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: ViewProfileRuleGuard, deps: [{ token: i1.AuthenticationService }], target: i0.ɵɵFactoryTarget.Injectable });
24
+ ViewProfileRuleGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: ViewProfileRuleGuard, providedIn: 'root' });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: ViewProfileRuleGuard, decorators: [{
26
+ type: Injectable,
27
+ args: [{
28
+ providedIn: 'root'
29
+ }]
30
+ }], ctorParameters: function () { return [{ type: i1.AuthenticationService }]; } });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1wcm9maWxlLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLWNvbnRlbnQvc3JjL2xpYi9jb21wb25lbnRzL3ZpZXctcHJvZmlsZS92aWV3LXByb2ZpbGUuZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBSzNELE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsWUFBb0IsV0FBa0M7UUFBbEMsZ0JBQVcsR0FBWCxXQUFXLENBQXVCO0lBQUcsQ0FBQztJQUUxRCxXQUFXLENBQUMsQ0FBeUI7UUFDbkMsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBRU8sYUFBYTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hILENBQUM7O2lIQVRVLG9CQUFvQjtxSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgwqkgMjAwNSAtIDIwMjEgQWxmcmVzY28gU29mdHdhcmUsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlIHJpZ2h0cyBmb3IgdGhpcyBwcm9ncmFtIG1heSBiZSBvYnRhaW5lZCBmcm9tIEFsZnJlc2NvIFNvZnR3YXJlLCBMdGQuXG4gKiBwdXJzdWFudCB0byBhIHdyaXR0ZW4gYWdyZWVtZW50IGFuZCBhbnkgdXNlIG9mIHRoaXMgcHJvZ3JhbSB3aXRob3V0IHN1Y2ggYW5cbiAqIGFncmVlbWVudCBpcyBwcm9oaWJpdGVkLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbkFjdGl2YXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFZpZXdQcm9maWxlUnVsZUd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UpIHt9XG5cbiAgY2FuQWN0aXZhdGUoXzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFY21Mb2dnZWRJbigpIHx8IHRoaXMuYXV0aFNlcnZpY2UuaXNPYXV0aCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VjbUxvZ2dlZEluKCkge1xuICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmlzRWNtTG9nZ2VkSW4oKSB8fCAodGhpcy5hdXRoU2VydmljZS5pc0VDTVByb3ZpZGVyKCkgJiYgdGhpcy5hdXRoU2VydmljZS5pc0tlcmJlcm9zRW5hYmxlZCgpKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,43 @@
1
+ /*!
2
+ * @license
3
+ * Alfresco Example Content Application
4
+ *
5
+ * Copyright (C) 2005 - 2020 Alfresco Software Limited
6
+ *
7
+ * This file is part of the Alfresco Example Content Application.
8
+ * If the software was purchased under a paid Alfresco license, the terms of
9
+ * the paid license agreement will prevail. Otherwise, the software is
10
+ * provided under the following open source license terms:
11
+ *
12
+ * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
13
+ * it under the terms of the GNU Lesser General Public License as published by
14
+ * the Free Software Foundation, either version 3 of the License, or
15
+ * (at your option) any later version.
16
+ *
17
+ * The Alfresco Example Content Application is distributed in the hope that it will be useful,
18
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
+ * GNU Lesser General Public License for more details.
21
+ *
22
+ * You should have received a copy of the GNU Lesser General Public License
23
+ * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
24
+ */
25
+ import { NgModule } from '@angular/core';
26
+ import { ViewProfileComponent } from './view-profile.component';
27
+ import { CommonModule } from '@angular/common';
28
+ import { CoreModule } from '@alfresco/adf-core';
29
+ import * as i0 from "@angular/core";
30
+ import * as i1 from "@alfresco/adf-core";
31
+ export class ViewProfileModule {
32
+ }
33
+ ViewProfileModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: ViewProfileModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
34
+ ViewProfileModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.2", ngImport: i0, type: ViewProfileModule, declarations: [ViewProfileComponent], imports: [CommonModule, i1.CoreModule] });
35
+ ViewProfileModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: ViewProfileModule, imports: [CommonModule, CoreModule.forChild()] });
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: ViewProfileModule, decorators: [{
37
+ type: NgModule,
38
+ args: [{
39
+ imports: [CommonModule, CoreModule.forChild()],
40
+ declarations: [ViewProfileComponent]
41
+ }]
42
+ }] });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1wcm9maWxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L3NyYy9saWIvY29tcG9uZW50cy92aWV3LXByb2ZpbGUvdmlldy1wcm9maWxlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQU1oRCxNQUFNLE9BQU8saUJBQWlCOzs4R0FBakIsaUJBQWlCOytHQUFqQixpQkFBaUIsaUJBRmIsb0JBQW9CLGFBRHpCLFlBQVk7K0dBR1gsaUJBQWlCLFlBSGxCLFlBQVksRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFOzJGQUdsQyxpQkFBaUI7a0JBSjdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDOUMsWUFBWSxFQUFFLENBQUMsb0JBQW9CLENBQUM7aUJBQ3JDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAyMCBBbGZyZXNjbyBTb2Z0d2FyZSBMaW1pdGVkXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbi5cbiAqIElmIHRoZSBzb2Z0d2FyZSB3YXMgcHVyY2hhc2VkIHVuZGVyIGEgcGFpZCBBbGZyZXNjbyBsaWNlbnNlLCB0aGUgdGVybXMgb2ZcbiAqIHRoZSBwYWlkIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgcHJldmFpbC4gIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggQWxmcmVzY28uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmlld1Byb2ZpbGVDb21wb25lbnQgfSBmcm9tICcuL3ZpZXctcHJvZmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvcmVNb2R1bGUgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDb3JlTW9kdWxlLmZvckNoaWxkKCldLFxuICBkZWNsYXJhdGlvbnM6IFtWaWV3UHJvZmlsZUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgVmlld1Byb2ZpbGVNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,120 @@
1
+ /*!
2
+ * @license
3
+ * Alfresco Example Content Application
4
+ *
5
+ * Copyright (C) 2005 - 2020 Alfresco Software Limited
6
+ *
7
+ * This file is part of the Alfresco Example Content Application.
8
+ * If the software was purchased under a paid Alfresco license, the terms of
9
+ * the paid license agreement will prevail. Otherwise, the software is
10
+ * provided under the following open source license terms:
11
+ *
12
+ * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
13
+ * it under the terms of the GNU Lesser General Public License as published by
14
+ * the Free Software Foundation, either version 3 of the License, or
15
+ * (at your option) any later version.
16
+ *
17
+ * The Alfresco Example Content Application is distributed in the hope that it will be useful,
18
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
+ * GNU Lesser General Public License for more details.
21
+ *
22
+ * You should have received a copy of the GNU Lesser General Public License
23
+ * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
24
+ */
25
+ import { Component, ViewEncapsulation, Inject } from '@angular/core';
26
+ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
27
+ import { Node } from '@alfresco/js-api';
28
+ import { UntypedFormBuilder, Validators } from '@angular/forms';
29
+ import { Store } from '@ngrx/store';
30
+ import { CreateFromTemplate } from '@alfresco/aca-shared/store';
31
+ import { TranslationService } from '@alfresco/adf-core';
32
+ import * as i0 from "@angular/core";
33
+ import * as i1 from "@alfresco/adf-core";
34
+ import * as i2 from "@ngrx/store";
35
+ import * as i3 from "@angular/forms";
36
+ import * as i4 from "@angular/material/dialog";
37
+ import * as i5 from "@angular/common";
38
+ import * as i6 from "@angular/material/button";
39
+ import * as i7 from "@angular/material/form-field";
40
+ import * as i8 from "@angular/material/input";
41
+ import * as i9 from "@ngx-translate/core";
42
+ import * as i10 from "@alfresco/js-api";
43
+ export class CreateFromTemplateDialogComponent {
44
+ constructor(translationService, store, formBuilder, dialogRef, data) {
45
+ this.translationService = translationService;
46
+ this.store = store;
47
+ this.formBuilder = formBuilder;
48
+ this.dialogRef = dialogRef;
49
+ this.data = data;
50
+ }
51
+ ngOnInit() {
52
+ this.form = this.formBuilder.group({
53
+ name: [this.data.name, [Validators.required, this.forbidEndingDot, this.forbidOnlySpaces, this.forbidSpecialCharacters]],
54
+ title: [this.data.properties ? this.data.properties['cm:title'] : '', Validators.maxLength(256)],
55
+ description: [this.data.properties ? this.data.properties['cm:description'] : '', Validators.maxLength(512)]
56
+ });
57
+ }
58
+ onSubmit() {
59
+ const update = {
60
+ name: this.form.value.name.trim(),
61
+ properties: {
62
+ 'cm:title': this.form.value.title,
63
+ 'cm:description': this.form.value.description
64
+ }
65
+ };
66
+ const data = Object.assign({}, this.data, update);
67
+ this.store.dispatch(new CreateFromTemplate(data));
68
+ }
69
+ title() {
70
+ if (this.data.isFolder) {
71
+ return this.translationService.instant('NODE_FROM_TEMPLATE.FOLDER_DIALOG_TITLE', { template: this.data.name });
72
+ }
73
+ return this.translationService.instant('NODE_FROM_TEMPLATE.FILE_DIALOG_TITLE', { template: this.data.name });
74
+ }
75
+ close() {
76
+ this.dialogRef.close();
77
+ }
78
+ forbidSpecialCharacters({ value }) {
79
+ const specialCharacters = /([\*\"\<\>\\\/\?\:\|])/;
80
+ const isValid = !specialCharacters.test(value);
81
+ return isValid
82
+ ? null
83
+ : {
84
+ message: `NODE_FROM_TEMPLATE.FORM.ERRORS.SPECIAL_CHARACTERS`
85
+ };
86
+ }
87
+ forbidEndingDot({ value }) {
88
+ const isValid = (value || '').trim().split('').pop() !== '.';
89
+ return isValid
90
+ ? null
91
+ : {
92
+ message: `NODE_FROM_TEMPLATE.FORM.ERRORS.ENDING_DOT`
93
+ };
94
+ }
95
+ forbidOnlySpaces({ value }) {
96
+ if (value.length) {
97
+ const isValid = !!(value || '').trim();
98
+ return isValid
99
+ ? null
100
+ : {
101
+ message: `NODE_FROM_TEMPLATE.FORM.ERRORS.ONLY_SPACES`
102
+ };
103
+ }
104
+ else {
105
+ return {
106
+ message: `NODE_FROM_TEMPLATE.FORM.ERRORS.REQUIRED`
107
+ };
108
+ }
109
+ }
110
+ }
111
+ CreateFromTemplateDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: CreateFromTemplateDialogComponent, deps: [{ token: i1.TranslationService }, { token: i2.Store }, { token: i3.UntypedFormBuilder }, { token: i4.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
112
+ CreateFromTemplateDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: CreateFromTemplateDialogComponent, selector: "ng-component", ngImport: i0, template: "<h2 mat-dialog-title [innerHTML]=\"title()\"></h2>\n<div mat-dialog-content>\n <form [formGroup]=\"form\" novalidate>\n <mat-form-field class=\"adf-full-width\">\n <input\n cdkFocusInitial\n placeholder=\"{{ 'NODE_FROM_TEMPLATE.FORM.PLACEHOLDER.NAME' | translate }}\"\n matInput\n formControlName=\"name\"\n required\n />\n\n <mat-error *ngIf=\"form.controls['name'].errors?.message\">\n {{ form.controls['name'].errors?.message | translate }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"adf-full-width\">\n <input\n placeholder=\"{{ 'NODE_FROM_TEMPLATE.FORM.PLACEHOLDER.TITLE' | translate }}\"\n matInput\n formControlName=\"title\"\n />\n\n <mat-error *ngIf=\"form.controls['title'].hasError('maxlength')\">\n {{ 'NODE_FROM_TEMPLATE.FORM.ERRORS.TITLE_TOO_LONG' | translate }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"adf-full-width\">\n <textarea\n matInput\n placeholder=\"{{ 'NODE_FROM_TEMPLATE.FORM.PLACEHOLDER.DESCRIPTION' | translate }}\"\n rows=\"2\"\n formControlName=\"description\"\n ></textarea>\n\n <mat-error *ngIf=\"form.controls['description'].hasError('maxlength')\">\n {{ 'NODE_FROM_TEMPLATE.FORM.ERRORS.DESCRIPTION_TOO_LONG' | translate }}\n </mat-error>\n </mat-form-field>\n </form>\n</div>\n<div mat-dialog-actions>\n <button mat-button mat-dialog-close>\n {{ 'NODE_FROM_TEMPLATE.CANCEL' | translate }}\n </button>\n <button\n class=\"create\"\n [disabled]=\"form.invalid\"\n mat-button\n (click)=\"onSubmit()\"\n >\n {{ 'NODE_FROM_TEMPLATE.CREATE' | translate }}\n </button>\n</div>\n", styles: [".aca-create-from-template-dialog ng-component{overflow:visible}.aca-create-from-template-dialog .mat-dialog-title{margin-left:24px;margin-right:24px;font-size:20px;font-style:normal;font-stretch:normal;line-height:1.6;letter-spacing:-.5px;color:var(--theme-text-bold-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aca-create-from-template-dialog .mat-dialog-title .bold{font-weight:600}.aca-create-from-template-dialog .mat-form-field{margin-bottom:20px}.aca-create-from-template-dialog .mat-dialog-container{padding-left:0;padding-right:0}.aca-create-from-template-dialog .mat-dialog-content{margin:0 2px;overflow:hidden}.aca-create-from-template-dialog .mat-dialog-actions{padding:8px 22px;display:flex;justify-content:flex-end;color:var(--theme-secondary-text-color)}.aca-create-from-template-dialog .mat-dialog-actions button{text-transform:uppercase;font-weight:400}.aca-create-from-template-dialog .mat-dialog-actions .create[disabled]{opacity:.6}.aca-create-from-template-dialog .mat-dialog-actions .create:enabled{color:var(--theme-accent-color)}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i4.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i4.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i4.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i7.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: CreateFromTemplateDialogComponent, decorators: [{
114
+ type: Component,
115
+ args: [{ encapsulation: ViewEncapsulation.None, template: "<h2 mat-dialog-title [innerHTML]=\"title()\"></h2>\n<div mat-dialog-content>\n <form [formGroup]=\"form\" novalidate>\n <mat-form-field class=\"adf-full-width\">\n <input\n cdkFocusInitial\n placeholder=\"{{ 'NODE_FROM_TEMPLATE.FORM.PLACEHOLDER.NAME' | translate }}\"\n matInput\n formControlName=\"name\"\n required\n />\n\n <mat-error *ngIf=\"form.controls['name'].errors?.message\">\n {{ form.controls['name'].errors?.message | translate }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"adf-full-width\">\n <input\n placeholder=\"{{ 'NODE_FROM_TEMPLATE.FORM.PLACEHOLDER.TITLE' | translate }}\"\n matInput\n formControlName=\"title\"\n />\n\n <mat-error *ngIf=\"form.controls['title'].hasError('maxlength')\">\n {{ 'NODE_FROM_TEMPLATE.FORM.ERRORS.TITLE_TOO_LONG' | translate }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"adf-full-width\">\n <textarea\n matInput\n placeholder=\"{{ 'NODE_FROM_TEMPLATE.FORM.PLACEHOLDER.DESCRIPTION' | translate }}\"\n rows=\"2\"\n formControlName=\"description\"\n ></textarea>\n\n <mat-error *ngIf=\"form.controls['description'].hasError('maxlength')\">\n {{ 'NODE_FROM_TEMPLATE.FORM.ERRORS.DESCRIPTION_TOO_LONG' | translate }}\n </mat-error>\n </mat-form-field>\n </form>\n</div>\n<div mat-dialog-actions>\n <button mat-button mat-dialog-close>\n {{ 'NODE_FROM_TEMPLATE.CANCEL' | translate }}\n </button>\n <button\n class=\"create\"\n [disabled]=\"form.invalid\"\n mat-button\n (click)=\"onSubmit()\"\n >\n {{ 'NODE_FROM_TEMPLATE.CREATE' | translate }}\n </button>\n</div>\n", styles: [".aca-create-from-template-dialog ng-component{overflow:visible}.aca-create-from-template-dialog .mat-dialog-title{margin-left:24px;margin-right:24px;font-size:20px;font-style:normal;font-stretch:normal;line-height:1.6;letter-spacing:-.5px;color:var(--theme-text-bold-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aca-create-from-template-dialog .mat-dialog-title .bold{font-weight:600}.aca-create-from-template-dialog .mat-form-field{margin-bottom:20px}.aca-create-from-template-dialog .mat-dialog-container{padding-left:0;padding-right:0}.aca-create-from-template-dialog .mat-dialog-content{margin:0 2px;overflow:hidden}.aca-create-from-template-dialog .mat-dialog-actions{padding:8px 22px;display:flex;justify-content:flex-end;color:var(--theme-secondary-text-color)}.aca-create-from-template-dialog .mat-dialog-actions button{text-transform:uppercase;font-weight:400}.aca-create-from-template-dialog .mat-dialog-actions .create[disabled]{opacity:.6}.aca-create-from-template-dialog .mat-dialog-actions .create:enabled{color:var(--theme-accent-color)}\n"] }]
116
+ }], ctorParameters: function () { return [{ type: i1.TranslationService }, { type: i2.Store }, { type: i3.UntypedFormBuilder }, { type: i4.MatDialogRef }, { type: i10.Node, decorators: [{
117
+ type: Inject,
118
+ args: [MAT_DIALOG_DATA]
119
+ }] }]; } });
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWZyb20tdGVtcGxhdGUuZGlhbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLWNvbnRlbnQvc3JjL2xpYi9kaWFsb2dzL25vZGUtdGVtcGxhdGUvY3JlYXRlLWZyb20tdGVtcGxhdGUuZGlhbG9nLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLWNvbnRlbnQvc3JjL2xpYi9kaWFsb2dzL25vZGUtdGVtcGxhdGUvY3JlYXRlLWZyb20tdGVtcGxhdGUuZGlhbG9nLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFvQixVQUFVLEVBQXdDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEgsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQVksa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBT3hELE1BQU0sT0FBTyxpQ0FBaUM7SUFHNUMsWUFDVSxrQkFBc0MsRUFDdEMsS0FBc0IsRUFDdEIsV0FBK0IsRUFDL0IsU0FBMEQsRUFDbEMsSUFBVTtRQUpsQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixjQUFTLEdBQVQsU0FB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YUFDckQsQ0FBQztJQUNSLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssRUFBc0I7UUFDcEQsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2hCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUV2QyxPQUFPLE9BQU87Z0JBQ1osQ0FBQyxDQUFDLElBQUk7Z0JBQ04sQ0FBQyxDQUFDO29CQUNFLE9BQU8sRUFBRSw0Q0FBNEM7aUJBQ3RELENBQUM7U0FDUDthQUFNO1lBQ0wsT0FBTztnQkFDTCxPQUFPLEVBQUUseUNBQXlDO2FBQ25ELENBQUM7U0FDSDtJQUNILENBQUM7OzhIQTlFVSxpQ0FBaUMsdUlBUWxDLGVBQWU7a0hBUmQsaUNBQWlDLG9EQ3RDOUMsOHREQXdEQTsyRkRsQmEsaUNBQWlDO2tCQUw3QyxTQUFTO29DQUdPLGlCQUFpQixDQUFDLElBQUk7OzBCQVVsQyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb25cbiAqXG4gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDIwIEFsZnJlc2NvIFNvZnR3YXJlIExpbWl0ZWRcbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uLlxuICogSWYgdGhlIHNvZnR3YXJlIHdhcyBwdXJjaGFzZWQgdW5kZXIgYSBwYWlkIEFsZnJlc2NvIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZlxuICogdGhlIHBhaWQgbGljZW5zZSBhZ3JlZW1lbnQgd2lsbCBwcmV2YWlsLiAgT3RoZXJ3aXNlLCB0aGUgc29mdHdhcmUgaXNcbiAqIHByb3ZpZGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgb3BlbiBzb3VyY2UgbGljZW5zZSB0ZXJtczpcbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCBBbGZyZXNjby4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQXBwU3RvcmUsIENyZWF0ZUZyb21UZW1wbGF0ZSB9IGZyb20gJ0BhbGZyZXNjby9hY2Etc2hhcmVkL3N0b3JlJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLWZyb20tdGVtcGxhdGUuZGlhbG9nLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtZnJvbS10ZW1wbGF0ZS5kaWFsb2cuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0ZUZyb21UZW1wbGF0ZURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8QXBwU3RvcmU+LFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPENyZWF0ZUZyb21UZW1wbGF0ZURpYWxvZ0NvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBOb2RlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIG5hbWU6IFt0aGlzLmRhdGEubmFtZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMuZm9yYmlkRW5kaW5nRG90LCB0aGlzLmZvcmJpZE9ubHlTcGFjZXMsIHRoaXMuZm9yYmlkU3BlY2lhbENoYXJhY3RlcnNdXSxcbiAgICAgIHRpdGxlOiBbdGhpcy5kYXRhLnByb3BlcnRpZXMgPyB0aGlzLmRhdGEucHJvcGVydGllc1snY206dGl0bGUnXSA6ICcnLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTYpXSxcbiAgICAgIGRlc2NyaXB0aW9uOiBbdGhpcy5kYXRhLnByb3BlcnRpZXMgPyB0aGlzLmRhdGEucHJvcGVydGllc1snY206ZGVzY3JpcHRpb24nXSA6ICcnLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MTIpXVxuICAgIH0pO1xuICB9XG5cbiAgb25TdWJtaXQoKSB7XG4gICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgbmFtZTogdGhpcy5mb3JtLnZhbHVlLm5hbWUudHJpbSgpLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY206dGl0bGUnOiB0aGlzLmZvcm0udmFsdWUudGl0bGUsXG4gICAgICAgICdjbTpkZXNjcmlwdGlvbic6IHRoaXMuZm9ybS52YWx1ZS5kZXNjcmlwdGlvblxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGF0YTogTm9kZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGF0YSwgdXBkYXRlKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBDcmVhdGVGcm9tVGVtcGxhdGUoZGF0YSkpO1xuICB9XG5cbiAgdGl0bGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5kYXRhLmlzRm9sZGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuaW5zdGFudCgnTk9ERV9GUk9NX1RFTVBMQVRFLkZPTERFUl9ESUFMT0dfVElUTEUnLCB7IHRlbXBsYXRlOiB0aGlzLmRhdGEubmFtZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuaW5zdGFudCgnTk9ERV9GUk9NX1RFTVBMQVRFLkZJTEVfRElBTE9HX1RJVExFJywgeyB0ZW1wbGF0ZTogdGhpcy5kYXRhLm5hbWUgfSk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JiaWRTcGVjaWFsQ2hhcmFjdGVycyh7IHZhbHVlIH06IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCBzcGVjaWFsQ2hhcmFjdGVycyA9IC8oW1xcKlxcXCJcXDxcXD5cXFxcXFwvXFw/XFw6XFx8XSkvO1xuICAgIGNvbnN0IGlzVmFsaWQgPSAhc3BlY2lhbENoYXJhY3RlcnMudGVzdCh2YWx1ZSk7XG5cbiAgICByZXR1cm4gaXNWYWxpZFxuICAgICAgPyBudWxsXG4gICAgICA6IHtcbiAgICAgICAgICBtZXNzYWdlOiBgTk9ERV9GUk9NX1RFTVBMQVRFLkZPUk0uRVJST1JTLlNQRUNJQUxfQ0hBUkFDVEVSU2BcbiAgICAgICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZm9yYmlkRW5kaW5nRG90KHsgdmFsdWUgfTogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IGlzVmFsaWQ6IGJvb2xlYW4gPSAodmFsdWUgfHwgJycpLnRyaW0oKS5zcGxpdCgnJykucG9wKCkgIT09ICcuJztcblxuICAgIHJldHVybiBpc1ZhbGlkXG4gICAgICA/IG51bGxcbiAgICAgIDoge1xuICAgICAgICAgIG1lc3NhZ2U6IGBOT0RFX0ZST01fVEVNUExBVEUuRk9STS5FUlJPUlMuRU5ESU5HX0RPVGBcbiAgICAgICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZm9yYmlkT25seVNwYWNlcyh7IHZhbHVlIH06IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAodmFsdWUubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gISEodmFsdWUgfHwgJycpLnRyaW0oKTtcblxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDoge1xuICAgICAgICAgICAgbWVzc2FnZTogYE5PREVfRlJPTV9URU1QTEFURS5GT1JNLkVSUk9SUy5PTkxZX1NQQUNFU2BcbiAgICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZXNzYWdlOiBgTk9ERV9GUk9NX1RFTVBMQVRFLkZPUk0uRVJST1JTLlJFUVVJUkVEYFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiIsIjxoMiBtYXQtZGlhbG9nLXRpdGxlIFtpbm5lckhUTUxdPVwidGl0bGUoKVwiPjwvaDI+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgbm92YWxpZGF0ZT5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJhZGYtZnVsbC13aWR0aFwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdOT0RFX0ZST01fVEVNUExBVEUuRk9STS5QTEFDRUhPTERFUi5OQU1FJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICByZXF1aXJlZFxuICAgICAgLz5cblxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uY29udHJvbHNbJ25hbWUnXS5lcnJvcnM/Lm1lc3NhZ2VcIj5cbiAgICAgICAge3sgZm9ybS5jb250cm9sc1snbmFtZSddLmVycm9ycz8ubWVzc2FnZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtZXJyb3I+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFkZi1mdWxsLXdpZHRoXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnTk9ERV9GUk9NX1RFTVBMQVRFLkZPUk0uUExBQ0VIT0xERVIuVElUTEUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIlxuICAgICAgLz5cblxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uY29udHJvbHNbJ3RpdGxlJ10uaGFzRXJyb3IoJ21heGxlbmd0aCcpXCI+XG4gICAgICAgIHt7ICdOT0RFX0ZST01fVEVNUExBVEUuRk9STS5FUlJPUlMuVElUTEVfVE9PX0xPTkcnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1lcnJvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiYWRmLWZ1bGwtd2lkdGhcIj5cbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdOT0RFX0ZST01fVEVNUExBVEUuRk9STS5QTEFDRUhPTERFUi5ERVNDUklQVElPTicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICByb3dzPVwiMlwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgID48L3RleHRhcmVhPlxuXG4gICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybS5jb250cm9sc1snZGVzY3JpcHRpb24nXS5oYXNFcnJvcignbWF4bGVuZ3RoJylcIj5cbiAgICAgICAge3sgJ05PREVfRlJPTV9URU1QTEFURS5GT1JNLkVSUk9SUy5ERVNDUklQVElPTl9UT09fTE9ORycgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZm9ybT5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnM+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlPlxuICAgIHt7ICdOT0RFX0ZST01fVEVNUExBVEUuQ0FOQ0VMJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiY3JlYXRlXCJcbiAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgICBtYXQtYnV0dG9uXG4gICAgKGNsaWNrKT1cIm9uU3VibWl0KClcIlxuICA+XG4gICAge3sgJ05PREVfRlJPTV9URU1QTEFURS5DUkVBVEUnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=