@alfresco/adf-process-services-cloud 8.1.0-15488125964 → 8.1.0-15490395570

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 (172) hide show
  1. package/esm2022/adf-process-services-cloud.mjs +5 -0
  2. package/esm2022/lib/app/app-list-cloud.module.mjs +20 -0
  3. package/esm2022/lib/app/components/app-details-cloud/app-details-cloud.component.mjs +67 -0
  4. package/esm2022/lib/app/components/app-list-cloud/app-list-cloud.component.mjs +126 -0
  5. package/esm2022/lib/app/models/application-instance.model.mjs +24 -0
  6. package/esm2022/lib/app/public-api.mjs +22 -0
  7. package/esm2022/lib/app/services/apps-process-cloud.service.mjs +97 -0
  8. package/esm2022/lib/common/date-range-filter/date-range-filter.component.mjs +164 -0
  9. package/esm2022/lib/common/date-range-filter/date-range-filter.service.mjs +97 -0
  10. package/esm2022/lib/common/index.mjs +18 -0
  11. package/esm2022/lib/common/interface/environment.interface.mjs +18 -0
  12. package/esm2022/lib/common/interface/index.mjs +18 -0
  13. package/esm2022/lib/common/interface/public-api.mjs +18 -0
  14. package/esm2022/lib/common/public-api.mjs +19 -0
  15. package/esm2022/lib/form/components/cloud-form-rendering.service.mjs +57 -0
  16. package/esm2022/lib/form/components/form-cloud-custom-outcomes.component.mjs +31 -0
  17. package/esm2022/lib/form/components/form-cloud.component.mjs +416 -0
  18. package/esm2022/lib/form/components/form-definition-selector-cloud.component.mjs +54 -0
  19. package/esm2022/lib/form/components/spinner/form-spinner.component.mjs +36 -0
  20. package/esm2022/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +250 -0
  21. package/esm2022/lib/form/components/widgets/attach-file/file-properties-table/file-properties-table-cloud.component.mjs +137 -0
  22. package/esm2022/lib/form/components/widgets/data-table/data-table-adapter.widget.mjs +107 -0
  23. package/esm2022/lib/form/components/widgets/data-table/data-table.widget.mjs +121 -0
  24. package/esm2022/lib/form/components/widgets/data-table/helpers/data-table-path-parser.helper.mjs +122 -0
  25. package/esm2022/lib/form/components/widgets/date/date-cloud.widget.mjs +190 -0
  26. package/esm2022/lib/form/components/widgets/display-external-property/display-external-property.widget.mjs +86 -0
  27. package/esm2022/lib/form/components/widgets/display-rich-text/display-rich-text.widget.mjs +80 -0
  28. package/esm2022/lib/form/components/widgets/dropdown/dropdown-cloud.widget.mjs +464 -0
  29. package/esm2022/lib/form/components/widgets/dropdown/validators.mjs +29 -0
  30. package/esm2022/lib/form/components/widgets/file-viewer/file-viewer.widget.mjs +47 -0
  31. package/esm2022/lib/form/components/widgets/group/group-cloud.widget.mjs +83 -0
  32. package/esm2022/lib/form/components/widgets/people/people-cloud.widget.mjs +92 -0
  33. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer-wrapper/properties-viewer-wrapper.component.mjs +81 -0
  34. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer.widget.mjs +54 -0
  35. package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.schema.mjs +86 -0
  36. package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.mjs +117 -0
  37. package/esm2022/lib/form/components/widgets/upload/upload-cloud.widget.mjs +188 -0
  38. package/esm2022/lib/form/form-cloud.module.mjs +103 -0
  39. package/esm2022/lib/form/models/form-cloud-representation.model.mjs +48 -0
  40. package/esm2022/lib/form/models/task-variable-cloud.model.mjs +28 -0
  41. package/esm2022/lib/form/public-api.mjs +44 -0
  42. package/esm2022/lib/form/services/content-cloud-node-selector.service.mjs +120 -0
  43. package/esm2022/lib/form/services/display-mode.service.mjs +146 -0
  44. package/esm2022/lib/form/services/form-cloud.service.interface.mjs +18 -0
  45. package/esm2022/lib/form/services/form-cloud.service.mjs +201 -0
  46. package/esm2022/lib/form/services/form-definition-selector-cloud.service.interface.mjs +18 -0
  47. package/esm2022/lib/form/services/form-definition-selector-cloud.service.mjs +51 -0
  48. package/esm2022/lib/form/services/form-utils.service.mjs +37 -0
  49. package/esm2022/lib/form/services/process-cloud-content.service.mjs +71 -0
  50. package/esm2022/lib/form/services/spinner/form-cloud-spinner.service.mjs +52 -0
  51. package/esm2022/lib/group/components/group-cloud.component.mjs +424 -0
  52. package/esm2022/lib/group/group-cloud.module.mjs +33 -0
  53. package/esm2022/lib/group/models/identity-group.model.mjs +18 -0
  54. package/esm2022/lib/group/public-api.mjs +21 -0
  55. package/esm2022/lib/group/services/identity-group.service.mjs +89 -0
  56. package/esm2022/lib/models/application-version.model.mjs +21 -0
  57. package/esm2022/lib/models/constant-values.type.mjs +18 -0
  58. package/esm2022/lib/models/data-column-custom-data.mjs +18 -0
  59. package/esm2022/lib/models/date-cloud-filter.model.mjs +31 -0
  60. package/esm2022/lib/models/date-format-cloud.model.mjs +18 -0
  61. package/esm2022/lib/models/engine-event-cloud.model.mjs +18 -0
  62. package/esm2022/lib/models/filter-cloud-model.mjs +128 -0
  63. package/esm2022/lib/models/process-definition-cloud.model.mjs +32 -0
  64. package/esm2022/lib/models/process-instance-variable.model.mjs +18 -0
  65. package/esm2022/lib/models/process-variable-filter.model.mjs +18 -0
  66. package/esm2022/lib/models/task-cloud.model.mjs +23 -0
  67. package/esm2022/lib/models/task-list-sorting.model.mjs +40 -0
  68. package/esm2022/lib/models/variable-definition.mjs +18 -0
  69. package/esm2022/lib/people/components/people-cloud.component.mjs +499 -0
  70. package/esm2022/lib/people/models/identity-user.model.mjs +18 -0
  71. package/esm2022/lib/people/people-cloud.module.mjs +33 -0
  72. package/esm2022/lib/people/public-api.mjs +21 -0
  73. package/esm2022/lib/people/services/identity-user.service.mjs +119 -0
  74. package/esm2022/lib/process/process-cloud.module.mjs +40 -0
  75. package/esm2022/lib/process/process-filters/components/edit-process-filter/edit-process-filter-cloud.component.mjs +802 -0
  76. package/esm2022/lib/process/process-filters/components/process-filter-dialog/process-filter-dialog-cloud.component.mjs +59 -0
  77. package/esm2022/lib/process/process-filters/components/process-filters/process-filters-cloud.component.mjs +293 -0
  78. package/esm2022/lib/process/process-filters/models/process-filter-cloud.model.mjs +170 -0
  79. package/esm2022/lib/process/process-filters/process-filters-cloud.module.mjs +44 -0
  80. package/esm2022/lib/process/process-filters/public-api.mjs +23 -0
  81. package/esm2022/lib/process/process-filters/services/process-filter-cloud.service.mjs +408 -0
  82. package/esm2022/lib/process/process-header/components/process-header-cloud.component.mjs +137 -0
  83. package/esm2022/lib/process/process-header/process-header-cloud.module.mjs +33 -0
  84. package/esm2022/lib/process/process-header/public-api.mjs +19 -0
  85. package/esm2022/lib/process/process-list/components/process-list-cloud.component.mjs +594 -0
  86. package/esm2022/lib/process/process-list/datatable/process-list-datatable-adapter.mjs +31 -0
  87. package/esm2022/lib/process/process-list/models/perocess-instance-cloud-view.model.mjs +18 -0
  88. package/esm2022/lib/process/process-list/models/process-cloud-preferences.mjs +24 -0
  89. package/esm2022/lib/process/process-list/models/process-cloud-preset.model.mjs +37 -0
  90. package/esm2022/lib/process/process-list/models/process-cloud-query-request.model.mjs +107 -0
  91. package/esm2022/lib/process/process-list/models/process-list-sorting.model.mjs +40 -0
  92. package/esm2022/lib/process/process-list/process-list-cloud.module.mjs +45 -0
  93. package/esm2022/lib/process/process-list/public-api.mjs +25 -0
  94. package/esm2022/lib/process/process-list/services/process-list-cloud.service.mjs +253 -0
  95. package/esm2022/lib/process/process-list/services/process-task-list-cloud.service.mjs +109 -0
  96. package/esm2022/lib/process/public-api.mjs +23 -0
  97. package/esm2022/lib/process/services/process-cloud.service.mjs +105 -0
  98. package/esm2022/lib/process/start-process/components/start-process-cloud.component.mjs +481 -0
  99. package/esm2022/lib/process/start-process/models/process-instance-cloud.model.mjs +18 -0
  100. package/esm2022/lib/process/start-process/models/process-payload-cloud.model.mjs +26 -0
  101. package/esm2022/lib/process/start-process/models/process-with-form-payload-cloud.model.mjs +26 -0
  102. package/esm2022/lib/process/start-process/public-api.mjs +21 -0
  103. package/esm2022/lib/process/start-process/services/start-process-cloud.service.mjs +125 -0
  104. package/esm2022/lib/process-services-cloud.module.mjs +91 -0
  105. package/esm2022/lib/rich-text-editor/editorjs-config.mjs +101 -0
  106. package/esm2022/lib/rich-text-editor/index.mjs +18 -0
  107. package/esm2022/lib/rich-text-editor/public-api.mjs +19 -0
  108. package/esm2022/lib/rich-text-editor/rich-text-editor.component.mjs +80 -0
  109. package/esm2022/lib/rich-text-editor/rich-text-editor.module.mjs +33 -0
  110. package/esm2022/lib/screen/components/screen-cloud/screen-cloud.component.mjs +186 -0
  111. package/esm2022/lib/screen/models/screen-cloud.model.mjs +18 -0
  112. package/esm2022/lib/screen/public-api.mjs +18 -0
  113. package/esm2022/lib/services/base-cloud.service.mjs +83 -0
  114. package/esm2022/lib/services/cloud-token.service.mjs +23 -0
  115. package/esm2022/lib/services/form-fields.interfaces.mjs +55 -0
  116. package/esm2022/lib/services/local-preference-cloud.service.mjs +122 -0
  117. package/esm2022/lib/services/notification-cloud.service.mjs +45 -0
  118. package/esm2022/lib/services/preference-cloud.interface.mjs +18 -0
  119. package/esm2022/lib/services/public-api.mjs +28 -0
  120. package/esm2022/lib/services/screen-rendering.service.mjs +30 -0
  121. package/esm2022/lib/services/task-list-cloud.service.interface.mjs +18 -0
  122. package/esm2022/lib/services/user-preference-cloud.service.mjs +105 -0
  123. package/esm2022/lib/services/variable-mapper.sevice.mjs +77 -0
  124. package/esm2022/lib/services/web-socket.service.mjs +146 -0
  125. package/esm2022/lib/task/models/start-task-cloud-request.model.mjs +32 -0
  126. package/esm2022/lib/task/models/task-details-cloud.model.mjs +26 -0
  127. package/esm2022/lib/task/models/task.model.mjs +23 -0
  128. package/esm2022/lib/task/public-api.mjs +26 -0
  129. package/esm2022/lib/task/services/task-cloud.service.mjs +272 -0
  130. package/esm2022/lib/task/task-cloud.module.mjs +45 -0
  131. package/esm2022/lib/task/task-filters/components/base-task-filters-cloud.component.mjs +59 -0
  132. package/esm2022/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.mjs +467 -0
  133. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter/edit-service-task-filter-cloud.component.mjs +206 -0
  134. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-task-filter/edit-task-filter-cloud.component.mjs +318 -0
  135. package/esm2022/lib/task/task-filters/components/service-task-filters/service-task-filters-cloud.component.mjs +147 -0
  136. package/esm2022/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.mjs +143 -0
  137. package/esm2022/lib/task/task-filters/components/task-filter-dialog/task-filter-dialog-cloud.component.mjs +73 -0
  138. package/esm2022/lib/task/task-filters/components/task-filters/task-filters-cloud.component.mjs +256 -0
  139. package/esm2022/lib/task/task-filters/models/filter-cloud.model.mjs +207 -0
  140. package/esm2022/lib/task/task-filters/public-api.mjs +27 -0
  141. package/esm2022/lib/task/task-filters/services/service-task-filter-cloud.service.mjs +283 -0
  142. package/esm2022/lib/task/task-filters/services/task-filter-cloud.service.mjs +392 -0
  143. package/esm2022/lib/task/task-filters/task-filters-cloud.module.mjs +56 -0
  144. package/esm2022/lib/task/task-form/components/task-form-cloud/task-form-cloud.component.mjs +214 -0
  145. package/esm2022/lib/task/task-form/components/user-task-cloud/complete-task/complete-task.directive.mjs +89 -0
  146. package/esm2022/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.mjs +284 -0
  147. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/claim-task/claim-task-cloud.directive.mjs +101 -0
  148. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/unclaim-task/unclaim-task-cloud.directive.mjs +87 -0
  149. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/user-task-cloud-buttons.component.mjs +79 -0
  150. package/esm2022/lib/task/task-form/public-api.mjs +21 -0
  151. package/esm2022/lib/task/task-form/task-form.module.mjs +36 -0
  152. package/esm2022/lib/task/task-header/components/task-header-cloud.component.mjs +280 -0
  153. package/esm2022/lib/task/task-header/public-api.mjs +19 -0
  154. package/esm2022/lib/task/task-header/task-header-cloud.module.mjs +33 -0
  155. package/esm2022/lib/task/task-list/components/base-task-list-cloud.component.mjs +331 -0
  156. package/esm2022/lib/task/task-list/components/service-task-list/service-task-list-cloud.component.mjs +116 -0
  157. package/esm2022/lib/task/task-list/components/task-list/datatable/task-list-datatable-adapter.mjs +31 -0
  158. package/esm2022/lib/task/task-list/components/task-list/task-list-cloud.component.mjs +390 -0
  159. package/esm2022/lib/task/task-list/models/service-task-cloud.model.mjs +18 -0
  160. package/esm2022/lib/task/task-list/models/task-cloud-view.model.mjs +18 -0
  161. package/esm2022/lib/task/task-list/public-api.mjs +23 -0
  162. package/esm2022/lib/task/task-list/services/service-task-list-cloud.service.mjs +115 -0
  163. package/esm2022/lib/task/task-list/services/task-list-cloud.service.mjs +178 -0
  164. package/esm2022/lib/task/task-list/task-list-cloud.module.mjs +57 -0
  165. package/esm2022/lib/types.mjs +18 -0
  166. package/esm2022/public-api.mjs +40 -0
  167. package/fesm2022/adf-process-services-cloud.mjs +347 -346
  168. package/fesm2022/adf-process-services-cloud.mjs.map +1 -1
  169. package/lib/task/task-filters/components/base-task-filters-cloud.component.d.ts +1 -1
  170. package/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.d.ts +1 -1
  171. package/lib/task/task-list/components/base-task-list-cloud.component.d.ts +1 -1
  172. package/package.json +6 -4
