@alfresco/adf-process-services 8.1.0-16320806191 → 9.1.0-16312921641

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 (125) hide show
  1. package/fesm2022/adf-process-services.mjs +297 -301
  2. package/fesm2022/adf-process-services.mjs.map +1 -1
  3. package/package.json +4 -6
  4. package/esm2022/adf-process-services.mjs +0 -5
  5. package/esm2022/lib/app-list/apps-list.component.mjs +0 -195
  6. package/esm2022/lib/app-list/icon.model.mjs +0 -166
  7. package/esm2022/lib/app-list/index.mjs +0 -18
  8. package/esm2022/lib/app-list/public-api.mjs +0 -23
  9. package/esm2022/lib/app-list/select-apps-dialog/select-apps-dialog.component.mjs +0 -53
  10. package/esm2022/lib/attachment/create-process-attachment/create-process-attachment.component.mjs +0 -73
  11. package/esm2022/lib/attachment/create-task-attachment/create-task-attachment.component.mjs +0 -73
  12. package/esm2022/lib/attachment/index.mjs +0 -18
  13. package/esm2022/lib/attachment/process-attachment-list/process-attachment-list.component.mjs +0 -197
  14. package/esm2022/lib/attachment/public-api.mjs +0 -31
  15. package/esm2022/lib/attachment/task-attachment-list/task-attachment-list.component.mjs +0 -196
  16. package/esm2022/lib/compat/types.mjs +0 -18
  17. package/esm2022/lib/form/events/validate-dynamic-table-row.event.mjs +0 -26
  18. package/esm2022/lib/form/form-custom-outcomes.component.mjs +0 -31
  19. package/esm2022/lib/form/form-list/form-list.component.mjs +0 -50
  20. package/esm2022/lib/form/form.component.mjs +0 -346
  21. package/esm2022/lib/form/index.mjs +0 -18
  22. package/esm2022/lib/form/model/form-definition.model.mjs +0 -92
  23. package/esm2022/lib/form/process-form-rendering.service.mjs +0 -55
  24. package/esm2022/lib/form/public-api.mjs +0 -32
  25. package/esm2022/lib/form/services/activiti-alfresco.service.mjs +0 -113
  26. package/esm2022/lib/form/services/ecm-model.service.mjs +0 -156
  27. package/esm2022/lib/form/services/editor.service.mjs +0 -87
  28. package/esm2022/lib/form/services/external-alfresco-api.service.mjs +0 -57
  29. package/esm2022/lib/form/services/index.mjs +0 -26
  30. package/esm2022/lib/form/services/model.service.mjs +0 -130
  31. package/esm2022/lib/form/services/process-content.service.mjs +0 -223
  32. package/esm2022/lib/form/services/process-definition.service.mjs +0 -93
  33. package/esm2022/lib/form/services/task-form.service.mjs +0 -127
  34. package/esm2022/lib/form/services/task.service.mjs +0 -77
  35. package/esm2022/lib/form/start-form/start-form.component.mjs +0 -141
  36. package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog-component.interface.mjs +0 -18
  37. package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog.component.mjs +0 -115
  38. package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog.service.mjs +0 -100
  39. package/esm2022/lib/form/widgets/content-widget/attach-file-widget.component.mjs +0 -254
  40. package/esm2022/lib/form/widgets/content-widget/attach-folder-widget.component.mjs +0 -93
  41. package/esm2022/lib/form/widgets/content-widget/index.mjs +0 -18
  42. package/esm2022/lib/form/widgets/content-widget/public-api.mjs +0 -22
  43. package/esm2022/lib/form/widgets/document/content.widget.mjs +0 -125
  44. package/esm2022/lib/form/widgets/document/document.widget.mjs +0 -61
  45. package/esm2022/lib/form/widgets/dropdown/dropdown.widget.mjs +0 -182
  46. package/esm2022/lib/form/widgets/dynamic-table/dynamic-table.widget.mjs +0 -192
  47. package/esm2022/lib/form/widgets/dynamic-table/editors/amount/amount.editor.mjs +0 -47
  48. package/esm2022/lib/form/widgets/dynamic-table/editors/boolean/boolean.editor.mjs +0 -42
  49. package/esm2022/lib/form/widgets/dynamic-table/editors/date/date.editor.mjs +0 -84
  50. package/esm2022/lib/form/widgets/dynamic-table/editors/datetime/datetime.editor.mjs +0 -84
  51. package/esm2022/lib/form/widgets/dynamic-table/editors/dropdown/dropdown.editor.mjs +0 -95
  52. package/esm2022/lib/form/widgets/dynamic-table/editors/models/cell-validator.model.mjs +0 -18
  53. package/esm2022/lib/form/widgets/dynamic-table/editors/models/date-cell-validator-model.mjs +0 -47
  54. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-row-validation-summary.model.mjs +0 -24
  55. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-column-option.model.mjs +0 -18
  56. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-column.model.mjs +0 -18
  57. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-row.model.mjs +0 -18
  58. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table.widget.model.mjs +0 -159
  59. package/esm2022/lib/form/widgets/dynamic-table/editors/models/number-cell-validator.model.mjs +0 -45
  60. package/esm2022/lib/form/widgets/dynamic-table/editors/models/required-cell-validator.model.mjs +0 -40
  61. package/esm2022/lib/form/widgets/dynamic-table/editors/row-editor/row.editor.mjs +0 -89
  62. package/esm2022/lib/form/widgets/dynamic-table/editors/text/text.editor.mjs +0 -47
  63. package/esm2022/lib/form/widgets/dynamic-table/index.mjs +0 -18
  64. package/esm2022/lib/form/widgets/dynamic-table/public-api.mjs +0 -44
  65. package/esm2022/lib/form/widgets/file-viewer/file-viewer.widget.mjs +0 -46
  66. package/esm2022/lib/form/widgets/functional-group/functional-group.widget.mjs +0 -167
  67. package/esm2022/lib/form/widgets/index.mjs +0 -18
  68. package/esm2022/lib/form/widgets/people/people.widget.mjs +0 -169
  69. package/esm2022/lib/form/widgets/public-api.mjs +0 -54
  70. package/esm2022/lib/form/widgets/radio-buttons/radio-buttons.widget.mjs +0 -97
  71. package/esm2022/lib/form/widgets/typeahead/typeahead.widget.mjs +0 -152
  72. package/esm2022/lib/form/widgets/upload/upload.widget.mjs +0 -128
  73. package/esm2022/lib/people/components/people/people.component.mjs +0 -124
  74. package/esm2022/lib/people/components/people-list/people-list.component.mjs +0 -74
  75. package/esm2022/lib/people/components/people-search/people-search.component.mjs +0 -83
  76. package/esm2022/lib/people/components/people-search-field/people-search-field.component.mjs +0 -90
  77. package/esm2022/lib/people/components/people-selector/people-selector.component.mjs +0 -76
  78. package/esm2022/lib/people/helpers/get-display-user.mjs +0 -22
  79. package/esm2022/lib/people/index.mjs +0 -18
  80. package/esm2022/lib/people/interfaces/perform-search-callback.interface.mjs +0 -18
  81. package/esm2022/lib/people/public-api.mjs +0 -35
  82. package/esm2022/lib/process-comments/index.mjs +0 -21
  83. package/esm2022/lib/process-comments/process-comments.component.mjs +0 -45
  84. package/esm2022/lib/process-comments/services/comment-process.service.mjs +0 -77
  85. package/esm2022/lib/process-list/components/process-audit/process-audit.directive.mjs +0 -105
  86. package/esm2022/lib/process-list/components/process-filters/process-filters.component.mjs +0 -211
  87. package/esm2022/lib/process-list/components/process-instance-details/process-instance-details.component.mjs +0 -142
  88. package/esm2022/lib/process-list/components/process-instance-header/process-instance-header.component.mjs +0 -123
  89. package/esm2022/lib/process-list/components/process-instance-tasks/process-instance-tasks.component.mjs +0 -163
  90. package/esm2022/lib/process-list/components/process-list/process-list.component.mjs +0 -327
  91. package/esm2022/lib/process-list/components/start-process/start-process.component.mjs +0 -423
  92. package/esm2022/lib/process-list/index.mjs +0 -18
  93. package/esm2022/lib/process-list/public-api.mjs +0 -44
  94. package/esm2022/lib/process-list/services/process-filter.service.mjs +0 -182
  95. package/esm2022/lib/process-list/services/process.service.mjs +0 -259
  96. package/esm2022/lib/process.module.mjs +0 -132
  97. package/esm2022/lib/services/apps-process.service.mjs +0 -58
  98. package/esm2022/lib/services/people-process.service.mjs +0 -124
  99. package/esm2022/lib/services/task-comments.service.mjs +0 -65
  100. package/esm2022/lib/task-comments/index.mjs +0 -21
  101. package/esm2022/lib/task-comments/task-comments.component.mjs +0 -44
  102. package/esm2022/lib/task-list/components/attach-form/attach-form.component.mjs +0 -127
  103. package/esm2022/lib/task-list/components/checklist/checklist.component.mjs +0 -140
  104. package/esm2022/lib/task-list/components/start-task/start-task.component.mjs +0 -221
  105. package/esm2022/lib/task-list/components/task-details/task-details.component.mjs +0 -360
  106. package/esm2022/lib/task-list/components/task-filters/task-filters.component.mjs +0 -261
  107. package/esm2022/lib/task-list/components/task-form/claim-task.directive.mjs +0 -77
  108. package/esm2022/lib/task-list/components/task-form/task-form.component.mjs +0 -313
  109. package/esm2022/lib/task-list/components/task-form/unclaim-task.directive.mjs +0 -77
  110. package/esm2022/lib/task-list/components/task-header/task-header.component.mjs +0 -361
  111. package/esm2022/lib/task-list/components/task-list/task-list.component.mjs +0 -359
  112. package/esm2022/lib/task-list/components/task-standalone/task-standalone.component.mjs +0 -82
  113. package/esm2022/lib/task-list/index.mjs +0 -18
  114. package/esm2022/lib/task-list/models/form.model.mjs +0 -26
  115. package/esm2022/lib/task-list/models/task-details.event.mjs +0 -32
  116. package/esm2022/lib/task-list/models/task-preset.model.mjs +0 -41
  117. package/esm2022/lib/task-list/models/user-event.model.mjs +0 -18
  118. package/esm2022/lib/task-list/models/user-group.model.mjs +0 -18
  119. package/esm2022/lib/task-list/public-api.mjs +0 -60
  120. package/esm2022/lib/task-list/services/process-upload.service.mjs +0 -42
  121. package/esm2022/lib/task-list/services/task-filter.service.mjs +0 -249
  122. package/esm2022/lib/task-list/services/task-upload.service.mjs +0 -42
  123. package/esm2022/lib/task-list/services/tasklist.service.mjs +0 -251
  124. package/esm2022/lib/task-list/validators/task-description.validator.mjs +0 -26
  125. package/esm2022/public-api.mjs +0 -30
