@libs-ui/components-drag-drop 0.1.1-1
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/README.md +451 -0
- package/defines/css.define.d.ts +4 -0
- package/demo/demo.component.d.ts +56 -0
- package/drag-drop.directive.d.ts +39 -0
- package/drag-drop.service.d.ts +45 -0
- package/drag-item-in-container-virtual-scroll.directive.d.ts +25 -0
- package/drag-item.directive.d.ts +30 -0
- package/drag-scroll.directive.d.ts +24 -0
- package/esm2022/defines/css.define.mjs +104 -0
- package/esm2022/demo/demo.component.mjs +833 -0
- package/esm2022/drag-drop.directive.mjs +482 -0
- package/esm2022/drag-drop.service.mjs +96 -0
- package/esm2022/drag-item-in-container-virtual-scroll.directive.mjs +134 -0
- package/esm2022/drag-item.directive.mjs +267 -0
- package/esm2022/drag-scroll.directive.mjs +144 -0
- package/esm2022/index.mjs +7 -0
- package/esm2022/interfaces/event.interface.mjs +2 -0
- package/esm2022/libs-ui-components-drag-drop.mjs +5 -0
- package/fesm2022/libs-ui-components-drag-drop.mjs +2043 -0
- package/fesm2022/libs-ui-components-drag-drop.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/interfaces/event.interface.d.ts +60 -0
- package/package.json +28 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Injectable, signal } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class MoLibsSharedDragDropService {
|
|
5
|
+
itemsClick = new Array();
|
|
6
|
+
onDragItemInContainerVirtualScroll = new Subject();
|
|
7
|
+
itemDragInfo;
|
|
8
|
+
container = signal(new Map());
|
|
9
|
+
targetItemDragFlag = 'item-drag-target';
|
|
10
|
+
classContainerDefine = 'libs-ui-drag-drop-container';
|
|
11
|
+
classItemDefine = 'libs-ui-drag-drop-item';
|
|
12
|
+
onDragging = new Subject();
|
|
13
|
+
onDragStart = new Subject();
|
|
14
|
+
onDragEnd = new Subject();
|
|
15
|
+
onDragOver = new Subject();
|
|
16
|
+
onDragLeave = new Subject();
|
|
17
|
+
onDrop = new Subject();
|
|
18
|
+
onDropContainer = new Subject();
|
|
19
|
+
onItemInit = new Subject();
|
|
20
|
+
get OnDragItemInContainerVirtualScroll() {
|
|
21
|
+
return this.onDragItemInContainerVirtualScroll;
|
|
22
|
+
}
|
|
23
|
+
set ItemDragInfo(data) {
|
|
24
|
+
this.itemDragInfo = data;
|
|
25
|
+
}
|
|
26
|
+
get ItemDragInfo() {
|
|
27
|
+
return this.itemDragInfo;
|
|
28
|
+
}
|
|
29
|
+
get Container() {
|
|
30
|
+
return this.container;
|
|
31
|
+
}
|
|
32
|
+
get TargetItemDragFlag() {
|
|
33
|
+
return this.targetItemDragFlag;
|
|
34
|
+
}
|
|
35
|
+
get ClassContainerDefine() {
|
|
36
|
+
return this.classContainerDefine;
|
|
37
|
+
}
|
|
38
|
+
get ClassItemDefine() {
|
|
39
|
+
return this.classItemDefine;
|
|
40
|
+
}
|
|
41
|
+
get OnDragging() {
|
|
42
|
+
return this.onDragging;
|
|
43
|
+
}
|
|
44
|
+
get OnDragOver() {
|
|
45
|
+
return this.onDragOver;
|
|
46
|
+
}
|
|
47
|
+
get OnDragLeave() {
|
|
48
|
+
return this.onDragLeave;
|
|
49
|
+
}
|
|
50
|
+
get OnDragStart() {
|
|
51
|
+
return this.onDragStart;
|
|
52
|
+
}
|
|
53
|
+
get OnDragEnd() {
|
|
54
|
+
return this.onDragEnd;
|
|
55
|
+
}
|
|
56
|
+
get OnDropContainer() {
|
|
57
|
+
return this.onDropContainer;
|
|
58
|
+
}
|
|
59
|
+
get OnDrop() {
|
|
60
|
+
return this.onDrop;
|
|
61
|
+
}
|
|
62
|
+
get OnItemInit() {
|
|
63
|
+
return this.onItemInit;
|
|
64
|
+
}
|
|
65
|
+
get ItemClick() {
|
|
66
|
+
return [...this.itemsClick];
|
|
67
|
+
}
|
|
68
|
+
set ItemClick(item) {
|
|
69
|
+
this.itemsClick.push(item);
|
|
70
|
+
}
|
|
71
|
+
resetItemClick() {
|
|
72
|
+
this.itemsClick.length = 0;
|
|
73
|
+
}
|
|
74
|
+
checkElementOverAcceptElementDrag(groupNameOfContainer, groupNameOfElementDrag, groupNameOfDropTo) {
|
|
75
|
+
if (groupNameOfContainer !== groupNameOfElementDrag && !groupNameOfDropTo) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
if (groupNameOfDropTo !== null &&
|
|
79
|
+
!groupNameOfDropTo
|
|
80
|
+
.toString()
|
|
81
|
+
.split(';')
|
|
82
|
+
.includes(groupNameOfContainer || 'undefinedName')) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MoLibsSharedDragDropService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
88
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MoLibsSharedDragDropService, providedIn: 'any' });
|
|
89
|
+
}
|
|
90
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MoLibsSharedDragDropService, decorators: [{
|
|
91
|
+
type: Injectable,
|
|
92
|
+
args: [{
|
|
93
|
+
providedIn: 'any',
|
|
94
|
+
}]
|
|
95
|
+
}] });
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJhZy1kcm9wL3NyYy9kcmFnLWRyb3Auc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLL0IsTUFBTSxPQUFPLDJCQUEyQjtJQUM5QixVQUFVLEdBQUcsSUFBSSxLQUFLLEVBQWUsQ0FBQztJQUN0QyxrQ0FBa0MsR0FBRyxJQUFJLE9BQU8sRUFBcUMsQ0FBQztJQUN0RixZQUFZLENBQWlCO0lBQzdCLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQWlFLENBQUMsQ0FBQztJQUM3RixrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztJQUN4QyxvQkFBb0IsR0FBRyw2QkFBNkIsQ0FBQztJQUNyRCxlQUFlLEdBQUcsd0JBQXdCLENBQUM7SUFDM0MsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFhLENBQUM7SUFDdEMsV0FBVyxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFDeEMsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7SUFDcEMsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFhLENBQUM7SUFDdEMsV0FBVyxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFDeEMsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFTLENBQUM7SUFDOUIsZUFBZSxHQUFHLElBQUksT0FBTyxFQUFTLENBQUM7SUFDdkMsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7SUFFM0MsSUFBVyxrQ0FBa0M7UUFDM0MsT0FBTyxJQUFJLENBQUMsa0NBQWtDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQVcsWUFBWSxDQUFDLElBQStCO1FBQ3JELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxTQUFTLENBQUMsSUFBaUI7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVNLGNBQWM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxpQ0FBaUMsQ0FBQyxvQkFBbUMsRUFBRSxzQkFBcUMsRUFBRSxpQkFBZ0M7UUFDbkosSUFBSSxvQkFBb0IsS0FBSyxzQkFBc0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDMUUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFDRSxpQkFBaUIsS0FBSyxJQUFJO1lBQzFCLENBQUMsaUJBQWlCO2lCQUNmLFFBQVEsRUFBRTtpQkFDVixLQUFLLENBQUMsR0FBRyxDQUFDO2lCQUNWLFFBQVEsQ0FBQyxvQkFBb0IsSUFBSSxlQUFlLENBQUMsRUFDcEQsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt3R0F6R1UsMkJBQTJCOzRHQUEzQiwyQkFBMkIsY0FGMUIsS0FBSzs7NEZBRU4sMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFdyaXRhYmxlU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElEcmFnRW5kLCBJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwsIElEcmFnTGVhdmUsIElEcmFnT3ZlciwgSURyYWdTdGFydCwgSURyYWdnaW5nLCBJRHJvcCwgSUl0ZW1EcmFnSW5mbyB9IGZyb20gJy4vaW50ZXJmYWNlcy9ldmVudC5pbnRlcmZhY2UnO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAnYW55Jyxcbn0pXG5leHBvcnQgY2xhc3MgTW9MaWJzU2hhcmVkRHJhZ0Ryb3BTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBpdGVtc0NsaWNrID0gbmV3IEFycmF5PEhUTUxFbGVtZW50PigpO1xuICBwcml2YXRlIG9uRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwgPSBuZXcgU3ViamVjdDxJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGw+KCk7XG4gIHByaXZhdGUgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbiAgcHJpdmF0ZSBjb250YWluZXIgPSBzaWduYWwobmV3IE1hcDxzdHJpbmcsIHsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IGVsZW1lbnRTY3JvbGw/OiBIVE1MRWxlbWVudCB9PigpKTtcbiAgcHJpdmF0ZSB0YXJnZXRJdGVtRHJhZ0ZsYWcgPSAnaXRlbS1kcmFnLXRhcmdldCc7XG4gIHByaXZhdGUgY2xhc3NDb250YWluZXJEZWZpbmUgPSAnbGlicy11aS1kcmFnLWRyb3AtY29udGFpbmVyJztcbiAgcHJpdmF0ZSBjbGFzc0l0ZW1EZWZpbmUgPSAnbGlicy11aS1kcmFnLWRyb3AtaXRlbSc7XG4gIHByaXZhdGUgb25EcmFnZ2luZyA9IG5ldyBTdWJqZWN0PElEcmFnZ2luZz4oKTtcbiAgcHJpdmF0ZSBvbkRyYWdTdGFydCA9IG5ldyBTdWJqZWN0PElEcmFnU3RhcnQ+KCk7XG4gIHByaXZhdGUgb25EcmFnRW5kID0gbmV3IFN1YmplY3Q8SURyYWdFbmQ+KCk7XG4gIHByaXZhdGUgb25EcmFnT3ZlciA9IG5ldyBTdWJqZWN0PElEcmFnT3Zlcj4oKTtcbiAgcHJpdmF0ZSBvbkRyYWdMZWF2ZSA9IG5ldyBTdWJqZWN0PElEcmFnTGVhdmU+KCk7XG4gIHByaXZhdGUgb25Ecm9wID0gbmV3IFN1YmplY3Q8SURyb3A+KCk7XG4gIHByaXZhdGUgb25Ecm9wQ29udGFpbmVyID0gbmV3IFN1YmplY3Q8SURyb3A+KCk7XG4gIHByaXZhdGUgb25JdGVtSW5pdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICBwdWJsaWMgZ2V0IE9uRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwoKTogU3ViamVjdDxJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGw+IHtcbiAgICByZXR1cm4gdGhpcy5vbkRyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsO1xuICB9XG5cbiAgcHVibGljIHNldCBJdGVtRHJhZ0luZm8oZGF0YTogSUl0ZW1EcmFnSW5mbyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuaXRlbURyYWdJbmZvID0gZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgSXRlbURyYWdJbmZvKCk6IElJdGVtRHJhZ0luZm8gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLml0ZW1EcmFnSW5mbztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQ29udGFpbmVyKCk6IFdyaXRhYmxlU2lnbmFsPE1hcDxzdHJpbmcsIHsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IGVsZW1lbnRTY3JvbGw/OiBIVE1MRWxlbWVudCB9Pj4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgVGFyZ2V0SXRlbURyYWdGbGFnKCkge1xuICAgIHJldHVybiB0aGlzLnRhcmdldEl0ZW1EcmFnRmxhZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQ2xhc3NDb250YWluZXJEZWZpbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NDb250YWluZXJEZWZpbmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IENsYXNzSXRlbURlZmluZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jbGFzc0l0ZW1EZWZpbmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uRHJhZ2dpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMub25EcmFnZ2luZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgT25EcmFnT3ZlcigpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyYWdPdmVyO1xuICB9XG5cbiAgcHVibGljIGdldCBPbkRyYWdMZWF2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyYWdMZWF2ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgT25EcmFnU3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMub25EcmFnU3RhcnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uRHJhZ0VuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyYWdFbmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uRHJvcENvbnRhaW5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyb3BDb250YWluZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uRHJvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyb3A7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uSXRlbUluaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub25JdGVtSW5pdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgSXRlbUNsaWNrKCk6IEFycmF5PEhUTUxFbGVtZW50PiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLml0ZW1zQ2xpY2tdO1xuICB9XG5cbiAgcHVibGljIHNldCBJdGVtQ2xpY2soaXRlbTogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLml0ZW1zQ2xpY2sucHVzaChpdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEl0ZW1DbGljaygpIHtcbiAgICB0aGlzLml0ZW1zQ2xpY2subGVuZ3RoID0gMDtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0VsZW1lbnRPdmVyQWNjZXB0RWxlbWVudERyYWcoZ3JvdXBOYW1lT2ZDb250YWluZXI6IHN0cmluZyB8IG51bGwsIGdyb3VwTmFtZU9mRWxlbWVudERyYWc6IHN0cmluZyB8IG51bGwsIGdyb3VwTmFtZU9mRHJvcFRvOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKGdyb3VwTmFtZU9mQ29udGFpbmVyICE9PSBncm91cE5hbWVPZkVsZW1lbnREcmFnICYmICFncm91cE5hbWVPZkRyb3BUbykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGdyb3VwTmFtZU9mRHJvcFRvICE9PSBudWxsICYmXG4gICAgICAhZ3JvdXBOYW1lT2ZEcm9wVG9cbiAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgLnNwbGl0KCc7JylcbiAgICAgICAgLmluY2x1ZGVzKGdyb3VwTmFtZU9mQ29udGFpbmVyIHx8ICd1bmRlZmluZWROYW1lJylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { Directive, inject, output } from '@angular/core';
|
|
2
|
+
import { cloneIBoundingClientRect, getViewport } from '@libs-ui/utils';
|
|
3
|
+
import { Subject, fromEvent, takeUntil, tap } from 'rxjs';
|
|
4
|
+
import { MoLibsSharedDragDropService } from './drag-drop.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class LibsUiDragItemInContainerVirtualScrollDirective {
|
|
7
|
+
// #region PROPERTY
|
|
8
|
+
onDestroy = new Subject();
|
|
9
|
+
// #region OUTPUT
|
|
10
|
+
outDragEndContainer = output();
|
|
11
|
+
// #region INJECT
|
|
12
|
+
dragDropService = inject(MoLibsSharedDragDropService);
|
|
13
|
+
ngAfterViewInit() {
|
|
14
|
+
const addClass = () => {
|
|
15
|
+
document.body.classList.remove('!select-none');
|
|
16
|
+
document.body.classList.remove('!cursor-move');
|
|
17
|
+
};
|
|
18
|
+
const removeClass = () => {
|
|
19
|
+
document.body.classList.add('!select-none');
|
|
20
|
+
document.body.classList.add('!cursor-move');
|
|
21
|
+
};
|
|
22
|
+
this.dragDropService.OnDragEnd.pipe(takeUntil(this.onDestroy)).subscribe((e) => {
|
|
23
|
+
this.outDragEndContainer.emit(e);
|
|
24
|
+
});
|
|
25
|
+
this.dragDropService.OnDragItemInContainerVirtualScroll.pipe(takeUntil(this.onDestroy)).subscribe((dragItemInContainerVirtualScrollEvent) => {
|
|
26
|
+
addClass();
|
|
27
|
+
const stopEventMouse = (mouseEvent) => {
|
|
28
|
+
if (!dragItemInContainerVirtualScrollEvent.ignoreStopEvent) {
|
|
29
|
+
mouseEvent.preventDefault();
|
|
30
|
+
mouseEvent.stopPropagation();
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const documentMouseUp = fromEvent(document, 'mouseup').pipe(tap((eventMouseUp) => {
|
|
34
|
+
this.updateMouseEventsWhenMoveOverIframe('auto');
|
|
35
|
+
stopEventMouse(eventMouseUp);
|
|
36
|
+
const mousePosition = { clientX: eventMouseUp.clientX, clientY: eventMouseUp.clientY };
|
|
37
|
+
if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {
|
|
38
|
+
const result = this.getClientPosition(dragItemInContainerVirtualScrollEvent.elementDrag, mousePosition, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop, dragItemInContainerVirtualScrollEvent.dragBoundary, dragItemInContainerVirtualScrollEvent.elementContainer);
|
|
39
|
+
mousePosition.clientX = result.clientX;
|
|
40
|
+
mousePosition.clientY = result.clientY;
|
|
41
|
+
}
|
|
42
|
+
const dragEndEvent = { mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, itemDragInfo: this.dragDropService.ItemDragInfo };
|
|
43
|
+
this.dragDropService.ItemDragInfo = undefined;
|
|
44
|
+
this.dragDropService.OnDragEnd.next(dragEndEvent);
|
|
45
|
+
dragItemInContainerVirtualScrollEvent.elementDrag.remove();
|
|
46
|
+
removeClass();
|
|
47
|
+
}));
|
|
48
|
+
fromEvent(document, 'mousemove')
|
|
49
|
+
.pipe(tap((eventMousemove) => {
|
|
50
|
+
stopEventMouse(eventMousemove);
|
|
51
|
+
const { clientX, clientY } = eventMousemove;
|
|
52
|
+
const mousePosition = { clientX, clientY };
|
|
53
|
+
const result = this.getClientPosition(dragItemInContainerVirtualScrollEvent.elementDrag, mousePosition, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop, dragItemInContainerVirtualScrollEvent.dragBoundary, dragItemInContainerVirtualScrollEvent.elementContainer);
|
|
54
|
+
const elementKeepContainer = result.elementKeepContainer;
|
|
55
|
+
const left = result.clientX - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft;
|
|
56
|
+
const top = result.clientY - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop;
|
|
57
|
+
if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {
|
|
58
|
+
if (clientX < result.viewport.left) {
|
|
59
|
+
mousePosition.clientX = result.viewport.left;
|
|
60
|
+
}
|
|
61
|
+
if (clientX > result.viewport.width) {
|
|
62
|
+
mousePosition.clientX = result.viewport.width;
|
|
63
|
+
}
|
|
64
|
+
if (clientY < result.viewport.top) {
|
|
65
|
+
mousePosition.clientY = result.viewport.top;
|
|
66
|
+
}
|
|
67
|
+
if (clientY > result.viewport.height) {
|
|
68
|
+
mousePosition.clientY = result.viewport.height;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
dragItemInContainerVirtualScrollEvent.elementDrag.style.left = `${left}px`;
|
|
72
|
+
dragItemInContainerVirtualScrollEvent.elementDrag.style.top = `${top}px`;
|
|
73
|
+
this.dragDropService.OnDragging.next({ mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo });
|
|
74
|
+
}), takeUntil(documentMouseUp), takeUntil(this.onDestroy))
|
|
75
|
+
.subscribe();
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/* FUNCTIONS */
|
|
79
|
+
getClientPosition(element, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, dragBoundary, elementContainer) {
|
|
80
|
+
let viewport = getViewport();
|
|
81
|
+
const rectElement = element.getBoundingClientRect();
|
|
82
|
+
const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');
|
|
83
|
+
const containerItem = elementContainer || containerById?.elementScroll || containerById?.element || document.body;
|
|
84
|
+
let { clientX, clientY } = mousePosition;
|
|
85
|
+
viewport.left = 0;
|
|
86
|
+
viewport.top = 0;
|
|
87
|
+
if (dragBoundary) {
|
|
88
|
+
viewport = cloneIBoundingClientRect(containerItem.getBoundingClientRect());
|
|
89
|
+
viewport.height = viewport.top + viewport.height;
|
|
90
|
+
viewport.width = viewport.left + viewport.width;
|
|
91
|
+
}
|
|
92
|
+
let elementKeepContainer = false;
|
|
93
|
+
if ((clientX > viewport.width && clientY > viewport.height) || (clientX < viewport.left && clientY < viewport.top)) {
|
|
94
|
+
elementKeepContainer = true;
|
|
95
|
+
}
|
|
96
|
+
if (clientX + (rectElement.width - distanceStartElementAndMouseLeft) > viewport.width) {
|
|
97
|
+
clientX -= clientX + (rectElement.width - distanceStartElementAndMouseLeft) - viewport.width;
|
|
98
|
+
}
|
|
99
|
+
if (clientY + (rectElement.height - distanceStartElementAndMouseTop) > viewport.height) {
|
|
100
|
+
clientY -= clientY + (rectElement.height - distanceStartElementAndMouseTop) - viewport.height;
|
|
101
|
+
}
|
|
102
|
+
if (clientX - distanceStartElementAndMouseLeft < (dragBoundary && containerItem ? viewport.left : 0)) {
|
|
103
|
+
clientX = (dragBoundary && containerItem ? viewport.left : 0) + distanceStartElementAndMouseLeft;
|
|
104
|
+
}
|
|
105
|
+
if (clientY - distanceStartElementAndMouseTop < (dragBoundary && containerItem ? viewport.top : 0)) {
|
|
106
|
+
clientY = (dragBoundary && containerItem ? viewport.top : 0) + distanceStartElementAndMouseTop;
|
|
107
|
+
}
|
|
108
|
+
return { clientX, clientY, elementKeepContainer, viewport };
|
|
109
|
+
}
|
|
110
|
+
updateMouseEventsWhenMoveOverIframe(pointerEvents) {
|
|
111
|
+
const frames = document.getElementsByTagName('iframe');
|
|
112
|
+
if (!frames?.length) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
for (let i = 0; i < frames.length; ++i) {
|
|
116
|
+
frames[i].style.pointerEvents = pointerEvents;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
ngOnDestroy() {
|
|
120
|
+
this.onDestroy.next();
|
|
121
|
+
this.onDestroy.complete();
|
|
122
|
+
}
|
|
123
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiDragItemInContainerVirtualScrollDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
124
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: LibsUiDragItemInContainerVirtualScrollDirective, isStandalone: true, selector: "[LibsUiDragItemInContainerVirtualScrollDirective]", outputs: { outDragEndContainer: "outDragEndContainer" }, ngImport: i0 });
|
|
125
|
+
}
|
|
126
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiDragItemInContainerVirtualScrollDirective, decorators: [{
|
|
127
|
+
type: Directive,
|
|
128
|
+
args: [{
|
|
129
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
130
|
+
selector: '[LibsUiDragItemInContainerVirtualScrollDirective]',
|
|
131
|
+
standalone: true,
|
|
132
|
+
}]
|
|
133
|
+
}] });
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1pdGVtLWluLWNvbnRhaW5lci12aXJ0dWFsLXNjcm9sbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJhZy1kcm9wL3NyYy9kcmFnLWl0ZW0taW4tY29udGFpbmVyLXZpcnR1YWwtc2Nyb2xsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQVFsRSxNQUFNLE9BQU8sK0NBQStDO0lBQzFELG1CQUFtQjtJQUNULFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRTFDLGlCQUFpQjtJQUNSLG1CQUFtQixHQUFHLE1BQU0sRUFBWSxDQUFDO0lBRWxELGlCQUFpQjtJQUNQLGVBQWUsR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUVoRSxlQUFlO1FBQ2IsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO1lBQ3BCLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFO1lBQ3ZCLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZ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NEZBQS9DLCtDQUErQzs7NEZBQS9DLCtDQUErQztrQkFMM0QsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxtREFBbUQ7b0JBQzdELFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgT25EZXN0cm95LCBpbmplY3QsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUJvdW5kaW5nQ2xpZW50UmVjdCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgY2xvbmVJQm91bmRpbmdDbGllbnRSZWN0LCBnZXRWaWV3cG9ydCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1vTGlic1NoYXJlZERyYWdEcm9wU2VydmljZSB9IGZyb20gJy4vZHJhZy1kcm9wLnNlcnZpY2UnO1xuaW1wb3J0IHsgSURyYWdFbmQgfSBmcm9tICcuL2ludGVyZmFjZXMvZXZlbnQuaW50ZXJmYWNlJztcblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW0xpYnNVaURyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsRGlyZWN0aXZlXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaURyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXREcmFnRW5kQ29udGFpbmVyID0gb3V0cHV0PElEcmFnRW5kPigpO1xuXG4gIC8vICNyZWdpb24gSU5KRUNUXG4gIHByb3RlY3RlZCBkcmFnRHJvcFNlcnZpY2UgPSBpbmplY3QoTW9MaWJzU2hhcmVkRHJhZ0Ryb3BTZXJ2aWNlKTtcblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgYWRkQ2xhc3MgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJyFzZWxlY3Qtbm9uZScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCchY3Vyc29yLW1vdmUnKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUNsYXNzID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCchc2VsZWN0LW5vbmUnKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnIWN1cnNvci1tb3ZlJyk7XG4gICAgfTtcbiAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5PbkRyYWdFbmQucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgIHRoaXMub3V0RHJhZ0VuZENvbnRhaW5lci5lbWl0KGUpO1xuICAgIH0pO1xuICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKGRyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsRXZlbnQpID0+IHtcbiAgICAgIGFkZENsYXNzKCk7XG4gICAgICBjb25zdCBzdG9wRXZlbnRNb3VzZSA9IChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghZHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxFdmVudC5pZ25vcmVTdG9wRXZlbnQpIHtcbiAgICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgbW91c2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGRvY3VtZW50TW91c2VVcCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNldXAnKS5waXBlKFxuICAgICAgICB0YXAoKGV2ZW50TW91c2VVcCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlTW91c2VFdmVudHNXaGVuTW92ZU92ZXJJZnJhbWUoJ2F1dG8nKTtcbiAgICAgICAgICBzdG9wRXZlbnRNb3VzZShldmVudE1vdXNlVXApO1xuICAgICAgICAgIGNvbnN0IG1vdXNlUG9zaXRpb24gPSB7IGNsaWVudFg6IGV2ZW50TW91c2VVcC5jbGllbnRYLCBjbGllbnRZOiBldmVudE1vdXNlVXAuY2xpZW50WSB9O1xuXG4gICAgICAgICAgaWYgKGRyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsRXZlbnQuZHJhZ0JvdW5kYXJ5ICYmIGRyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsRXZlbnQuZHJhZ0JvdW5kYXJ5QWNjZXB0TW91c2VMZWF2ZUNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRDbGllbnRQb3NpdGlvbihcbiAgICAgICAgICAgICAgZHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxFdmVudC5lbGVtZW50RHJhZyxcbiAgICAgICAgICAgICAgbW91c2VQb3NpdGlvbixcbiAgICAgICAgICAgICAgZHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxFdmVudC5kaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlTGVmdCxcbiAgICAgICAgICAgICAgZHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxFdmVudC5kaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wLFxuICAgICAgICAgICAgICBkcmFnSXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbEV2ZW50LmRyYWdCb3VuZGFyeSxcbiAgICAgICAgICAgICAgZHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxFdmVudC5lbGVtZW50Q29udGFpbmVyXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBtb3VzZVBvc2l0aW9uLmNsaWVudFggPSByZXN1bHQuY2xpZW50WDtcbiAgICAgICAgICAgIG1vdXNlUG9zaXRpb24uY2xpZW50WSA9IHJlc3VsdC5jbGllbnRZO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkcmFnRW5kRXZlbnQgPSB7IG1vdXNlUG9zaXRpb24sIGVsZW1lbnREcmFnOiBkcmFnSXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbEV2ZW50LmVsZW1lbnREcmFnLCBpdGVtRHJhZ0luZm86IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1EcmFnSW5mbyB9O1xuXG4gICAgICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuSXRlbURyYWdJbmZvID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ0VuZC5uZXh0KGRyYWdFbmRFdmVudCk7XG4gICAgICAgICAgZHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxFdmVudC5lbGVtZW50RHJhZy5yZW1vdmUoKTtcbiAgICAgICAgICByZW1vdmVDbGFzcygpO1xuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChldmVudE1vdXNlbW92ZSkgPT4ge1xuICAgICAgICAgICAgc3RvcEV2ZW50TW91c2UoZXZlbnRNb3VzZW1vdmUpO1xuICAgICAgICAgICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBldmVudE1vdXNlbW92ZTtcbiAgICAgICAgICAgIGNvbnN0IG1vdXNlUG9zaXRpb24gPSB7IGNsaWVudFgsIGNsaWVudFkgfTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRDbGllbnRQb3NpdGlvbihcbiAgICAgICAgICAgICAgZHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxFdmVudC5lbGVtZW50RHJhZyxcbiAgICAgICAgICAgICAgbW91c2VQb3NpdGlvbixcbiAgICAgICAgICAgICAgZHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxFdmVudC5kaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlTGVmdCxcbiAgICAgICAgICAgICAgZHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxFdmVudC5kaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wLFxuICAgICAgICAgICAgICBkcmFnSXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbEV2ZW50LmRyYWdCb3VuZGFyeSxcbiAgICAgICAgICAgICAgZHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxFdmVudC5lbGVtZW50Q29udGFpbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudEtlZXBDb250YWluZXIgPSByZXN1bHQuZWxlbWVudEtlZXBDb250YWluZXI7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gcmVzdWx0LmNsaWVudFggLSBkcmFnSXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbEV2ZW50LmRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0O1xuICAgICAgICAgICAgY29uc3QgdG9wID0gcmVzdWx0LmNsaWVudFkgLSBkcmFnSXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbEV2ZW50LmRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3A7XG5cbiAgICAgICAgICAgIGlmIChkcmFnSXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbEV2ZW50LmRyYWdCb3VuZGFyeSAmJiBkcmFnSXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbEV2ZW50LmRyYWdCb3VuZGFyeUFjY2VwdE1vdXNlTGVhdmVDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgaWYgKGNsaWVudFggPCByZXN1bHQudmlld3BvcnQubGVmdCkge1xuICAgICAgICAgICAgICAgIG1vdXNlUG9zaXRpb24uY2xpZW50WCA9IHJlc3VsdC52aWV3cG9ydC5sZWZ0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjbGllbnRYID4gcmVzdWx0LnZpZXdwb3J0LndpZHRoKSB7XG4gICAgICAgICAgICAgICAgbW91c2VQb3NpdGlvbi5jbGllbnRYID0gcmVzdWx0LnZpZXdwb3J0LndpZHRoO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjbGllbnRZIDwgcmVzdWx0LnZpZXdwb3J0LnRvcCkge1xuICAgICAgICAgICAgICAgIG1vdXNlUG9zaXRpb24uY2xpZW50WSA9IHJlc3VsdC52aWV3cG9ydC50b3A7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGNsaWVudFkgPiByZXN1bHQudmlld3BvcnQuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgbW91c2VQb3NpdGlvbi5jbGllbnRZID0gcmVzdWx0LnZpZXdwb3J0LmhlaWdodDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxFdmVudC5lbGVtZW50RHJhZy5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICAgICAgICBkcmFnSXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbEV2ZW50LmVsZW1lbnREcmFnLnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG5cbiAgICAgICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ2dpbmcubmV4dCh7IG1vdXNlUG9zaXRpb24sIGVsZW1lbnREcmFnOiBkcmFnSXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbEV2ZW50LmVsZW1lbnREcmFnLCBlbGVtZW50S2VlcENvbnRhaW5lciwgaXRlbURyYWdJbmZvOiB0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtRHJhZ0luZm8gfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsKGRvY3VtZW50TW91c2VVcCksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuXG4gIHByb3RlY3RlZCBnZXRDbGllbnRQb3NpdGlvbihcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBtb3VzZVBvc2l0aW9uOiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0sXG4gICAgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQ6IG51bWJlcixcbiAgICBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wOiBudW1iZXIsXG4gICAgZHJhZ0JvdW5kYXJ5PzogYm9vbGVhbixcbiAgICBlbGVtZW50Q29udGFpbmVyPzogSFRNTEVsZW1lbnRcbiAgKTogeyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlcjsgZWxlbWVudEtlZXBDb250YWluZXI6IGJvb2xlYW47IHZpZXdwb3J0OiBJQm91bmRpbmdDbGllbnRSZWN0IH0ge1xuICAgIGxldCB2aWV3cG9ydCA9IGdldFZpZXdwb3J0KCkgYXMgSUJvdW5kaW5nQ2xpZW50UmVjdDtcbiAgICBjb25zdCByZWN0RWxlbWVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgY29udGFpbmVyQnlJZCA9IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNvbnRhaW5lcigpLmdldChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpIHx8ICcnKTtcbiAgICBjb25zdCBjb250YWluZXJJdGVtID0gZWxlbWVudENvbnRhaW5lciB8fCBjb250YWluZXJCeUlkPy5lbGVtZW50U2Nyb2xsIHx8IGNvbnRhaW5lckJ5SWQ/LmVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keTtcbiAgICBsZXQgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBtb3VzZVBvc2l0aW9uO1xuXG4gICAgdmlld3BvcnQubGVmdCA9IDA7XG4gICAgdmlld3BvcnQudG9wID0gMDtcbiAgICBpZiAoZHJhZ0JvdW5kYXJ5KSB7XG4gICAgICB2aWV3cG9ydCA9IGNsb25lSUJvdW5kaW5nQ2xpZW50UmVjdChjb250YWluZXJJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgIHZpZXdwb3J0LmhlaWdodCA9IHZpZXdwb3J0LnRvcCArIHZpZXdwb3J0LmhlaWdodDtcbiAgICAgIHZpZXdwb3J0LndpZHRoID0gdmlld3BvcnQubGVmdCArIHZpZXdwb3J0LndpZHRoO1xuICAgIH1cbiAgICBsZXQgZWxlbWVudEtlZXBDb250YWluZXIgPSBmYWxzZTtcblxuICAgIGlmICgoY2xpZW50WCA+IHZpZXdwb3J0LndpZHRoICYmIGNsaWVudFkgPiB2aWV3cG9ydC5oZWlnaHQpIHx8IChjbGllbnRYIDwgdmlld3BvcnQubGVmdCAmJiBjbGllbnRZIDwgdmlld3BvcnQudG9wKSkge1xuICAgICAgZWxlbWVudEtlZXBDb250YWluZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjbGllbnRYICsgKHJlY3RFbGVtZW50LndpZHRoIC0gZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQpID4gdmlld3BvcnQud2lkdGgpIHtcbiAgICAgIGNsaWVudFggLT0gY2xpZW50WCArIChyZWN0RWxlbWVudC53aWR0aCAtIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0KSAtIHZpZXdwb3J0LndpZHRoO1xuICAgIH1cbiAgICBpZiAoY2xpZW50WSArIChyZWN0RWxlbWVudC5oZWlnaHQgLSBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wKSA+IHZpZXdwb3J0LmhlaWdodCkge1xuICAgICAgY2xpZW50WSAtPSBjbGllbnRZICsgKHJlY3RFbGVtZW50LmhlaWdodCAtIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3ApIC0gdmlld3BvcnQuaGVpZ2h0O1xuICAgIH1cbiAgICBpZiAoY2xpZW50WCAtIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0IDwgKGRyYWdCb3VuZGFyeSAmJiBjb250YWluZXJJdGVtID8gdmlld3BvcnQubGVmdCA6IDApKSB7XG4gICAgICBjbGllbnRYID0gKGRyYWdCb3VuZGFyeSAmJiBjb250YWluZXJJdGVtID8gdmlld3BvcnQubGVmdCA6IDApICsgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQ7XG4gICAgfVxuICAgIGlmIChjbGllbnRZIC0gZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZVRvcCA8IChkcmFnQm91bmRhcnkgJiYgY29udGFpbmVySXRlbSA/IHZpZXdwb3J0LnRvcCA6IDApKSB7XG4gICAgICBjbGllbnRZID0gKGRyYWdCb3VuZGFyeSAmJiBjb250YWluZXJJdGVtID8gdmlld3BvcnQudG9wIDogMCkgKyBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNsaWVudFgsIGNsaWVudFksIGVsZW1lbnRLZWVwQ29udGFpbmVyLCB2aWV3cG9ydCB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZU1vdXNlRXZlbnRzV2hlbk1vdmVPdmVySWZyYW1lKHBvaW50ZXJFdmVudHM6ICdub25lJyB8ICdhdXRvJykge1xuICAgIGNvbnN0IGZyYW1lcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpZnJhbWUnKTtcblxuICAgIGlmICghZnJhbWVzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgZnJhbWVzW2ldLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBwb2ludGVyRXZlbnRzO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { Directive, ElementRef, effect, inject, input, output, signal } from '@angular/core';
|
|
3
|
+
import { checkMouseOverInContainer, checkViewInScreen, get, getDragEventByElement, getViewport } from '@libs-ui/utils';
|
|
4
|
+
import { fromEvent, takeUntil, tap, throttleTime } from 'rxjs';
|
|
5
|
+
import { LibsUiDragItemInContainerVirtualScrollDirective } from './drag-item-in-container-virtual-scroll.directive';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class LibsUiDragItemDirective extends LibsUiDragItemInContainerVirtualScrollDirective {
|
|
8
|
+
// #region PROPERTY
|
|
9
|
+
isDragOver = signal(false);
|
|
10
|
+
isDragging = signal(false);
|
|
11
|
+
// #region INPUT
|
|
12
|
+
//setup 3 field phía dưới nếu đang sử dụng item trong virtual-scroll
|
|
13
|
+
fieldId = input('');
|
|
14
|
+
item = input(undefined);
|
|
15
|
+
itemInContainerVirtualScroll = input();
|
|
16
|
+
//----------------------------------
|
|
17
|
+
throttleTimeHandlerDraggingEvent = input(0, { transform: (value) => value || 0 });
|
|
18
|
+
ignoreStopEvent = input();
|
|
19
|
+
onlyMouseDownStopEvent = input();
|
|
20
|
+
dragRootElement = input();
|
|
21
|
+
dragBoundary = input();
|
|
22
|
+
dragBoundaryAcceptMouseLeaveContainer = input();
|
|
23
|
+
elementContainer = input();
|
|
24
|
+
zIndex = input(1300, { transform: (value) => value ?? 1300 });
|
|
25
|
+
disable = input();
|
|
26
|
+
// #region OUTPUT
|
|
27
|
+
outDragStart = output();
|
|
28
|
+
outDragOver = output();
|
|
29
|
+
outDragLeave = output();
|
|
30
|
+
outDragEnd = output();
|
|
31
|
+
outDropped = output();
|
|
32
|
+
// #region INJECT
|
|
33
|
+
elementRef = inject(ElementRef);
|
|
34
|
+
constructor() {
|
|
35
|
+
super();
|
|
36
|
+
effect(() => {
|
|
37
|
+
if (!this.elementRef?.nativeElement) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const element = this.elementRef.nativeElement;
|
|
41
|
+
element.classList.remove(`${this.dragDropService.ClassItemDefine}-disable`);
|
|
42
|
+
if (this.disable() && !element.classList.contains(`${this.dragDropService.ClassItemDefine}-disable`)) {
|
|
43
|
+
element.classList.add(`${this.dragDropService.ClassItemDefine}-disable`);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
ngAfterViewInit() {
|
|
48
|
+
const element = this.elementRef.nativeElement;
|
|
49
|
+
if (this.fieldId()) {
|
|
50
|
+
element.setAttribute('field_id', this.fieldId());
|
|
51
|
+
if (this.item()) {
|
|
52
|
+
element.setAttribute('item_id', get(this.item(), this.fieldId()));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
element.classList.add(this.dragDropService.ClassItemDefine);
|
|
56
|
+
this.dragDropService.OnDragging.pipe(throttleTime(this.throttleTimeHandlerDraggingEvent()), takeUntil(this.onDestroy)).subscribe((eventDragging) => {
|
|
57
|
+
if (this.disable() || element.getAttribute('disableDragContainer') || (this.fieldId() && this.item() && eventDragging.elementDrag.getAttribute('item_id') === get(this.item(), this.fieldId()))) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');
|
|
61
|
+
if (containerById) {
|
|
62
|
+
if (eventDragging.elementKeepContainer ||
|
|
63
|
+
!this.dragDropService.checkElementOverAcceptElementDrag(containerById.element.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('dropToGroupName'))) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (checkMouseOverInContainer(eventDragging.mousePosition, element) && element !== eventDragging.elementDrag && containerById && checkViewInScreen(containerById.element, element, containerById.elementScroll)) {
|
|
68
|
+
if (this.isDragOver()) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const eventDragOver = { ...eventDragging, elementDragOver: element };
|
|
72
|
+
this.dragDropService.OnDragOver.next(eventDragOver);
|
|
73
|
+
this.outDragOver.emit(eventDragOver);
|
|
74
|
+
this.isDragOver.set(true);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (this.isDragOver()) {
|
|
78
|
+
const eventDragLeave = { ...eventDragging, elementDragLeave: element };
|
|
79
|
+
this.isDragOver.set(false);
|
|
80
|
+
this.dragDropService.OnDragLeave.next(eventDragLeave);
|
|
81
|
+
this.outDragLeave.emit(eventDragLeave);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
this.dragDropService.OnDropContainer.pipe(takeUntil(this.onDestroy)).subscribe((eventDrop) => {
|
|
85
|
+
if (eventDrop.elementDrop !== element) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const dropEvent = { elementDrag: eventDrop.elementDrag, elementDrop: element, itemDragInfo: eventDrop.itemDragInfo };
|
|
89
|
+
this.outDropped.emit(dropEvent);
|
|
90
|
+
});
|
|
91
|
+
const styleTag = document.createElement('style');
|
|
92
|
+
styleTag.textContent = `.libs-ui-drag-drop-item-dragging{cursor:move}`;
|
|
93
|
+
let nodeClone = element;
|
|
94
|
+
let distanceStartElementAndMouseLeft = -1;
|
|
95
|
+
let distanceStartElementAndMouseTop = -1;
|
|
96
|
+
let contextMenu = false;
|
|
97
|
+
const stopEventMouse = (mouseEvent) => {
|
|
98
|
+
if (!this.ignoreStopEvent()) {
|
|
99
|
+
mouseEvent.preventDefault();
|
|
100
|
+
mouseEvent.stopPropagation();
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const updatePositionElementRootAndRemoveNodeClone = () => {
|
|
104
|
+
if (this.dragRootElement()) {
|
|
105
|
+
const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');
|
|
106
|
+
const containerItem = this.elementContainer() || containerById?.elementScroll || containerById?.element || document.body;
|
|
107
|
+
const rectContainer = containerItem.getBoundingClientRect();
|
|
108
|
+
const rectNodeClone = nodeClone.getBoundingClientRect();
|
|
109
|
+
const numberSub = Number((getComputedStyle(containerItem).border.match(/\d+px/gi) || ['0'])[0].replace(/\D+/gi, '')).valueOf();
|
|
110
|
+
element.style.left = rectNodeClone.left - rectContainer.left - numberSub + 'px';
|
|
111
|
+
element.style.top = rectNodeClone.top - rectContainer.top - numberSub + 'px';
|
|
112
|
+
element.classList.remove('opacity-0');
|
|
113
|
+
}
|
|
114
|
+
distanceStartElementAndMouseLeft = -1;
|
|
115
|
+
distanceStartElementAndMouseTop = -1;
|
|
116
|
+
nodeClone.remove();
|
|
117
|
+
};
|
|
118
|
+
fromEvent(document, 'contextmenu')
|
|
119
|
+
.pipe(tap(() => {
|
|
120
|
+
if (this.isDragging()) {
|
|
121
|
+
updatePositionElementRootAndRemoveNodeClone();
|
|
122
|
+
}
|
|
123
|
+
contextMenu = true;
|
|
124
|
+
}), takeUntil(this.onDestroy))
|
|
125
|
+
.subscribe();
|
|
126
|
+
let ignoreMousedown = false;
|
|
127
|
+
getDragEventByElement({
|
|
128
|
+
elementMouseDown: element,
|
|
129
|
+
functionMouseDown: (event) => {
|
|
130
|
+
this.dragDropService.ItemClick = element;
|
|
131
|
+
contextMenu = false;
|
|
132
|
+
this.updateMouseEventsWhenMoveOverIframe('none');
|
|
133
|
+
if ((this.disable() || element.getAttribute('disableDragContainer') || !this.isDragging() || this.itemInContainerVirtualScroll()) && !this.onlyMouseDownStopEvent()) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
stopEventMouse(event);
|
|
137
|
+
},
|
|
138
|
+
functionMouseMove: (event) => {
|
|
139
|
+
stopEventMouse(event);
|
|
140
|
+
},
|
|
141
|
+
functionMouseUp: (event) => {
|
|
142
|
+
this.updateMouseEventsWhenMoveOverIframe('auto');
|
|
143
|
+
this.dragDropService.resetItemClick();
|
|
144
|
+
stopEventMouse(event);
|
|
145
|
+
if (this.disable() || element.getAttribute('disableDragContainer') || contextMenu || !this.isDragging()) {
|
|
146
|
+
contextMenu = false;
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
contextMenu = false;
|
|
150
|
+
this.isDragging.set(false);
|
|
151
|
+
element.removeAttribute(this.dragDropService.TargetItemDragFlag);
|
|
152
|
+
if (this.itemInContainerVirtualScroll()) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const mousePosition = { clientX: event.clientX, clientY: event.clientY };
|
|
156
|
+
if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {
|
|
157
|
+
const result = this.getClientPosition(element, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());
|
|
158
|
+
mousePosition.clientX = result.clientX;
|
|
159
|
+
mousePosition.clientY = result.clientY;
|
|
160
|
+
}
|
|
161
|
+
const dragEndEvent = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };
|
|
162
|
+
this.dragDropService.ItemDragInfo = undefined;
|
|
163
|
+
this.dragDropService.OnDragEnd.next(dragEndEvent);
|
|
164
|
+
this.outDragEnd.emit(dragEndEvent);
|
|
165
|
+
nodeClone.classList.remove('libs-ui-drag-drop-item-dragging');
|
|
166
|
+
styleTag.remove();
|
|
167
|
+
updatePositionElementRootAndRemoveNodeClone();
|
|
168
|
+
},
|
|
169
|
+
onDestroy: this.onDestroy,
|
|
170
|
+
})
|
|
171
|
+
.pipe(tap((dragMouseEvent) => {
|
|
172
|
+
const rectElement = element.getBoundingClientRect();
|
|
173
|
+
const viewport = getViewport();
|
|
174
|
+
if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || (!ignoreMousedown && dragMouseEvent.type === 'mousedown' && rectElement.height + rectElement.top >= viewport.height)) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const { clientX, clientY } = dragMouseEvent;
|
|
178
|
+
if (distanceStartElementAndMouseLeft === -1) {
|
|
179
|
+
distanceStartElementAndMouseLeft = clientX - rectElement.left;
|
|
180
|
+
}
|
|
181
|
+
if (distanceStartElementAndMouseTop === -1) {
|
|
182
|
+
distanceStartElementAndMouseTop = clientY - rectElement.top;
|
|
183
|
+
}
|
|
184
|
+
}))
|
|
185
|
+
.subscribe((dragMouseEvent) => {
|
|
186
|
+
if (this.dragDropService.ItemClick.filter((item) => item !== element).some((item) => element.contains(item))) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || dragMouseEvent.type === 'mousedown' || contextMenu || (this.itemInContainerVirtualScroll() && this.isDragging())) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
ignoreMousedown = true;
|
|
193
|
+
const { clientX, clientY } = dragMouseEvent;
|
|
194
|
+
const mousePosition = { clientX, clientY };
|
|
195
|
+
const rectElement = element.getBoundingClientRect();
|
|
196
|
+
if (!this.isDragging()) {
|
|
197
|
+
this.isDragging.set(true);
|
|
198
|
+
const eventDragStart = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };
|
|
199
|
+
element.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');
|
|
200
|
+
this.dragDropService.OnDragStart.next(eventDragStart);
|
|
201
|
+
eventDragStart.itemDragInfo = this.dragDropService.ItemDragInfo;
|
|
202
|
+
this.outDragStart.emit(eventDragStart);
|
|
203
|
+
nodeClone = element.cloneNode(true);
|
|
204
|
+
nodeClone.style.zIndex = `${this.zIndex()}`;
|
|
205
|
+
nodeClone.classList.add('!fixed');
|
|
206
|
+
nodeClone.classList.remove('libs-ui-drag-drop-item-origin-placeholder');
|
|
207
|
+
nodeClone.classList.remove('libs-ui-drag-drop-item-placeholder');
|
|
208
|
+
nodeClone.appendChild(styleTag);
|
|
209
|
+
nodeClone.classList.add('libs-ui-drag-drop-item-dragging');
|
|
210
|
+
nodeClone.style.width = `${rectElement.width}px`;
|
|
211
|
+
nodeClone.style.height = `${rectElement.height}px`;
|
|
212
|
+
nodeClone.style.left = `${-999}px`;
|
|
213
|
+
nodeClone.style.top = `${-999}px`;
|
|
214
|
+
document.body.append(nodeClone);
|
|
215
|
+
if (this.dragRootElement()) {
|
|
216
|
+
element.classList.add('opacity-0');
|
|
217
|
+
}
|
|
218
|
+
if (this.itemInContainerVirtualScroll()) {
|
|
219
|
+
this.dragDropService.OnDragItemInContainerVirtualScroll.next({
|
|
220
|
+
itemDragInfo: this.dragDropService.ItemDragInfo,
|
|
221
|
+
elementDrag: nodeClone,
|
|
222
|
+
distanceStartElementAndMouseTop,
|
|
223
|
+
distanceStartElementAndMouseLeft,
|
|
224
|
+
elementContainer: this.elementContainer(),
|
|
225
|
+
dragBoundary: this.dragBoundary(),
|
|
226
|
+
dragBoundaryAcceptMouseLeaveContainer: this.dragBoundaryAcceptMouseLeaveContainer(),
|
|
227
|
+
ignoreStopEvent: this.ignoreStopEvent(),
|
|
228
|
+
});
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const result = this.getClientPosition(nodeClone, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());
|
|
233
|
+
const elementKeepContainer = result.elementKeepContainer;
|
|
234
|
+
const left = result.clientX - distanceStartElementAndMouseLeft;
|
|
235
|
+
const top = result.clientY - distanceStartElementAndMouseTop;
|
|
236
|
+
if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {
|
|
237
|
+
if (clientX < result.viewport.left) {
|
|
238
|
+
mousePosition.clientX = result.viewport.left;
|
|
239
|
+
}
|
|
240
|
+
if (clientX > result.viewport.width) {
|
|
241
|
+
mousePosition.clientX = result.viewport.width;
|
|
242
|
+
}
|
|
243
|
+
if (clientY < result.viewport.top) {
|
|
244
|
+
mousePosition.clientY = result.viewport.top;
|
|
245
|
+
}
|
|
246
|
+
if (clientY > result.viewport.height) {
|
|
247
|
+
mousePosition.clientY = result.viewport.height;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
nodeClone.style.left = `${left}px`;
|
|
251
|
+
nodeClone.style.top = `${top}px`;
|
|
252
|
+
const eventDragging = { mousePosition, elementDrag: nodeClone, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo };
|
|
253
|
+
this.dragDropService.OnDragging.next(eventDragging);
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiDragItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
257
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: LibsUiDragItemDirective, isStandalone: true, selector: "[LibsUiDragItemDirective]", inputs: { fieldId: { classPropertyName: "fieldId", publicName: "fieldId", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, itemInContainerVirtualScroll: { classPropertyName: "itemInContainerVirtualScroll", publicName: "itemInContainerVirtualScroll", isSignal: true, isRequired: false, transformFunction: null }, throttleTimeHandlerDraggingEvent: { classPropertyName: "throttleTimeHandlerDraggingEvent", publicName: "throttleTimeHandlerDraggingEvent", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopEvent: { classPropertyName: "ignoreStopEvent", publicName: "ignoreStopEvent", isSignal: true, isRequired: false, transformFunction: null }, onlyMouseDownStopEvent: { classPropertyName: "onlyMouseDownStopEvent", publicName: "onlyMouseDownStopEvent", isSignal: true, isRequired: false, transformFunction: null }, dragRootElement: { classPropertyName: "dragRootElement", publicName: "dragRootElement", isSignal: true, isRequired: false, transformFunction: null }, dragBoundary: { classPropertyName: "dragBoundary", publicName: "dragBoundary", isSignal: true, isRequired: false, transformFunction: null }, dragBoundaryAcceptMouseLeaveContainer: { classPropertyName: "dragBoundaryAcceptMouseLeaveContainer", publicName: "dragBoundaryAcceptMouseLeaveContainer", isSignal: true, isRequired: false, transformFunction: null }, elementContainer: { classPropertyName: "elementContainer", publicName: "elementContainer", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outDragStart: "outDragStart", outDragOver: "outDragOver", outDragLeave: "outDragLeave", outDragEnd: "outDragEnd", outDropped: "outDropped" }, usesInheritance: true, ngImport: i0 });
|
|
258
|
+
}
|
|
259
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiDragItemDirective, decorators: [{
|
|
260
|
+
type: Directive,
|
|
261
|
+
args: [{
|
|
262
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
263
|
+
selector: '[LibsUiDragItemDirective]',
|
|
264
|
+
standalone: true,
|
|
265
|
+
}]
|
|
266
|
+
}], ctorParameters: () => [] });
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kcmFnLWRyb3Avc3JjL2RyYWctaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBYSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkgsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsK0NBQStDLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7QUFRcEgsTUFBTSxPQUFPLHVCQUF3QixTQUFRLCtDQUErQztJQUMxRixtQkFBbUI7SUFDWCxVQUFVLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLFVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFNUMsZ0JBQWdCO0lBQ2hCLG9FQUFvRTtJQUMzRCxPQUFPLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLElBQUksR0FBRyxLQUFLLENBQU0sU0FBUyxDQUFDLENBQUM7SUFDN0IsNEJBQTRCLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDekQsb0NBQW9DO0lBQzNCLGdDQUFnQyxHQUFHLEtBQUssQ0FBNkIsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5RyxlQUFlLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDbkMsc0JBQXNCLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDMUMsZUFBZSxHQUFHLEtBQUssRUFBVyxDQUFDO0lBQ25DLFlBQVksR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUNoQyxxQ0FBcUMsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUN6RCxnQkFBZ0IsR0FBRyxLQUFLLEVBQWUsQ0FBQztJQUN4QyxNQUFNLEdBQUcsS0FBSyxDQUE2QixJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLE9BQU8sR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUVwQyxpQkFBaUI7SUFDUixZQUFZLEdBQUcsTUFBTSxFQUFjLENBQUM7SUFDcEMsV0FBVyxHQUFHLE1BQU0sRUFBYSxDQUFDO0lBQ2xDLFlBQVksR0FBRyxNQUFNLEVBQWMsQ0FBQztJQUNwQyxVQUFVLEdBQUcsTUFBTSxFQUFZLENBQUM7SUFDaEMsVUFBVSxHQUFHLE1BQU0sRUFBUyxDQUFDO0lBRXRDLGlCQUFpQjtJQUNULFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFeEM7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUNSLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsQ0FBQztnQkFDcEMsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQTRCLENBQUM7WUFFN0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsVUFBVSxDQUFDLENBQUM7WUFDNUUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNyRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxVQUFVLENBQUMsQ0FBQztZQUMzRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVEsZUFBZTtRQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQTRCLENBQUM7UUFDN0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNuQixPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNqRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUNoQixPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDakosSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxhQUFhLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDaE0sT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRWxHLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLElBQ0UsYUFBYSxDQUFDLG9CQUFvQjtvQkFDbEMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGlDQUFpQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFDeE4sQ0FBQztvQkFDRCxPQUFPO2dCQUNULENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxJQUFJLE9BQU8sS0FBSyxhQUFhLENBQUMsV0FBVyxJQUFJLGFBQWEsSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDaE4sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztvQkFDdEIsT0FBTztnQkFDVCxDQUFDO2dCQUNELE1BQU0sYUFBYSxHQUFHLEVBQUUsR0FBRyxhQUFhLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUVyRSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFMUIsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO2dCQUN0QixNQUFNLGNBQWMsR0FBRyxFQUFFLEdBQUcsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUN2RSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzNGLElBQUksU0FBUyxDQUFDLFdBQVcsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDdEMsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLFNBQVMsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVySCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFakQsUUFBUSxDQUFDLFdBQVcsR0FBRywrQ0FBK0MsQ0FBQztRQUN2RSxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxnQ0FBZ0MsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLCtCQUErQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQXNCLEVBQUUsRUFBRTtZQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7Z0JBQzVCLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDNUIsVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDLENBQUM7UUFDRixNQUFNLDJDQUEyQyxHQUFHLEdBQUcsRUFBRTtZQUN2RCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO2dCQUMzQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUVsRyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxhQUFhLEVBQUUsYUFBYSxJQUFJLGFBQWEsRUFBRSxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDekgsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQzVELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBRS9ILE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNoRixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDN0UsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUNELGdDQUFnQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLCtCQUErQixHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUM7UUFFRixTQUFTLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQzthQUMvQixJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQ3RCLDJDQUEyQyxFQUFFLENBQUM7WUFDaEQsQ0FBQztZQUNELFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUU1QixxQkFBcUIsQ0FBQztZQUNwQixnQkFBZ0IsRUFBRSxPQUFPO1lBQ3pCLGlCQUFpQixFQUFFLENBQUMsS0FBaUIsRUFBRSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7Z0JBQ3pDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUM7b0JBQ3BLLE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsQ0FBQztZQUNELGlCQUFpQixFQUFFLENBQUMsS0FBaUIsRUFBRSxFQUFFO2dCQUN2QyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsQ0FBQztZQUNELGVBQWUsRUFBRSxDQUFDLEtBQWlCLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN0QyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsSUFBSSxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztvQkFDeEcsV0FBVyxHQUFHLEtBQUssQ0FBQztvQkFFcEIsT0FBTztnQkFDVCxDQUFDO2dCQUNELFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQixPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDakUsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxDQUFDO29CQUN4QyxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsTUFBTSxhQUFhLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUV6RSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMscUNBQXFDLEVBQUUsRUFBRSxDQUFDO29CQUN4RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQ0FBZ0MsRUFBRSwrQkFBK0IsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztvQkFFL0ssYUFBYSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO29CQUN2QyxhQUFhLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQ3pDLENBQUM7Z0JBQ0QsTUFBTSxZQUFZLEdBQUcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFFOUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUVuQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO2dCQUM5RCxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBRWxCLDJDQUEyQyxFQUFFLENBQUM7WUFDaEQsQ0FBQztZQUNELFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztTQUMxQixDQUFDO2FBQ0MsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGNBQTBCLEVBQUUsRUFBRTtZQUNqQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNwRCxNQUFNLFFBQVEsR0FBRyxXQUFXLEVBQXlCLENBQUM7WUFFdEQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsZUFBZSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdE4sT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQztZQUU1QyxJQUFJLGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzVDLGdDQUFnQyxHQUFHLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2hFLENBQUM7WUFFRCxJQUFJLCtCQUErQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLCtCQUErQixHQUFHLE9BQU8sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQzlELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDN0csT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xOLE9BQU87WUFDVCxDQUFDO1lBQ0QsZUFBZSxHQUFHLElBQUksQ0FBQztZQUN2QixNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQztZQUM1QyxNQUFNLGFBQWEsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMzQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUVwRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxQixNQUFNLGNBQWMsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUVoSCxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDdEQsY0FBYyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztnQkFDaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBRXZDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBZ0IsQ0FBQztnQkFDbkQsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2xDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7Z0JBQ3hFLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7Z0JBQ2pFLFNBQVMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2hDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7Z0JBQzNELFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsV0FBVyxDQUFDLEtBQUssSUFBSSxDQUFDO2dCQUNqRCxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQztnQkFDbkQsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO29CQUMzQixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDckMsQ0FBQztnQkFFRCxJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxFQUFFLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxlQUFlLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUFDO3dCQUMzRCxZQUFZLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZO3dCQUMvQyxXQUFXLEVBQUUsU0FBUzt3QkFDdEIsK0JBQStCO3dCQUMvQixnQ0FBZ0M7d0JBQ2hDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTt3QkFDekMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7d0JBQ2pDLHFDQUFxQyxFQUFFLElBQUksQ0FBQyxxQ0FBcUMsRUFBRTt3QkFDbkYsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7cUJBQ3hDLENBQUMsQ0FBQztvQkFFSCxPQUFPO2dCQUNULENBQUM7WUFDSCxDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsZ0NBQWdDLEVBQUUsK0JBQStCLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFFakwsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUM7WUFDekQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxnQ0FBZ0MsQ0FBQztZQUMvRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLCtCQUErQixDQUFDO1lBRTdELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3hFLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ25DLGFBQWEsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQy9DLENBQUM7Z0JBQ0QsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDcEMsYUFBYSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDaEQsQ0FBQztnQkFDRCxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNsQyxhQUFhLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2dCQUM5QyxDQUFDO2dCQUNELElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3JDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQ2pELENBQUM7WUFDSCxDQUFDO1lBQ0QsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQztZQUNuQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBRWpDLE1BQU0sYUFBYSxHQUFHLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFdkksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzt3R0FuU1UsdUJBQXVCOzRGQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBTG5DLFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUJvdW5kaW5nQ2xpZW50UmVjdCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lciwgY2hlY2tWaWV3SW5TY3JlZW4sIGdldCwgZ2V0RHJhZ0V2ZW50QnlFbGVtZW50LCBnZXRWaWV3cG9ydCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IGZyb21FdmVudCwgdGFrZVVudGlsLCB0YXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGlic1VpRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxEaXJlY3RpdmUgfSBmcm9tICcuL2RyYWctaXRlbS1pbi1jb250YWluZXItdmlydHVhbC1zY3JvbGwuZGlyZWN0aXZlJztcbmltcG9ydCB7IElEcmFnRW5kLCBJRHJhZ0xlYXZlLCBJRHJhZ092ZXIsIElEcmFnU3RhcnQsIElEcm9wIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2V2ZW50LmludGVyZmFjZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSBleHRlbmRzIExpYnNVaURyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcml2YXRlIGlzRHJhZ092ZXIgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGlzRHJhZ2dpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgLy9zZXR1cCAzIGZpZWxkIHBow61hIGTGsOG7m2kgbuG6v3UgxJFhbmcgc+G7rSBk4bulbmcgaXRlbSB0cm9uZyB2aXJ0dWFsLXNjcm9sbFxuICByZWFkb25seSBmaWVsZElkID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGl0ZW0gPSBpbnB1dDxhbnk+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGl0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwgPSBpbnB1dDxib29sZWFuPigpO1xuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgcmVhZG9ubHkgdGhyb3R0bGVUaW1lSGFuZGxlckRyYWdnaW5nRXZlbnQgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgMCB9KTtcbiAgcmVhZG9ubHkgaWdub3JlU3RvcEV2ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb25seU1vdXNlRG93blN0b3BFdmVudCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRyYWdSb290RWxlbWVudCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRyYWdCb3VuZGFyeSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRyYWdCb3VuZGFyeUFjY2VwdE1vdXNlTGVhdmVDb250YWluZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBlbGVtZW50Q29udGFpbmVyID0gaW5wdXQ8SFRNTEVsZW1lbnQ+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMzAwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAxMzAwIH0pO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXREcmFnU3RhcnQgPSBvdXRwdXQ8SURyYWdTdGFydD4oKTtcbiAgcmVhZG9ubHkgb3V0RHJhZ092ZXIgPSBvdXRwdXQ8SURyYWdPdmVyPigpO1xuICByZWFkb25seSBvdXREcmFnTGVhdmUgPSBvdXRwdXQ8SURyYWdMZWF2ZT4oKTtcbiAgcmVhZG9ubHkgb3V0RHJhZ0VuZCA9IG91dHB1dDxJRHJhZ0VuZD4oKTtcbiAgcmVhZG9ubHkgb3V0RHJvcHBlZCA9IG91dHB1dDxJRHJvcD4oKTtcblxuICAvLyAjcmVnaW9uIElOSkVDVFxuICBwcml2YXRlIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYCR7dGhpcy5kcmFnRHJvcFNlcnZpY2UuQ2xhc3NJdGVtRGVmaW5lfS1kaXNhYmxlYCk7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlKCkgJiYgIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGAke3RoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNsYXNzSXRlbURlZmluZX0tZGlzYWJsZWApKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChgJHt0aGlzLmRyYWdEcm9wU2VydmljZS5DbGFzc0l0ZW1EZWZpbmV9LWRpc2FibGVgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuZmllbGRJZCgpKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZmllbGRfaWQnLCB0aGlzLmZpZWxkSWQoKSk7XG4gICAgICBpZiAodGhpcy5pdGVtKCkpIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2l0ZW1faWQnLCBnZXQodGhpcy5pdGVtKCksIHRoaXMuZmllbGRJZCgpKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmRyYWdEcm9wU2VydmljZS5DbGFzc0l0ZW1EZWZpbmUpO1xuICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ2dpbmcucGlwZSh0aHJvdHRsZVRpbWUodGhpcy50aHJvdHRsZVRpbWVIYW5kbGVyRHJhZ2dpbmdFdmVudCgpKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKChldmVudERyYWdnaW5nKSA9PiB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlKCkgfHwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVEcmFnQ29udGFpbmVyJykgfHwgKHRoaXMuZmllbGRJZCgpICYmIHRoaXMuaXRlbSgpICYmIGV2ZW50RHJhZ2dpbmcuZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdpdGVtX2lkJykgPT09IGdldCh0aGlzLml0ZW0oKSwgdGhpcy5maWVsZElkKCkpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjb250YWluZXJCeUlkID0gdGhpcy5kcmFnRHJvcFNlcnZpY2UuQ29udGFpbmVyKCkuZ2V0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdncm91cElEJykgfHwgJycpO1xuXG4gICAgICBpZiAoY29udGFpbmVyQnlJZCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXZlbnREcmFnZ2luZy5lbGVtZW50S2VlcENvbnRhaW5lciB8fFxuICAgICAgICAgICF0aGlzLmRyYWdEcm9wU2VydmljZS5jaGVja0VsZW1lbnRPdmVyQWNjZXB0RWxlbWVudERyYWcoY29udGFpbmVyQnlJZC5lbGVtZW50LmdldEF0dHJpYnV0ZSgnZ3JvdXBOYW1lJyksIGV2ZW50RHJhZ2dpbmcuZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdncm91cE5hbWUnKSwgZXZlbnREcmFnZ2luZy5lbGVtZW50RHJhZy5nZXRBdHRyaWJ1dGUoJ2Ryb3BUb0dyb3VwTmFtZScpKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja01vdXNlT3ZlckluQ29udGFpbmVyKGV2ZW50RHJhZ2dpbmcubW91c2VQb3NpdGlvbiwgZWxlbWVudCkgJiYgZWxlbWVudCAhPT0gZXZlbnREcmFnZ2luZy5lbGVtZW50RHJhZyAmJiBjb250YWluZXJCeUlkICYmIGNoZWNrVmlld0luU2NyZWVuKGNvbnRhaW5lckJ5SWQuZWxlbWVudCwgZWxlbWVudCwgY29udGFpbmVyQnlJZC5lbGVtZW50U2Nyb2xsKSkge1xuICAgICAgICBpZiAodGhpcy5pc0RyYWdPdmVyKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnREcmFnT3ZlciA9IHsgLi4uZXZlbnREcmFnZ2luZywgZWxlbWVudERyYWdPdmVyOiBlbGVtZW50IH07XG5cbiAgICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25EcmFnT3Zlci5uZXh0KGV2ZW50RHJhZ092ZXIpO1xuICAgICAgICB0aGlzLm91dERyYWdPdmVyLmVtaXQoZXZlbnREcmFnT3Zlcik7XG4gICAgICAgIHRoaXMuaXNEcmFnT3Zlci5zZXQodHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pc0RyYWdPdmVyKCkpIHtcbiAgICAgICAgY29uc3QgZXZlbnREcmFnTGVhdmUgPSB7IC4uLmV2ZW50RHJhZ2dpbmcsIGVsZW1lbnREcmFnTGVhdmU6IGVsZW1lbnQgfTtcbiAgICAgICAgdGhpcy5pc0RyYWdPdmVyLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ0xlYXZlLm5leHQoZXZlbnREcmFnTGVhdmUpO1xuICAgICAgICB0aGlzLm91dERyYWdMZWF2ZS5lbWl0KGV2ZW50RHJhZ0xlYXZlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJvcENvbnRhaW5lci5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoZXZlbnREcm9wKSA9PiB7XG4gICAgICBpZiAoZXZlbnREcm9wLmVsZW1lbnREcm9wICE9PSBlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRyb3BFdmVudCA9IHsgZWxlbWVudERyYWc6IGV2ZW50RHJvcC5lbGVtZW50RHJhZywgZWxlbWVudERyb3A6IGVsZW1lbnQsIGl0ZW1EcmFnSW5mbzogZXZlbnREcm9wLml0ZW1EcmFnSW5mbyB9O1xuXG4gICAgICB0aGlzLm91dERyb3BwZWQuZW1pdChkcm9wRXZlbnQpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0eWxlVGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblxuICAgIHN0eWxlVGFnLnRleHRDb250ZW50ID0gYC5saWJzLXVpLWRyYWctZHJvcC1pdGVtLWRyYWdnaW5ne2N1cnNvcjptb3ZlfWA7XG4gICAgbGV0IG5vZGVDbG9uZSA9IGVsZW1lbnQ7XG4gICAgbGV0IGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0ID0gLTE7XG4gICAgbGV0IGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3AgPSAtMTtcbiAgICBsZXQgY29udGV4dE1lbnUgPSBmYWxzZTtcbiAgICBjb25zdCBzdG9wRXZlbnRNb3VzZSA9IChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaWdub3JlU3RvcEV2ZW50KCkpIHtcbiAgICAgICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBtb3VzZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdXBkYXRlUG9zaXRpb25FbGVtZW50Um9vdEFuZFJlbW92ZU5vZGVDbG9uZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmRyYWdSb290RWxlbWVudCgpKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckJ5SWQgPSB0aGlzLmRyYWdEcm9wU2VydmljZS5Db250YWluZXIoKS5nZXQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2dyb3VwSUQnKSB8fCAnJyk7XG5cbiAgICAgICAgY29uc3QgY29udGFpbmVySXRlbSA9IHRoaXMuZWxlbWVudENvbnRhaW5lcigpIHx8IGNvbnRhaW5lckJ5SWQ/LmVsZW1lbnRTY3JvbGwgfHwgY29udGFpbmVyQnlJZD8uZWxlbWVudCB8fCBkb2N1bWVudC5ib2R5O1xuICAgICAgICBjb25zdCByZWN0Q29udGFpbmVyID0gY29udGFpbmVySXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgcmVjdE5vZGVDbG9uZSA9IG5vZGVDbG9uZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgbnVtYmVyU3ViID0gTnVtYmVyKChnZXRDb21wdXRlZFN0eWxlKGNvbnRhaW5lckl0ZW0pLmJvcmRlci5tYXRjaCgvXFxkK3B4L2dpKSB8fCBbJzAnXSlbMF0ucmVwbGFjZSgvXFxEKy9naSwgJycpKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gcmVjdE5vZGVDbG9uZS5sZWZ0IC0gcmVjdENvbnRhaW5lci5sZWZ0IC0gbnVtYmVyU3ViICsgJ3B4JztcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSByZWN0Tm9kZUNsb25lLnRvcCAtIHJlY3RDb250YWluZXIudG9wIC0gbnVtYmVyU3ViICsgJ3B4JztcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdvcGFjaXR5LTAnKTtcbiAgICAgIH1cbiAgICAgIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0ID0gLTE7XG4gICAgICBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wID0gLTE7XG4gICAgICBub2RlQ2xvbmUucmVtb3ZlKCk7XG4gICAgfTtcblxuICAgIGZyb21FdmVudChkb2N1bWVudCwgJ2NvbnRleHRtZW51JylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICAgICAgdXBkYXRlUG9zaXRpb25FbGVtZW50Um9vdEFuZFJlbW92ZU5vZGVDbG9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250ZXh0TWVudSA9IHRydWU7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBsZXQgaWdub3JlTW91c2Vkb3duID0gZmFsc2U7XG5cbiAgICBnZXREcmFnRXZlbnRCeUVsZW1lbnQoe1xuICAgICAgZWxlbWVudE1vdXNlRG93bjogZWxlbWVudCxcbiAgICAgIGZ1bmN0aW9uTW91c2VEb3duOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuSXRlbUNsaWNrID0gZWxlbWVudDtcbiAgICAgICAgY29udGV4dE1lbnUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51cGRhdGVNb3VzZUV2ZW50c1doZW5Nb3ZlT3ZlcklmcmFtZSgnbm9uZScpO1xuICAgICAgICBpZiAoKHRoaXMuZGlzYWJsZSgpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlRHJhZ0NvbnRhaW5lcicpIHx8ICF0aGlzLmlzRHJhZ2dpbmcoKSB8fCB0aGlzLml0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwoKSkgJiYgIXRoaXMub25seU1vdXNlRG93blN0b3BFdmVudCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0b3BFdmVudE1vdXNlKGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbk1vdXNlTW92ZTogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIHN0b3BFdmVudE1vdXNlKGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbk1vdXNlVXA6IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZU1vdXNlRXZlbnRzV2hlbk1vdmVPdmVySWZyYW1lKCdhdXRvJyk7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLnJlc2V0SXRlbUNsaWNrKCk7XG4gICAgICAgIHN0b3BFdmVudE1vdXNlKGV2ZW50KTtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZSgpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlRHJhZ0NvbnRhaW5lcicpIHx8IGNvbnRleHRNZW51IHx8ICF0aGlzLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICAgIGNvbnRleHRNZW51ID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dE1lbnUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nLnNldChmYWxzZSk7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLlRhcmdldEl0ZW1EcmFnRmxhZyk7XG4gICAgICAgIGlmICh0aGlzLml0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb3VzZVBvc2l0aW9uID0geyBjbGllbnRYOiBldmVudC5jbGllbnRYLCBjbGllbnRZOiBldmVudC5jbGllbnRZIH07XG5cbiAgICAgICAgaWYgKHRoaXMuZHJhZ0JvdW5kYXJ5KCkgJiYgdGhpcy5kcmFnQm91bmRhcnlBY2NlcHRNb3VzZUxlYXZlQ29udGFpbmVyKCkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldENsaWVudFBvc2l0aW9uKGVsZW1lbnQsIG1vdXNlUG9zaXRpb24sIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0LCBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wLCB0aGlzLmRyYWdCb3VuZGFyeSgpLCB0aGlzLmVsZW1lbnRDb250YWluZXIoKSk7XG5cbiAgICAgICAgICBtb3VzZVBvc2l0aW9uLmNsaWVudFggPSByZXN1bHQuY2xpZW50WDtcbiAgICAgICAgICBtb3VzZVBvc2l0aW9uLmNsaWVudFkgPSByZXN1bHQuY2xpZW50WTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkcmFnRW5kRXZlbnQgPSB7IG1vdXNlUG9zaXRpb24sIGVsZW1lbnREcmFnOiBlbGVtZW50LCBpdGVtRHJhZ0luZm86IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1EcmFnSW5mbyB9O1xuXG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1EcmFnSW5mbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25EcmFnRW5kLm5leHQoZHJhZ0VuZEV2ZW50KTtcbiAgICAgICAgdGhpcy5vdXREcmFnRW5kLmVtaXQoZHJhZ0VuZEV2ZW50KTtcblxuICAgICAgICBub2RlQ2xvbmUuY2xhc3NMaXN0LnJlbW92ZSgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1kcmFnZ2luZycpO1xuICAgICAgICBzdHlsZVRhZy5yZW1vdmUoKTtcblxuICAgICAgICB1cGRhdGVQb3NpdGlvbkVsZW1lbnRSb290QW5kUmVtb3ZlTm9kZUNsb25lKCk7XG4gICAgICB9LFxuICAgICAgb25EZXN0cm95OiB0aGlzLm9uRGVzdHJveSxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZHJhZ01vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCByZWN0RWxlbWVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBnZXRWaWV3cG9ydCgpIGFzIElCb3VuZGluZ0NsaWVudFJlY3Q7XG5cbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlKCkgfHwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVEcmFnQ29udGFpbmVyJykgfHwgIWRyYWdNb3VzZUV2ZW50LmNsaWVudFggfHwgKCFpZ25vcmVNb3VzZWRvd24gJiYgZHJhZ01vdXNlRXZlbnQudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgcmVjdEVsZW1lbnQuaGVpZ2h0ICsgcmVjdEVsZW1lbnQudG9wID49IHZpZXdwb3J0LmhlaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBkcmFnTW91c2VFdmVudDtcblxuICAgICAgICAgIGlmIChkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlTGVmdCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0ID0gY2xpZW50WCAtIHJlY3RFbGVtZW50LmxlZnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3AgPT09IC0xKSB7XG4gICAgICAgICAgICBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wID0gY2xpZW50WSAtIHJlY3RFbGVtZW50LnRvcDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChkcmFnTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kcmFnRHJvcFNlcnZpY2UuSXRlbUNsaWNrLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gZWxlbWVudCkuc29tZSgoaXRlbSkgPT4gZWxlbWVudC5jb250YWlucyhpdGVtKSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZSgpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlRHJhZ0NvbnRhaW5lcicpIHx8ICFkcmFnTW91c2VFdmVudC5jbGllbnRYIHx8IGRyYWdNb3VzZUV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nIHx8IGNvbnRleHRNZW51IHx8ICh0aGlzLml0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwoKSAmJiB0aGlzLmlzRHJhZ2dpbmcoKSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWdub3JlTW91c2Vkb3duID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBkcmFnTW91c2VFdmVudDtcbiAgICAgICAgY29uc3QgbW91c2VQb3NpdGlvbiA9IHsgY2xpZW50WCwgY2xpZW50WSB9O1xuICAgICAgICBjb25zdCByZWN0RWxlbWVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgY29uc3QgZXZlbnREcmFnU3RhcnQgPSB7IG1vdXNlUG9zaXRpb24sIGVsZW1lbnREcmFnOiBlbGVtZW50LCBpdGVtRHJhZ0luZm86IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1EcmFnSW5mbyB9O1xuXG4gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5kcmFnRHJvcFNlcnZpY2UuVGFyZ2V0SXRlbURyYWdGbGFnLCAndHJ1ZScpO1xuICAgICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ1N0YXJ0Lm5leHQoZXZlbnREcmFnU3RhcnQpO1xuICAgICAgICAgIGV2ZW50RHJhZ1N0YXJ0Lml0ZW1EcmFnSW5mbyA9IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1EcmFnSW5mbztcbiAgICAgICAgICB0aGlzLm91dERyYWdTdGFydC5lbWl0KGV2ZW50RHJhZ1N0YXJ0KTtcblxuICAgICAgICAgIG5vZGVDbG9uZSA9IGVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIG5vZGVDbG9uZS5zdHlsZS56SW5kZXggPSBgJHt0aGlzLnpJbmRleCgpfWA7XG4gICAgICAgICAgbm9kZUNsb25lLmNsYXNzTGlzdC5hZGQoJyFmaXhlZCcpO1xuICAgICAgICAgIG5vZGVDbG9uZS5jbGFzc0xpc3QucmVtb3ZlKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLW9yaWdpbi1wbGFjZWhvbGRlcicpO1xuICAgICAgICAgIG5vZGVDbG9uZS5jbGFzc0xpc3QucmVtb3ZlKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLXBsYWNlaG9sZGVyJyk7XG4gICAgICAgICAgbm9kZUNsb25lLmFwcGVuZENoaWxkKHN0eWxlVGFnKTtcbiAgICAgICAgICBub2RlQ2xvbmUuY2xhc3NMaXN0LmFkZCgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1kcmFnZ2luZycpO1xuICAgICAgICAgIG5vZGVDbG9uZS5zdHlsZS53aWR0aCA9IGAke3JlY3RFbGVtZW50LndpZHRofXB4YDtcbiAgICAgICAgICBub2RlQ2xvbmUuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdEVsZW1lbnQuaGVpZ2h0fXB4YDtcbiAgICAgICAgICBub2RlQ2xvbmUuc3R5bGUubGVmdCA9IGAkey05OTl9cHhgO1xuICAgICAgICAgIG5vZGVDbG9uZS5zdHlsZS50b3AgPSBgJHstOTk5fXB4YDtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChub2RlQ2xvbmUpO1xuICAgICAgICAgIGlmICh0aGlzLmRyYWdSb290RWxlbWVudCgpKSB7XG4gICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ29wYWNpdHktMCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLml0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwoKSkge1xuICAgICAgICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25EcmFnSXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbC5uZXh0KHtcbiAgICAgICAgICAgICAgaXRlbURyYWdJbmZvOiB0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtRHJhZ0luZm8sXG4gICAgICAgICAgICAgIGVsZW1lbnREcmFnOiBub2RlQ2xvbmUsXG4gICAgICAgICAgICAgIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3AsXG4gICAgICAgICAgICAgIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0LFxuICAgICAgICAgICAgICBlbGVtZW50Q29udGFpbmVyOiB0aGlzLmVsZW1lbnRDb250YWluZXIoKSxcbiAgICAgICAgICAgICAgZHJhZ0JvdW5kYXJ5OiB0aGlzLmRyYWdCb3VuZGFyeSgpLFxuICAgICAgICAgICAgICBkcmFnQm91bmRhcnlBY2NlcHRNb3VzZUxlYXZlQ29udGFpbmVyOiB0aGlzLmRyYWdCb3VuZGFyeUFjY2VwdE1vdXNlTGVhdmVDb250YWluZXIoKSxcbiAgICAgICAgICAgICAgaWdub3JlU3RvcEV2ZW50OiB0aGlzLmlnbm9yZVN0b3BFdmVudCgpLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRDbGllbnRQb3NpdGlvbihub2RlQ2xvbmUsIG1vdXNlUG9zaXRpb24sIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0LCBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wLCB0aGlzLmRyYWdCb3VuZGFyeSgpLCB0aGlzLmVsZW1lbnRDb250YWluZXIoKSk7XG5cbiAgICAgICAgY29uc3QgZWxlbWVudEtlZXBDb250YWluZXIgPSByZXN1bHQuZWxlbWVudEtlZXBDb250YWluZXI7XG4gICAgICAgIGNvbnN0IGxlZnQgPSByZXN1bHQuY2xpZW50WCAtIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0O1xuICAgICAgICBjb25zdCB0b3AgPSByZXN1bHQuY2xpZW50WSAtIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3A7XG5cbiAgICAgICAgaWYgKHRoaXMuZHJhZ0JvdW5kYXJ5KCkgJiYgdGhpcy5kcmFnQm91bmRhcnlBY2NlcHRNb3VzZUxlYXZlQ29udGFpbmVyKCkpIHtcbiAgICAgICAgICBpZiAoY2xpZW50WCA8IHJlc3VsdC52aWV3cG9ydC5sZWZ0KSB7XG4gICAgICAgICAgICBtb3VzZVBvc2l0aW9uLmNsaWVudFggPSByZXN1bHQudmlld3BvcnQubGVmdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNsaWVudFggPiByZXN1bHQudmlld3BvcnQud2lkdGgpIHtcbiAgICAgICAgICAgIG1vdXNlUG9zaXRpb24uY2xpZW50WCA9IHJlc3VsdC52aWV3cG9ydC53aWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNsaWVudFkgPCByZXN1bHQudmlld3BvcnQudG9wKSB7XG4gICAgICAgICAgICBtb3VzZVBvc2l0aW9uLmNsaWVudFkgPSByZXN1bHQudmlld3BvcnQudG9wO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2xpZW50WSA+IHJlc3VsdC52aWV3cG9ydC5oZWlnaHQpIHtcbiAgICAgICAgICAgIG1vdXNlUG9zaXRpb24uY2xpZW50WSA9IHJlc3VsdC52aWV3cG9ydC5oZWlnaHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGVDbG9uZS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICAgIG5vZGVDbG9uZS5zdHlsZS50b3AgPSBgJHt0b3B9cHhgO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50RHJhZ2dpbmcgPSB7IG1vdXNlUG9zaXRpb24sIGVsZW1lbnREcmFnOiBub2RlQ2xvbmUsIGVsZW1lbnRLZWVwQ29udGFpbmVyLCBpdGVtRHJhZ0luZm86IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1EcmFnSW5mbyB9O1xuXG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ2dpbmcubmV4dChldmVudERyYWdnaW5nKTtcbiAgICAgIH0pO1xuICB9XG59XG4iXX0=
|