@@ -0,0 +1,424 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { Component, DestroyRef, ElementRef, EventEmitter, inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
18
+ import { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';
19
+ import { animate, state, style, transition, trigger } from '@angular/animations';
20
+ import { BehaviorSubject } from 'rxjs';
21
+ import { debounceTime, distinctUntilChanged, filter, mergeMap, switchMap, tap } from 'rxjs/operators';
22
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
23
+ import { CommonModule } from '@angular/common';
24
+ import { TranslateModule } from '@ngx-translate/core';
25
+ import { MatIconModule } from '@angular/material/icon';
26
+ import { MatFormFieldModule } from '@angular/material/form-field';
27
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
28
+ import { MatSelectModule } from '@angular/material/select';
29
+ import { MatAutocompleteModule } from '@angular/material/autocomplete';
30
+ import { MatButtonModule } from '@angular/material/button';
31
+ import { MatInputModule } from '@angular/material/input';
32
+ import { MatChipsModule } from '@angular/material/chips';
33
+ import { IdentityGroupService } from '../services/identity-group.service';
34
+ import * as i0 from "@angular/core";
35
+ import * as i1 from "../services/identity-group.service";
36
+ import * as i2 from "@angular/common";
37
+ import * as i3 from "@ngx-translate/core";
38
+ import * as i4 from "@angular/material/icon";
39
+ import * as i5 from "@angular/material/form-field";
40
+ import * as i6 from "@angular/material/progress-bar";
41
+ import * as i7 from "@angular/material/core";
42
+ import * as i8 from "@angular/material/autocomplete";
43
+ import * as i9 from "@angular/material/button";
44
+ import * as i10 from "@angular/forms";
45
+ import * as i11 from "@angular/material/input";
46
+ import * as i12 from "@angular/material/chips";
47
+ export class GroupCloudComponent {
48
+ constructor(identityGroupService) {
49
+ this.identityGroupService = identityGroupService;
50
+ /** Group selection mode (single/multiple). */
51
+ this.mode = 'single';
52
+ /** Array of groups to be pre-selected. This pre-selects all groups in multi selection mode and only the first group of the array in single selection mode. */
53
+ this.preSelectGroups = [];
54
+ /**
55
+ * This flag enables the validation on the preSelectGroups passed as input.
56
+ * In case the flag is true the components call the identity service to verify the validity of the information passed as input.
57
+ * Otherwise, no check will be done.
58
+ */
59
+ this.validate = false;
60
+ /**
61
+ * Show the info in readonly mode
62
+ */
63
+ this.readOnly = false;
64
+ /**
65
+ * Mark this field as required
66
+ */
67
+ this.required = false;
68
+ /** FormControl to list of group */
69
+ this.groupChipsCtrl = new UntypedFormControl({ value: '', disabled: false });
70
+ /** FormControl to search the group */
71
+ this.searchGroupsControl = new UntypedFormControl({ value: '', disabled: false });
72
+ /** Role names of the groups to be listed. */
73
+ this.roles = [];
74
+ /** Emitted when a group is selected. */
75
+ this.selectGroup = new EventEmitter();
76
+ /** Emitted when a group is removed. */
77
+ this.removeGroup = new EventEmitter();
78
+ /** Emitted when a group selection change. */
79
+ this.changedGroups = new EventEmitter();
80
+ /** Emitted when an warning occurs. */
81
+ this.warning = new EventEmitter();
82
+ this.searchGroups = [];
83
+ this.selectedGroups = [];
84
+ this.invalidGroups = [];
85
+ this.searchGroups$ = new BehaviorSubject(this.searchGroups);
86
+ this.subscriptAnimationState = 'enter';
87
+ this.touched = false;
88
+ this.searchedValue = '';
89
+ this.validationLoading = false;
90
+ this.searchLoading = false;
91
+ this.destroyRef = inject(DestroyRef);
92
+ }
93
+ ngOnInit() {
94
+ this.initSearch();
95
+ }
96
+ ngOnChanges(changes) {
97
+ if (this.hasPreselectedGroupsChanged(changes) || this.hasModeChanged(changes) || this.isValidationChanged(changes)) {
98
+ if (this.hasPreSelectGroups()) {
99
+ this.loadPreSelectGroups();
100
+ }
101
+ else if (this.hasPreselectedGroupsCleared(changes)) {
102
+ this.selectedGroups = [];
103
+ this.invalidGroups = [];
104
+ }
105
+ if (!this.isValidationEnabled()) {
106
+ this.invalidGroups = [];
107
+ }
108
+ }
109
+ }
110
+ initSearch() {
111
+ this.initializeStream();
112
+ this.typingUniqueValueNotEmpty$
113
+ .pipe(switchMap((name) => this.identityGroupService.search(name, { roles: this.roles, withinApplication: this.appName })), mergeMap((groups) => {
114
+ this.resetSearchGroups();
115
+ this.searchLoading = false;
116
+ return groups;
117
+ }), filter((group) => !this.isGroupAlreadySelected(group)), takeUntilDestroyed(this.destroyRef))
118
+ .subscribe((searchedGroup) => {
119
+ this.searchGroups.push(searchedGroup);
120
+ this.searchGroups$.next(this.searchGroups);
121
+ });
122
+ }
123
+ initializeStream() {
124
+ const typingValueFromControl$ = this.searchGroupsControl.valueChanges;
125
+ const typingValueTypeSting$ = typingValueFromControl$.pipe(filter((value) => {
126
+ this.searchLoading = true;
127
+ return typeof value === 'string';
128
+ }));
129
+ const typingValueHandleErrorMessage$ = typingValueTypeSting$.pipe(tap((value) => {
130
+ if (value) {
131
+ this.setTypingError();
132
+ }
133
+ }));
134
+ const typingValueDebouncedUnique$ = typingValueHandleErrorMessage$.pipe(debounceTime(500), distinctUntilChanged());
135
+ this.typingUniqueValueNotEmpty$ = typingValueDebouncedUnique$.pipe(tap((value) => {
136
+ if (value.trim()) {
137
+ this.searchedValue = value;
138
+ }
139
+ else {
140
+ this.searchGroupsControl.markAsPristine();
141
+ this.searchGroupsControl.markAsUntouched();
142
+ }
143
+ }), tap(() => this.resetSearchGroups()));
144
+ }
145
+ isGroupAlreadySelected(group) {
146
+ if (this.selectedGroups && this.selectedGroups.length > 0) {
147
+ const result = this.selectedGroups.find((selectedGroup) => selectedGroup.name === group.name);
148
+ return !!result;
149
+ }
150
+ return false;
151
+ }
152
+ async searchGroup(name) {
153
+ return (await this.identityGroupService.search(name).toPromise())[0];
154
+ }
155
+ getPreselectedGroups() {
156
+ if (this.isSingleMode()) {
157
+ return [this.preSelectGroups[0]];
158
+ }
159
+ else {
160
+ return this.removeDuplicatedGroups(this.preSelectGroups);
161
+ }
162
+ }
163
+ async validatePreselectGroups() {
164
+ this.invalidGroups = [];
165
+ for (const group of this.getPreselectedGroups()) {
166
+ try {
167
+ const validationResult = await this.searchGroup(group.name);
168
+ if (this.isPreselectedGroupInvalid(group, validationResult)) {
169
+ this.invalidGroups.push(group);
170
+ }
171
+ }
172
+ catch (error) {
173
+ this.invalidGroups.push(group);
174
+ }
175
+ }
176
+ this.checkPreselectValidationErrors();
177
+ }
178
+ checkPreselectValidationErrors() {
179
+ this.invalidGroups = this.removeDuplicatedGroups(this.invalidGroups);
180
+ if (this.invalidGroups.length > 0) {
181
+ this.generateInvalidGroupsMessage();
182
+ }
183
+ this.warning.emit({
184
+ message: 'INVALID_PRESELECTED_GROUPS',
185
+ groups: this.invalidGroups
186
+ });
187
+ }
188
+ generateInvalidGroupsMessage() {
189
+ this.validateGroupsMessage = '';
190
+ this.invalidGroups.forEach((invalidGroup, index) => {
191
+ if (index === this.invalidGroups.length - 1) {
192
+ this.validateGroupsMessage += `${invalidGroup.name} `;
193
+ }
194
+ else {
195
+ this.validateGroupsMessage += `${invalidGroup.name}, `;
196
+ }
197
+ });
198
+ }
199
+ async loadPreSelectGroups() {
200
+ this.selectedGroups = [];
201
+ if (this.isSingleMode()) {
202
+ this.selectedGroups = [this.preSelectGroups[0]];
203
+ }
204
+ else {
205
+ this.selectedGroups = this.removeDuplicatedGroups(this.preSelectGroups);
206
+ }
207
+ this.groupChipsCtrl.setValue(this.selectedGroups[0].name);
208
+ if (this.isValidationEnabled()) {
209
+ this.validationLoading = true;
210
+ await this.validatePreselectGroups();
211
+ this.validationLoading = false;
212
+ }
213
+ }
214
+ onSelect(group) {
215
+ if (group) {
216
+ this.selectGroup.emit(group);
217
+ if (this.isMultipleMode()) {
218
+ if (!this.isGroupAlreadySelected(group)) {
219
+ this.selectedGroups.push(group);
220
+ }
221
+ }
222
+ else {
223
+ this.invalidGroups = [];
224
+ this.selectedGroups = [group];
225
+ }
226
+ this.groupInput.nativeElement.value = '';
227
+ this.searchGroupsControl.setValue('');
228
+ this.groupChipsCtrlValue(this.selectedGroups[0].name);
229
+ this.changedGroups.emit(this.selectedGroups);
230
+ this.resetSearchGroups();
231
+ }
232
+ }
233
+ onRemove(groupToRemove) {
234
+ this.removeGroup.emit(groupToRemove);
235
+ this.removeGroupFromSelected(groupToRemove);
236
+ this.changedGroups.emit(this.selectedGroups);
237
+ if (this.selectedGroups.length === 0) {
238
+ this.groupChipsCtrlValue('');
239
+ }
240
+ else {
241
+ this.groupChipsCtrlValue(this.selectedGroups[0].name);
242
+ }
243
+ this.searchGroupsControl.markAsDirty();
244
+ this.searchGroupsControl.markAsTouched();
245
+ if (this.isValidationEnabled()) {
246
+ this.removeGroupFromValidation(groupToRemove);
247
+ this.checkPreselectValidationErrors();
248
+ }
249
+ }
250
+ isPreselectedGroupInvalid(preselectedGroup, validatedGroup) {
251
+ if (validatedGroup?.name !== undefined) {
252
+ return preselectedGroup.name !== validatedGroup.name;
253
+ }
254
+ else {
255
+ return true;
256
+ }
257
+ }
258
+ removeDuplicatedGroups(groups) {
259
+ return groups.filter((group, index, self) => index === self.findIndex((auxGroup) => group.id === auxGroup.id && group.name === auxGroup.name));
260
+ }
261
+ groupChipsCtrlValue(value) {
262
+ this.groupChipsCtrl.setValue(value);
263
+ this.groupChipsCtrl.markAsDirty();
264
+ this.groupChipsCtrl.markAsTouched();
265
+ }
266
+ removeGroupFromSelected({ id, name }) {
267
+ const indexToRemove = this.selectedGroups.findIndex((group) => group.id === id && group.name === name);
268
+ if (indexToRemove !== -1) {
269
+ this.selectedGroups.splice(indexToRemove, 1);
270
+ }
271
+ }
272
+ removeGroupFromValidation({ id, name }) {
273
+ const indexToRemove = this.invalidGroups.findIndex((group) => group.id === id && group.name === name);
274
+ if (indexToRemove !== -1) {
275
+ this.invalidGroups.splice(indexToRemove, 1);
276
+ }
277
+ }
278
+ resetSearchGroups() {
279
+ this.searchGroups = [];
280
+ this.searchGroups$.next(this.searchGroups);
281
+ }
282
+ isSingleSelectionReadonly() {
283
+ return this.isSingleMode() && this.selectedGroups.length === 1 && this.selectedGroups[0].readonly === true;
284
+ }
285
+ isSingleMode() {
286
+ return this.mode === 'single';
287
+ }
288
+ isMultipleMode() {
289
+ return this.mode === 'multiple';
290
+ }
291
+ hasPreSelectGroups() {
292
+ return this.preSelectGroups && this.preSelectGroups.length > 0;
293
+ }
294
+ hasModeChanged(changes) {
295
+ return changes?.mode && changes.mode.currentValue !== changes.mode.previousValue;
296
+ }
297
+ isValidationChanged(changes) {
298
+ return changes?.validate && changes.validate.currentValue !== changes.validate.previousValue;
299
+ }
300
+ hasPreselectedGroupsChanged(changes) {
301
+ return changes?.preSelectGroups && changes.preSelectGroups.currentValue !== changes.preSelectGroups.previousValue;
302
+ }
303
+ hasPreselectedGroupsCleared(changes) {
304
+ return changes?.preSelectGroups?.currentValue.length === 0;
305
+ }
306
+ setTypingError() {
307
+ this.searchGroupsControl.setErrors({
308
+ searchTypingError: true,
309
+ ...this.searchGroupsControl.errors
310
+ });
311
+ }
312
+ hasPreselectError() {
313
+ return this.invalidGroups && this.invalidGroups.length > 0;
314
+ }
315
+ isReadonly() {
316
+ return this.readOnly || this.isSingleSelectionReadonly();
317
+ }
318
+ getDisplayName(group) {
319
+ return group?.name || '';
320
+ }
321
+ hasError() {
322
+ return !!this.searchGroupsControl.errors;
323
+ }
324
+ isValidationLoading() {
325
+ return this.isValidationEnabled() && this.validationLoading;
326
+ }
327
+ markAsTouched() {
328
+ this.touched = true;
329
+ }
330
+ isTouched() {
331
+ return this.touched;
332
+ }
333
+ isSelected() {
334
+ return this.selectedGroups && !!this.selectedGroups.length;
335
+ }
336
+ isDirty() {
337
+ return this.isTouched() && !this.isSelected();
338
+ }
339
+ setFocus(isFocused) {
340
+ this.isFocused = isFocused;
341
+ }
342
+ isValidationEnabled() {
343
+ return this.validate === true;
344
+ }
345
+ getValidationPattern() {
346
+ return this.searchGroupsControl.errors.pattern.requiredPattern;
347
+ }
348
+ getValidationMaxLength() {
349
+ return this.searchGroupsControl.errors.maxlength.requiredLength;
350
+ }
351
+ getValidationMinLength() {
352
+ return this.searchGroupsControl.errors.minlength.requiredLength;
353
+ }
354
+ getGroupNameInitials(group) {
355
+ let result = '';
356
+ if (group) {
357
+ const groupName = group.name;
358
+ result = (groupName ? groupName[0] : '').toUpperCase();
359
+ }
360
+ return result;
361
+ }
362
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupCloudComponent, deps: [{ token: i1.IdentityGroupService }], target: i0.ɵɵFactoryTarget.Component }); }
363
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GroupCloudComponent, isStandalone: true, selector: "adf-cloud-group", inputs: { label: "label", appName: "appName", title: "title", mode: "mode", preSelectGroups: "preSelectGroups", validate: "validate", readOnly: "readOnly", required: "required", groupChipsCtrl: "groupChipsCtrl", searchGroupsControl: "searchGroupsControl", roles: "roles" }, outputs: { selectGroup: "selectGroup", removeGroup: "removeGroup", changedGroups: "changedGroups", warning: "warning" }, viewQueries: [{ propertyName: "groupInput", first: true, predicate: ["groupInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<form>\n <mat-form-field class=\"adf-cloud-group\" [class.adf-invalid]=\"hasError() && isDirty()\">\n <mat-label>\n <span>{{label}}</span>\n <span class=\"adf-asterisk\" [style.visibility]=\"required ? 'visible' : 'hidden'\">*</span>\n </mat-label>\n <mat-chip-grid #groupChipList data-automation-id=\"adf-cloud-group-chip-list\">\n <mat-chip-row\n *ngFor=\"let group of selectedGroups\"\n [removable]=\"!(group.readonly)\"\n [attr.data-automation-id]=\"'adf-cloud-group-chip-' + group.name\"\n (removed)=\"onRemove(group)\"\n [disabled]=\"isReadonly() || isValidationLoading()\"\n title=\"{{ (group.readonly ? 'ADF_CLOUD_GROUPS.MANDATORY' : '') | translate }}\">\n {{group.name}}\n <mat-icon\n *ngIf=\"!(group.readonly || readOnly)\"\n matChipRemove [attr.data-automation-id]=\"'adf-cloud-group-chip-remove-icon-' + group.name\">\n cancel\n </mat-icon>\n </mat-chip-row>\n <input [disabled]=\"isReadonly()\" matInput\n [formControl]=\"searchGroupsControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"groupChipList\"\n [placeholder]=\"title | translate\"\n [required]=\"required\"\n (focus)=\"setFocus(true)\"\n (blur)=\"setFocus(false); markAsTouched()\"\n class=\"adf-group-input\"\n data-automation-id=\"adf-cloud-group-search-input\" #groupInput>\n </mat-chip-grid>\n\n <mat-autocomplete\n autoActiveFirstOption\n #auto=\"matAutocomplete\"\n class=\"adf-cloud-group-list\"\n (optionSelected)=\"onSelect($event.option.value)\"\n [displayWith]=\"getDisplayName\"\n data-automation-id=\"adf-cloud-group-autocomplete\">\n <ng-container *ngIf=\"(searchGroups$ | async)?.length else noResults\">\n <mat-option *ngFor=\"let group of searchGroups$ | async; let i = index\" [value]=\"group\"\n [attr.data-automation-id]=\"'adf-cloud-group-chip-' + group.name\"\n class=\"adf-cloud-group-option-active\">\n <div\n class=\"adf-cloud-group-row\"\n id=\"adf-group-{{i}}\"\n data-automation-id=\"adf-cloud-group-row\">\n <button class=\"adf-group-short-name\" mat-fab>{{getGroupNameInitials(group)}}</button>\n <span>{{group.name}}</span>\n </div>\n </mat-option>\n </ng-container>\n <ng-template #noResults>\n <mat-option *ngIf=\"searchGroupsControl.hasError('searchTypingError') && !searchLoading\" disabled\n class=\"adf-cloud-group-option-not-active\"\n data-automation-id=\"adf-cloud-group-no-results\">\n <span> {{ 'ADF_CLOUD_GROUPS.ERROR.NOT_FOUND' | translate }}</span>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n </mat-form-field>\n <mat-progress-bar *ngIf=\"validationLoading\" mode=\"indeterminate\" />\n\n <div class=\"adf-error-container adf-error-messages-container\">\n <mat-error *ngIf=\"hasPreselectError() && !isValidationLoading()\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_GROUPS.ERROR.NOT_FOUND' | translate }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchGroupsControl.hasError('pattern')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_PATTERN' | translate: { pattern: getValidationPattern() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchGroupsControl.hasError('maxlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MAX_LENGTH' | translate: { requiredLength: getValidationMaxLength() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchGroupsControl.hasError('minlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MIN_LENGTH' | translate: { requiredLength: getValidationMinLength() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"(searchGroupsControl.hasError('required') || groupChipsCtrl.hasError('required')) && isDirty()\"\n [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.REQUIRED' | translate }} </div>\n </mat-error>\n <mat-error *ngIf=\"searchGroupsControl.hasError('searchTypingError') && !this.isFocused\"\n data-automation-id=\"invalid-groups-typing-error\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_GROUPS.ERROR.NOT_FOUND' | translate }}</div>\n </mat-error>\n </div>\n</form>\n", styles: [".adf-cloud-group-list{margin:5px 0;padding:10px 0}.adf-cloud-group-list .adf-cloud-group-row{place-content:center flex-start;align-items:center;display:flex}.adf-cloud-group-list .adf-cloud-group-row .adf-group-short-name{margin-right:20px;background:var(--theme-primary-color);width:40px;height:40px;box-shadow:none}.adf-cloud-group{width:100%}.adf-cloud-group-title{color:var(--adf-theme-foreground-secondary-text-color)}.adf-cloud-group-title--focus{color:var(--theme-primary-color)}.adf-cloud-group-option-active:not(.adf-cloud-group:disabled){color:var(--adf-theme-foreground-text-color)}.adf-cloud-group-option-not-active:not(.adf-cloud-group:active){background:inherit;color:var(--adf-theme-foreground-secondary-text-color)}.adf-cloud-group-error{color:var(--theme-warn-color);margin-top:-10px;position:absolute;height:20px}.adf-cloud-group-error-message{padding-right:8px;height:16px;line-height:1.33;width:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i6.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatFabButton, selector: "button[mat-fab]", inputs: ["extended"], exportAs: ["matButton"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i10.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i10.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i11.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: "ngmodule", type: MatChipsModule }, { kind: "component", type: i12.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i12.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i12.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i12.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }], animations: [
364
+ trigger('transitionMessages', [
365
+ state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),
366
+ transition('void => enter', [style({ opacity: 0, transform: 'translateY(-100%)' }), animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)')])
367
+ ])
368
+ ], encapsulation: i0.ViewEncapsulation.None }); }
369
+ }
370
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupCloudComponent, decorators: [{
371
+ type: Component,
372
+ args: [{ selector: 'adf-cloud-group', standalone: true, imports: [
373
+ CommonModule,
374
+ TranslateModule,
375
+ MatIconModule,
376
+ MatFormFieldModule,
377
+ MatProgressBarModule,
378
+ MatSelectModule,
379
+ MatAutocompleteModule,
380
+ MatButtonModule,
381
+ ReactiveFormsModule,
382
+ MatInputModule,
383
+ MatChipsModule
384
+ ], animations: [
385
+ trigger('transitionMessages', [
386
+ state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),
387
+ transition('void => enter', [style({ opacity: 0, transform: 'translateY(-100%)' }), animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)')])
388
+ ])
389
+ ], encapsulation: ViewEncapsulation.None, template: "<form>\n <mat-form-field class=\"adf-cloud-group\" [class.adf-invalid]=\"hasError() && isDirty()\">\n <mat-label>\n <span>{{label}}</span>\n <span class=\"adf-asterisk\" [style.visibility]=\"required ? 'visible' : 'hidden'\">*</span>\n </mat-label>\n <mat-chip-grid #groupChipList data-automation-id=\"adf-cloud-group-chip-list\">\n <mat-chip-row\n *ngFor=\"let group of selectedGroups\"\n [removable]=\"!(group.readonly)\"\n [attr.data-automation-id]=\"'adf-cloud-group-chip-' + group.name\"\n (removed)=\"onRemove(group)\"\n [disabled]=\"isReadonly() || isValidationLoading()\"\n title=\"{{ (group.readonly ? 'ADF_CLOUD_GROUPS.MANDATORY' : '') | translate }}\">\n {{group.name}}\n <mat-icon\n *ngIf=\"!(group.readonly || readOnly)\"\n matChipRemove [attr.data-automation-id]=\"'adf-cloud-group-chip-remove-icon-' + group.name\">\n cancel\n </mat-icon>\n </mat-chip-row>\n <input [disabled]=\"isReadonly()\" matInput\n [formControl]=\"searchGroupsControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"groupChipList\"\n [placeholder]=\"title | translate\"\n [required]=\"required\"\n (focus)=\"setFocus(true)\"\n (blur)=\"setFocus(false); markAsTouched()\"\n class=\"adf-group-input\"\n data-automation-id=\"adf-cloud-group-search-input\" #groupInput>\n </mat-chip-grid>\n\n <mat-autocomplete\n autoActiveFirstOption\n #auto=\"matAutocomplete\"\n class=\"adf-cloud-group-list\"\n (optionSelected)=\"onSelect($event.option.value)\"\n [displayWith]=\"getDisplayName\"\n data-automation-id=\"adf-cloud-group-autocomplete\">\n <ng-container *ngIf=\"(searchGroups$ | async)?.length else noResults\">\n <mat-option *ngFor=\"let group of searchGroups$ | async; let i = index\" [value]=\"group\"\n [attr.data-automation-id]=\"'adf-cloud-group-chip-' + group.name\"\n class=\"adf-cloud-group-option-active\">\n <div\n class=\"adf-cloud-group-row\"\n id=\"adf-group-{{i}}\"\n data-automation-id=\"adf-cloud-group-row\">\n <button class=\"adf-group-short-name\" mat-fab>{{getGroupNameInitials(group)}}</button>\n <span>{{group.name}}</span>\n </div>\n </mat-option>\n </ng-container>\n <ng-template #noResults>\n <mat-option *ngIf=\"searchGroupsControl.hasError('searchTypingError') && !searchLoading\" disabled\n class=\"adf-cloud-group-option-not-active\"\n data-automation-id=\"adf-cloud-group-no-results\">\n <span> {{ 'ADF_CLOUD_GROUPS.ERROR.NOT_FOUND' | translate }}</span>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n </mat-form-field>\n <mat-progress-bar *ngIf=\"validationLoading\" mode=\"indeterminate\" />\n\n <div class=\"adf-error-container adf-error-messages-container\">\n <mat-error *ngIf=\"hasPreselectError() && !isValidationLoading()\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_GROUPS.ERROR.NOT_FOUND' | translate }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchGroupsControl.hasError('pattern')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_PATTERN' | translate: { pattern: getValidationPattern() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchGroupsControl.hasError('maxlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MAX_LENGTH' | translate: { requiredLength: getValidationMaxLength() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"searchGroupsControl.hasError('minlength')\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.INVALID_MIN_LENGTH' | translate: { requiredLength: getValidationMinLength() } }}</div>\n </mat-error>\n <mat-error *ngIf=\"(searchGroupsControl.hasError('required') || groupChipsCtrl.hasError('required')) && isDirty()\"\n [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_PEOPLE_GROUPS.ERROR.REQUIRED' | translate }} </div>\n </mat-error>\n <mat-error *ngIf=\"searchGroupsControl.hasError('searchTypingError') && !this.isFocused\"\n data-automation-id=\"invalid-groups-typing-error\" [@transitionMessages]=\"subscriptAnimationState\" class=\"adf-error\">\n <mat-icon class=\"adf-error-icon\">error_outline</mat-icon>\n <div class=\"adf-error-text\">{{ 'ADF_CLOUD_GROUPS.ERROR.NOT_FOUND' | translate }}</div>\n </mat-error>\n </div>\n</form>\n", styles: [".adf-cloud-group-list{margin:5px 0;padding:10px 0}.adf-cloud-group-list .adf-cloud-group-row{place-content:center flex-start;align-items:center;display:flex}.adf-cloud-group-list .adf-cloud-group-row .adf-group-short-name{margin-right:20px;background:var(--theme-primary-color);width:40px;height:40px;box-shadow:none}.adf-cloud-group{width:100%}.adf-cloud-group-title{color:var(--adf-theme-foreground-secondary-text-color)}.adf-cloud-group-title--focus{color:var(--theme-primary-color)}.adf-cloud-group-option-active:not(.adf-cloud-group:disabled){color:var(--adf-theme-foreground-text-color)}.adf-cloud-group-option-not-active:not(.adf-cloud-group:active){background:inherit;color:var(--adf-theme-foreground-secondary-text-color)}.adf-cloud-group-error{color:var(--theme-warn-color);margin-top:-10px;position:absolute;height:20px}.adf-cloud-group-error-message{padding-right:8px;height:16px;line-height:1.33;width:auto}\n"] }]
390
+ }], ctorParameters: () => [{ type: i1.IdentityGroupService }], propDecorators: { label: [{
391
+ type: Input
392
+ }], appName: [{
393
+ type: Input
394
+ }], title: [{
395
+ type: Input
396
+ }], mode: [{
397
+ type: Input
398
+ }], preSelectGroups: [{
399
+ type: Input
400
+ }], validate: [{
401
+ type: Input
402
+ }], readOnly: [{
403
+ type: Input
404
+ }], required: [{
405
+ type: Input
406
+ }], groupChipsCtrl: [{
407
+ type: Input
408
+ }], searchGroupsControl: [{
409
+ type: Input
410
+ }], roles: [{
411
+ type: Input
412
+ }], selectGroup: [{
413
+ type: Output
414
+ }], removeGroup: [{
415
+ type: Output
416
+ }], changedGroups: [{
417
+ type: Output
418
+ }], warning: [{
419
+ type: Output
420
+ }], groupInput: [{
421
+ type: ViewChild,
422
+ args: ['groupInput']
423
+ }] } });
424
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY2xvdWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3Byb2Nlc3Mtc2VydmljZXMtY2xvdWQvc3JjL2xpYi9ncm91cC9jb21wb25lbnRzL2dyb3VwLWNsb3VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZ3JvdXAvY29tcG9uZW50cy9ncm91cC1jbG91ZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFD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Q0FBQztxQkFDTCxpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJO3lGQUtyQyxLQUFLO3NCQURKLEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS04sZUFBZTtzQkFEZCxLQUFLO2dCQVNOLFFBQVE7c0JBRFAsS0FBSztnQkFPTixRQUFRO3NCQURQLEtBQUs7Z0JBT04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQUtOLFdBQVc7c0JBRFYsTUFBTTtnQkFLUCxXQUFXO3NCQURWLE1BQU07Z0JBS1AsYUFBYTtzQkFEWixNQUFNO2dCQUtQLE9BQU87c0JBRE4sTUFBTTtnQkFJQyxVQUFVO3NCQURqQixTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50U2VsZWN0aW9uTW9kZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IElkZW50aXR5R3JvdXBNb2RlbCB9IGZyb20gJy4uL21vZGVscy9pZGVudGl0eS1ncm91cC5tb2RlbCc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0Q2hpcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBJZGVudGl0eUdyb3VwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2lkZW50aXR5LWdyb3VwLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1jbG91ZC1ncm91cCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxuICAgICAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICAgICAgTWF0Q2hpcHNNb2R1bGVcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncm91cC1jbG91ZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZ3JvdXAtY2xvdWQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ3RyYW5zaXRpb25NZXNzYWdlcycsIFtcbiAgICAgICAgICAgIHN0YXRlKCdlbnRlcicsIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwJSknIH0pKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gZW50ZXInLCBbc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMDAlKScgfSksIGFuaW1hdGUoJzMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpJyldKVxuICAgICAgICBdKVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBHcm91cENsb3VkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKiBMYWJlbCBmb3IgdGhlIHVzZXIgc2VsZWN0aW9uIGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogTmFtZSBvZiB0aGUgYXBwbGljYXRpb24uIElmIHNwZWNpZmllZCB0aGlzIHNob3dzIHRoZSBncm91cHMgd2hvIGhhdmUgYWNjZXNzIHRvIHRoZSBhcHAuICovXG4gICAgQElucHV0KClcbiAgICBhcHBOYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogVGl0bGUgb2YgdGhlIGZpZWxkICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIEdyb3VwIHNlbGVjdGlvbiBtb2RlIChzaW5nbGUvbXVsdGlwbGUpLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9kZTogQ29tcG9uZW50U2VsZWN0aW9uTW9kZSA9ICdzaW5nbGUnO1xuXG4gICAgLyoqIEFycmF5IG9mIGdyb3VwcyB0byBiZSBwcmUtc2VsZWN0ZWQuIFRoaXMgcHJlLXNlbGVjdHMgYWxsIGdyb3VwcyBpbiBtdWx0aSBzZWxlY3Rpb24gbW9kZSBhbmQgb25seSB0aGUgZmlyc3QgZ3JvdXAgb2YgdGhlIGFycmF5IGluIHNpbmdsZSBzZWxlY3Rpb24gbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHByZVNlbGVjdEdyb3VwczogSWRlbnRpdHlHcm91cE1vZGVsW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZmxhZyBlbmFibGVzIHRoZSB2YWxpZGF0aW9uIG9uIHRoZSBwcmVTZWxlY3RHcm91cHMgcGFzc2VkIGFzIGlucHV0LlxuICAgICAqIEluIGNhc2UgdGhlIGZsYWcgaXMgdHJ1ZSB0aGUgY29tcG9uZW50cyBjYWxsIHRoZSBpZGVudGl0eSBzZXJ2aWNlIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIGluZm9ybWF0aW9uIHBhc3NlZCBhcyBpbnB1dC5cbiAgICAgKiBPdGhlcndpc2UsIG5vIGNoZWNrIHdpbGwgYmUgZG9uZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHZhbGlkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRoZSBpbmZvIGluIHJlYWRvbmx5IG1vZGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBNYXJrIHRoaXMgZmllbGQgYXMgcmVxdWlyZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogRm9ybUNvbnRyb2wgdG8gbGlzdCBvZiBncm91cCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ3JvdXBDaGlwc0N0cmwgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6ICcnLCBkaXNhYmxlZDogZmFsc2UgfSk7XG5cbiAgICAvKiogRm9ybUNvbnRyb2wgdG8gc2VhcmNoIHRoZSBncm91cCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoR3JvdXBzQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogJycsIGRpc2FibGVkOiBmYWxzZSB9KTtcblxuICAgIC8qKiBSb2xlIG5hbWVzIG9mIHRoZSBncm91cHMgdG8gYmUgbGlzdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm9sZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgZ3JvdXAgaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0R3JvdXAgPSBuZXcgRXZlbnRFbWl0dGVyPElkZW50aXR5R3JvdXBNb2RlbD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBncm91cCBpcyByZW1vdmVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlbW92ZUdyb3VwID0gbmV3IEV2ZW50RW1pdHRlcjxJZGVudGl0eUdyb3VwTW9kZWw+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgZ3JvdXAgc2VsZWN0aW9uIGNoYW5nZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBjaGFuZ2VkR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxJZGVudGl0eUdyb3VwTW9kZWxbXT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYW4gd2FybmluZyBvY2N1cnMuICovXG4gICAgQE91dHB1dCgpXG4gICAgd2FybmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnZ3JvdXBJbnB1dCcpXG4gICAgcHJpdmF0ZSBncm91cElucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgcHJpdmF0ZSBzZWFyY2hHcm91cHM6IElkZW50aXR5R3JvdXBNb2RlbFtdID0gW107XG5cbiAgICBzZWxlY3RlZEdyb3VwczogSWRlbnRpdHlHcm91cE1vZGVsW10gPSBbXTtcbiAgICBpbnZhbGlkR3JvdXBzOiBJZGVudGl0eUdyb3VwTW9kZWxbXSA9IFtdO1xuXG4gICAgc2VhcmNoR3JvdXBzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SWRlbnRpdHlHcm91cE1vZGVsW10+KHRoaXMuc2VhcmNoR3JvdXBzKTtcbiAgICBzdWJzY3JpcHRBbmltYXRpb25TdGF0ZTogc3RyaW5nID0gJ2VudGVyJztcbiAgICBpc0ZvY3VzZWQ6IGJvb2xlYW47XG4gICAgdG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgdmFsaWRhdGVHcm91cHNNZXNzYWdlOiBzdHJpbmc7XG4gICAgc2VhcmNoZWRWYWx1ZSA9ICcnO1xuXG4gICAgdmFsaWRhdGlvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICBzZWFyY2hMb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0eXBpbmdVbmlxdWVWYWx1ZU5vdEVtcHR5JDogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpZGVudGl0eUdyb3VwU2VydmljZTogSWRlbnRpdHlHcm91cFNlcnZpY2UpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0U2VhcmNoKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNQcmVzZWxlY3RlZEdyb3Vwc0NoYW5nZWQoY2hhbmdlcykgfHwgdGhpcy5oYXNNb2RlQ2hhbmdlZChjaGFuZ2VzKSB8fCB0aGlzLmlzVmFsaWRhdGlvbkNoYW5nZWQoY2hhbmdlcykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1ByZVNlbGVjdEdyb3VwcygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUHJlU2VsZWN0R3JvdXBzKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGFzUHJlc2VsZWN0ZWRHcm91cHNDbGVhcmVkKGNoYW5nZXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZEdyb3VwcyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZGF0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkR3JvdXBzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0cmVhbSgpO1xuICAgICAgICB0aGlzLnR5cGluZ1VuaXF1ZVZhbHVlTm90RW1wdHkkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKG5hbWU6IHN0cmluZykgPT4gdGhpcy5pZGVudGl0eUdyb3VwU2VydmljZS5zZWFyY2gobmFtZSwgeyByb2xlczogdGhpcy5yb2xlcywgd2l0aGluQXBwbGljYXRpb246IHRoaXMuYXBwTmFtZSB9KSksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKGdyb3VwczogSWRlbnRpdHlHcm91cE1vZGVsW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaEdyb3VwcygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaExvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGdyb3VwKSA9PiAhdGhpcy5pc0dyb3VwQWxyZWFkeVNlbGVjdGVkKGdyb3VwKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHNlYXJjaGVkR3JvdXA6IElkZW50aXR5R3JvdXBNb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoR3JvdXBzLnB1c2goc2VhcmNoZWRHcm91cCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hHcm91cHMkLm5leHQodGhpcy5zZWFyY2hHcm91cHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplU3RyZWFtKCkge1xuICAgICAgICBjb25zdCB0eXBpbmdWYWx1ZUZyb21Db250cm9sJCA9IHRoaXMuc2VhcmNoR3JvdXBzQ29udHJvbC52YWx1ZUNoYW5nZXM7XG5cbiAgICAgICAgY29uc3QgdHlwaW5nVmFsdWVUeXBlU3RpbmckID0gdHlwaW5nVmFsdWVGcm9tQ29udHJvbCQucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaExvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0eXBpbmdWYWx1ZUhhbmRsZUVycm9yTWVzc2FnZSQgPSB0eXBpbmdWYWx1ZVR5cGVTdGluZyQucGlwZShcbiAgICAgICAgICAgIHRhcCgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFR5cGluZ0Vycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0eXBpbmdWYWx1ZURlYm91bmNlZFVuaXF1ZSQgPSB0eXBpbmdWYWx1ZUhhbmRsZUVycm9yTWVzc2FnZSQucGlwZShkZWJvdW5jZVRpbWUoNTAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgICAgICAgdGhpcy50eXBpbmdVbmlxdWVWYWx1ZU5vdEVtcHR5JCA9IHR5cGluZ1ZhbHVlRGVib3VuY2VkVW5pcXVlJC5waXBlKFxuICAgICAgICAgICAgdGFwKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnRyaW0oKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEdyb3Vwc0NvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hHcm91cHNDb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMucmVzZXRTZWFyY2hHcm91cHMoKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzR3JvdXBBbHJlYWR5U2VsZWN0ZWQoZ3JvdXA6IElkZW50aXR5R3JvdXBNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEdyb3VwcyAmJiB0aGlzLnNlbGVjdGVkR3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWRHcm91cHMuZmluZCgoc2VsZWN0ZWRHcm91cDogSWRlbnRpdHlHcm91cE1vZGVsKSA9PiBzZWxlY3RlZEdyb3VwLm5hbWUgPT09IGdyb3VwLm5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gISFyZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2VhcmNoR3JvdXAobmFtZTogc3RyaW5nKTogUHJvbWlzZTxJZGVudGl0eUdyb3VwTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmlkZW50aXR5R3JvdXBTZXJ2aWNlLnNlYXJjaChuYW1lKS50b1Byb21pc2UoKSlbMF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcmVzZWxlY3RlZEdyb3VwcygpOiBJZGVudGl0eUdyb3VwTW9kZWxbXSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlTW9kZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMucHJlU2VsZWN0R3JvdXBzWzBdXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZUR1cGxpY2F0ZWRHcm91cHModGhpcy5wcmVTZWxlY3RHcm91cHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVByZXNlbGVjdEdyb3VwcygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLmludmFsaWRHcm91cHMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHRoaXMuZ2V0UHJlc2VsZWN0ZWRHcm91cHMoKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy5zZWFyY2hHcm91cChncm91cC5uYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ByZXNlbGVjdGVkR3JvdXBJbnZhbGlkKGdyb3VwLCB2YWxpZGF0aW9uUmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWRHcm91cHMucHVzaChncm91cCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludmFsaWRHcm91cHMucHVzaChncm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoZWNrUHJlc2VsZWN0VmFsaWRhdGlvbkVycm9ycygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tQcmVzZWxlY3RWYWxpZGF0aW9uRXJyb3JzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmludmFsaWRHcm91cHMgPSB0aGlzLnJlbW92ZUR1cGxpY2F0ZWRHcm91cHModGhpcy5pbnZhbGlkR3JvdXBzKTtcblxuICAgICAgICBpZiAodGhpcy5pbnZhbGlkR3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVJbnZhbGlkR3JvdXBzTWVzc2FnZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53YXJuaW5nLmVtaXQoe1xuICAgICAgICAgICAgbWVzc2FnZTogJ0lOVkFMSURfUFJFU0VMRUNURURfR1JPVVBTJyxcbiAgICAgICAgICAgIGdyb3VwczogdGhpcy5pbnZhbGlkR3JvdXBzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVJbnZhbGlkR3JvdXBzTWVzc2FnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUdyb3Vwc01lc3NhZ2UgPSAnJztcblxuICAgICAgICB0aGlzLmludmFsaWRHcm91cHMuZm9yRWFjaCgoaW52YWxpZEdyb3VwOiBJZGVudGl0eUdyb3VwTW9kZWwsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuaW52YWxpZEdyb3Vwcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUdyb3Vwc01lc3NhZ2UgKz0gYCR7aW52YWxpZEdyb3VwLm5hbWV9IGA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVHcm91cHNNZXNzYWdlICs9IGAke2ludmFsaWRHcm91cC5uYW1lfSwgYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkUHJlU2VsZWN0R3JvdXBzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBzID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVNb2RlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMgPSBbdGhpcy5wcmVTZWxlY3RHcm91cHNbMF1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwcyA9IHRoaXMucmVtb3ZlRHVwbGljYXRlZEdyb3Vwcyh0aGlzLnByZVNlbGVjdEdyb3Vwcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncm91cENoaXBzQ3RybC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkR3JvdXBzWzBdLm5hbWUpO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZVByZXNlbGVjdEdyb3VwcygpO1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TZWxlY3QoZ3JvdXA6IElkZW50aXR5R3JvdXBNb2RlbCk6IHZvaWQge1xuICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0R3JvdXAuZW1pdChncm91cCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGVNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNHcm91cEFscmVhZHlTZWxlY3RlZChncm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZEdyb3VwcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMgPSBbZ3JvdXBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdyb3VwSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hHcm91cHNDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBDaGlwc0N0cmxWYWx1ZSh0aGlzLnNlbGVjdGVkR3JvdXBzWzBdLm5hbWUpO1xuXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRHcm91cHMuZW1pdCh0aGlzLnNlbGVjdGVkR3JvdXBzKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWFyY2hHcm91cHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVtb3ZlKGdyb3VwVG9SZW1vdmU6IElkZW50aXR5R3JvdXBNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUdyb3VwLmVtaXQoZ3JvdXBUb1JlbW92ZSk7XG4gICAgICAgIHRoaXMucmVtb3ZlR3JvdXBGcm9tU2VsZWN0ZWQoZ3JvdXBUb1JlbW92ZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlZEdyb3Vwcy5lbWl0KHRoaXMuc2VsZWN0ZWRHcm91cHMpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBDaGlwc0N0cmxWYWx1ZSgnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwQ2hpcHNDdHJsVmFsdWUodGhpcy5zZWxlY3RlZEdyb3Vwc1swXS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlYXJjaEdyb3Vwc0NvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hHcm91cHNDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlR3JvdXBGcm9tVmFsaWRhdGlvbihncm91cFRvUmVtb3ZlKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tQcmVzZWxlY3RWYWxpZGF0aW9uRXJyb3JzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzUHJlc2VsZWN0ZWRHcm91cEludmFsaWQocHJlc2VsZWN0ZWRHcm91cDogSWRlbnRpdHlHcm91cE1vZGVsLCB2YWxpZGF0ZWRHcm91cDogSWRlbnRpdHlHcm91cE1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh2YWxpZGF0ZWRHcm91cD8ubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJlc2VsZWN0ZWRHcm91cC5uYW1lICE9PSB2YWxpZGF0ZWRHcm91cC5uYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVEdXBsaWNhdGVkR3JvdXBzKGdyb3VwczogSWRlbnRpdHlHcm91cE1vZGVsW10pOiBJZGVudGl0eUdyb3VwTW9kZWxbXSB7XG4gICAgICAgIHJldHVybiBncm91cHMuZmlsdGVyKFxuICAgICAgICAgICAgKGdyb3VwLCBpbmRleCwgc2VsZikgPT4gaW5kZXggPT09IHNlbGYuZmluZEluZGV4KChhdXhHcm91cCkgPT4gZ3JvdXAuaWQgPT09IGF1eEdyb3VwLmlkICYmIGdyb3VwLm5hbWUgPT09IGF1eEdyb3VwLm5hbWUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBncm91cENoaXBzQ3RybFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5ncm91cENoaXBzQ3RybC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuZ3JvdXBDaGlwc0N0cmwubWFya0FzRGlydHkoKTtcbiAgICAgICAgdGhpcy5ncm91cENoaXBzQ3RybC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVHcm91cEZyb21TZWxlY3RlZCh7IGlkLCBuYW1lIH06IElkZW50aXR5R3JvdXBNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleFRvUmVtb3ZlID0gdGhpcy5zZWxlY3RlZEdyb3Vwcy5maW5kSW5kZXgoKGdyb3VwKSA9PiBncm91cC5pZCA9PT0gaWQgJiYgZ3JvdXAubmFtZSA9PT0gbmFtZSk7XG5cbiAgICAgICAgaWYgKGluZGV4VG9SZW1vdmUgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBzLnNwbGljZShpbmRleFRvUmVtb3ZlLCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlR3JvdXBGcm9tVmFsaWRhdGlvbih7IGlkLCBuYW1lIH06IElkZW50aXR5R3JvdXBNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleFRvUmVtb3ZlID0gdGhpcy5pbnZhbGlkR3JvdXBzLmZpbmRJbmRleCgoZ3JvdXApID0+IGdyb3VwLmlkID09PSBpZCAmJiBncm91cC5uYW1lID09PSBuYW1lKTtcblxuICAgICAgICBpZiAoaW5kZXhUb1JlbW92ZSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZEdyb3Vwcy5zcGxpY2UoaW5kZXhUb1JlbW92ZSwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0U2VhcmNoR3JvdXBzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaEdyb3VwcyA9IFtdO1xuICAgICAgICB0aGlzLnNlYXJjaEdyb3VwcyQubmV4dCh0aGlzLnNlYXJjaEdyb3Vwcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NpbmdsZVNlbGVjdGlvblJlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZU1vZGUoKSAmJiB0aGlzLnNlbGVjdGVkR3JvdXBzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnNlbGVjdGVkR3JvdXBzWzBdLnJlYWRvbmx5ID09PSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTaW5nbGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnc2luZ2xlJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTXVsdGlwbGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnbXVsdGlwbGUnO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzUHJlU2VsZWN0R3JvdXBzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVTZWxlY3RHcm91cHMgJiYgdGhpcy5wcmVTZWxlY3RHcm91cHMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc01vZGVDaGFuZ2VkKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNoYW5nZXM/Lm1vZGUgJiYgY2hhbmdlcy5tb2RlLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5tb2RlLnByZXZpb3VzVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkYXRpb25DaGFuZ2VkKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNoYW5nZXM/LnZhbGlkYXRlICYmIGNoYW5nZXMudmFsaWRhdGUuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLnZhbGlkYXRlLnByZXZpb3VzVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNQcmVzZWxlY3RlZEdyb3Vwc0NoYW5nZWQoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY2hhbmdlcz8ucHJlU2VsZWN0R3JvdXBzICYmIGNoYW5nZXMucHJlU2VsZWN0R3JvdXBzLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5wcmVTZWxlY3RHcm91cHMucHJldmlvdXNWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1ByZXNlbGVjdGVkR3JvdXBzQ2xlYXJlZChjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjaGFuZ2VzPy5wcmVTZWxlY3RHcm91cHM/LmN1cnJlbnRWYWx1ZS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUeXBpbmdFcnJvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hHcm91cHNDb250cm9sLnNldEVycm9ycyh7XG4gICAgICAgICAgICBzZWFyY2hUeXBpbmdFcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgIC4uLnRoaXMuc2VhcmNoR3JvdXBzQ29udHJvbC5lcnJvcnNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFzUHJlc2VsZWN0RXJyb3IoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmludmFsaWRHcm91cHMgJiYgdGhpcy5pbnZhbGlkR3JvdXBzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaXNSZWFkb25seSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZE9ubHkgfHwgdGhpcy5pc1NpbmdsZVNlbGVjdGlvblJlYWRvbmx5KCk7XG4gICAgfVxuXG4gICAgZ2V0RGlzcGxheU5hbWUoZ3JvdXA6IElkZW50aXR5R3JvdXBNb2RlbCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBncm91cD8ubmFtZSB8fCAnJztcbiAgICB9XG5cbiAgICBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zZWFyY2hHcm91cHNDb250cm9sLmVycm9ycztcbiAgICB9XG5cbiAgICBpc1ZhbGlkYXRpb25Mb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkYXRpb25FbmFibGVkKCkgJiYgdGhpcy52YWxpZGF0aW9uTG9hZGluZztcbiAgICB9XG5cbiAgICBtYXJrQXNUb3VjaGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRvdWNoZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlzVG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG91Y2hlZDtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEdyb3VwcyAmJiAhIXRoaXMuc2VsZWN0ZWRHcm91cHMubGVuZ3RoO1xuICAgIH1cblxuICAgIGlzRGlydHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVG91Y2hlZCgpICYmICF0aGlzLmlzU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBzZXRGb2N1cyhpc0ZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSBpc0ZvY3VzZWQ7XG4gICAgfVxuXG4gICAgaXNWYWxpZGF0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUgPT09IHRydWU7XG4gICAgfVxuXG4gICAgZ2V0VmFsaWRhdGlvblBhdHRlcm4oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoR3JvdXBzQ29udHJvbC5lcnJvcnMucGF0dGVybi5yZXF1aXJlZFBhdHRlcm47XG4gICAgfVxuXG4gICAgZ2V0VmFsaWRhdGlvbk1heExlbmd0aCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hHcm91cHNDb250cm9sLmVycm9ycy5tYXhsZW5ndGgucmVxdWlyZWRMZW5ndGg7XG4gICAgfVxuXG4gICAgZ2V0VmFsaWRhdGlvbk1pbkxlbmd0aCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hHcm91cHNDb250cm9sLmVycm9ycy5taW5sZW5ndGgucmVxdWlyZWRMZW5ndGg7XG4gICAgfVxuXG4gICAgZ2V0R3JvdXBOYW1lSW5pdGlhbHMoZ3JvdXA6IElkZW50aXR5R3JvdXBNb2RlbCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cE5hbWUgPSBncm91cC5uYW1lO1xuICAgICAgICAgICAgcmVzdWx0ID0gKGdyb3VwTmFtZSA/IGdyb3VwTmFtZVswXSA6ICcnKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuIiwiPGZvcm0+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiYWRmLWNsb3VkLWdyb3VwXCIgW2NsYXNzLmFkZi1pbnZhbGlkXT1cImhhc0Vycm9yKCkgJiYgaXNEaXJ0eSgpXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICA8c3Bhbj57e2xhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1hc3Rlcmlza1wiIFtzdHlsZS52aXNpYmlsaXR5XT1cInJlcXVpcmVkID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIj4qPC9zcGFuPlxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1jaGlwLWdyaWQgI2dyb3VwQ2hpcExpc3QgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLWNsb3VkLWdyb3VwLWNoaXAtbGlzdFwiPlxuICAgICAgICAgICAgPG1hdC1jaGlwLXJvd1xuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBncm91cCBvZiBzZWxlY3RlZEdyb3Vwc1wiXG4gICAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCIhKGdyb3VwLnJlYWRvbmx5KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZ3JvdXAtY2hpcC0nICsgZ3JvdXAubmFtZVwiXG4gICAgICAgICAgICAgICAgKHJlbW92ZWQpPVwib25SZW1vdmUoZ3JvdXApXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSgpIHx8IGlzVmFsaWRhdGlvbkxvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAoZ3JvdXAucmVhZG9ubHkgPyAnQURGX0NMT1VEX0dST1VQUy5NQU5EQVRPUlknIDogJycpIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICAgICAge3tncm91cC5uYW1lfX1cbiAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhKGdyb3VwLnJlYWRvbmx5IHx8IHJlYWRPbmx5KVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdENoaXBSZW1vdmUgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZ3JvdXAtY2hpcC1yZW1vdmUtaWNvbi0nICsgZ3JvdXAubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtY2hpcC1yb3c+XG4gICAgICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkoKVwiIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlYXJjaEdyb3Vwc0NvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJncm91cENoaXBMaXN0XCJcbiAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwidGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInNldEZvY3VzKHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJzZXRGb2N1cyhmYWxzZSk7IG1hcmtBc1RvdWNoZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZ3JvdXAtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1jbG91ZC1ncm91cC1zZWFyY2gtaW5wdXRcIiAjZ3JvdXBJbnB1dD5cbiAgICAgICAgPC9tYXQtY2hpcC1ncmlkPlxuXG4gICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICBhdXRvQWN0aXZlRmlyc3RPcHRpb25cbiAgICAgICAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNsb3VkLWdyb3VwLWxpc3RcIlxuICAgICAgICAgICAgKG9wdGlvblNlbGVjdGVkKT1cIm9uU2VsZWN0KCRldmVudC5vcHRpb24udmFsdWUpXCJcbiAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJnZXREaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtY2xvdWQtZ3JvdXAtYXV0b2NvbXBsZXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHNlYXJjaEdyb3VwcyQgfCBhc3luYyk/Lmxlbmd0aCBlbHNlIG5vUmVzdWx0c1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBncm91cCBvZiBzZWFyY2hHcm91cHMkIHwgYXN5bmM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWNsb3VkLWdyb3VwLWNoaXAtJyArIGdyb3VwLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNsb3VkLWdyb3VwLW9wdGlvbi1hY3RpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2xvdWQtZ3JvdXAtcm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWRmLWdyb3VwLXt7aX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1jbG91ZC1ncm91cC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhZGYtZ3JvdXAtc2hvcnQtbmFtZVwiIG1hdC1mYWI+e3tnZXRHcm91cE5hbWVJbml0aWFscyhncm91cCl9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tncm91cC5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1Jlc3VsdHM+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJzZWFyY2hHcm91cHNDb250cm9sLmhhc0Vycm9yKCdzZWFyY2hUeXBpbmdFcnJvcicpICYmICFzZWFyY2hMb2FkaW5nXCIgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jbG91ZC1ncm91cC1vcHRpb24tbm90LWFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLWNsb3VkLWdyb3VwLW5vLXJlc3VsdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7ICdBREZfQ0xPVURfR1JPVVBTLkVSUk9SLk5PVF9GT1VORCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgKm5nSWY9XCJ2YWxpZGF0aW9uTG9hZGluZ1wiIG1vZGU9XCJpbmRldGVybWluYXRlXCIgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJhZGYtZXJyb3ItY29udGFpbmVyIGFkZi1lcnJvci1tZXNzYWdlcy1jb250YWluZXJcIj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImhhc1ByZXNlbGVjdEVycm9yKCkgJiYgICFpc1ZhbGlkYXRpb25Mb2FkaW5nKClcIiBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiIGNsYXNzPVwiYWRmLWVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9HUk9VUFMuRVJST1IuTk9UX0ZPVU5EJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInNlYXJjaEdyb3Vwc0NvbnRyb2wuaGFzRXJyb3IoJ3BhdHRlcm4nKVwiIFtAdHJhbnNpdGlvbk1lc3NhZ2VzXT1cInN1YnNjcmlwdEFuaW1hdGlvblN0YXRlXCIgY2xhc3M9XCJhZGYtZXJyb3JcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1lcnJvci1pY29uXCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLXRleHRcIj57eyAnQURGX0NMT1VEX1BFT1BMRV9HUk9VUFMuRVJST1IuSU5WQUxJRF9QQVRURVJOJyB8IHRyYW5zbGF0ZTogeyBwYXR0ZXJuOiBnZXRWYWxpZGF0aW9uUGF0dGVybigpIH0gfX08L2Rpdj5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwic2VhcmNoR3JvdXBzQ29udHJvbC5oYXNFcnJvcignbWF4bGVuZ3RoJylcIiBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiIGNsYXNzPVwiYWRmLWVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9QRU9QTEVfR1JPVVBTLkVSUk9SLklOVkFMSURfTUFYX0xFTkdUSCcgfCB0cmFuc2xhdGU6IHsgcmVxdWlyZWRMZW5ndGg6IGdldFZhbGlkYXRpb25NYXhMZW5ndGgoKSB9IH19PC9kaXY+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwic2VhcmNoR3JvdXBzQ29udHJvbC5oYXNFcnJvcignbWlubGVuZ3RoJylcIiBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiIGNsYXNzPVwiYWRmLWVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9QRU9QTEVfR1JPVVBTLkVSUk9SLklOVkFMSURfTUlOX0xFTkdUSCcgfCB0cmFuc2xhdGU6IHsgcmVxdWlyZWRMZW5ndGg6IGdldFZhbGlkYXRpb25NaW5MZW5ndGgoKSB9IH19PC9kaXY+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiKHNlYXJjaEdyb3Vwc0NvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykgfHwgZ3JvdXBDaGlwc0N0cmwuaGFzRXJyb3IoJ3JlcXVpcmVkJykpICYmIGlzRGlydHkoKVwiXG4gICAgICAgICAgICBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiIGNsYXNzPVwiYWRmLWVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9QRU9QTEVfR1JPVVBTLkVSUk9SLlJFUVVJUkVEJyB8IHRyYW5zbGF0ZSB9fSA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJzZWFyY2hHcm91cHNDb250cm9sLmhhc0Vycm9yKCdzZWFyY2hUeXBpbmdFcnJvcicpICYmICF0aGlzLmlzRm9jdXNlZFwiXG4gICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJpbnZhbGlkLWdyb3Vwcy10eXBpbmctZXJyb3JcIiBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJzdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiIGNsYXNzPVwiYWRmLWVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3sgJ0FERl9DTE9VRF9HUk9VUFMuRVJST1IuTk9UX0ZPVU5EJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
@@ -0,0 +1,33 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { NgModule } from '@angular/core';
18
+ import { GroupCloudComponent } from './components/group-cloud.component';
19
+ import * as i0 from "@angular/core";
20
+ /** @deprecated use GroupCloudComponent instead */
21
+ export class GroupCloudModule {
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupCloudModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
23
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: GroupCloudModule, imports: [GroupCloudComponent], exports: [GroupCloudComponent] }); }
24
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupCloudModule, imports: [GroupCloudComponent] }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupCloudModule, decorators: [{
27
+ type: NgModule,
28
+ args: [{
29
+ imports: [GroupCloudComponent],
30
+ exports: [GroupCloudComponent]
31
+ }]
32
+ }] });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY2xvdWQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL3Byb2Nlc3Mtc2VydmljZXMtY2xvdWQvc3JjL2xpYi9ncm91cC9ncm91cC1jbG91ZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFFekUsa0RBQWtEO0FBS2xELE1BQU0sT0FBTyxnQkFBZ0I7K0dBQWhCLGdCQUFnQjtnSEFBaEIsZ0JBQWdCLFlBSGYsbUJBQW1CLGFBQ25CLG1CQUFtQjtnSEFFcEIsZ0JBQWdCLFlBSGYsbUJBQW1COzs0RkFHcEIsZ0JBQWdCO2tCQUo1QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO29CQUM5QixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcm91cENsb3VkQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2dyb3VwLWNsb3VkLmNvbXBvbmVudCc7XG5cbi8qKiBAZGVwcmVjYXRlZCB1c2UgR3JvdXBDbG91ZENvbXBvbmVudCBpbnN0ZWFkICovXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtHcm91cENsb3VkQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbR3JvdXBDbG91ZENvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgR3JvdXBDbG91ZE1vZHVsZSB7fVxuIl19
@@ -0,0 +1,18 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktZ3JvdXAubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy1jbG91ZC9zcmMvbGliL2dyb3VwL21vZGVscy9pZGVudGl0eS1ncm91cC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUciLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlHcm91cE1vZGVsIHtcbiAgICBpZD86IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHk/OiBib29sZWFuO1xufVxuIl19