@valtimo/task 12.11.0 → 12.12.0

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 (33) hide show
  1. package/esm2022/lib/components/assign-user-to-task/assign-user-to-task.component.mjs +128 -43
  2. package/esm2022/lib/components/set-task-due-date/set-task-due-date.component.mjs +128 -0
  3. package/esm2022/lib/components/task-detail-content/task-detail-content.component.mjs +24 -12
  4. package/esm2022/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.mjs +3 -3
  5. package/esm2022/lib/components/task-detail-modal/task-detail-modal.component.mjs +14 -4
  6. package/esm2022/lib/components/task-list/task-list.component.mjs +4 -3
  7. package/esm2022/lib/models/task.model.mjs +1 -1
  8. package/esm2022/lib/services/task.service.mjs +7 -1
  9. package/esm2022/lib/task-permissions.mjs +7 -2
  10. package/esm2022/lib/task.module.mjs +7 -3
  11. package/esm2022/public_api.mjs +2 -1
  12. package/fesm2022/valtimo-task.mjs +307 -77
  13. package/fesm2022/valtimo-task.mjs.map +1 -1
  14. package/lib/components/assign-user-to-task/assign-user-to-task.component.d.ts +38 -17
  15. package/lib/components/assign-user-to-task/assign-user-to-task.component.d.ts.map +1 -1
  16. package/lib/components/set-task-due-date/set-task-due-date.component.d.ts +36 -0
  17. package/lib/components/set-task-due-date/set-task-due-date.component.d.ts.map +1 -0
  18. package/lib/components/task-detail-content/task-detail-content.component.d.ts +1 -1
  19. package/lib/components/task-detail-content/task-detail-content.component.d.ts.map +1 -1
  20. package/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.d.ts.map +1 -1
  21. package/lib/components/task-detail-modal/task-detail-modal.component.d.ts +1 -0
  22. package/lib/components/task-detail-modal/task-detail-modal.component.d.ts.map +1 -1
  23. package/lib/models/task.model.d.ts +4 -1
  24. package/lib/models/task.model.d.ts.map +1 -1
  25. package/lib/services/task.service.d.ts +3 -1
  26. package/lib/services/task.service.d.ts.map +1 -1
  27. package/lib/task-permissions.d.ts +2 -1
  28. package/lib/task-permissions.d.ts.map +1 -1
  29. package/lib/task.module.d.ts +2 -1
  30. package/lib/task.module.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/public_api.d.ts +1 -0
  33. package/public_api.d.ts.map +1 -1
@@ -14,43 +14,61 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { Component, EventEmitter, Input, Output, } from '@angular/core';
17
- import { SearchableDropdownSelectModule } from '@valtimo/components';
18
- import { BehaviorSubject, combineLatest, Subscription, take, tap } from 'rxjs';
17
+ import { RemoveClassnamesDirective, SearchableDropdownSelectModule, } from '@valtimo/components';
18
+ import { BehaviorSubject, combineLatest, Subject, Subscription, take, tap } from 'rxjs';
19
19
  import { CommonModule } from '@angular/common';
20
20
  import { TranslateModule } from '@ngx-translate/core';
21
+ import { ButtonModule, ComboBoxModule, DatePickerModule, IconModule, LayerModule, ToggletipModule, } from 'carbon-components-angular';
22
+ import { UserFollow16 } from '@carbon/icons';
23
+ import { filter, map } from 'rxjs/operators';
21
24
  import * as i0 from "@angular/core";
22
25
  import * as i1 from "../../services";
