@valtimo/task 12.14.0 → 13.0.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.
- package/fesm2022/valtimo-task.mjs +218 -173
- package/fesm2022/valtimo-task.mjs.map +1 -1
- package/lib/components/assign-user-to-task/assign-user-to-task.component.d.ts +1 -1
- package/lib/components/task-detail-content/task-detail-content.component.d.ts +3 -4
- package/lib/components/task-detail-content/task-detail-content.component.d.ts.map +1 -1
- package/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.d.ts +5 -6
- package/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.d.ts.map +1 -1
- package/lib/components/task-detail-modal/task-detail-modal.component.d.ts +10 -4
- package/lib/components/task-detail-modal/task-detail-modal.component.d.ts.map +1 -1
- package/lib/components/task-list/task-list.component.d.ts +8 -4
- package/lib/components/task-list/task-list.component.d.ts.map +1 -1
- package/lib/models/index.d.ts +1 -0
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/task-list.model.d.ts +2 -2
- package/lib/models/task-list.model.d.ts.map +1 -1
- package/lib/models/task-sse-event.model.d.ts +8 -0
- package/lib/models/task-sse-event.model.d.ts.map +1 -0
- package/lib/models/task.model.d.ts +1 -1
- package/lib/services/task-intermediate-save.service.d.ts +1 -1
- package/lib/services/task-intermediate-save.service.d.ts.map +1 -1
- package/lib/services/task-list-pagination.service.d.ts +1 -1
- package/lib/services/task-list-search.service.d.ts +1 -1
- package/lib/services/task-list-sort.service.d.ts +1 -1
- package/lib/services/task-list.service.d.ts +4 -7
- package/lib/services/task-list.service.d.ts.map +1 -1
- package/lib/services/task.service.d.ts +4 -4
- package/lib/services/task.service.d.ts.map +1 -1
- package/lib/task-permissions.d.ts +1 -1
- package/lib/task-permissions.d.ts.map +1 -1
- package/lib/task.module.d.ts +9 -10
- package/lib/task.module.d.ts.map +1 -1
- package/package.json +4 -7
- package/esm2022/lib/components/assign-user-to-task/assign-user-to-task.component.mjs +0 -210
- package/esm2022/lib/components/set-task-due-date/set-task-due-date.component.mjs +0 -128
- package/esm2022/lib/components/task-detail-content/task-detail-content.component.mjs +0 -398
- package/esm2022/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.mjs +0 -168
- package/esm2022/lib/components/task-detail-modal/task-detail-modal.component.mjs +0 -151
- package/esm2022/lib/components/task-list/task-list.component.mjs +0 -361
- package/esm2022/lib/constants/index.mjs +0 -17
- package/esm2022/lib/constants/task-list.constants.mjs +0 -22
- package/esm2022/lib/models/index.mjs +0 -21
- package/esm2022/lib/models/task-definition.model.mjs +0 -17
- package/esm2022/lib/models/task-intermediate-save.model.mjs +0 -17
- package/esm2022/lib/models/task-list-search-field.model.mjs +0 -43
- package/esm2022/lib/models/task-list.model.mjs +0 -22
- package/esm2022/lib/models/task.model.mjs +0 -17
- package/esm2022/lib/services/index.mjs +0 -23
- package/esm2022/lib/services/task-intermediate-save.service.mjs +0 -73
- package/esm2022/lib/services/task-list-column.service.mjs +0 -193
- package/esm2022/lib/services/task-list-pagination.service.mjs +0 -74
- package/esm2022/lib/services/task-list-query-param.service.mjs +0 -53
- package/esm2022/lib/services/task-list-search.service.mjs +0 -99
- package/esm2022/lib/services/task-list-sort.service.mjs +0 -116
- package/esm2022/lib/services/task-list.service.mjs +0 -60
- package/esm2022/lib/services/task.service.mjs +0 -104
- package/esm2022/lib/task-permissions.mjs +0 -44
- package/esm2022/lib/task-routing.module.mjs +0 -45
- package/esm2022/lib/task.module.mjs +0 -158
- package/esm2022/public_api.mjs +0 -31
- package/esm2022/valtimo-task.mjs +0 -5
|
@@ -1,210 +0,0 @@
|
|
|
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, EventEmitter, Input, Output, } from '@angular/core';
|
|
17
|
-
import { RemoveClassnamesDirective, SearchableDropdownSelectModule, } from '@valtimo/components';
|
|
18
|
-
import { BehaviorSubject, combineLatest, Subject, Subscription, take, tap } from 'rxjs';
|
|
19
|
-
import { CommonModule } from '@angular/common';
|
|
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';
|
|
24
|
-
import * as i0 from "@angular/core";
|
|
25
|
-
import * as i1 from "../../services";
|
|
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";
|
|
31
|
-
export class AssignUserToTaskComponent {
|
|
32
|
-
set canAssignUserToTask(value) {
|
|
33
|
-
this.canAssignUserToTaskSet$.next(true);
|
|
34
|
-
this.canAssignUserToTask$.next(value);
|
|
35
|
-
}
|
|
36
|
-
constructor(taskService, iconService, elementRef, renderer2, cdsThemeService) {
|
|
37
|
-
this.taskService = taskService;
|
|
38
|
-
this.iconService = iconService;
|
|
39
|
-
this.elementRef = elementRef;
|
|
40
|
-
this.renderer2 = renderer2;
|
|
41
|
-
this.cdsThemeService = cdsThemeService;
|
|
42
|
-
this.assignmentOfTaskChanged = new EventEmitter();
|
|
43
|
-
this.canAssignUserToTaskSet$ = new BehaviorSubject(false);
|
|
44
|
-
this.canAssignUserToTask$ = new BehaviorSubject(false);
|
|
45
|
-
this.assignedIdOnServer$ = new BehaviorSubject(null);
|
|
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();
|
|
57
|
-
this.disabled$ = new BehaviorSubject(true);
|
|
58
|
-
this.toggletipTheme$ = this.cdsThemeService.toggletipTheme$;
|
|
59
|
-
this._subscriptions = new Subscription();
|
|
60
|
-
this.iconService.registerAll([UserFollow16]);
|
|
61
|
-
}
|
|
62
|
-
ngOnInit() {
|
|
63
|
-
this.fetchCandidateUsers();
|
|
64
|
-
this.openHideElementSubscription();
|
|
65
|
-
}
|
|
66
|
-
ngOnChanges(changes) {
|
|
67
|
-
this._candidateUsersForTask$.pipe(take(1)).subscribe(candidateUsers => {
|
|
68
|
-
const currentUserId = changes.assigneeId?.currentValue || this.assigneeId;
|
|
69
|
-
this.assignedIdOnServer$.next(currentUserId || null);
|
|
70
|
-
this._selectedUserId$.next(currentUserId || null);
|
|
71
|
-
this._assignedUserFullName$.next(this.getAssignedUserName(candidateUsers ?? [], currentUserId));
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
ngOnDestroy() {
|
|
75
|
-
this._subscriptions.unsubscribe();
|
|
76
|
-
}
|
|
77
|
-
assignTask(userId) {
|
|
78
|
-
this.disable();
|
|
79
|
-
combineLatest([
|
|
80
|
-
this._candidateUsersForTask$,
|
|
81
|
-
this.taskService.assignTask(this.taskId, { assignee: userId }),
|
|
82
|
-
])
|
|
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
|
-
});
|
|
97
|
-
}
|
|
98
|
-
unassignTask() {
|
|
99
|
-
this.disable();
|
|
100
|
-
this.taskService
|
|
101
|
-
.unassignTask(this.taskId)
|
|
102
|
-
.pipe(tap(() => {
|
|
103
|
-
this.emitChange();
|
|
104
|
-
this.enable();
|
|
105
|
-
this.clear();
|
|
106
|
-
}))
|
|
107
|
-
.subscribe();
|
|
108
|
-
}
|
|
109
|
-
getAssignedUserName(users, userId) {
|
|
110
|
-
if (users && userId) {
|
|
111
|
-
const findUser = users.find(user => user.id === userId) || users.find(user => user.userName === userId);
|
|
112
|
-
return findUser ? findUser.label : userId;
|
|
113
|
-
}
|
|
114
|
-
return userId || '-';
|
|
115
|
-
}
|
|
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);
|
|
129
|
-
}
|
|
130
|
-
clear() {
|
|
131
|
-
this.assignedIdOnServer$.next(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
|
-
[]);
|
|
140
|
-
}
|
|
141
|
-
emitChange() {
|
|
142
|
-
this.assignmentOfTaskChanged.emit();
|
|
143
|
-
}
|
|
144
|
-
enable() {
|
|
145
|
-
this.disabled$.next(false);
|
|
146
|
-
}
|
|
147
|
-
disable() {
|
|
148
|
-
this.disabled$.next(true);
|
|
149
|
-
}
|
|
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 \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"] }] }); }
|
|
186
|
-
}
|
|
187
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AssignUserToTaskComponent, decorators: [{
|
|
188
|
-
type: Component,
|
|
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 \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: [{
|
|
202
|
-
type: Input
|
|
203
|
-
}], assigneeId: [{
|
|
204
|
-
type: Input
|
|
205
|
-
}], assignmentOfTaskChanged: [{
|
|
206
|
-
type: Output
|
|
207
|
-
}], canAssignUserToTask: [{
|
|
208
|
-
type: Input
|
|
209
|
-
}] } });
|
|
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==
|
|
@@ -1,128 +0,0 @@
|
|
|
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 \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 \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
|