@@ -1,423 +0,0 @@
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, EventEmitter, inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
18
- import { AppConfigService, AppConfigValues, EmptyContentComponent, LocalizedDatePipe } from '@alfresco/adf-core';
19
- import { AppsProcessService } from '../../../services/apps-process.service';
20
- import { ProcessService } from '../../services/process.service';
21
- import { FormsModule, ReactiveFormsModule, UntypedFormControl, Validators } from '@angular/forms';
22
- import { forkJoin } from 'rxjs';
23
- import { map } from 'rxjs/operators';
24
- import { MatAutocompleteModule, MatAutocompleteTrigger } from '@angular/material/autocomplete';
25
- import { MatSelectModule } from '@angular/material/select';
26
- import { StartFormComponent } from '../../../form';
27
- import { ActivitiContentService } from '../../../form/services/activiti-alfresco.service';
28
- import { getTime } from 'date-fns';
29
- import { CommonModule } from '@angular/common';
30
- import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
31
- import { TranslatePipe } from '@ngx-translate/core';
32
- import { MatFormFieldModule } from '@angular/material/form-field';
33
- import { MatButtonModule } from '@angular/material/button';
34
- import { MatIconModule } from '@angular/material/icon';
35
- import { MatInputModule } from '@angular/material/input';
36
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
37
- import * as i0 from "@angular/core";
38
- import * as i1 from "../../services/process.service";
39
- import * as i2 from "../../../form/services/activiti-alfresco.service";
40
- import * as i3 from "../../../services/apps-process.service";
41
- import * as i4 from "@alfresco/adf-core";
42
- import * as i5 from "@angular/common";
43
- import * as i6 from "@angular/material/progress-spinner";
44
- import * as i7 from "@angular/material/form-field";
45
- import * as i8 from "@angular/material/select";
46
- import * as i9 from "@angular/material/core";
47
- import * as i10 from "@angular/forms";
48
- import * as i11 from "@angular/material/autocomplete";
49
- import * as i12 from "@angular/material/button";
50
- import * as i13 from "@angular/material/icon";
51
- import * as i14 from "@angular/material/input";
52
- const MAX_LENGTH = 255;
53
- const DATE_TIME_IDENTIFIER_REG_EXP = new RegExp('%{datetime}', 'i');
54
- const PROCESS_DEFINITION_IDENTIFIER_REG_EXP = new RegExp('%{processdefinition}', 'i');
55
- export class StartProcessInstanceComponent {
56
- constructor(processService, contentService, appsProcessService, appConfig, datePipe) {
57
- this.processService = processService;
58
- this.contentService = contentService;
59
- this.appsProcessService = appsProcessService;
60
- this.appConfig = appConfig;
61
- this.datePipe = datePipe;
62
- /** Name to assign to the current process. */
63
- this.name = '';
64
- /** Hide or show the process selection dropdown. */
65
- this.showSelectProcessDropdown = true;
66
- /** Hide or show application selection dropdown. */
67
- this.showSelectApplicationDropdown = false;
68
- /** Parameter to enable selection of process when filtering. */
69
- this.processFilterSelector = true;
70
- /** Emitted when the process starts. */
71
- this.start = new EventEmitter();
72
- /** Emitted when the process is canceled. */
73
- this.cancel = new EventEmitter();
74
- /** Emitted when an error occurs. */
75
- this.error = new EventEmitter();
76
- /** Emitted when process definition selection changes. */
77
- this.processDefinitionSelection = new EventEmitter();
78
- /** Emitted when application selection changes. */
79
- this.applicationSelection = new EventEmitter();
80
- this.processDefinitions = [];
81
- this.maxProcessNameLength = MAX_LENGTH;
82
- this.applications = [];
83
- this.isProcessDefinitionsLoading = true;
84
- this.isAppsLoading = true;
85
- this.destroyRef = inject(DestroyRef);
86
- }
87
- ngOnInit() {
88
- this.processNameInput = new UntypedFormControl('', [
89
- Validators.required,
90
- Validators.maxLength(this.maxProcessNameLength),
91
- Validators.pattern('^[^\\s]+(\\s+[^\\s]+)*$')
92
- ]);
93
- this.processDefinitionInput = new UntypedFormControl();
94
- this.load(this.appId);
95
- this.filteredProcessesDefinitions$ = this.processDefinitionInput.valueChanges.pipe(map((value) => this._filter(value)), takeUntilDestroyed(this.destroyRef));
96
- this.contentService.getAlfrescoRepositories().subscribe((repoList) => {
97
- if (repoList?.[0]) {
98
- const alfrescoRepository = repoList[0];
99
- this.alfrescoRepositoryName = `alfresco-${alfrescoRepository.id}-${alfrescoRepository.name}`;
100
- }
101
- });
102
- }
103
- ngOnChanges(changes) {
104
- if (changes['values']?.currentValue) {
105
- this.moveNodeFromCStoPS();
106
- }
107
- const appId = changes['appId'];
108
- if (appId?.currentValue) {
109
- this.load(appId.currentValue);
110
- }
111
- const processDefinitionName = changes['processDefinitionName'];
112
- if (processDefinitionName?.currentValue) {
113
- this.filterProcessDefinitionByName(processDefinitionName.currentValue);
114
- }
115
- }
116
- getSelectedProcess(selectedProcess) {
117
- return this.processDefinitions.find((process) => process.name.toLowerCase() === selectedProcess);
118
- }
119
- load(appId) {
120
- if (this.showSelectApplicationDropdown) {
121
- this.loadApps();
122
- }
123
- else {
124
- this.loadProcessDefinitions(appId);
125
- }
126
- }
127
- loadProcessDefinitions(appId) {
128
- this.isProcessDefinitionsLoading = true;
129
- this.resetSelectedProcessDefinition();
130
- this.processService
131
- .getProcessDefinitions(appId)
132
- .pipe(map((processDefinitionRepresentations) => {
133
- let currentProcessDef;
134
- if (processDefinitionRepresentations.length === 1) {
135
- currentProcessDef = processDefinitionRepresentations[0];
136
- }
137
- if (this.processDefinitionName) {
138
- const filteredProcessDefinition = processDefinitionRepresentations.find((processDefinition) => processDefinition.name === this.processDefinitionName);
139
- if (filteredProcessDefinition) {
140
- currentProcessDef = filteredProcessDefinition;
141
- }
142
- }
143
- return { currentProcessDef, processDefinitionRepresentations };
144
- }))
145
- .subscribe((filteredProcessDefinitions) => {
146
- this.processDefinitions = filteredProcessDefinitions.processDefinitionRepresentations;
147
- this.processDefinitionSelectionChanged(filteredProcessDefinitions.currentProcessDef);
148
- this.processDefinitionInput.setValue(this.selectedProcessDef ? this.selectedProcessDef.name : '');
149
- this.isProcessDefinitionsLoading = false;
150
- }, (error) => {
151
- this.isProcessDefinitionsLoading = false;
152
- this.error.emit(error);
153
- });
154
- }
155
- filterProcessDefinitionByName(definitionName) {
156
- if (definitionName) {
157
- const filteredProcessDef = this.processDefinitions.find((processDefinition) => processDefinition.name === definitionName);
158
- if (filteredProcessDef) {
159
- this.processDefinitionSelectionChanged(filteredProcessDef);
160
- this.processDefinitionInput.setValue(this.selectedProcessDef ? this.selectedProcessDef.name : '');
161
- }
162
- }
163
- }
164
- loadApps() {
165
- this.isAppsLoading = true;
166
- this.appsProcessService
167
- .getDeployedApplications()
168
- .pipe(map((response) => {
169
- const applications = response.filter((app) => app.id);
170
- let currentApplication;
171
- if (applications && applications.length === 1) {
172
- currentApplication = applications[0];
173
- }
174
- const filteredApp = applications.find((app) => app.id === +this.appId);
175
- if (filteredApp) {
176
- currentApplication = filteredApp;
177
- }
178
- return { currentApplication, applications };
179
- }))
180
- .subscribe((filteredApps) => {
181
- this.applications = filteredApps.applications;
182
- this.selectedApplication = filteredApps.currentApplication;
183
- this.applicationSelection.emit(this.selectedApplication);
184
- this.toggleProcessNameAndDefinitionsDropdown();
185
- this.isAppsLoading = false;
186
- this.loadProcessDefinitionsBasedOnSelectedApp();
187
- }, (err) => {
188
- this.isAppsLoading = false;
189
- this.error.emit(err);
190
- });
191
- }
192
- loadProcessDefinitionsBasedOnSelectedApp() {
193
- if (this.selectedApplication?.id) {
194
- this.loadProcessDefinitions(this.selectedApplication ? this.selectedApplication.id : null);
195
- }
196
- else {
197
- this.isProcessDefinitionsLoading = false;
198
- this.resetProcessDefinitions();
199
- }
200
- }
201
- onAppSelectionChange(selectedApplication) {
202
- this.resetProcessDefinitions();
203
- this.selectedApplication = selectedApplication.value;
204
- this.applicationSelection.emit(this.selectedApplication);
205
- this.toggleProcessNameAndDefinitionsDropdown();
206
- this.loadProcessDefinitionsBasedOnSelectedApp();
207
- }
208
- hasApplications() {
209
- return this.applications?.length > 0;
210
- }
211
- hasProcessDefinitions() {
212
- return this.processDefinitions?.length > 0;
213
- }
214
- isProcessDefinitionSelected() {
215
- return !!this.selectedProcessDef?.id;
216
- }
217
- isDropdownDisabled() {
218
- return this.showSelectApplicationDropdown && !this.isAppSelected();
219
- }
220
- getAlfrescoRepositoryName() {
221
- let alfrescoRepositoryName = this.appConfig.get(AppConfigValues.ALFRESCO_REPOSITORY_NAME);
222
- if (!alfrescoRepositoryName) {
223
- alfrescoRepositoryName = this.alfrescoRepositoryName;
224
- }
225
- return alfrescoRepositoryName + 'Alfresco';
226
- }
227
- moveNodeFromCStoPS() {
228
- const accountIdentifier = this.getAlfrescoRepositoryName();
229
- for (const key in this.values) {
230
- if (Object.prototype.hasOwnProperty.call(this.values, key)) {
231
- const currentValue = Array.isArray(this.values[key]) ? this.values[key] : [this.values[key]];
232
- const contents = currentValue
233
- .filter((value) => !!value?.isFile)
234
- .map((content) => this.contentService.applyAlfrescoNode(content, null, accountIdentifier));
235
- forkJoin(contents).subscribe((res) => {
236
- this.movedNodeToPS = { [key]: [...res] };
237
- });
238
- }
239
- }
240
- }
241
- startProcess(outcome) {
242
- if (this.selectedProcessDef?.id && this.nameController.value) {
243
- const formValues = this.startForm ? this.startForm.form.values : undefined;
244
- this.processService.startProcess(this.selectedProcessDef.id, this.nameController.value, outcome, formValues, this.variables).subscribe((res) => {
245
- this.name = '';
246
- this.start.emit(res);
247
- }, (err) => {
248
- this.error.emit(err);
249
- });
250
- }
251
- }
252
- cancelStartProcess() {
253
- this.cancel.emit();
254
- }
255
- hasStartForm() {
256
- return this.selectedProcessDef?.hasStartForm;
257
- }
258
- isStartFormMissingOrValid() {
259
- if (this.startForm) {
260
- return this.startForm.form?.isValid;
261
- }
262
- else {
263
- return true;
264
- }
265
- }
266
- validateForm() {
267
- return this.selectedProcessDef?.id && this.processNameInput.valid && this.isStartFormMissingOrValid();
268
- }
269
- onOutcomeClick(outcome) {
270
- this.startProcess(outcome);
271
- }
272
- reset() {
273
- this.resetSelectedProcessDefinition();
274
- this.name = '';
275
- if (this.startForm) {
276
- this.startForm.data = {};
277
- }
278
- }
279
- displayFn(process) {
280
- if (process) {
281
- let processName = process;
282
- if (typeof process !== 'string') {
283
- processName = process.name;
284
- }
285
- return processName;
286
- }
287
- return undefined;
288
- }
289
- displayDropdown(event) {
290
- event.stopPropagation();
291
- if (!this.inputAutocomplete.panelOpen) {
292
- this.processDefinitionInput.setValue('');
293
- this.inputAutocomplete.openPanel();
294
- }
295
- else {
296
- this.inputAutocomplete.closePanel();
297
- }
298
- }
299
- get nameController() {
300
- return this.processNameInput;
301
- }
302
- get processDefinitionController() {
303
- return this.processDefinitionInput;
304
- }
305
- processDefinitionSelectionChanged(processDefinition) {
306
- if (processDefinition) {
307
- const processInstanceDetails = { processDefinitionName: processDefinition.name };
308
- const processName = this.formatProcessName(this.name, processInstanceDetails);
309
- this.processNameInput.setValue(processName);
310
- this.processNameInput.markAsDirty();
311
- this.processNameInput.markAsTouched();
312
- this.selectedProcessDef = processDefinition;
313
- this.processDefinitionSelection.emit(this.selectedProcessDef);
314
- }
315
- else {
316
- this.nameController.reset();
317
- }
318
- }
319
- isLoading() {
320
- return this.showSelectApplicationDropdown ? this.isAppsLoading : false;
321
- }
322
- isAppSelected() {
323
- return !!this.selectedApplication?.id;
324
- }
325
- resetSelectedProcessDefinition() {
326
- this.selectedProcessDef = undefined;
327
- if (this.processDefinitionInput) {
328
- this.processDefinitionInput.setValue('');
329
- }
330
- }
331
- resetProcessDefinitions() {
332
- this.processDefinitions = [];
333
- this.resetSelectedProcessDefinition();
334
- }
335
- toggleProcessNameAndDefinitionsDropdown() {
336
- if (!this.isAppSelected()) {
337
- this.processDefinitionController.disable();
338
- this.nameController.disable();
339
- }
340
- else {
341
- this.processDefinitionController.enable();
342
- this.nameController.enable();
343
- }
344
- }
345
- _filter(value) {
346
- if (value !== null && value !== undefined) {
347
- const filterValue = value.toLowerCase();
348
- const filteredProcess = this.processDefinitions.filter((option) => option.name.toLowerCase().includes(filterValue));
349
- if (this.processFilterSelector) {
350
- this.selectedProcessDef = this.getSelectedProcess(filterValue);
351
- }
352
- return filteredProcess;
353
- }
354
- return [];
355
- }
356
- formatProcessName(processNameFormat, processInstance) {
357
- let processName = processNameFormat;
358
- if (processName.match(DATE_TIME_IDENTIFIER_REG_EXP)) {
359
- const presentDateTime = getTime(new Date());
360
- processName = processName.replace(DATE_TIME_IDENTIFIER_REG_EXP, this.datePipe.transform(presentDateTime, 'medium'));
361
- }
362
- if (processName.match(PROCESS_DEFINITION_IDENTIFIER_REG_EXP)) {
363
- const selectedProcessDefinitionName = processInstance ? processInstance.processDefinitionName : '';
364
- processName = processName.replace(PROCESS_DEFINITION_IDENTIFIER_REG_EXP, selectedProcessDefinitionName);
365
- }
366
- return processName;
367
- }
368
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StartProcessInstanceComponent, deps: [{ token: i1.ProcessService }, { token: i2.ActivitiContentService }, { token: i3.AppsProcessService }, { token: i4.AppConfigService }, { token: i4.LocalizedDatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
369
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StartProcessInstanceComponent, isStandalone: true, selector: "adf-start-process", inputs: { appId: "appId", title: "title", processDefinitionName: "processDefinitionName", variables: "variables", values: "values", name: "name", showSelectProcessDropdown: "showSelectProcessDropdown", showSelectApplicationDropdown: "showSelectApplicationDropdown", processFilterSelector: "processFilterSelector" }, outputs: { start: "start", cancel: "cancel", error: "error", processDefinitionSelection: "processDefinitionSelection", applicationSelection: "applicationSelection" }, viewQueries: [{ propertyName: "startForm", first: true, predicate: ["startForm"], descendants: true }, { propertyName: "inputAutocomplete", first: true, predicate: MatAutocompleteTrigger, descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n<ng-container *ngIf=\"isLoading(); then showLoadingTemplate; else showStartProcessTemplate\" />\n <ng-template #showLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n<ng-template #showStartProcessTemplate>\n <ng-container *ngIf=\"hasApplications() || hasProcessDefinitions() ; else showEmptyTemplate\">\n <div class=\"adf-start-process\">\n <div class=\"adf-title\" *ngIf=\"title\">{{ title | translate}}</div>\n <div class=\"content\">\n <div class=\"adf-start-process-definition-container\">\n <mat-form-field *ngIf=\"showSelectApplicationDropdown\" [floatLabel]=\"'always'\" class=\"adf-start-process-app-list\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}</mat-label>\n <mat-select\n placeholder=\"{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}\"\n (selectionChange)=\"onAppSelectionChange($event)\"\n [(ngModel)]=\"selectedApplication\"\n class=\"adf-start-process-definition-select\"\n data-automation-id=\"adf-start-process-apps-drop-down\">\n <mat-option\n *ngFor=\"let application of applications\"\n [value]=\"application\"\n role=\"option\"\n [attr.data-automation-id]=\"'adf-start-process-apps-option-' + application.name\">\n {{ application.name }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"adf-process-input-container\" [floatLabel]=\"'always'\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate}}</mat-label>\n <input\n type=\"text\"\n matInput\n [formControl]=\"processDefinitionInput\"\n [matAutocomplete]=\"auto\"\n id=\"processDefinitionName\">\n <div class=\"adf-process-input-autocomplete\">\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n id=\"processDefinitionOptions\"\n [displayWith]=\"displayFn\">\n <mat-option *ngFor=\"let processDef of filteredProcessesDefinitions$ | async\" [value]=\"processDef.name\"\n (click)=\"processDefinitionSelectionChanged(processDef)\">\n {{ processDef.name }}\n </mat-option>\n </mat-autocomplete>\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showProcessDefLoadingTemplate\">\n <button\n class=\"adf-start-process-button\"\n id=\"adf-select-process-dropdown\"\n *ngIf=\"showSelectProcessDropdown\"\n mat-icon-button\n (click)=\"displayDropdown($event)\"\n [disabled]=\"isDropdownDisabled()\"\n [attr.aria-label]=\"'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate | uppercase\">\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n </ng-container>\n <ng-template #showProcessDefLoadingTemplate>\n <mat-spinner id=\"adf-select-process-spinner\" [diameter]=\"20\" />\n </ng-template>\n </div>\n </mat-form-field>\n </div>\n <mat-form-field class=\"adf-process-input-container adf-process-input-container-process-name\" [floatLabel]=\"'always'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.NAME' | translate}}</mat-label>\n <input\n matInput\n [formControl]=\"processNameInput\"\n id=\"processName\"\n required/>\n <mat-error *ngIf=\"nameController.hasError('maxlength')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.MAXIMUM_LENGTH' | translate : { characters : maxProcessNameLength } }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('required')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.PROCESS_NAME_REQUIRED' | translate }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('pattern')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.SPACE_VALIDATOR' | translate }}\n </mat-error>\n </mat-form-field>\n\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showStartFormLoadingTemplate\">\n <ng-container *ngIf=\"isProcessDefinitionSelected() ; else emptyProcessDefTemplate\">\n <ng-container *ngIf=\"hasStartForm(); else noStartFormTemplate\">\n <adf-start-form\n #startForm\n [data]=\"movedNodeToPS\"\n [disableStartProcessButton]=\"processNameInput.invalid\"\n [processDefinitionId]=\"selectedProcessDef.id\"\n (outcomeClick)=\"onOutcomeClick($event)\"\n [showRefreshButton]=\"false\">\n <button\n class=\"adf-start-process-button\"\n adf-form-custom-button\n mat-button\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n </adf-start-form>\n </ng-container>\n <ng-template #noStartFormTemplate>\n <adf-empty-content\n class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_START_FORM' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #emptyProcessDefTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEF_SELECTED' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #showStartFormLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n </div>\n <div class=\"adf-start-process-content-actions\" *ngIf=\"!hasStartForm()\">\n <button\n class=\"adf-start-process-button\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n <button\n color=\"primary\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n [disabled]=\"!validateForm()\"\n (click)=\"startProcess()\"\n data-automation-id=\"btn-start\"\n id=\"button-start\"\n class=\"btn-start adf-start-process-button\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.START' | translate | uppercase}}\n </button>\n </div>\n </div>\n </ng-container>\n <ng-template #showEmptyTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEFINITIONS' | translate\" />\n </ng-template>\n</ng-template>\n", styles: [".adf-start-process{width:96%;margin-left:auto;margin-right:auto;margin-top:10px}.adf-start-process mat-form-field{width:100%}.adf-start-process .mat-mdc-floating-label{color:var(--adf-theme-mat-grey-color-a200-dark)}.adf-start-process-content-actions{padding-bottom:16px;padding-right:16px;text-align:right}.adf-start-process .mat-mdc-button{width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-title{padding-bottom:1.25em}.adf-process-input-container mat-form-field{width:100%}.adf-process-input-container-process-name{margin-top:16px}.adf-process-input-autocomplete{display:flex;padding-bottom:2px}.adf-process-input-autocomplete .adf-start-process-button{position:absolute;right:-14px;top:10px}.adf-process-input-autocomplete mat-spinner{position:absolute;right:-1px;top:0}.adf-start-form-container .mat-mdc-card-content{margin-bottom:100px}.adf-start-form-container .mat-mdc-card-header{display:none}.adf-start-form-container .adf-start-form-card:has(.adf-start-form-header){box-shadow:none;padding:0}.adf-start-form-actions:has(.adf-start-form-actions-button){text-align:right;padding-bottom:16px}.adf-start-form-actions:has(.adf-start-form-actions-button) button{text-wrap:nowrap}.adf-start-process-definition-container{display:flex;flex-direction:row;justify-content:space-around;align-items:baseline}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper{transform:none}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper svg{fill:currentcolor}.adf-start-process-app-list{margin-right:10px}@media (max-width: 599.9px){.adf-start-process{width:90%;margin-left:auto;margin-right:auto}}.adf-start-process-loading{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i10.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i11.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: i11.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i12.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i12.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i14.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: "component", type: EmptyContentComponent, selector: "adf-empty-content", inputs: ["icon", "title", "subtitle"] }, { kind: "component", type: StartFormComponent, selector: "adf-start-form", inputs: ["processDefinitionId", "processId", "showOutcomeButtons", "showRefreshButton", "readOnlyForm"], outputs: ["outcomeClick", "formContentClicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
370
- }
371
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StartProcessInstanceComponent, decorators: [{
372
- type: Component,
373
- args: [{ selector: 'adf-start-process', standalone: true, imports: [
374
- CommonModule,
375
- MatProgressSpinnerModule,
376
- TranslatePipe,
377
- MatFormFieldModule,
378
- MatSelectModule,
379
- FormsModule,
380
- ReactiveFormsModule,
381
- MatAutocompleteModule,
382
- MatButtonModule,
383
- MatIconModule,
384
- MatInputModule,
385
- EmptyContentComponent,
386
- StartFormComponent
387
- ], encapsulation: ViewEncapsulation.None, template: "\n<ng-container *ngIf=\"isLoading(); then showLoadingTemplate; else showStartProcessTemplate\" />\n <ng-template #showLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n<ng-template #showStartProcessTemplate>\n <ng-container *ngIf=\"hasApplications() || hasProcessDefinitions() ; else showEmptyTemplate\">\n <div class=\"adf-start-process\">\n <div class=\"adf-title\" *ngIf=\"title\">{{ title | translate}}</div>\n <div class=\"content\">\n <div class=\"adf-start-process-definition-container\">\n <mat-form-field *ngIf=\"showSelectApplicationDropdown\" [floatLabel]=\"'always'\" class=\"adf-start-process-app-list\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}</mat-label>\n <mat-select\n placeholder=\"{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}\"\n (selectionChange)=\"onAppSelectionChange($event)\"\n [(ngModel)]=\"selectedApplication\"\n class=\"adf-start-process-definition-select\"\n data-automation-id=\"adf-start-process-apps-drop-down\">\n <mat-option\n *ngFor=\"let application of applications\"\n [value]=\"application\"\n role=\"option\"\n [attr.data-automation-id]=\"'adf-start-process-apps-option-' + application.name\">\n {{ application.name }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"adf-process-input-container\" [floatLabel]=\"'always'\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate}}</mat-label>\n <input\n type=\"text\"\n matInput\n [formControl]=\"processDefinitionInput\"\n [matAutocomplete]=\"auto\"\n id=\"processDefinitionName\">\n <div class=\"adf-process-input-autocomplete\">\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n id=\"processDefinitionOptions\"\n [displayWith]=\"displayFn\">\n <mat-option *ngFor=\"let processDef of filteredProcessesDefinitions$ | async\" [value]=\"processDef.name\"\n (click)=\"processDefinitionSelectionChanged(processDef)\">\n {{ processDef.name }}\n </mat-option>\n </mat-autocomplete>\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showProcessDefLoadingTemplate\">\n <button\n class=\"adf-start-process-button\"\n id=\"adf-select-process-dropdown\"\n *ngIf=\"showSelectProcessDropdown\"\n mat-icon-button\n (click)=\"displayDropdown($event)\"\n [disabled]=\"isDropdownDisabled()\"\n [attr.aria-label]=\"'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate | uppercase\">\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n </ng-container>\n <ng-template #showProcessDefLoadingTemplate>\n <mat-spinner id=\"adf-select-process-spinner\" [diameter]=\"20\" />\n </ng-template>\n </div>\n </mat-form-field>\n </div>\n <mat-form-field class=\"adf-process-input-container adf-process-input-container-process-name\" [floatLabel]=\"'always'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.NAME' | translate}}</mat-label>\n <input\n matInput\n [formControl]=\"processNameInput\"\n id=\"processName\"\n required/>\n <mat-error *ngIf=\"nameController.hasError('maxlength')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.MAXIMUM_LENGTH' | translate : { characters : maxProcessNameLength } }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('required')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.PROCESS_NAME_REQUIRED' | translate }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('pattern')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.SPACE_VALIDATOR' | translate }}\n </mat-error>\n </mat-form-field>\n\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showStartFormLoadingTemplate\">\n <ng-container *ngIf=\"isProcessDefinitionSelected() ; else emptyProcessDefTemplate\">\n <ng-container *ngIf=\"hasStartForm(); else noStartFormTemplate\">\n <adf-start-form\n #startForm\n [data]=\"movedNodeToPS\"\n [disableStartProcessButton]=\"processNameInput.invalid\"\n [processDefinitionId]=\"selectedProcessDef.id\"\n (outcomeClick)=\"onOutcomeClick($event)\"\n [showRefreshButton]=\"false\">\n <button\n class=\"adf-start-process-button\"\n adf-form-custom-button\n mat-button\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n </adf-start-form>\n </ng-container>\n <ng-template #noStartFormTemplate>\n <adf-empty-content\n class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_START_FORM' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #emptyProcessDefTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEF_SELECTED' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #showStartFormLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n </div>\n <div class=\"adf-start-process-content-actions\" *ngIf=\"!hasStartForm()\">\n <button\n class=\"adf-start-process-button\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n <button\n color=\"primary\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n [disabled]=\"!validateForm()\"\n (click)=\"startProcess()\"\n data-automation-id=\"btn-start\"\n id=\"button-start\"\n class=\"btn-start adf-start-process-button\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.START' | translate | uppercase}}\n </button>\n </div>\n </div>\n </ng-container>\n <ng-template #showEmptyTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEFINITIONS' | translate\" />\n </ng-template>\n</ng-template>\n", styles: [".adf-start-process{width:96%;margin-left:auto;margin-right:auto;margin-top:10px}.adf-start-process mat-form-field{width:100%}.adf-start-process .mat-mdc-floating-label{color:var(--adf-theme-mat-grey-color-a200-dark)}.adf-start-process-content-actions{padding-bottom:16px;padding-right:16px;text-align:right}.adf-start-process .mat-mdc-button{width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-title{padding-bottom:1.25em}.adf-process-input-container mat-form-field{width:100%}.adf-process-input-container-process-name{margin-top:16px}.adf-process-input-autocomplete{display:flex;padding-bottom:2px}.adf-process-input-autocomplete .adf-start-process-button{position:absolute;right:-14px;top:10px}.adf-process-input-autocomplete mat-spinner{position:absolute;right:-1px;top:0}.adf-start-form-container .mat-mdc-card-content{margin-bottom:100px}.adf-start-form-container .mat-mdc-card-header{display:none}.adf-start-form-container .adf-start-form-card:has(.adf-start-form-header){box-shadow:none;padding:0}.adf-start-form-actions:has(.adf-start-form-actions-button){text-align:right;padding-bottom:16px}.adf-start-form-actions:has(.adf-start-form-actions-button) button{text-wrap:nowrap}.adf-start-process-definition-container{display:flex;flex-direction:row;justify-content:space-around;align-items:baseline}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper{transform:none}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper svg{fill:currentcolor}.adf-start-process-app-list{margin-right:10px}@media (max-width: 599.9px){.adf-start-process{width:90%;margin-left:auto;margin-right:auto}}.adf-start-process-loading{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}\n"] }]
388
- }], ctorParameters: () => [{ type: i1.ProcessService }, { type: i2.ActivitiContentService }, { type: i3.AppsProcessService }, { type: i4.AppConfigService }, { type: i4.LocalizedDatePipe }], propDecorators: { appId: [{
389
- type: Input
390
- }], title: [{
391
- type: Input
392
- }], processDefinitionName: [{
393
- type: Input
394
- }], variables: [{
395
- type: Input
396
- }], values: [{
397
- type: Input
398
- }], name: [{
399
- type: Input
400
- }], showSelectProcessDropdown: [{
401
- type: Input
402
- }], showSelectApplicationDropdown: [{
403
- type: Input
404
- }], processFilterSelector: [{
405
- type: Input
406
- }], start: [{
407
- type: Output
408
- }], cancel: [{
409
- type: Output
410
- }], error: [{
411
- type: Output
412
- }], processDefinitionSelection: [{
413
- type: Output
414
- }], applicationSelection: [{
415
- type: Output
416
- }], startForm: [{
417
- type: ViewChild,
418
- args: ['startForm']
419
- }], inputAutocomplete: [{
420
- type: ViewChild,
421
- args: [MatAutocompleteTrigger]
422
- }] } });
423
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtcHJvY2Vzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Byb2Nlc3MtbGlzdC9jb21wb25lbnRzL3N0YXJ0LXByb2Nlc3Mvc3RhcnQtcHJvY2Vzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Byb2Nlc3MtbGlzdC9jb21wb25lbnRzL3N0YXJ0LXByb2Nlc3Mvc3RhcnQtcHJvY2Vzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFjLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0gsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBbUIsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ILE9BQU8sRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9GLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0sMEJB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YSxvTEFDYixjQUFjLDRXQUNkLHFCQUFxQixxR0FDckIsa0JBQWtCOzs0RkFNYiw2QkFBNkI7a0JBdEJ6QyxTQUFTOytCQUNJLG1CQUFtQixjQUNqQixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixxQkFBcUI7d0JBQ3JCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixjQUFjO3dCQUNkLHFCQUFxQjt3QkFDckIsa0JBQWtCO3FCQUNyQixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJO3dOQVFyQyxLQUFLO3NCQURKLEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQUtOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFRTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLElBQUk7c0JBREgsS0FBSztnQkFLTix5QkFBeUI7c0JBRHhCLEtBQUs7Z0JBS04sNkJBQTZCO3NCQUQ1QixLQUFLO2dCQUtOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFLTixLQUFLO3NCQURKLE1BQU07Z0JBS1AsTUFBTTtzQkFETCxNQUFNO2dCQUtQLEtBQUs7c0JBREosTUFBTTtnQkFLUCwwQkFBMEI7c0JBRHpCLE1BQU07Z0JBS1Asb0JBQW9CO3NCQURuQixNQUFNO2dCQUlQLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXO2dCQUl0QixpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlLCBBcHBDb25maWdWYWx1ZXMsIEVtcHR5Q29udGVudENvbXBvbmVudCwgRm9ybVZhbHVlcywgTG9jYWxpemVkRGF0ZVBpcGUgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgQXBwc1Byb2Nlc3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwcy1wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvY2Vzc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UsIE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBTdGFydEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9mb3JtJztcbmltcG9ydCB7XG4gICAgQXBwRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uLFxuICAgIE5vZGUsXG4gICAgUHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbixcbiAgICBQcm9jZXNzSW5zdGFuY2VSZXByZXNlbnRhdGlvbixcbiAgICBSZWxhdGVkQ29udGVudFJlcHJlc2VudGF0aW9uLFxuICAgIFJlc3RWYXJpYWJsZVxufSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IEFjdGl2aXRpQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3NlcnZpY2VzL2FjdGl2aXRpLWFsZnJlc2NvLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0VGltZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5jb25zdCBNQVhfTEVOR1RIID0gMjU1O1xuY29uc3QgREFURV9USU1FX0lERU5USUZJRVJfUkVHX0VYUCA9IG5ldyBSZWdFeHAoJyV7ZGF0ZXRpbWV9JywgJ2knKTtcbmNvbnN0IFBST0NFU1NfREVGSU5JVElPTl9JREVOVElGSUVSX1JFR19FWFAgPSBuZXcgUmVnRXhwKCcle3Byb2Nlc3NkZWZpbml0aW9ufScsICdpJyk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLXN0YXJ0LXByb2Nlc3MnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIEVtcHR5Q29udGVudENvbXBvbmVudCxcbiAgICAgICAgU3RhcnRGb3JtQ29tcG9uZW50XG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc3RhcnQtcHJvY2Vzcy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3RhcnQtcHJvY2Vzcy5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU3RhcnRQcm9jZXNzSW5zdGFuY2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICogTGltaXQgdGhlIGxpc3Qgb2YgcHJvY2Vzc2VzIHRoYXQgY2FuIGJlIHN0YXJ0ZWQgdG8gdGhvc2VcbiAgICAgKiBjb250YWluZWQgaW4gdGhlIHNwZWNpZmllZCBhcHAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhcHBJZD86IG51bWJlcjtcblxuICAgIC8qKiBEZWZpbmUgdGhlIGhlYWRlciBvZiB0aGUgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU/OiBzdHJpbmc7XG5cbiAgICAvKiogRGVmaW5pdGlvbiBuYW1lIG9mIHRoZSBwcm9jZXNzIHRvIHN0YXJ0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJvY2Vzc0RlZmluaXRpb25OYW1lPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVmFyaWFibGVzIGluIHRoZSBpbnB1dCB0byB0aGUgcHJvY2Vzc1xuICAgICAqIFtSZXN0VmFyaWFibGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9BbGZyZXNjby9hbGZyZXNjby1qcy1hcGkvdHJlZS9tYXN0ZXIvc3JjL2FsZnJlc2NvLWFjdGl2aXRpLXJlc3QtYXBpL2RvY3MvUmVzdFZhcmlhYmxlLm1kKS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHZhcmlhYmxlczogUmVzdFZhcmlhYmxlW107XG5cbiAgICAvKiogUGFyYW1ldGVyIHRvIHBhc3MgZm9ybSBmaWVsZCB2YWx1ZXMgaW4gdGhlIHN0YXJ0IGZvcm0gaWYgb25lIGlzIGFzc29jaWF0ZWQuICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZXM6IEZvcm1WYWx1ZXM7XG5cbiAgICAvKiogTmFtZSB0byBhc3NpZ24gdG8gdGhlIGN1cnJlbnQgcHJvY2Vzcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5hbWU/OiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBIaWRlIG9yIHNob3cgdGhlIHByb2Nlc3Mgc2VsZWN0aW9uIGRyb3Bkb3duLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1NlbGVjdFByb2Nlc3NEcm9wZG93biA9IHRydWU7XG5cbiAgICAvKiogSGlkZSBvciBzaG93IGFwcGxpY2F0aW9uIHNlbGVjdGlvbiBkcm9wZG93bi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dTZWxlY3RBcHBsaWNhdGlvbkRyb3Bkb3duPyA9IGZhbHNlO1xuXG4gICAgLyoqIFBhcmFtZXRlciB0byBlbmFibGUgc2VsZWN0aW9uIG9mIHByb2Nlc3Mgd2hlbiBmaWx0ZXJpbmcuICovXG4gICAgQElucHV0KClcbiAgICBwcm9jZXNzRmlsdGVyU2VsZWN0b3I/ID0gdHJ1ZTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHByb2Nlc3Mgc3RhcnRzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9jZXNzSW5zdGFuY2VSZXByZXNlbnRhdGlvbj4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHByb2Nlc3MgaXMgY2FuY2VsZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMuICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gcHJvY2VzcyBkZWZpbml0aW9uIHNlbGVjdGlvbiBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHByb2Nlc3NEZWZpbml0aW9uU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhcHBsaWNhdGlvbiBzZWxlY3Rpb24gY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBhcHBsaWNhdGlvblNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8QXBwRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uPigpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3RhcnRGb3JtJylcbiAgICBzdGFydEZvcm06IFN0YXJ0Rm9ybUNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcilcbiAgICBpbnB1dEF1dG9jb21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcblxuICAgIHByb2Nlc3NEZWZpbml0aW9uczogUHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbltdID0gW107XG4gICAgc2VsZWN0ZWRQcm9jZXNzRGVmOiBQcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uO1xuICAgIHByb2Nlc3NOYW1lSW5wdXQ6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgICBwcm9jZXNzRGVmaW5pdGlvbklucHV0OiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgZmlsdGVyZWRQcm9jZXNzZXNEZWZpbml0aW9ucyQ6IE9ic2VydmFibGU8UHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbltdPjtcbiAgICBtYXhQcm9jZXNzTmFtZUxlbmd0aDogbnVtYmVyID0gTUFYX0xFTkdUSDtcbiAgICBhbGZyZXNjb1JlcG9zaXRvcnlOYW1lOiBzdHJpbmc7XG4gICAgYXBwbGljYXRpb25zOiBBcHBEZWZpbml0aW9uUmVwcmVzZW50YXRpb25bXSA9IFtdO1xuICAgIHNlbGVjdGVkQXBwbGljYXRpb246IEFwcERlZmluaXRpb25SZXByZXNlbnRhdGlvbjtcblxuICAgIGlzUHJvY2Vzc0RlZmluaXRpb25zTG9hZGluZyA9IHRydWU7XG4gICAgaXNBcHBzTG9hZGluZyA9IHRydWU7XG4gICAgbW92ZWROb2RlVG9QUzogRm9ybVZhbHVlcztcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHByb2Nlc3NTZXJ2aWNlOiBQcm9jZXNzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50U2VydmljZTogQWN0aXZpdGlDb250ZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBzUHJvY2Vzc1NlcnZpY2U6IEFwcHNQcm9jZXNzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGF0ZVBpcGU6IExvY2FsaXplZERhdGVQaXBlXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc05hbWVJbnB1dCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFtcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLm1heFByb2Nlc3NOYW1lTGVuZ3RoKSxcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXlteXFxcXHNdKyhcXFxccytbXlxcXFxzXSspKiQnKVxuICAgICAgICBdKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbklucHV0ID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuXG4gICAgICAgIHRoaXMubG9hZCh0aGlzLmFwcElkKTtcblxuICAgICAgICB0aGlzLmZpbHRlcmVkUHJvY2Vzc2VzRGVmaW5pdGlvbnMkID0gdGhpcy5wcm9jZXNzRGVmaW5pdGlvbklucHV0LnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdGhpcy5fZmlsdGVyKHZhbHVlKSksXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY29udGVudFNlcnZpY2UuZ2V0QWxmcmVzY29SZXBvc2l0b3JpZXMoKS5zdWJzY3JpYmUoKHJlcG9MaXN0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb0xpc3Q/LlswXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFsZnJlc2NvUmVwb3NpdG9yeSA9IHJlcG9MaXN0WzBdO1xuICAgICAgICAgICAgICAgIHRoaXMuYWxmcmVzY29SZXBvc2l0b3J5TmFtZSA9IGBhbGZyZXNjby0ke2FsZnJlc2NvUmVwb3NpdG9yeS5pZH0tJHthbGZyZXNjb1JlcG9zaXRvcnkubmFtZX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd2YWx1ZXMnXT8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVOb2RlRnJvbUNTdG9QUygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwSWQgPSBjaGFuZ2VzWydhcHBJZCddO1xuICAgICAgICBpZiAoYXBwSWQ/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkKGFwcElkLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9jZXNzRGVmaW5pdGlvbk5hbWUgPSBjaGFuZ2VzWydwcm9jZXNzRGVmaW5pdGlvbk5hbWUnXTtcbiAgICAgICAgaWYgKHByb2Nlc3NEZWZpbml0aW9uTmFtZT8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclByb2Nlc3NEZWZpbml0aW9uQnlOYW1lKHByb2Nlc3NEZWZpbml0aW9uTmFtZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZFByb2Nlc3Moc2VsZWN0ZWRQcm9jZXNzOiBzdHJpbmcpOiBQcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RlZmluaXRpb25zLmZpbmQoKHByb2Nlc3MpID0+IHByb2Nlc3MubmFtZS50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFByb2Nlc3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZChhcHBJZD86IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5zaG93U2VsZWN0QXBwbGljYXRpb25Ecm9wZG93bikge1xuICAgICAgICAgICAgdGhpcy5sb2FkQXBwcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RlZmluaXRpb25zKGFwcElkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRQcm9jZXNzRGVmaW5pdGlvbnMoYXBwSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzUHJvY2Vzc0RlZmluaXRpb25zTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFByb2Nlc3NEZWZpbml0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzU2VydmljZVxuICAgICAgICAgICAgLmdldFByb2Nlc3NEZWZpbml0aW9ucyhhcHBJZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRQcm9jZXNzRGVmOiBQcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9jZXNzRGVmID0gcHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbnNbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9jZXNzRGVmaW5pdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUHJvY2Vzc0RlZmluaXRpb24gPSBwcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9jZXNzRGVmaW5pdGlvbikgPT4gcHJvY2Vzc0RlZmluaXRpb24ubmFtZSA9PT0gdGhpcy5wcm9jZXNzRGVmaW5pdGlvbk5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRQcm9jZXNzRGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9jZXNzRGVmID0gZmlsdGVyZWRQcm9jZXNzRGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGN1cnJlbnRQcm9jZXNzRGVmLCBwcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9ucyB9O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChmaWx0ZXJlZFByb2Nlc3NEZWZpbml0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9ucyA9IGZpbHRlcmVkUHJvY2Vzc0RlZmluaXRpb25zLnByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb25zO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uU2VsZWN0aW9uQ2hhbmdlZChmaWx0ZXJlZFByb2Nlc3NEZWZpbml0aW9ucy5jdXJyZW50UHJvY2Vzc0RlZik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZiA/IHRoaXMuc2VsZWN0ZWRQcm9jZXNzRGVmLm5hbWUgOiAnJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzRGVmaW5pdGlvbnNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NEZWZpbml0aW9uc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsdGVyUHJvY2Vzc0RlZmluaXRpb25CeU5hbWUoZGVmaW5pdGlvbk5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAoZGVmaW5pdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUHJvY2Vzc0RlZiA9IHRoaXMucHJvY2Vzc0RlZmluaXRpb25zLmZpbmQoKHByb2Nlc3NEZWZpbml0aW9uKSA9PiBwcm9jZXNzRGVmaW5pdGlvbi5uYW1lID09PSBkZWZpbml0aW9uTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZFByb2Nlc3NEZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uU2VsZWN0aW9uQ2hhbmdlZChmaWx0ZXJlZFByb2Nlc3NEZWYpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZiA/IHRoaXMuc2VsZWN0ZWRQcm9jZXNzRGVmLm5hbWUgOiAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRBcHBzKCkge1xuICAgICAgICB0aGlzLmlzQXBwc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmFwcHNQcm9jZXNzU2VydmljZVxuICAgICAgICAgICAgLmdldERlcGxveWVkQXBwbGljYXRpb25zKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwbGljYXRpb25zID0gcmVzcG9uc2UuZmlsdGVyKChhcHApID0+IGFwcC5pZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRBcHBsaWNhdGlvbjogQXBwRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbnMgJiYgYXBwbGljYXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEFwcGxpY2F0aW9uID0gYXBwbGljYXRpb25zWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBcHAgPSBhcHBsaWNhdGlvbnMuZmluZCgoYXBwKSA9PiBhcHAuaWQgPT09ICt0aGlzLmFwcElkKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRBcHApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRBcHBsaWNhdGlvbiA9IGZpbHRlcmVkQXBwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgY3VycmVudEFwcGxpY2F0aW9uLCBhcHBsaWNhdGlvbnMgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoZmlsdGVyZWRBcHBzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25zID0gZmlsdGVyZWRBcHBzLmFwcGxpY2F0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFwcGxpY2F0aW9uID0gZmlsdGVyZWRBcHBzLmN1cnJlbnRBcHBsaWNhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvblNlbGVjdGlvbi5lbWl0KHRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlUHJvY2Vzc05hbWVBbmREZWZpbml0aW9uc0Ryb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBcHBzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQcm9jZXNzRGVmaW5pdGlvbnNCYXNlZE9uU2VsZWN0ZWRBcHAoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0FwcHNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkUHJvY2Vzc0RlZmluaXRpb25zQmFzZWRPblNlbGVjdGVkQXBwKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEFwcGxpY2F0aW9uPy5pZCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RlZmluaXRpb25zKHRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbiA/IHRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbi5pZCA6IG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NEZWZpbml0aW9uc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRQcm9jZXNzRGVmaW5pdGlvbnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQXBwU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkQXBwbGljYXRpb246IE1hdFNlbGVjdENoYW5nZSkge1xuICAgICAgICB0aGlzLnJlc2V0UHJvY2Vzc0RlZmluaXRpb25zKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbiA9IHNlbGVjdGVkQXBwbGljYXRpb24udmFsdWU7XG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25TZWxlY3Rpb24uZW1pdCh0aGlzLnNlbGVjdGVkQXBwbGljYXRpb24pO1xuICAgICAgICB0aGlzLnRvZ2dsZVByb2Nlc3NOYW1lQW5kRGVmaW5pdGlvbnNEcm9wZG93bigpO1xuICAgICAgICB0aGlzLmxvYWRQcm9jZXNzRGVmaW5pdGlvbnNCYXNlZE9uU2VsZWN0ZWRBcHAoKTtcbiAgICB9XG5cbiAgICBoYXNBcHBsaWNhdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9ucz8ubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNQcm9jZXNzRGVmaW5pdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEZWZpbml0aW9ucz8ubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBpc1Byb2Nlc3NEZWZpbml0aW9uU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRQcm9jZXNzRGVmPy5pZDtcbiAgICB9XG5cbiAgICBpc0Ryb3Bkb3duRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dTZWxlY3RBcHBsaWNhdGlvbkRyb3Bkb3duICYmICF0aGlzLmlzQXBwU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBnZXRBbGZyZXNjb1JlcG9zaXRvcnlOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCBhbGZyZXNjb1JlcG9zaXRvcnlOYW1lID0gdGhpcy5hcHBDb25maWcuZ2V0PHN0cmluZz4oQXBwQ29uZmlnVmFsdWVzLkFMRlJFU0NPX1JFUE9TSVRPUllfTkFNRSk7XG4gICAgICAgIGlmICghYWxmcmVzY29SZXBvc2l0b3J5TmFtZSkge1xuICAgICAgICAgICAgYWxmcmVzY29SZXBvc2l0b3J5TmFtZSA9IHRoaXMuYWxmcmVzY29SZXBvc2l0b3J5TmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxmcmVzY29SZXBvc2l0b3J5TmFtZSArICdBbGZyZXNjbyc7XG4gICAgfVxuXG4gICAgbW92ZU5vZGVGcm9tQ1N0b1BTKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhY2NvdW50SWRlbnRpZmllciA9IHRoaXMuZ2V0QWxmcmVzY29SZXBvc2l0b3J5TmFtZSgpO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMudmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMudmFsdWVzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlc1trZXldKSA/IHRoaXMudmFsdWVzW2tleV0gOiBbdGhpcy52YWx1ZXNba2V5XV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBjdXJyZW50VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigodmFsdWU6IGFueSkgPT4gISF2YWx1ZT8uaXNGaWxlKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjb250ZW50OiBOb2RlKSA9PiB0aGlzLmNvbnRlbnRTZXJ2aWNlLmFwcGx5QWxmcmVzY29Ob2RlKGNvbnRlbnQsIG51bGwsIGFjY291bnRJZGVudGlmaWVyKSk7XG4gICAgICAgICAgICAgICAgZm9ya0pvaW4oY29udGVudHMpLnN1YnNjcmliZSgocmVzOiBSZWxhdGVkQ29udGVudFJlcHJlc2VudGF0aW9uW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlZE5vZGVUb1BTID0geyBba2V5XTogWy4uLnJlc10gfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXJ0UHJvY2VzcyhvdXRjb21lPzogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZj8uaWQgJiYgdGhpcy5uYW1lQ29udHJvbGxlci52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuc3RhcnRGb3JtID8gdGhpcy5zdGFydEZvcm0uZm9ybS52YWx1ZXMgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTZXJ2aWNlLnN0YXJ0UHJvY2Vzcyh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZi5pZCwgdGhpcy5uYW1lQ29udHJvbGxlci52YWx1ZSwgb3V0Y29tZSwgZm9ybVZhbHVlcywgdGhpcy52YXJpYWJsZXMpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LmVtaXQocmVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbmNlbFN0YXJ0UHJvY2VzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICAgIH1cblxuICAgIGhhc1N0YXJ0Rm9ybSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRQcm9jZXNzRGVmPy5oYXNTdGFydEZvcm07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1N0YXJ0Rm9ybU1pc3NpbmdPclZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5zdGFydEZvcm0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXJ0Rm9ybS5mb3JtPy5pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YWxpZGF0ZUZvcm0oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZj8uaWQgJiYgdGhpcy5wcm9jZXNzTmFtZUlucHV0LnZhbGlkICYmIHRoaXMuaXNTdGFydEZvcm1NaXNzaW5nT3JWYWxpZCgpO1xuICAgIH1cblxuICAgIG9uT3V0Y29tZUNsaWNrKG91dGNvbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0YXJ0UHJvY2VzcyhvdXRjb21lKTtcbiAgICB9XG5cbiAgICByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkUHJvY2Vzc0RlZmluaXRpb24oKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJyc7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0Rm9ybSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEZvcm0uZGF0YSA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzcGxheUZuKHByb2Nlc3M6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICAgICAgICBsZXQgcHJvY2Vzc05hbWUgPSBwcm9jZXNzO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NOYW1lID0gcHJvY2Vzcy5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NOYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZGlzcGxheURyb3Bkb3duKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0QXV0b2NvbXBsZXRlLnBhbmVsT3Blbikge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbklucHV0LnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRBdXRvY29tcGxldGUub3BlblBhbmVsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0QXV0b2NvbXBsZXRlLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBuYW1lQ29udHJvbGxlcigpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTmFtZUlucHV0O1xuICAgIH1cblxuICAgIGdldCBwcm9jZXNzRGVmaW5pdGlvbkNvbnRyb2xsZXIoKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dDtcbiAgICB9XG5cbiAgICBwcm9jZXNzRGVmaW5pdGlvblNlbGVjdGlvbkNoYW5nZWQocHJvY2Vzc0RlZmluaXRpb246IFByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb24pIHtcbiAgICAgICAgaWYgKHByb2Nlc3NEZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzSW5zdGFuY2VEZXRhaWxzOiBQcm9jZXNzSW5zdGFuY2VSZXByZXNlbnRhdGlvbiA9IHsgcHJvY2Vzc0RlZmluaXRpb25OYW1lOiBwcm9jZXNzRGVmaW5pdGlvbi5uYW1lIH07XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzTmFtZSA9IHRoaXMuZm9ybWF0UHJvY2Vzc05hbWUodGhpcy5uYW1lLCBwcm9jZXNzSW5zdGFuY2VEZXRhaWxzKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc05hbWVJbnB1dC5zZXRWYWx1ZShwcm9jZXNzTmFtZSk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NOYW1lSW5wdXQubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc05hbWVJbnB1dC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZiA9IHByb2Nlc3NEZWZpbml0aW9uO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvblNlbGVjdGlvbi5lbWl0KHRoaXMuc2VsZWN0ZWRQcm9jZXNzRGVmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmFtZUNvbnRyb2xsZXIucmVzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1NlbGVjdEFwcGxpY2F0aW9uRHJvcGRvd24gPyB0aGlzLmlzQXBwc0xvYWRpbmcgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQXBwU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbj8uaWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFNlbGVjdGVkUHJvY2Vzc0RlZmluaXRpb24oKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9jZXNzRGVmID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5wcm9jZXNzRGVmaW5pdGlvbklucHV0KSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uSW5wdXQuc2V0VmFsdWUoJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFByb2Nlc3NEZWZpbml0aW9ucygpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkUHJvY2Vzc0RlZmluaXRpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZVByb2Nlc3NOYW1lQW5kRGVmaW5pdGlvbnNEcm9wZG93bigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQXBwU2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbkNvbnRyb2xsZXIuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5uYW1lQ29udHJvbGxlci5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uQ29udHJvbGxlci5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMubmFtZUNvbnRyb2xsZXIuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9maWx0ZXIodmFsdWU6IHN0cmluZyk6IFByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb25bXSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFByb2Nlc3MgPSB0aGlzLnByb2Nlc3NEZWZpbml0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9jZXNzRmlsdGVyU2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZiA9IHRoaXMuZ2V0U2VsZWN0ZWRQcm9jZXNzKGZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFByb2Nlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRQcm9jZXNzTmFtZShwcm9jZXNzTmFtZUZvcm1hdDogc3RyaW5nLCBwcm9jZXNzSW5zdGFuY2U/OiBQcm9jZXNzSW5zdGFuY2VSZXByZXNlbnRhdGlvbik6IHN0cmluZyB7XG4gICAgICAgIGxldCBwcm9jZXNzTmFtZSA9IHByb2Nlc3NOYW1lRm9ybWF0O1xuICAgICAgICBpZiAocHJvY2Vzc05hbWUubWF0Y2goREFURV9USU1FX0lERU5USUZJRVJfUkVHX0VYUCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXNlbnREYXRlVGltZSA9IGdldFRpbWUobmV3IERhdGUoKSk7XG4gICAgICAgICAgICBwcm9jZXNzTmFtZSA9IHByb2Nlc3NOYW1lLnJlcGxhY2UoREFURV9USU1FX0lERU5USUZJRVJfUkVHX0VYUCwgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocHJlc2VudERhdGVUaW1lLCAnbWVkaXVtJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2Nlc3NOYW1lLm1hdGNoKFBST0NFU1NfREVGSU5JVElPTl9JREVOVElGSUVSX1JFR19FWFApKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFByb2Nlc3NEZWZpbml0aW9uTmFtZSA9IHByb2Nlc3NJbnN0YW5jZSA/IHByb2Nlc3NJbnN0YW5jZS5wcm9jZXNzRGVmaW5pdGlvbk5hbWUgOiAnJztcbiAgICAgICAgICAgIHByb2Nlc3NOYW1lID0gcHJvY2Vzc05hbWUucmVwbGFjZShQUk9DRVNTX0RFRklOSVRJT05fSURFTlRJRklFUl9SRUdfRVhQLCBzZWxlY3RlZFByb2Nlc3NEZWZpbml0aW9uTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb2Nlc3NOYW1lO1xuICAgIH1cbn1cbiIsIlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZygpOyB0aGVuIHNob3dMb2FkaW5nVGVtcGxhdGU7IGVsc2Ugc2hvd1N0YXJ0UHJvY2Vzc1RlbXBsYXRlXCIgLz5cbiAgICA8bmctdGVtcGxhdGUgI3Nob3dMb2FkaW5nVGVtcGxhdGU+XG4gICAgICAgIDxtYXQtc3Bpbm5lciBjbGFzcz1cImFkZi1zdGFydC1wcm9jZXNzLWxvYWRpbmdcIiAvPlxuICAgIDwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3Nob3dTdGFydFByb2Nlc3NUZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQXBwbGljYXRpb25zKCkgfHwgaGFzUHJvY2Vzc0RlZmluaXRpb25zKCkgOyBlbHNlIHNob3dFbXB0eVRlbXBsYXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10aXRsZVwiICpuZ0lmPVwidGl0bGVcIj57eyB0aXRsZSB8IHRyYW5zbGF0ZX19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1kZWZpbml0aW9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJzaG93U2VsZWN0QXBwbGljYXRpb25Ecm9wZG93blwiIFtmbG9hdExhYmVsXT1cIidhbHdheXMnXCIgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1hcHAtbGlzdFwiIFtzdWJzY3JpcHRTaXppbmddPVwiJ2R5bmFtaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5MQUJFTC5TRUxFQ1RfQVBQTElDQVRJT04nIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5GT1JNLkxBQkVMLlNFTEVDVF9BUFBMSUNBVElPTicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25BcHBTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEFwcGxpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1zdGFydC1wcm9jZXNzLWRlZmluaXRpb24tc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtc3RhcnQtcHJvY2Vzcy1hcHBzLWRyb3AtZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhcHBsaWNhdGlvbiBvZiBhcHBsaWNhdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYXBwbGljYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtc3RhcnQtcHJvY2Vzcy1hcHBzLW9wdGlvbi0nICsgYXBwbGljYXRpb24ubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhcHBsaWNhdGlvbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJhZGYtcHJvY2Vzcy1pbnB1dC1jb250YWluZXJcIiBbZmxvYXRMYWJlbF09XCInYWx3YXlzJ1wiIFtzdWJzY3JpcHRTaXppbmddPVwiJ2R5bmFtaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7J0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5GT1JNLkxBQkVMLlRZUEUnIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJwcm9jZXNzRGVmaW5pdGlvbklucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicHJvY2Vzc0RlZmluaXRpb25OYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXByb2Nlc3MtaW5wdXQtYXV0b2NvbXBsZXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInByb2Nlc3NEZWZpbml0aW9uT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5Rm5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHByb2Nlc3NEZWYgb2YgZmlsdGVyZWRQcm9jZXNzZXNEZWZpbml0aW9ucyQgfCBhc3luY1wiIFt2YWx1ZV09XCJwcm9jZXNzRGVmLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJvY2Vzc0RlZmluaXRpb25TZWxlY3Rpb25DaGFuZ2VkKHByb2Nlc3NEZWYpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBwcm9jZXNzRGVmLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUHJvY2Vzc0RlZmluaXRpb25zTG9hZGluZyA7IGVsc2Ugc2hvd1Byb2Nlc3NEZWZMb2FkaW5nVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZGYtc2VsZWN0LXByb2Nlc3MtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93U2VsZWN0UHJvY2Vzc0Ryb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlEcm9wZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Ryb3Bkb3duRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5MQUJFTC5UWVBFJyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd1Byb2Nlc3NEZWZMb2FkaW5nVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciBpZD1cImFkZi1zZWxlY3QtcHJvY2Vzcy1zcGlubmVyXCIgW2RpYW1ldGVyXT1cIjIwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiYWRmLXByb2Nlc3MtaW5wdXQtY29udGFpbmVyIGFkZi1wcm9jZXNzLWlucHV0LWNvbnRhaW5lci1wcm9jZXNzLW5hbWVcIiBbZmxvYXRMYWJlbF09XCInYWx3YXlzJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7J0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5GT1JNLkxBQkVMLk5BTUUnIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInByb2Nlc3NOYW1lSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwcm9jZXNzTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZC8+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJuYW1lQ29udHJvbGxlci5oYXNFcnJvcignbWF4bGVuZ3RoJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRVJST1IuTUFYSU1VTV9MRU5HVEgnIHwgdHJhbnNsYXRlIDogeyBjaGFyYWN0ZXJzIDogbWF4UHJvY2Vzc05hbWVMZW5ndGggfSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cIm5hbWVDb250cm9sbGVyLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkVSUk9SLlBST0NFU1NfTkFNRV9SRVFVSVJFRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJuYW1lQ29udHJvbGxlci5oYXNFcnJvcigncGF0dGVybicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkVSUk9SLlNQQUNFX1ZBTElEQVRPUicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNQcm9jZXNzRGVmaW5pdGlvbnNMb2FkaW5nIDsgZWxzZSBzaG93U3RhcnRGb3JtTG9hZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1Byb2Nlc3NEZWZpbml0aW9uU2VsZWN0ZWQoKSA7IGVsc2UgZW1wdHlQcm9jZXNzRGVmVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgICpuZ0lmPVwiaGFzU3RhcnRGb3JtKCk7IGVsc2Ugbm9TdGFydEZvcm1UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtc3RhcnQtZm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3RhcnRGb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cIm1vdmVkTm9kZVRvUFNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVN0YXJ0UHJvY2Vzc0J1dHRvbl09XCJwcm9jZXNzTmFtZUlucHV0LmludmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvY2Vzc0RlZmluaXRpb25JZF09XCJzZWxlY3RlZFByb2Nlc3NEZWYuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0Y29tZUNsaWNrKT1cIm9uT3V0Y29tZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1JlZnJlc2hCdXR0b25dPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRmLWZvcm0tY3VzdG9tLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbFN0YXJ0UHJvY2VzcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY2FuY2VsX3Byb2Nlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5GT1JNLkFDVElPTi5DQU5DRUwnfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2V9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZi1zdGFydC1mb3JtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vU3RhcnRGb3JtVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1lbXB0eS1jb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtZW1wdHktdGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCInYXNzZXNzbWVudCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5OT19TVEFSVF9GT1JNJyAgfCB0cmFuc2xhdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlQcm9jZXNzRGVmVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWVtcHR5LWNvbnRlbnQgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1lbXB0eS10ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiJ2Fzc2Vzc21lbnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5OT19QUk9DRVNTX0RFRl9TRUxFQ1RFRCcgIHwgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dTdGFydEZvcm1Mb2FkaW5nVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciBjbGFzcz1cImFkZi1zdGFydC1wcm9jZXNzLWxvYWRpbmdcIiAvPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1jb250ZW50LWFjdGlvbnNcIiAqbmdJZj1cIiFoYXNTdGFydEZvcm0oKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhhc1N0YXJ0Rm9ybSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbFN0YXJ0UHJvY2VzcygpXCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJjYW5jZWxfcHJvY2Vzc1wiPlxuICAgICAgICAgICAgICAgICAgICB7eydBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5BQ1RJT04uQ0FOQ0VMJ3wgdHJhbnNsYXRlIHwgdXBwZXJjYXNlfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaGFzU3RhcnRGb3JtKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXZhbGlkYXRlRm9ybSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0UHJvY2VzcygpXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYnRuLXN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJidXR0b24tc3RhcnRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1zdGFydCBhZGYtc3RhcnQtcHJvY2Vzcy1idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAge3snQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkZPUk0uQUNUSU9OLlNUQVJUJyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZX19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd0VtcHR5VGVtcGxhdGU+XG4gICAgICAgICAgICA8YWRmLWVtcHR5LWNvbnRlbnQgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1lbXB0eS10ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJ2Fzc2Vzc21lbnQnXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5OT19QUk9DRVNTX0RFRklOSVRJT05TJyB8IHRyYW5zbGF0ZVwiIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,18 +0,0 @@
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 * from './public-api';
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Byb2Nlc3MtbGlzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==