23
- import * as i2 from "@angular/common";
24
- import * as i3 from "@ngx-translate/core";
25
- import * as i4 from "@valtimo/components";
26
+ import * as i2 from "carbon-components-angular";
27
+ import * as i3 from "@valtimo/components";
28
+ import * as i4 from "@angular/common";
29
+ import * as i5 from "@ngx-translate/core";
30
+ import * as i6 from "carbon-components-angular/dropdown";
26
31
  export class AssignUserToTaskComponent {
27
- constructor(taskService) {
32
+ set canAssignUserToTask(value) {
33
+ this.canAssignUserToTaskSet$.next(true);
34
+ this.canAssignUserToTask$.next(value);
35
+ }
36
+ constructor(taskService, iconService, elementRef, renderer2, cdsThemeService) {
28
37
  this.taskService = taskService;
38
+ this.iconService = iconService;
39
+ this.elementRef = elementRef;
40
+ this.renderer2 = renderer2;
41
+ this.cdsThemeService = cdsThemeService;
29
42
  this.assignmentOfTaskChanged = new EventEmitter();
43
+ this.canAssignUserToTaskSet$ = new BehaviorSubject(false);
44
+ this.canAssignUserToTask$ = new BehaviorSubject(false);
30
45
  this.assignedIdOnServer$ = new BehaviorSubject(null);
31
- this.assignedUserFullName$ = new BehaviorSubject(null);
32
- this.candidateUsersForTask$ = new BehaviorSubject(undefined);
46
+ this._assignedUserFullName$ = new BehaviorSubject(null);
47
+ this.assignedUserFullName$ = this._assignedUserFullName$.pipe(map(fullName => `${fullName?.trim()}`));
48
+ this._candidateUsersForTask$ = new BehaviorSubject(undefined);
49
+ this._selectedUserId$ = new BehaviorSubject(null);
50
+ this.selectedUserId$ = this._selectedUserId$.asObservable();
51
+ this.candidateUsersForTask$ = combineLatest([
52
+ this._candidateUsersForTask$,
53
+ this._selectedUserId$,
54
+ ]).pipe(map(([users, selectedUserId]) => this.mapUsersForDropdown(users, selectedUserId)));
55
+ this.mouseIsOverAssignee$ = new BehaviorSubject(false);
56
+ this.open$ = new Subject();
33
57
  this.disabled$ = new BehaviorSubject(true);
34
- this.userIdToAssign = null;
58
+ this.toggletipTheme$ = this.cdsThemeService.toggletipTheme$;
35
59
  this._subscriptions = new Subscription();
60
+ this.iconService.registerAll([UserFollow16]);
36
61
  }
37
62
  ngOnInit() {
38
- this._subscriptions.add(this.taskService.getCandidateUsers(this.taskId).subscribe(candidateUsers => {
39
- this.candidateUsersForTask$.next(candidateUsers);
40
- if (this.assigneeId) {
41
- this.assignedIdOnServer$.next(this.assigneeId);
42
- this.userIdToAssign = this.assigneeId;
43
- this.assignedUserFullName$.next(this.getAssignedUserName(candidateUsers, this.assigneeId));
44
- }
45
- this.enable();
46
- }));
63
+ this.fetchCandidateUsers();
64
+ this.openHideElementSubscription();
47
65
  }
48
66
  ngOnChanges(changes) {
49
- this.candidateUsersForTask$.pipe(take(1)).subscribe(candidateUsers => {
67
+ this._candidateUsersForTask$.pipe(take(1)).subscribe(candidateUsers => {
50
68
  const currentUserId = changes.assigneeId?.currentValue || this.assigneeId;
51
69
  this.assignedIdOnServer$.next(currentUserId || null);
52
- this.userIdToAssign = currentUserId || null;
53
- this.assignedUserFullName$.next(this.getAssignedUserName(candidateUsers ?? [], currentUserId));
70
+ this._selectedUserId$.next(currentUserId || null);
71
+ this._assignedUserFullName$.next(this.getAssignedUserName(candidateUsers ?? [], currentUserId));
54
72
  });
55
73
  }
56
74
  ngOnDestroy() {
@@ -59,26 +77,32 @@ export class AssignUserToTaskComponent {
59
77
  assignTask(userId) {
60
78
  this.disable();
61
79
  combineLatest([
62
- this.candidateUsersForTask$,
80
+ this._candidateUsersForTask$,
63
81
  this.taskService.assignTask(this.taskId, { assignee: userId }),
64
82
  ])
65
- .pipe(take(1), tap(([candidateUsers]) => {
66
- this.userIdToAssign = userId;
67
- this.assignedIdOnServer$.next(userId);
68
- this.assignedUserFullName$.next(this.getAssignedUserName(candidateUsers ?? [], userId));
69
- this.emitChange();
70
- this.enable();
71
- }))
72
- .subscribe();
83
+ .pipe(take(1))
84
+ .subscribe({
85
+ next: ([candidateUsers]) => {
86
+ this._selectedUserId$.next(userId);
87
+ this.assignedIdOnServer$.next(userId);
88
+ this._assignedUserFullName$.next(this.getAssignedUserName(candidateUsers ?? [], userId));
89
+ this.closeToggletip();
90
+ this.emitChange();
91
+ this.enable();
92
+ },
93
+ error: () => {
94
+ this.enable();
95
+ },
96
+ });
73
97
  }
74
98
  unassignTask() {
75
99
  this.disable();
76
100
  this.taskService
77
101
  .unassignTask(this.taskId)
78
102
  .pipe(tap(() => {
79
- this.clear();
80
103
  this.emitChange();
81
104
  this.enable();
105
+ this.clear();
82
106
  }))
83
107
  .subscribe();
84
108
  }
@@ -89,16 +113,30 @@ export class AssignUserToTaskComponent {
89
113
  }
90
114
  return userId || '-';
91
115
  }
92
- mapUsersForDropdown(users) {
93
- return (users &&
94
- users
95
- .map(user => ({ ...user, lastName: user.lastName?.split(' ').splice(-1)[0] || '' }))
96
- .sort((a, b) => a.lastName.localeCompare(b.lastName))
97
- .map(user => ({ text: user.label, id: user.id })));
116
+ onMouseEnterAssignee() {
117
+ this.mouseIsOverAssignee$.next(true);
118
+ }
119
+ onMouseLeaveAssignee() {
120
+ this.mouseIsOverAssignee$.next(false);
121
+ }
122
+ onSubmitButtonClick() {
123
+ this.assignTask(this._selectedUserId$.getValue());
124
+ }
125
+ onUserSelect(event) {
126
+ if (!event?.id)
127
+ return;
128
+ this._selectedUserId$.next(event.id);
98
129
  }
99
130
  clear() {
100
131
  this.assignedIdOnServer$.next(null);
101
- this.userIdToAssign = null;
132
+ this._selectedUserId$.next(null);
133
+ }
134
+ mapUsersForDropdown(users, selectedUserId) {
135
+ return (users
136
+ ?.map(user => ({ ...user, lastName: user.lastName?.split(' ').splice(-1)[0] || '' }))
137
+ .sort((a, b) => a.lastName.localeCompare(b.lastName))
138
+ .map(user => ({ content: user.label, id: user.id, selected: user.id === selectedUserId })) ||
139
+ []);
102
140
  }
103
141
  emitChange() {
104
142
  this.assignmentOfTaskChanged.emit();
@@ -109,17 +147,64 @@ export class AssignUserToTaskComponent {
109
147
  disable() {
110
148
  this.disabled$.next(true);
111
149
  }
112
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AssignUserToTaskComponent, deps: [{ token: i1.TaskService }], target: i0.ɵɵFactoryTarget.Component }); }
113
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AssignUserToTaskComponent, isStandalone: true, selector: "valtimo-assign-user-to-task", inputs: { taskId: "taskId", assigneeId: "assigneeId" }, outputs: { assignmentOfTaskChanged: "assignmentOfTaskChanged" }, usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n candidateUsers: candidateUsersForTask$ | async,\n disabled: disabled$ | async,\n idOnServer: assignedIdOnServer$ | async,\n } as obs\"\n>\n <div class=\"container-fluid\">\n <div class=\"mt-2 mb-2\">\n <div class=\"col-12 pl-0 d-flex flex-row align-items-center\">\n <valtimo-searchable-dropdown-select\n *ngIf=\"obs.candidateUsers; else loading\"\n [style]=\"'underlinedText'\"\n [items]=\"mapUsersForDropdown(obs.candidateUsers)\"\n [buttonText]=\"'assignTask.header' | translate\"\n [searchText]=\"'interface.typeToSearch' | translate\"\n [noResultsText]=\"'interface.noSearchResults' | translate\"\n [disabled]=\"obs.disabled\"\n [selectedText]=\"'assignTask.assignedTo' | translate\"\n [selectedTextValue]=\"assignedUserFullName$ | async\"\n [clearSelectionButtonTitle]=\"'assignTask.remove' | translate\"\n [hasSelection]=\"userIdToAssign === obs.idOnServer && obs.idOnServer !== null\"\n [width]=\"250\"\n (itemSelected)=\"assignTask($event)\"\n (clearSelection)=\"unassignTask()\"\n >\n </valtimo-searchable-dropdown-select>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <h5>\n <b>{{ 'assignTask.fetchingUsers' | translate }}</b>\n </h5>\n</ng-template>\n", styles: [".container-fluid{color:#959595;padding:0;margin:0}i{font-size:13px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: SearchableDropdownSelectModule }, { kind: "component", type: i4.SearchableDropdownSelectComponent, selector: "valtimo-searchable-dropdown-select", inputs: ["style", "items", "buttonText", "searchText", "noResultsText", "disabled", "selectedText", "selectedTextValue", "clearSelectionButtonTitle", "hasSelection", "width", "hasPermission", "showClearSelection"], outputs: ["itemSelected", "clearSelection"] }] }); }
150
+ closeToggletip() {
151
+ // needed to reliably trigger toggle tip closure
152
+ this.open$.next(true);
153
+ setTimeout(() => this.open$.next(false));
154
+ }
155
+ fetchCandidateUsers() {
156
+ this.canAssignUserToTask$
157
+ .pipe(filter(allowed => !!allowed), take(1))
158
+ .subscribe(() => {
159
+ this.taskService.getCandidateUsers(this.taskId).subscribe(candidateUsers => {
160
+ this._candidateUsersForTask$.next(candidateUsers);
161
+ if (this.assigneeId) {
162
+ this.assignedIdOnServer$.next(this.assigneeId);
163
+ this._selectedUserId$.next(this.assigneeId);
164
+ this._assignedUserFullName$.next(this.getAssignedUserName(candidateUsers, this.assigneeId));
165
+ }
166
+ this.enable();
167
+ });
168
+ });
169
+ }
170
+ openHideElementSubscription() {
171
+ this._subscriptions.add(combineLatest([
172
+ this.selectedUserId$,
173
+ this.assignedIdOnServer$,
174
+ this.canAssignUserToTask$,
175
+ ]).subscribe(([selectedUserId, idOnServer, canAssignUserToTask]) => {
176
+ if (!canAssignUserToTask && !(selectedUserId === idOnServer && idOnServer !== null)) {
177
+ this.renderer2.setStyle(this.elementRef.nativeElement, 'display', 'none');
178
+ }
179
+ else {
180
+ this.renderer2.removeStyle(this.elementRef.nativeElement, 'display');
181
+ }
182
+ }));
183
+ }
184
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AssignUserToTaskComponent, deps: [{ token: i1.TaskService }, { token: i2.IconService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i3.CdsThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
185
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AssignUserToTaskComponent, isStandalone: true, selector: "valtimo-assign-user-to-task", inputs: { taskId: "taskId", assigneeId: "assigneeId", canAssignUserToTask: "canAssignUserToTask" }, outputs: { assignmentOfTaskChanged: "assignmentOfTaskChanged" }, usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"\n (canAssignUserToTaskSet$ | async) && {\n candidateUsers: candidateUsersForTask$ | async,\n disabled: disabled$ | async,\n idOnServer: assignedIdOnServer$ | async,\n mouseIsOverAssignee: mouseIsOverAssignee$ | async,\n assignedUserFullName: assignedUserFullName$ | async,\n selectedUserId: selectedUserId$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\n \"\n>\n <ng-container\n *ngIf=\"{hasSelection: obs.selectedUserId === obs.idOnServer && obs.idOnServer !== null} as vars\"\n >\n <div\n class=\"assign-user-container\"\n *ngIf=\"obs.canAssignUserToTask || (!obs.canAssignUserToTask && vars.hasSelection)\"\n (mouseenter)=\"onMouseEnterAssignee()\"\n (mouseleave)=\"onMouseLeaveAssignee()\"\n >\n <div\n class=\"assignee-text element\"\n [ngClass]=\"{\n active: obs.canAssignUserToTask\n ? vars.hasSelection && !obs.mouseIsOverAssignee\n : vars.hasSelection,\n }\"\n >\n <span class=\"bold\">{{ 'assignTask.assignedTo' | translate }}</span>\n\n &nbsp;\n\n <span class=\"name\">{{ obs.assignedUserFullName }}</span>\n </div>\n\n <button\n *ngIf=\"obs.canAssignUserToTask\"\n cdsButton=\"ghost\"\n class=\"element remove-button\"\n [ngClass]=\"{active: vars.hasSelection && obs.mouseIsOverAssignee}\"\n [disabled]=\"obs.disabled\"\n size=\"sm\"\n (click)=\"unassignTask()\"\n >\n {{ 'assignTask.remove' | translate }}\n </button>\n\n <cds-toggletip\n align=\"bottom\"\n class=\"element main\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: !vars.hasSelection}\"\n (onOpen)=\"clear()\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"tertiary\"\n size=\"sm\"\n class=\"set-assignee-button\"\n >\n {{ 'assignTask.buttonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n </button>\n\n <div\n cdsToggletipContent\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"assign-task-popover-content\"\n >\n <cds-combo-box\n *ngIf=\"!vars.hasSelection\"\n [label]=\"'assignTask.comboboxLabel' | translate\"\n [placeholder]=\"'assignTask.placeholder' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs?.candidateUsers || []\"\n [disabled]=\"obs.disabled\"\n (selected)=\"onUserSelect($event)\"\n (clear)=\"clear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <button\n cdsButton\n class=\"submit-task-button\"\n [disabled]=\"!obs.selectedUserId || obs.disabled\"\n (click)=\"onSubmitButtonClick()\"\n >\n {{ 'assignTask.submitButtonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n </button>\n </div>\n </cds-toggletip>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.assign-user-container{display:flex;align-items:center;justify-content:center;position:relative;font-weight:400;font-size:14px;line-height:18px;letter-spacing:.16px;color:var(--cds-link-01)}.assign-user-container .bold{font-weight:700;flex-shrink:0}.assign-user-container .name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remove-button{width:100%}.assignee-text{display:flex;justify-content:flex-start;align-items:center;width:100%}.element{opacity:0;visibility:hidden;position:absolute;transition:opacity .3s ease-in-out}.element.active{opacity:1;visibility:visible}.element.main{position:relative}.assign-task-popover-content{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.assign-task-popover-content .cds--btn{width:100%;max-width:unset}.set-assignee-button{width:250px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: SearchableDropdownSelectModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: ToggletipModule }, { kind: "component", type: i2.Toggletip, selector: "cds-toggletip, ibm-toggletip", inputs: ["id", "isOpen"] }, { kind: "directive", type: i2.ToggletipButton, selector: "[cdsToggletipButton], [ibmToggletipButton]", inputs: ["ariaLabel"] }, { kind: "directive", type: i2.ToggletipContent, selector: "[cdsToggletipContent], [ibmToggletipContent]" }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "component", type: i2.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i6.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: RemoveClassnamesDirective, selector: "[removeClassnames]", inputs: ["removeClassnames"] }] }); }
114
186
  }
115
187
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AssignUserToTaskComponent, decorators: [{
116
188
  type: Component,
117
- args: [{ selector: 'valtimo-assign-user-to-task', standalone: true, imports: [CommonModule, TranslateModule, SearchableDropdownSelectModule], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n candidateUsers: candidateUsersForTask$ | async,\n disabled: disabled$ | async,\n idOnServer: assignedIdOnServer$ | async,\n } as obs\"\n>\n <div class=\"container-fluid\">\n <div class=\"mt-2 mb-2\">\n <div class=\"col-12 pl-0 d-flex flex-row align-items-center\">\n <valtimo-searchable-dropdown-select\n *ngIf=\"obs.candidateUsers; else loading\"\n [style]=\"'underlinedText'\"\n [items]=\"mapUsersForDropdown(obs.candidateUsers)\"\n [buttonText]=\"'assignTask.header' | translate\"\n [searchText]=\"'interface.typeToSearch' | translate\"\n [noResultsText]=\"'interface.noSearchResults' | translate\"\n [disabled]=\"obs.disabled\"\n [selectedText]=\"'assignTask.assignedTo' | translate\"\n [selectedTextValue]=\"assignedUserFullName$ | async\"\n [clearSelectionButtonTitle]=\"'assignTask.remove' | translate\"\n [hasSelection]=\"userIdToAssign === obs.idOnServer && obs.idOnServer !== null\"\n [width]=\"250\"\n (itemSelected)=\"assignTask($event)\"\n (clearSelection)=\"unassignTask()\"\n >\n </valtimo-searchable-dropdown-select>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <h5>\n <b>{{ 'assignTask.fetchingUsers' | translate }}</b>\n </h5>\n</ng-template>\n", styles: [".container-fluid{color:#959595;padding:0;margin:0}i{font-size:13px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
118
- }], ctorParameters: () => [{ type: i1.TaskService }], propDecorators: { taskId: [{
189
+ args: [{ selector: 'valtimo-assign-user-to-task', standalone: true, imports: [
190
+ CommonModule,
191
+ TranslateModule,
192
+ SearchableDropdownSelectModule,
193
+ ButtonModule,
194
+ ToggletipModule,
195
+ IconModule,
196
+ LayerModule,
197
+ DatePickerModule,
198
+ ComboBoxModule,
199
+ RemoveClassnamesDirective,
200
+ ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"\n (canAssignUserToTaskSet$ | async) && {\n candidateUsers: candidateUsersForTask$ | async,\n disabled: disabled$ | async,\n idOnServer: assignedIdOnServer$ | async,\n mouseIsOverAssignee: mouseIsOverAssignee$ | async,\n assignedUserFullName: assignedUserFullName$ | async,\n selectedUserId: selectedUserId$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\n \"\n>\n <ng-container\n *ngIf=\"{hasSelection: obs.selectedUserId === obs.idOnServer && obs.idOnServer !== null} as vars\"\n >\n <div\n class=\"assign-user-container\"\n *ngIf=\"obs.canAssignUserToTask || (!obs.canAssignUserToTask && vars.hasSelection)\"\n (mouseenter)=\"onMouseEnterAssignee()\"\n (mouseleave)=\"onMouseLeaveAssignee()\"\n >\n <div\n class=\"assignee-text element\"\n [ngClass]=\"{\n active: obs.canAssignUserToTask\n ? vars.hasSelection && !obs.mouseIsOverAssignee\n : vars.hasSelection,\n }\"\n >\n <span class=\"bold\">{{ 'assignTask.assignedTo' | translate }}</span>\n\n &nbsp;\n\n <span class=\"name\">{{ obs.assignedUserFullName }}</span>\n </div>\n\n <button\n *ngIf=\"obs.canAssignUserToTask\"\n cdsButton=\"ghost\"\n class=\"element remove-button\"\n [ngClass]=\"{active: vars.hasSelection && obs.mouseIsOverAssignee}\"\n [disabled]=\"obs.disabled\"\n size=\"sm\"\n (click)=\"unassignTask()\"\n >\n {{ 'assignTask.remove' | translate }}\n </button>\n\n <cds-toggletip\n align=\"bottom\"\n class=\"element main\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: !vars.hasSelection}\"\n (onOpen)=\"clear()\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"tertiary\"\n size=\"sm\"\n class=\"set-assignee-button\"\n >\n {{ 'assignTask.buttonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n </button>\n\n <div\n cdsToggletipContent\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"assign-task-popover-content\"\n >\n <cds-combo-box\n *ngIf=\"!vars.hasSelection\"\n [label]=\"'assignTask.comboboxLabel' | translate\"\n [placeholder]=\"'assignTask.placeholder' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs?.candidateUsers || []\"\n [disabled]=\"obs.disabled\"\n (selected)=\"onUserSelect($event)\"\n (clear)=\"clear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <button\n cdsButton\n class=\"submit-task-button\"\n [disabled]=\"!obs.selectedUserId || obs.disabled\"\n (click)=\"onSubmitButtonClick()\"\n >\n {{ 'assignTask.submitButtonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n </button>\n </div>\n </cds-toggletip>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.assign-user-container{display:flex;align-items:center;justify-content:center;position:relative;font-weight:400;font-size:14px;line-height:18px;letter-spacing:.16px;color:var(--cds-link-01)}.assign-user-container .bold{font-weight:700;flex-shrink:0}.assign-user-container .name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remove-button{width:100%}.assignee-text{display:flex;justify-content:flex-start;align-items:center;width:100%}.element{opacity:0;visibility:hidden;position:absolute;transition:opacity .3s ease-in-out}.element.active{opacity:1;visibility:visible}.element.main{position:relative}.assign-task-popover-content{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.assign-task-popover-content .cds--btn{width:100%;max-width:unset}.set-assignee-button{width:250px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
201
+ }], ctorParameters: () => [{ type: i1.TaskService }, { type: i2.IconService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i3.CdsThemeService }], propDecorators: { taskId: [{
119
202
  type: Input
120
203
  }], assigneeId: [{
121
204
  type: Input
122
205
  }], assignmentOfTaskChanged: [{
123
206
  type: Output
207
+ }], canAssignUserToTask: [{
208
+ type: Input
124
209
  }] } });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaWduLXVzZXItdG8tdGFzay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL2Fzc2lnbi11c2VyLXRvLXRhc2svYXNzaWduLXVzZXItdG8tdGFzay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL2Fzc2lnbi11c2VyLXRvLXRhc2svYXNzaWduLXVzZXItdG8tdGFzay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLDhCQUE4QixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHN0UsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBU3BELE1BQU0sT0FBTyx5QkFBeUI7SUFZcEMsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFUbEMsNEJBQXVCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRCx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDL0QsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBQ2pFLDJCQUFzQixHQUFHLElBQUksZUFBZSxDQUEwQixTQUFTLENBQUMs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RSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FDbEQsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLO1FBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVPLE1BQU07UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU8sT0FBTztRQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7K0dBaEhVLHlCQUF5QjttR0FBekIseUJBQXlCLHFPQ3ZDdEMsd2dFQXFEQSw0dkJEaEJZLFlBQVksdUxBQUUsZUFBZSwyRkFBRSw4QkFBOEI7OzRGQUU1RCx5QkFBeUI7a0JBUHJDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBRzNCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsOEJBQThCLENBQUM7Z0ZBRy9ELE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLHVCQUF1QjtzQkFBaEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Ryb3Bkb3duSXRlbSwgU2VhcmNoYWJsZURyb3Bkb3duU2VsZWN0TW9kdWxlfSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBTdWJzY3JpcHRpb24sIHRha2UsIHRhcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1Rhc2tTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge05hbWVkVXNlcn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWFzc2lnbi11c2VyLXRvLXRhc2snLFxuICB0ZW1wbGF0ZVVybDogJy4vYXNzaWduLXVzZXItdG8tdGFzay5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Fzc2lnbi11c2VyLXRvLXRhc2suY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBTZWFyY2hhYmxlRHJvcGRvd25TZWxlY3RNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBBc3NpZ25Vc2VyVG9UYXNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHRhc2tJZDogc3RyaW5nO1xuICBASW5wdXQoKSBhc3NpZ25lZUlkOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBhc3NpZ25tZW50T2ZUYXNrQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgYXNzaWduZWRJZE9uU2VydmVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyBhc3NpZ25lZFVzZXJGdWxsTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgY2FuZGlkYXRlVXNlcnNGb3JUYXNrJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TmFtZWRVc2VyW10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyBkaXNhYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgdXNlcklkVG9Bc3NpZ246IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFza1NlcnZpY2U6IFRhc2tTZXJ2aWNlKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFza1NlcnZpY2UuZ2V0Q2FuZGlkYXRlVXNlcnModGhpcy50YXNrSWQpLnN1YnNjcmliZShjYW5kaWRhdGVVc2VycyA9PiB7XG4gICAgICAgIHRoaXMuY2FuZGlkYXRlVXNlcnNGb3JUYXNrJC5uZXh0KGNhbmRpZGF0ZVVzZXJzKTtcbiAgICAgICAgaWYgKHRoaXMuYXNzaWduZWVJZCkge1xuICAgICAgICAgIHRoaXMuYXNzaWduZWRJZE9uU2VydmVyJC5uZXh0KHRoaXMuYXNzaWduZWVJZCk7XG4gICAgICAgICAgdGhpcy51c2VySWRUb0Fzc2lnbiA9IHRoaXMuYXNzaWduZWVJZDtcbiAgICAgICAgICB0aGlzLmFzc2lnbmVkVXNlckZ1bGxOYW1lJC5uZXh0KFxuICAgICAgICAgICAgdGhpcy5nZXRBc3NpZ25lZFVzZXJOYW1lKGNhbmRpZGF0ZVVzZXJzLCB0aGlzLmFzc2lnbmVlSWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmRpZGF0ZVVzZXJzRm9yVGFzayQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoY2FuZGlkYXRlVXNlcnMgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IGNoYW5nZXMuYXNzaWduZWVJZD8uY3VycmVudFZhbHVlIHx8IHRoaXMuYXNzaWduZWVJZDtcbiAgICAgIHRoaXMuYXNzaWduZWRJZE9uU2VydmVyJC5uZXh0KGN1cnJlbnRVc2VySWQgfHwgbnVsbCk7XG4gICAgICB0aGlzLnVzZXJJZFRvQXNzaWduID0gY3VycmVudFVzZXJJZCB8fCBudWxsO1xuICAgICAgdGhpcy5hc3NpZ25lZFVzZXJGdWxsTmFtZSQubmV4dChcbiAgICAgICAgdGhpcy5nZXRBc3NpZ25lZFVzZXJOYW1lKGNhbmRpZGF0ZVVzZXJzID8/IFtdLCBjdXJyZW50VXNlcklkKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgYXNzaWduVGFzayh1c2VySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jYW5kaWRhdGVVc2Vyc0ZvclRhc2skLFxuICAgICAgdGhpcy50YXNrU2VydmljZS5hc3NpZ25UYXNrKHRoaXMudGFza0lkLCB7YXNzaWduZWU6IHVzZXJJZH0pLFxuICAgIF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFwKChbY2FuZGlkYXRlVXNlcnNdKSA9PiB7XG4gICAgICAgICAgdGhpcy51c2VySWRUb0Fzc2lnbiA9IHVzZXJJZDtcbiAgICAgICAgICB0aGlzLmFzc2lnbmVkSWRPblNlcnZlciQubmV4dCh1c2VySWQpO1xuICAgICAgICAgIHRoaXMuYXNzaWduZWRVc2VyRnVsbE5hbWUkLm5leHQodGhpcy5nZXRBc3NpZ25lZFVzZXJOYW1lKGNhbmRpZGF0ZVVzZXJzID8/IFtdLCB1c2VySWQpKTtcbiAgICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICAgICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHVuYXNzaWduVGFzaygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGUoKTtcbiAgICB0aGlzLnRhc2tTZXJ2aWNlXG4gICAgICAudW5hc3NpZ25UYXNrKHRoaXMudGFza0lkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXNzaWduZWRVc2VyTmFtZSh1c2VyczogTmFtZWRVc2VyW10sIHVzZXJJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodXNlcnMgJiYgdXNlcklkKSB7XG4gICAgICBjb25zdCBmaW5kVXNlciA9XG4gICAgICAgIHVzZXJzLmZpbmQodXNlciA9PiB1c2VyLmlkID09PSB1c2VySWQpIHx8IHVzZXJzLmZpbmQodXNlciA9PiB1c2VyLnVzZXJOYW1lID09PSB1c2VySWQpO1xuICAgICAgcmV0dXJuIGZpbmRVc2VyID8gZmluZFVzZXIubGFiZWwgOiB1c2VySWQ7XG4gICAgfVxuICAgIHJldHVybiB1c2VySWQgfHwgJy0nO1xuICB9XG5cbiAgcHVibGljIG1hcFVzZXJzRm9yRHJvcGRvd24odXNlcnM6IE5hbWVkVXNlcltdKTogRHJvcGRvd25JdGVtW10ge1xuICAgIHJldHVybiAoXG4gICAgICB1c2VycyAmJlxuICAgICAgdXNlcnNcbiAgICAgICAgLm1hcCh1c2VyID0+ICh7Li4udXNlciwgbGFzdE5hbWU6IHVzZXIubGFzdE5hbWU/LnNwbGl0KCcgJykuc3BsaWNlKC0xKVswXSB8fCAnJ30pKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sYXN0TmFtZS5sb2NhbGVDb21wYXJlKGIubGFzdE5hbWUpKVxuICAgICAgICAubWFwKHVzZXIgPT4gKHt0ZXh0OiB1c2VyLmxhYmVsLCBpZDogdXNlci5pZH0pKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuYXNzaWduZWRJZE9uU2VydmVyJC5uZXh0KG51bGwpO1xuICAgIHRoaXMudXNlcklkVG9Bc3NpZ24gPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuYXNzaWdubWVudE9mVGFza0NoYW5nZWQuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGUoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGUoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCQubmV4dCh0cnVlKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48bmctY29udGFpbmVyXG4gICpuZ0lmPVwie1xuICAgIGNhbmRpZGF0ZVVzZXJzOiBjYW5kaWRhdGVVc2Vyc0ZvclRhc2skIHwgYXN5bmMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkJCB8IGFzeW5jLFxuICAgIGlkT25TZXJ2ZXI6IGFzc2lnbmVkSWRPblNlcnZlciQgfCBhc3luYyxcbiAgfSBhcyBvYnNcIlxuPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgPGRpdiBjbGFzcz1cIm10LTIgbWItMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwbC0wIGQtZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPHZhbHRpbW8tc2VhcmNoYWJsZS1kcm9wZG93bi1zZWxlY3RcbiAgICAgICAgICAqbmdJZj1cIm9icy5jYW5kaWRhdGVVc2VyczsgZWxzZSBsb2FkaW5nXCJcbiAgICAgICAgICBbc3R5bGVdPVwiJ3VuZGVybGluZWRUZXh0J1wiXG4gICAgICAgICAgW2l0ZW1zXT1cIm1hcFVzZXJzRm9yRHJvcGRvd24ob2JzLmNhbmRpZGF0ZVVzZXJzKVwiXG4gICAgICAgICAgW2J1dHRvblRleHRdPVwiJ2Fzc2lnblRhc2suaGVhZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3NlYXJjaFRleHRdPVwiJ2ludGVyZmFjZS50eXBlVG9TZWFyY2gnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbbm9SZXN1bHRzVGV4dF09XCInaW50ZXJmYWNlLm5vU2VhcmNoUmVzdWx0cycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIlxuICAgICAgICAgIFtzZWxlY3RlZFRleHRdPVwiJ2Fzc2lnblRhc2suYXNzaWduZWRUbycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtzZWxlY3RlZFRleHRWYWx1ZV09XCJhc3NpZ25lZFVzZXJGdWxsTmFtZSQgfCBhc3luY1wiXG4gICAgICAgICAgW2NsZWFyU2VsZWN0aW9uQnV0dG9uVGl0bGVdPVwiJ2Fzc2lnblRhc2sucmVtb3ZlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2hhc1NlbGVjdGlvbl09XCJ1c2VySWRUb0Fzc2lnbiA9PT0gb2JzLmlkT25TZXJ2ZXIgJiYgb2JzLmlkT25TZXJ2ZXIgIT09IG51bGxcIlxuICAgICAgICAgIFt3aWR0aF09XCIyNTBcIlxuICAgICAgICAgIChpdGVtU2VsZWN0ZWQpPVwiYXNzaWduVGFzaygkZXZlbnQpXCJcbiAgICAgICAgICAoY2xlYXJTZWxlY3Rpb24pPVwidW5hc3NpZ25UYXNrKClcIlxuICAgICAgICA+XG4gICAgICAgIDwvdmFsdGltby1zZWFyY2hhYmxlLWRyb3Bkb3duLXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmc+XG4gIDxoNT5cbiAgICA8Yj57eyAnYXNzaWduVGFzay5mZXRjaGluZ1VzZXJzJyB8IHRyYW5zbGF0ZSB9fTwvYj5cbiAgPC9oNT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaWduLXVzZXItdG8tdGFzay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL2Fzc2lnbi11c2VyLXRvLXRhc2svYXNzaWduLXVzZXItdG8tdGFzay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL2Fzc2lnbi11c2VyLXRvLXRhc2svYXNzaWduLXVzZXItdG8tdGFzay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEdBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLHlCQUF5QixFQUN6Qiw4QkFBOEIsR0FDL0IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHbEcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUVWLFdBQVcsRUFFWCxlQUFlLEdBQ2hCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQW9CM0MsTUFBTSxPQUFPLHlCQUF5QjtJQVFwQyxJ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bUI7c0JBQXRDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDZHNUaGVtZVNlcnZpY2UsXG4gIFJlbW92ZUNsYXNzbmFtZXNEaXJlY3RpdmUsXG4gIFNlYXJjaGFibGVEcm9wZG93blNlbGVjdE1vZHVsZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlLCB0YXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUYXNrU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtOYW1lZFVzZXJ9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIEJ1dHRvbk1vZHVsZSxcbiAgQ29tYm9Cb3hNb2R1bGUsXG4gIERhdGVQaWNrZXJNb2R1bGUsXG4gIEljb25Nb2R1bGUsXG4gIEljb25TZXJ2aWNlLFxuICBMYXllck1vZHVsZSxcbiAgTGlzdEl0ZW0sXG4gIFRvZ2dsZXRpcE1vZHVsZSxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge1VzZXJGb2xsb3cxNn0gZnJvbSAnQGNhcmJvbi9pY29ucyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tYXNzaWduLXVzZXItdG8tdGFzaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NpZ24tdXNlci10by10YXNrLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXNzaWduLXVzZXItdG8tdGFzay5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBTZWFyY2hhYmxlRHJvcGRvd25TZWxlY3RNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIFRvZ2dsZXRpcE1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIExheWVyTW9kdWxlLFxuICAgIERhdGVQaWNrZXJNb2R1bGUsXG4gICAgQ29tYm9Cb3hNb2R1bGUsXG4gICAgUmVtb3ZlQ2xhc3NuYW1lc0RpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQXNzaWduVXNlclRvVGFza0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwdWJsaWMgcmVhZG9ubHkgdGFza0lkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyByZWFkb25seSBhc3NpZ25lZUlkOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgYXNzaWdubWVudE9mVGFza0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhbkFzc2lnblVzZXJUb1Rhc2tTZXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBjYW5Bc3NpZ25Vc2VyVG9UYXNrJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgY2FuQXNzaWduVXNlclRvVGFzayh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY2FuQXNzaWduVXNlclRvVGFza1NldCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGFzc2lnbmVkSWRPblNlcnZlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hc3NpZ25lZFVzZXJGdWxsTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgYXNzaWduZWRVc2VyRnVsbE5hbWUkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLl9hc3NpZ25lZFVzZXJGdWxsTmFtZSQucGlwZShcbiAgICBtYXAoZnVsbE5hbWUgPT4gYCR7ZnVsbE5hbWU/LnRyaW0oKX1gKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhbmRpZGF0ZVVzZXJzRm9yVGFzayQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5hbWVkVXNlcltdIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RlZFVzZXJJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRVc2VySWQkID0gdGhpcy5fc2VsZWN0ZWRVc2VySWQkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjYW5kaWRhdGVVc2Vyc0ZvclRhc2skID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fY2FuZGlkYXRlVXNlcnNGb3JUYXNrJCxcbiAgICB0aGlzLl9zZWxlY3RlZFVzZXJJZCQsXG4gIF0pLnBpcGUobWFwKChbdXNlcnMsIHNlbGVjdGVkVXNlcklkXSkgPT4gdGhpcy5tYXBVc2Vyc0ZvckRyb3Bkb3duKHVzZXJzLCBzZWxlY3RlZFVzZXJJZCkpKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW91c2VJc092ZXJBc3NpZ25lZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IG9wZW4kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGRpc2FibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHRvZ2dsZXRpcFRoZW1lJCA9IHRoaXMuY2RzVGhlbWVTZXJ2aWNlLnRvZ2dsZXRpcFRoZW1lJDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFza1NlcnZpY2U6IFRhc2tTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RzVGhlbWVTZXJ2aWNlOiBDZHNUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbVXNlckZvbGxvdzE2XSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mZXRjaENhbmRpZGF0ZVVzZXJzKCk7XG4gICAgdGhpcy5vcGVuSGlkZUVsZW1lbnRTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5fY2FuZGlkYXRlVXNlcnNGb3JUYXNrJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShjYW5kaWRhdGVVc2VycyA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gY2hhbmdlcy5hc3NpZ25lZUlkPy5jdXJyZW50VmFsdWUgfHwgdGhpcy5hc3NpZ25lZUlkO1xuICAgICAgdGhpcy5hc3NpZ25lZElkT25TZXJ2ZXIkLm5leHQoY3VycmVudFVzZXJJZCB8fCBudWxsKTtcbiAgICAgIHRoaXMuX3NlbGVjdGVkVXNlcklkJC5uZXh0KGN1cnJlbnRVc2VySWQgfHwgbnVsbCk7XG4gICAgICB0aGlzLl9hc3NpZ25lZFVzZXJGdWxsTmFtZSQubmV4dChcbiAgICAgICAgdGhpcy5nZXRBc3NpZ25lZFVzZXJOYW1lKGNhbmRpZGF0ZVVzZXJzID8/IFtdLCBjdXJyZW50VXNlcklkKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgYXNzaWduVGFzayh1c2VySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLl9jYW5kaWRhdGVVc2Vyc0ZvclRhc2skLFxuICAgICAgdGhpcy50YXNrU2VydmljZS5hc3NpZ25UYXNrKHRoaXMudGFza0lkLCB7YXNzaWduZWU6IHVzZXJJZH0pLFxuICAgIF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChbY2FuZGlkYXRlVXNlcnNdKSA9PiB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRVc2VySWQkLm5leHQodXNlcklkKTtcbiAgICAgICAgICB0aGlzLmFzc2lnbmVkSWRPblNlcnZlciQubmV4dCh1c2VySWQpO1xuICAgICAgICAgIHRoaXMuX2Fzc2lnbmVkVXNlckZ1bGxOYW1lJC5uZXh0KHRoaXMuZ2V0QXNzaWduZWRVc2VyTmFtZShjYW5kaWRhdGVVc2VycyA/PyBbXSwgdXNlcklkKSk7XG4gICAgICAgICAgdGhpcy5jbG9zZVRvZ2dsZXRpcCgpO1xuICAgICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVuYXNzaWduVGFzaygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGUoKTtcbiAgICB0aGlzLnRhc2tTZXJ2aWNlXG4gICAgICAudW5hc3NpZ25UYXNrKHRoaXMudGFza0lkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXNzaWduZWRVc2VyTmFtZSh1c2VyczogTmFtZWRVc2VyW10sIHVzZXJJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodXNlcnMgJiYgdXNlcklkKSB7XG4gICAgICBjb25zdCBmaW5kVXNlciA9XG4gICAgICAgIHVzZXJzLmZpbmQodXNlciA9PiB1c2VyLmlkID09PSB1c2VySWQpIHx8IHVzZXJzLmZpbmQodXNlciA9PiB1c2VyLnVzZXJOYW1lID09PSB1c2VySWQpO1xuICAgICAgcmV0dXJuIGZpbmRVc2VyID8gZmluZFVzZXIubGFiZWwgOiB1c2VySWQ7XG4gICAgfVxuICAgIHJldHVybiB1c2VySWQgfHwgJy0nO1xuICB9XG5cbiAgcHVibGljIG9uTW91c2VFbnRlckFzc2lnbmVlKCk6IHZvaWQge1xuICAgIHRoaXMubW91c2VJc092ZXJBc3NpZ25lZSQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdXNlTGVhdmVBc3NpZ25lZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vdXNlSXNPdmVyQXNzaWduZWUkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG9uU3VibWl0QnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5hc3NpZ25UYXNrKHRoaXMuX3NlbGVjdGVkVXNlcklkJC5nZXRWYWx1ZSgpKTtcbiAgfVxuICBwdWJsaWMgb25Vc2VyU2VsZWN0KGV2ZW50OiBMaXN0SXRlbSk6IHZvaWQge1xuICAgIGlmICghZXZlbnQ/LmlkKSByZXR1cm47XG4gICAgdGhpcy5fc2VsZWN0ZWRVc2VySWQkLm5leHQoZXZlbnQuaWQpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuYXNzaWduZWRJZE9uU2VydmVyJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX3NlbGVjdGVkVXNlcklkJC5uZXh0KG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBVc2Vyc0ZvckRyb3Bkb3duKHVzZXJzOiBOYW1lZFVzZXJbXSwgc2VsZWN0ZWRVc2VySWQ6IHN0cmluZyk6IExpc3RJdGVtW10ge1xuICAgIHJldHVybiAoXG4gICAgICB1c2Vyc1xuICAgICAgICA/Lm1hcCh1c2VyID0+ICh7Li4udXNlciwgbGFzdE5hbWU6IHVzZXIubGFzdE5hbWU/LnNwbGl0KCcgJykuc3BsaWNlKC0xKVswXSB8fCAnJ30pKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sYXN0TmFtZS5sb2NhbGVDb21wYXJlKGIubGFzdE5hbWUpKVxuICAgICAgICAubWFwKHVzZXIgPT4gKHtjb250ZW50OiB1c2VyLmxhYmVsLCBpZDogdXNlci5pZCwgc2VsZWN0ZWQ6IHVzZXIuaWQgPT09IHNlbGVjdGVkVXNlcklkfSkpIHx8XG4gICAgICBbXVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5hc3NpZ25tZW50T2ZUYXNrQ2hhbmdlZC5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZVRvZ2dsZXRpcCgpOiB2b2lkIHtcbiAgICAvLyBuZWVkZWQgdG8gcmVsaWFibHkgdHJpZ2dlciB0b2dnbGUgdGlwIGNsb3N1cmVcbiAgICB0aGlzLm9wZW4kLm5leHQodHJ1ZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm9wZW4kLm5leHQoZmFsc2UpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hDYW5kaWRhdGVVc2VycygpOiB2b2lkIHtcbiAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGFsbG93ZWQgPT4gISFhbGxvd2VkKSxcbiAgICAgICAgdGFrZSgxKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMudGFza1NlcnZpY2UuZ2V0Q2FuZGlkYXRlVXNlcnModGhpcy50YXNrSWQpLnN1YnNjcmliZShjYW5kaWRhdGVVc2VycyA9PiB7XG4gICAgICAgICAgdGhpcy5fY2FuZGlkYXRlVXNlcnNGb3JUYXNrJC5uZXh0KGNhbmRpZGF0ZVVzZXJzKTtcbiAgICAgICAgICBpZiAodGhpcy5hc3NpZ25lZUlkKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2lnbmVkSWRPblNlcnZlciQubmV4dCh0aGlzLmFzc2lnbmVlSWQpO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRVc2VySWQkLm5leHQodGhpcy5hc3NpZ25lZUlkKTtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnbmVkVXNlckZ1bGxOYW1lJC5uZXh0KFxuICAgICAgICAgICAgICB0aGlzLmdldEFzc2lnbmVkVXNlck5hbWUoY2FuZGlkYXRlVXNlcnMsIHRoaXMuYXNzaWduZWVJZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5IaWRlRWxlbWVudFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcklkJCxcbiAgICAgICAgdGhpcy5hc3NpZ25lZElkT25TZXJ2ZXIkLFxuICAgICAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skLFxuICAgICAgXSkuc3Vic2NyaWJlKChbc2VsZWN0ZWRVc2VySWQsIGlkT25TZXJ2ZXIsIGNhbkFzc2lnblVzZXJUb1Rhc2tdKSA9PiB7XG4gICAgICAgIGlmICghY2FuQXNzaWduVXNlclRvVGFzayAmJiAhKHNlbGVjdGVkVXNlcklkID09PSBpZE9uU2VydmVyICYmIGlkT25TZXJ2ZXIgIT09IG51bGwpKSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5yZW1vdmVTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJcbiAgICAoY2FuQXNzaWduVXNlclRvVGFza1NldCQgfCBhc3luYykgJiYge1xuICAgICAgY2FuZGlkYXRlVXNlcnM6IGNhbmRpZGF0ZVVzZXJzRm9yVGFzayQgfCBhc3luYyxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCQgfCBhc3luYyxcbiAgICAgIGlkT25TZXJ2ZXI6IGFzc2lnbmVkSWRPblNlcnZlciQgfCBhc3luYyxcbiAgICAgIG1vdXNlSXNPdmVyQXNzaWduZWU6IG1vdXNlSXNPdmVyQXNzaWduZWUkIHwgYXN5bmMsXG4gICAgICBhc3NpZ25lZFVzZXJGdWxsTmFtZTogYXNzaWduZWRVc2VyRnVsbE5hbWUkIHwgYXN5bmMsXG4gICAgICBzZWxlY3RlZFVzZXJJZDogc2VsZWN0ZWRVc2VySWQkIHwgYXN5bmMsXG4gICAgICBjYW5Bc3NpZ25Vc2VyVG9UYXNrOiBjYW5Bc3NpZ25Vc2VyVG9UYXNrJCB8IGFzeW5jLFxuICAgIH0gYXMgb2JzXG4gIFwiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIntoYXNTZWxlY3Rpb246IG9icy5zZWxlY3RlZFVzZXJJZCA9PT0gb2JzLmlkT25TZXJ2ZXIgJiYgb2JzLmlkT25TZXJ2ZXIgIT09IG51bGx9IGFzIHZhcnNcIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJhc3NpZ24tdXNlci1jb250YWluZXJcIlxuICAgICAgKm5nSWY9XCJvYnMuY2FuQXNzaWduVXNlclRvVGFzayB8fCAoIW9icy5jYW5Bc3NpZ25Vc2VyVG9UYXNrICYmIHZhcnMuaGFzU2VsZWN0aW9uKVwiXG4gICAgICAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXJBc3NpZ25lZSgpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZUFzc2lnbmVlKClcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJhc3NpZ25lZS10ZXh0IGVsZW1lbnRcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgYWN0aXZlOiBvYnMuY2FuQXNzaWduVXNlclRvVGFza1xuICAgICAgICAgICAgPyB2YXJzLmhhc1NlbGVjdGlvbiAmJiAhb2JzLm1vdXNlSXNPdmVyQXNzaWduZWVcbiAgICAgICAgICAgIDogdmFycy5oYXNTZWxlY3Rpb24sXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJvbGRcIj57eyAnYXNzaWduVGFzay5hc3NpZ25lZFRvJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cblxuICAgICAgICAmbmJzcDtcblxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWVcIj57eyBvYnMuYXNzaWduZWRVc2VyRnVsbE5hbWUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9icy5jYW5Bc3NpZ25Vc2VyVG9UYXNrXCJcbiAgICAgICAgY2RzQnV0dG9uPVwiZ2hvc3RcIlxuICAgICAgICBjbGFzcz1cImVsZW1lbnQgcmVtb3ZlLWJ1dHRvblwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInthY3RpdmU6IHZhcnMuaGFzU2VsZWN0aW9uICYmIG9icy5tb3VzZUlzT3ZlckFzc2lnbmVlfVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIlxuICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAoY2xpY2spPVwidW5hc3NpZ25UYXNrKClcIlxuICAgICAgPlxuICAgICAgICB7eyAnYXNzaWduVGFzay5yZW1vdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGNkcy10b2dnbGV0aXBcbiAgICAgICAgYWxpZ249XCJib3R0b21cIlxuICAgICAgICBjbGFzcz1cImVsZW1lbnQgbWFpblwiXG4gICAgICAgIFthdXRvQWxpZ25dPVwidHJ1ZVwiXG4gICAgICAgIFtpc09wZW5dPVwib3BlbiQgfCBhc3luY1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cInthY3RpdmU6ICF2YXJzLmhhc1NlbGVjdGlvbn1cIlxuICAgICAgICAob25PcGVuKT1cImNsZWFyKClcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2RzVG9nZ2xldGlwQnV0dG9uXG4gICAgICAgICAgW3JlbW92ZUNsYXNzbmFtZXNdPVwiWydjZHMtLXRvZ2dsZXRpcC1idXR0b24nXVwiXG4gICAgICAgICAgY2RzQnV0dG9uPVwidGVydGlhcnlcIlxuICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgY2xhc3M9XCJzZXQtYXNzaWduZWUtYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdhc3NpZ25UYXNrLmJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG5cbiAgICAgICAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwidXNlci0tZm9sbG93XCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjZHNUb2dnbGV0aXBDb250ZW50XG4gICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwidG9nZ2xldGlwVGhlbWUkIHwgYXN5bmNcIlxuICAgICAgICAgIGNsYXNzPVwiYXNzaWduLXRhc2stcG9wb3Zlci1jb250ZW50XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjZHMtY29tYm8tYm94XG4gICAgICAgICAgICAqbmdJZj1cIiF2YXJzLmhhc1NlbGVjdGlvblwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2Fzc2lnblRhc2suY29tYm9ib3hMYWJlbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidhc3NpZ25UYXNrLnBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgICAgW2Ryb3BVcF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbY2RzTGF5ZXJdPVwiMVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwib2JzPy5jYW5kaWRhdGVVc2VycyB8fCBbXVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkXCJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvblVzZXJTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2xlYXIpPVwiY2xlYXIoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IG9uY2xpY2s9XCJldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgICAgPC9jZHMtY29tYm8tYm94PlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2RzQnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInN1Ym1pdC10YXNrLWJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW9icy5zZWxlY3RlZFVzZXJJZCB8fCBvYnMuZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ2Fzc2lnblRhc2suc3VibWl0QnV0dG9uVGV4dCcgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInVzZXItLWZvbGxvd1wiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvY2RzLXRvZ2dsZXRpcD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -0,0 +1,128 @@
1
+ /*
2
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
3
+ *
4
+ * Licensed under EUPL, Version 1.2 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Component, Input } from '@angular/core';
17
+ import { CommonModule } from '@angular/common';
18
+ import { TranslateModule } from '@ngx-translate/core';
19
+ import { BehaviorSubject, Subject } from 'rxjs';
20
+ import { filter, map } from 'rxjs/operators';
21
+ import { ButtonModule, DatePickerModule, IconModule, LayerModule, ToggletipModule, } from 'carbon-components-angular';
22
+ import { CalendarAdd16 } from '@carbon/icons';
23
+ import { RemoveClassnamesDirective } from '@valtimo/components';
24
+ import * as i0 from "@angular/core";
25
+ import * as i1 from "carbon-components-angular";
26
+ import * as i2 from "../../services";
27
+ import * as i3 from "@valtimo/components";
28
+ import * as i4 from "@angular/common";
29
+ import * as i5 from "@ngx-translate/core";
30
+ export class SetTaskDueDateComponent {
31
+ set canModifyTask(value) {
32
+ this.canModifyTaskSet$.next(true);
33
+ this.canModifyTask$.next(value);
34
+ }
35
+ get _task() {
36
+ return this._task$.getValue();
37
+ }
38
+ get _selectedDateString() {
39
+ return this.selectedDateString$.getValue();
40
+ }
41
+ set task(value) {
42
+ if (!value)
43
+ return;
44
+ this.hasDueDate$.next(!!value.due);
45
+ this._task$.next(value);
46
+ }
47
+ constructor(iconService, taskService, cdsThemeService) {
48
+ this.iconService = iconService;
49
+ this.taskService = taskService;
50
+ this.cdsThemeService = cdsThemeService;
51
+ this.canModifyTaskSet$ = new BehaviorSubject(false);
52
+ this.canModifyTask$ = new BehaviorSubject(false);
53
+ this._task$ = new BehaviorSubject(null);
54
+ this.hasDueDate$ = new BehaviorSubject(false);
55
+ this.selectedDateString$ = new BehaviorSubject('');
56
+ this.taskDueDate$ = this._task$.pipe(filter(task => !!task), map(task => new Date(task.due)));
57
+ this.disabled$ = new BehaviorSubject(false);
58
+ this.open$ = new Subject();
59
+ this.mouseIsOverDueDate$ = new BehaviorSubject(false);
60
+ this.toggletipTheme$ = this.cdsThemeService.toggletipTheme$;
61
+ this.iconService.registerAll([CalendarAdd16]);
62
+ }
63
+ onDateValueChange(value) {
64
+ const date = Array.isArray(value) && value[0];
65
+ if (!date)
66
+ return;
67
+ this.selectedDateString$.next(date.toISOString());
68
+ }
69
+ onSubmitButtonClick() {
70
+ this.disabled$.next(true);
71
+ this.taskService.setTaskDueDate(this._task.id, { dueDate: this._selectedDateString }).subscribe({
72
+ next: () => {
73
+ this.disabled$.next(false);
74
+ this.hasDueDate$.next(true);
75
+ this._task$.next({ ...this._task, due: this._selectedDateString });
76
+ this.selectedDateString$.next('');
77
+ this.closeToggletip();
78
+ },
79
+ error: () => {
80
+ this.disabled$.next(false);
81
+ },
82
+ });
83
+ }
84
+ onRemoveButtonClick() {
85
+ this.disabled$.next(true);
86
+ this.taskService.removeTaskDueDate(this._task.id).subscribe({
87
+ next: () => {
88
+ this.disabled$.next(false);
89
+ this.hasDueDate$.next(false);
90
+ this._task$.next({ ...this._task, due: null });
91
+ },
92
+ error: () => {
93
+ this.disabled$.next(false);
94
+ },
95
+ });
96
+ }
97
+ closeToggletip() {
98
+ // needed to reliably trigger toggle tip closure
99
+ this.open$.next(true);
100
+ setTimeout(() => this.open$.next(false));
101
+ }
102
+ onMouseEnterDueDate() {
103
+ this.mouseIsOverDueDate$.next(true);
104
+ }
105
+ onMouseLeaveDueDate() {
106
+ this.mouseIsOverDueDate$.next(false);
107
+ }
108
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SetTaskDueDateComponent, deps: [{ token: i1.IconService }, { token: i2.TaskService }, { token: i3.CdsThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
109
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SetTaskDueDateComponent, isStandalone: true, selector: "valtimo-set-task-due-date", inputs: { canModifyTask: "canModifyTask", task: "task" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<ng-container\n *ngIf=\"\n (canModifyTaskSet$ | async) && {\n hasDueDate: hasDueDate$ | async,\n taskDueDate: taskDueDate$ | async,\n selectedDateString: selectedDateString$ | async,\n disabled: disabled$ | async,\n mouseIsOverDueDate: mouseIsOverDueDate$ | async,\n canModifyTask: canModifyTask$ | async,\n } as obs\n \"\n>\n <div\n *ngIf=\"obs.canModifyTask || (!obs.canModifyTask && obs.hasDueDate)\"\n class=\"due-date-container\"\n (mouseenter)=\"onMouseEnterDueDate()\"\n (mouseleave)=\"onMouseLeaveDueDate()\"\n >\n <div\n class=\"due-date-text element\"\n [ngClass]=\"{\n active: obs.canModifyTask ? obs.hasDueDate && !obs.mouseIsOverDueDate : obs.hasDueDate,\n }\"\n >\n <span class=\"bold\">{{ 'setTaskDueDate.dueDateText' | translate }}</span>\n\n &nbsp;\n\n {{ obs.taskDueDate | date: 'dd-MM-yyyy' }}\n </div>\n\n <button\n *ngIf=\"obs.canModifyTask\"\n cdsButton=\"ghost\"\n class=\"element remove-button\"\n [ngClass]=\"{active: obs.hasDueDate && obs.mouseIsOverDueDate}\"\n [disabled]=\"obs.disabled\"\n size=\"sm\"\n (click)=\"onRemoveButtonClick()\"\n >\n {{ 'setTaskDueDate.removeButtonText' | translate }}\n </button>\n\n <cds-toggletip\n align=\"bottom\"\n class=\"element main\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: !obs.hasDueDate}\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"tertiary\"\n size=\"sm\"\n class=\"set-task-due-date-button\"\n >\n {{ 'setTaskDueDate.buttonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"calendar--add\" size=\"16\"></svg>\n </button>\n\n <div\n cdsToggletipContent\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"assign-due-date-popover-content\"\n >\n <cds-date-picker\n *ngIf=\"!obs.hasDueDate\"\n [cdsLayer]=\"1\"\n [label]=\"'Select date'\"\n [placeholder]=\"'dd-mm-jjjj'\"\n dateFormat=\"d/m/Y\"\n [disabled]=\"obs.disabled\"\n (valueChange)=\"onDateValueChange($event)\"\n ></cds-date-picker>\n\n <button\n cdsButton\n class=\"submit-due-date-button\"\n [disabled]=\"!obs.selectedDateString || obs.disabled\"\n (click)=\"onSubmitButtonClick()\"\n >\n {{ 'setTaskDueDate.submitButtonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"calendar--add\" size=\"16\"></svg>\n </button>\n </div>\n </cds-toggletip>\n </div>\n</ng-container>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.due-date-container{display:flex;align-items:center;justify-content:center;position:relative;font-weight:400;font-size:14px;line-height:18px;letter-spacing:.16px;color:var(--cds-link-01)}.due-date-container .bold{font-weight:700}.remove-button{width:100%}.due-date-text{display:flex;justify-content:flex-start;align-items:center;width:100%}.element{opacity:0;visibility:hidden;position:absolute;transition:opacity .3s ease-in-out}.element.active{opacity:1;visibility:visible}.element.main{position:relative}.assign-due-date-popover-content{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.assign-due-date-popover-content .cds--btn{width:100%;max-width:unset}.assign-due-date-popover-content ::ng-deep .cds--date-picker-input__wrapper,.assign-due-date-popover-content ::ng-deep .cds--date-picker-input__wrapper>span,.assign-due-date-popover-content ::ng-deep .cds--date-picker-container,.assign-due-date-popover-content ::ng-deep .cds--date-picker,.assign-due-date-popover-content ::ng-deep .cds--date-picker__input{width:100%}.set-task-due-date-button{width:250px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.DatePipe, name: "date" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: ToggletipModule }, { kind: "component", type: i1.Toggletip, selector: "cds-toggletip, ibm-toggletip", inputs: ["id", "isOpen"] }, { kind: "directive", type: i1.ToggletipButton, selector: "[cdsToggletipButton], [ibmToggletipButton]", inputs: ["ariaLabel"] }, { kind: "directive", type: i1.ToggletipContent, selector: "[cdsToggletipContent], [ibmToggletipContent]" }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i1.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "directive", type: RemoveClassnamesDirective, selector: "[removeClassnames]", inputs: ["removeClassnames"] }] }); }
110
+ }
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SetTaskDueDateComponent, decorators: [{
112
+ type: Component,
113
+ args: [{ selector: 'valtimo-set-task-due-date', standalone: true, imports: [
114
+ CommonModule,
115
+ TranslateModule,
116
+ ButtonModule,
117
+ IconModule,
118
+ ToggletipModule,
119
+ DatePickerModule,
120
+ LayerModule,
121
+ RemoveClassnamesDirective,
122
+ ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<ng-container\n *ngIf=\"\n (canModifyTaskSet$ | async) && {\n hasDueDate: hasDueDate$ | async,\n taskDueDate: taskDueDate$ | async,\n selectedDateString: selectedDateString$ | async,\n disabled: disabled$ | async,\n mouseIsOverDueDate: mouseIsOverDueDate$ | async,\n canModifyTask: canModifyTask$ | async,\n } as obs\n \"\n>\n <div\n *ngIf=\"obs.canModifyTask || (!obs.canModifyTask && obs.hasDueDate)\"\n class=\"due-date-container\"\n (mouseenter)=\"onMouseEnterDueDate()\"\n (mouseleave)=\"onMouseLeaveDueDate()\"\n >\n <div\n class=\"due-date-text element\"\n [ngClass]=\"{\n active: obs.canModifyTask ? obs.hasDueDate && !obs.mouseIsOverDueDate : obs.hasDueDate,\n }\"\n >\n <span class=\"bold\">{{ 'setTaskDueDate.dueDateText' | translate }}</span>\n\n &nbsp;\n\n {{ obs.taskDueDate | date: 'dd-MM-yyyy' }}\n </div>\n\n <button\n *ngIf=\"obs.canModifyTask\"\n cdsButton=\"ghost\"\n class=\"element remove-button\"\n [ngClass]=\"{active: obs.hasDueDate && obs.mouseIsOverDueDate}\"\n [disabled]=\"obs.disabled\"\n size=\"sm\"\n (click)=\"onRemoveButtonClick()\"\n >\n {{ 'setTaskDueDate.removeButtonText' | translate }}\n </button>\n\n <cds-toggletip\n align=\"bottom\"\n class=\"element main\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: !obs.hasDueDate}\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"tertiary\"\n size=\"sm\"\n class=\"set-task-due-date-button\"\n >\n {{ 'setTaskDueDate.buttonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"calendar--add\" size=\"16\"></svg>\n </button>\n\n <div\n cdsToggletipContent\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"assign-due-date-popover-content\"\n >\n <cds-date-picker\n *ngIf=\"!obs.hasDueDate\"\n [cdsLayer]=\"1\"\n [label]=\"'Select date'\"\n [placeholder]=\"'dd-mm-jjjj'\"\n dateFormat=\"d/m/Y\"\n [disabled]=\"obs.disabled\"\n (valueChange)=\"onDateValueChange($event)\"\n ></cds-date-picker>\n\n <button\n cdsButton\n class=\"submit-due-date-button\"\n [disabled]=\"!obs.selectedDateString || obs.disabled\"\n (click)=\"onSubmitButtonClick()\"\n >\n {{ 'setTaskDueDate.submitButtonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"calendar--add\" size=\"16\"></svg>\n </button>\n </div>\n </cds-toggletip>\n </div>\n</ng-container>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.due-date-container{display:flex;align-items:center;justify-content:center;position:relative;font-weight:400;font-size:14px;line-height:18px;letter-spacing:.16px;color:var(--cds-link-01)}.due-date-container .bold{font-weight:700}.remove-button{width:100%}.due-date-text{display:flex;justify-content:flex-start;align-items:center;width:100%}.element{opacity:0;visibility:hidden;position:absolute;transition:opacity .3s ease-in-out}.element.active{opacity:1;visibility:visible}.element.main{position:relative}.assign-due-date-popover-content{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.assign-due-date-popover-content .cds--btn{width:100%;max-width:unset}.assign-due-date-popover-content ::ng-deep .cds--date-picker-input__wrapper,.assign-due-date-popover-content ::ng-deep .cds--date-picker-input__wrapper>span,.assign-due-date-popover-content ::ng-deep .cds--date-picker-container,.assign-due-date-popover-content ::ng-deep .cds--date-picker,.assign-due-date-popover-content ::ng-deep .cds--date-picker__input{width:100%}.set-task-due-date-button{width:250px}\n"] }]
123
+ }], ctorParameters: () => [{ type: i1.IconService }, { type: i2.TaskService }, { type: i3.CdsThemeService }], propDecorators: { canModifyTask: [{
124
+ type: Input
125
+ }], task: [{
126
+ type: Input
127
+ }] } });
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LXRhc2stZHVlLWRhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby90YXNrL3NyYy9saWIvY29tcG9uZW50cy9zZXQtdGFzay1kdWUtZGF0ZS9zZXQtdGFzay1kdWUtZGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL3NldC10YXNrLWR1ZS1kYXRlL3NldC10YXNrLWR1ZS1kYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFVBQVUsRUFFVixXQUFXLEVBQ1gsZUFBZSxHQUNoQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHNUMsT0FBTyxFQUFrQix5QkFBeUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7O0FBa0IvRSxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDLElBQW9CLGFBQWEsQ0FBQyxLQUFjO1FBQzlDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMs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QUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7K0dBcEdVLHVCQUF1QjttR0FBdkIsdUJBQXVCLCtJQ25EcEMsbTJHQTBHQSw2ckNEakVJLFlBQVksd1VBQ1osZUFBZSwyRkFDZixZQUFZLGdNQUNaLFVBQVUsNE5BQ1YsZUFBZSx5WEFDZixnQkFBZ0IscWZBQ2hCLFdBQVcsMEtBQ1gseUJBQXlCOzs0RkFHaEIsdUJBQXVCO2tCQWhCbkMsU0FBUzsrQkFDRSwyQkFBMkIsY0FHekIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gseUJBQXlCO3FCQUMxQjt3SUFNbUIsYUFBYTtzQkFBaEMsS0FBSztnQkFtQmMsSUFBSTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7UHJvY2Vzc0luc3RhbmNlVGFza30gZnJvbSAnQHZhbHRpbW8vcHJvY2Vzcyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIERhdGVQaWNrZXJNb2R1bGUsXG4gIEljb25Nb2R1bGUsXG4gIEljb25TZXJ2aWNlLFxuICBMYXllck1vZHVsZSxcbiAgVG9nZ2xldGlwTW9kdWxlLFxufSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7Q2FsZW5kYXJBZGQxNn0gZnJvbSAnQGNhcmJvbi9pY29ucyc7XG5pbXBvcnQge1Rhc2tTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1Rhc2t9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0Nkc1RoZW1lU2VydmljZSwgUmVtb3ZlQ2xhc3NuYW1lc0RpcmVjdGl2ZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tc2V0LXRhc2stZHVlLWRhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2V0LXRhc2stZHVlLWRhdGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZXQtdGFzay1kdWUtZGF0ZS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBUb2dnbGV0aXBNb2R1bGUsXG4gICAgRGF0ZVBpY2tlck1vZHVsZSxcbiAgICBMYXllck1vZHVsZSxcbiAgICBSZW1vdmVDbGFzc25hbWVzRGlyZWN0aXZlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTZXRUYXNrRHVlRGF0ZUNvbXBvbmVudCB7XG4gIHB1YmxpYyByZWFkb25seSBjYW5Nb2RpZnlUYXNrU2V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FuTW9kaWZ5VGFzayQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGNhbk1vZGlmeVRhc2sodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNhbk1vZGlmeVRhc2tTZXQkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5jYW5Nb2RpZnlUYXNrJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rhc2skID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYXJ0aWFsPFByb2Nlc3NJbnN0YW5jZVRhc2s+IHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSBnZXQgX3Rhc2soKTogUGFydGlhbDxQcm9jZXNzSW5zdGFuY2VUYXNrPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90YXNrJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGhhc0R1ZURhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZVN0cmluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHByaXZhdGUgZ2V0IF9zZWxlY3RlZERhdGVTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGVTdHJpbmckLmdldFZhbHVlKCk7XG4gIH1cblxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHRhc2sodmFsdWU6IFByb2Nlc3NJbnN0YW5jZVRhc2sgfCBUYXNrKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuaGFzRHVlRGF0ZSQubmV4dCghIXZhbHVlLmR1ZSk7XG4gICAgdGhpcy5fdGFzayQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdGFza0R1ZURhdGUkID0gdGhpcy5fdGFzayQucGlwZShcbiAgICBmaWx0ZXIodGFzayA9PiAhIXRhc2spLFxuICAgIG1hcCh0YXNrID0+IG5ldyBEYXRlKHRhc2suZHVlKSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IG9wZW4kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW91c2VJc092ZXJEdWVEYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSB0b2dnbGV0aXBUaGVtZSQgPSB0aGlzLmNkc1RoZW1lU2VydmljZS50b2dnbGV0aXBUaGVtZSQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXNrU2VydmljZTogVGFza1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHNUaGVtZVNlcnZpY2U6IENkc1RoZW1lU2VydmljZVxuICApIHtcbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyQWxsKFtDYWxlbmRhckFkZDE2XSk7XG4gIH1cblxuICBwdWJsaWMgb25EYXRlVmFsdWVDaGFuZ2UodmFsdWU6IERhdGVbXSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZVswXTtcbiAgICBpZiAoIWRhdGUpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZVN0cmluZyQubmV4dChkYXRlLnRvSVNPU3RyaW5nKCkpO1xuICB9XG5cbiAgcHVibGljIG9uU3VibWl0QnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCQubmV4dCh0cnVlKTtcblxuICAgIHRoaXMudGFza1NlcnZpY2Uuc2V0VGFza0R1ZURhdGUodGhpcy5fdGFzay5pZCwge2R1ZURhdGU6IHRoaXMuX3NlbGVjdGVkRGF0ZVN0cmluZ30pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmhhc0R1ZURhdGUkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuX3Rhc2skLm5leHQoey4uLnRoaXMuX3Rhc2ssIGR1ZTogdGhpcy5fc2VsZWN0ZWREYXRlU3RyaW5nfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlU3RyaW5nJC5uZXh0KCcnKTtcbiAgICAgICAgdGhpcy5jbG9zZVRvZ2dsZXRpcCgpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQkLm5leHQoZmFsc2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlbW92ZUJ1dHRvbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQkLm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLnRhc2tTZXJ2aWNlLnJlbW92ZVRhc2tEdWVEYXRlKHRoaXMuX3Rhc2suaWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmhhc0R1ZURhdGUkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLl90YXNrJC5uZXh0KHsuLi50aGlzLl90YXNrLCBkdWU6IG51bGx9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc2FibGVkJC5uZXh0KGZhbHNlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlVG9nZ2xldGlwKCk6IHZvaWQge1xuICAgIC8vIG5lZWRlZCB0byByZWxpYWJseSB0cmlnZ2VyIHRvZ2dsZSB0aXAgY2xvc3VyZVxuICAgIHRoaXMub3BlbiQubmV4dCh0cnVlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3BlbiQubmV4dChmYWxzZSkpO1xuICB9XG5cbiAgcHVibGljIG9uTW91c2VFbnRlckR1ZURhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5tb3VzZUlzT3ZlckR1ZURhdGUkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25Nb3VzZUxlYXZlRHVlRGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vdXNlSXNPdmVyRHVlRGF0ZSQubmV4dChmYWxzZSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJcbiAgICAoY2FuTW9kaWZ5VGFza1NldCQgfCBhc3luYykgJiYge1xuICAgICAgaGFzRHVlRGF0ZTogaGFzRHVlRGF0ZSQgfCBhc3luYyxcbiAgICAgIHRhc2tEdWVEYXRlOiB0YXNrRHVlRGF0ZSQgfCBhc3luYyxcbiAgICAgIHNlbGVjdGVkRGF0ZVN0cmluZzogc2VsZWN0ZWREYXRlU3RyaW5nJCB8IGFzeW5jLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkJCB8IGFzeW5jLFxuICAgICAgbW91c2VJc092ZXJEdWVEYXRlOiBtb3VzZUlzT3ZlckR1ZURhdGUkIHwgYXN5bmMsXG4gICAgICBjYW5Nb2RpZnlUYXNrOiBjYW5Nb2RpZnlUYXNrJCB8IGFzeW5jLFxuICAgIH0gYXMgb2JzXG4gIFwiXG4+XG4gIDxkaXZcbiAgICAqbmdJZj1cIm9icy5jYW5Nb2RpZnlUYXNrIHx8ICghb2JzLmNhbk1vZGlmeVRhc2sgJiYgb2JzLmhhc0R1ZURhdGUpXCJcbiAgICBjbGFzcz1cImR1ZS1kYXRlLWNvbnRhaW5lclwiXG4gICAgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyRHVlRGF0ZSgpXCJcbiAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmVEdWVEYXRlKClcIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkdWUtZGF0ZS10ZXh0IGVsZW1lbnRcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICBhY3RpdmU6IG9icy5jYW5Nb2RpZnlUYXNrID8gb2JzLmhhc0R1ZURhdGUgJiYgIW9icy5tb3VzZUlzT3ZlckR1ZURhdGUgOiBvYnMuaGFzRHVlRGF0ZSxcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYm9sZFwiPnt7ICdzZXRUYXNrRHVlRGF0ZS5kdWVEYXRlVGV4dCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG5cbiAgICAgICZuYnNwO1xuXG4gICAgICB7eyBvYnMudGFza0R1ZURhdGUgfCBkYXRlOiAnZGQtTU0teXl5eScgfX1cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwib2JzLmNhbk1vZGlmeVRhc2tcIlxuICAgICAgY2RzQnV0dG9uPVwiZ2hvc3RcIlxuICAgICAgY2xhc3M9XCJlbGVtZW50IHJlbW92ZS1idXR0b25cIlxuICAgICAgW25nQ2xhc3NdPVwie2FjdGl2ZTogb2JzLmhhc0R1ZURhdGUgJiYgb2JzLm1vdXNlSXNPdmVyRHVlRGF0ZX1cIlxuICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiXG4gICAgICBzaXplPVwic21cIlxuICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlQnV0dG9uQ2xpY2soKVwiXG4gICAgPlxuICAgICAge3sgJ3NldFRhc2tEdWVEYXRlLnJlbW92ZUJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8Y2RzLXRvZ2dsZXRpcFxuICAgICAgYWxpZ249XCJib3R0b21cIlxuICAgICAgY2xhc3M9XCJlbGVtZW50IG1haW5cIlxuICAgICAgW2F1dG9BbGlnbl09XCJ0cnVlXCJcbiAgICAgIFtpc09wZW5dPVwib3BlbiQgfCBhc3luY1wiXG4gICAgICBbbmdDbGFzc109XCJ7YWN0aXZlOiAhb2JzLmhhc0R1ZURhdGV9XCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNkc1RvZ2dsZXRpcEJ1dHRvblxuICAgICAgICBbcmVtb3ZlQ2xhc3NuYW1lc109XCJbJ2Nkcy0tdG9nZ2xldGlwLWJ1dHRvbiddXCJcbiAgICAgICAgY2RzQnV0dG9uPVwidGVydGlhcnlcIlxuICAgICAgICBzaXplPVwic21cIlxuICAgICAgICBjbGFzcz1cInNldC10YXNrLWR1ZS1kYXRlLWJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIHt7ICdzZXRUYXNrRHVlRGF0ZS5idXR0b25UZXh0JyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJjYWxlbmRhci0tYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGRpdlxuICAgICAgICBjZHNUb2dnbGV0aXBDb250ZW50XG4gICAgICAgIFthdHRyLmRhdGEtY2FyYm9uLXRoZW1lXT1cInRvZ2dsZXRpcFRoZW1lJCB8IGFzeW5jXCJcbiAgICAgICAgY2xhc3M9XCJhc3NpZ24tZHVlLWRhdGUtcG9wb3Zlci1jb250ZW50XCJcbiAgICAgID5cbiAgICAgICAgPGNkcy1kYXRlLXBpY2tlclxuICAgICAgICAgICpuZ0lmPVwiIW9icy5oYXNEdWVEYXRlXCJcbiAgICAgICAgICBbY2RzTGF5ZXJdPVwiMVwiXG4gICAgICAgICAgW2xhYmVsXT1cIidTZWxlY3QgZGF0ZSdcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZGQtbW0tampqaidcIlxuICAgICAgICAgIGRhdGVGb3JtYXQ9XCJkL20vWVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uRGF0ZVZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9jZHMtZGF0ZS1waWNrZXI+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNkc0J1dHRvblxuICAgICAgICAgIGNsYXNzPVwic3VibWl0LWR1ZS1kYXRlLWJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFvYnMuc2VsZWN0ZWREYXRlU3RyaW5nIHx8IG9icy5kaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnc2V0VGFza0R1ZURhdGUuc3VibWl0QnV0dG9uVGV4dCcgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJjYWxlbmRhci0tYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9jZHMtdG9nZ2xldGlwPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19