@tetacom/ng-components 1.0.35 → 1.0.38
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/assets/icons.svg +503 -657
- package/component/expand-card/expand-card/expand-card.component.d.ts +13 -0
- package/component/expand-card/expand-card.module.d.ts +12 -0
- package/component/expand-card/public-api.d.ts +2 -0
- package/component/file-upload/file-upload.module.d.ts +2 -1
- package/component/modal/modal-container/modal-container.component.d.ts +1 -1
- package/component/modal/modal.service.d.ts +1 -1
- package/component/modal/model/i-modal-result.d.ts +2 -1
- package/component/modal/model/modal-instance.d.ts +2 -2
- package/component/public-api.d.ts +2 -0
- package/component/resize-panel/resize-panel/resize-panel.component.d.ts +1 -0
- package/component/table/enum/select-type.enum.d.ts +2 -2
- package/directive/context-menu/context-menu.directive.d.ts +4 -1
- package/directive/drag-drop/drag-container.directive.d.ts +32 -0
- package/directive/drag-drop/drag-drop.module.d.ts +11 -0
- package/directive/drag-drop/drag-drop.service.d.ts +40 -0
- package/directive/drag-drop/drag-placeholder.directive.d.ts +6 -0
- package/directive/drag-drop/drag-preview.directive.d.ts +8 -0
- package/directive/drag-drop/drag.directive.d.ts +31 -0
- package/directive/drag-drop/model/drag-container-instance.d.ts +11 -0
- package/directive/drag-drop/model/drag-instance.d.ts +9 -0
- package/directive/drag-drop/model/drag-process.d.ts +4 -0
- package/directive/drag-drop/model/drag-selection.d.ts +6 -0
- package/directive/drag-drop/model/drop-event.d.ts +8 -0
- package/directive/drag-drop/model/drop-target.d.ts +3 -0
- package/directive/drag-drop/model/point.d.ts +4 -0
- package/directive/drag-drop/model/public-api.d.ts +7 -0
- package/directive/drag-drop/public-api.d.ts +7 -0
- package/directive/let/let.directive.d.ts +18 -0
- package/directive/let/let.module.d.ts +8 -0
- package/directive/let/public-api.d.ts +2 -0
- package/directive/public-api.d.ts +2 -1
- package/esm2020/component/checkbox/checkbox/checkbox.component.mjs +3 -3
- package/esm2020/component/dropdown/dropdown-base.mjs +3 -4
- package/esm2020/component/expand-card/expand-card/expand-card.component.mjs +36 -0
- package/esm2020/component/expand-card/expand-card.module.mjs +42 -0
- package/esm2020/component/expand-card/public-api.mjs +3 -0
- package/esm2020/component/expand-panel/expand-panel/expand-panel.component.mjs +3 -3
- package/esm2020/component/file-upload/file-upload-area/file-upload-area.component.mjs +4 -3
- package/esm2020/component/file-upload/file-upload.module.mjs +5 -4
- package/esm2020/component/modal/modal-container/modal-container.component.mjs +7 -7
- package/esm2020/component/modal/modal.service.mjs +1 -1
- package/esm2020/component/modal/model/i-modal-result.mjs +1 -1
- package/esm2020/component/modal/model/modal-instance.mjs +4 -2
- package/esm2020/component/public-api.mjs +5 -1
- package/esm2020/component/resize-panel/resize-panel/resize-panel.component.mjs +6 -3
- package/esm2020/component/table/default/default-head-cell/default-head-cell.component.mjs +2 -2
- package/esm2020/component/table/enum/select-type.enum.mjs +3 -3
- package/esm2020/component/table/service/table.service.mjs +5 -20
- package/esm2020/component/table/table/table.component.mjs +7 -4
- package/esm2020/component/table/table-body/table-body.component.mjs +4 -4
- package/esm2020/component/table/table-head/table-head.component.mjs +4 -4
- package/esm2020/component/theme-switch/theme-switch/theme-switch.component.mjs +3 -3
- package/esm2020/directive/context-menu/context-menu.directive.mjs +36 -11
- package/esm2020/directive/drag-drop/drag-container.directive.mjs +92 -0
- package/esm2020/directive/drag-drop/drag-drop.module.mjs +41 -0
- package/esm2020/directive/drag-drop/drag-drop.service.mjs +140 -0
- package/esm2020/directive/drag-drop/drag-placeholder.directive.mjs +14 -0
- package/esm2020/directive/drag-drop/drag-preview.directive.mjs +16 -0
- package/esm2020/directive/drag-drop/drag.directive.mjs +128 -0
- package/esm2020/directive/drag-drop/model/drag-container-instance.mjs +8 -0
- package/esm2020/directive/drag-drop/model/drag-instance.mjs +7 -0
- package/esm2020/directive/drag-drop/model/drag-process.mjs +2 -0
- package/esm2020/directive/drag-drop/model/drag-selection.mjs +2 -0
- package/esm2020/directive/drag-drop/model/drop-event.mjs +2 -0
- package/esm2020/directive/drag-drop/model/drop-target.mjs +2 -0
- package/esm2020/directive/drag-drop/model/point.mjs +2 -0
- package/esm2020/directive/drag-drop/model/public-api.mjs +8 -0
- package/esm2020/directive/drag-drop/public-api.mjs +8 -0
- package/esm2020/directive/let/let.directive.mjs +38 -0
- package/esm2020/directive/let/let.module.mjs +25 -0
- package/esm2020/directive/let/public-api.mjs +3 -0
- package/esm2020/directive/public-api.mjs +3 -2
- package/esm2020/observable/public-api.mjs +2 -0
- package/esm2020/observable/zoneObservable.mjs +15 -0
- package/esm2020/public-api.mjs +3 -1
- package/esm2020/util/date-util.mjs +41 -1
- package/esm2020/util/forms-util.mjs +7 -1
- package/fesm2015/tetacom-ng-components.mjs +968 -340
- package/fesm2015/tetacom-ng-components.mjs.map +1 -1
- package/fesm2020/tetacom-ng-components.mjs +953 -337
- package/fesm2020/tetacom-ng-components.mjs.map +1 -1
- package/observable/public-api.d.ts +1 -0
- package/observable/zoneObservable.d.ts +5 -0
- package/package.json +6 -2
- package/public-api.d.ts +1 -0
- package/style/button.scss +1 -1
- package/style/input.scss +1 -1
- package/style/layout.scss +30 -2
- package/style/list.scss +9 -4
- package/style/modal.scss +2 -0
- package/style/presets/color-presets.scss +77 -79
- package/style/presets/font-presets.scss +21 -21
- package/style/presets/shadow-presets.scss +6 -6
- package/style/radio.scss +2 -2
- package/style/switch.scss +3 -3
- package/style/table.scss +1 -2
- package/style/toolbar.scss +1 -1
- package/style/util/button-util.scss +2 -2
- package/util/date-util.d.ts +1 -0
- package/util/forms-util.d.ts +1 -0
|
@@ -4,8 +4,6 @@ import { ArrayUtil } from '../../common/util/array-util';
|
|
|
4
4
|
import { DomUtil } from '../../common/util/dom-util';
|
|
5
5
|
import { PositionUtil } from '../../common/util/position-util';
|
|
6
6
|
import { DynamicContentBaseDirective } from '../dynamic-content-base.directive';
|
|
7
|
-
import { merge } from 'rxjs';
|
|
8
|
-
import { filter, takeWhile, tap } from 'rxjs/operators';
|
|
9
7
|
import * as i0 from "@angular/core";
|
|
10
8
|
import * as i1 from "../../common/service/dynamic-component.service";
|
|
11
9
|
import * as i2 from "../../common/service/click.service";
|
|
@@ -19,12 +17,13 @@ export class ContextMenuDirective extends DynamicContentBaseDirective {
|
|
|
19
17
|
this._zone = _zone;
|
|
20
18
|
this._cdr = _cdr;
|
|
21
19
|
this._click = _click;
|
|
20
|
+
this.autoCloseIgnore = [];
|
|
22
21
|
}
|
|
23
22
|
get _dynamicContent() {
|
|
24
23
|
return this.tetaContextMenu;
|
|
25
24
|
}
|
|
26
25
|
showContent(event) {
|
|
27
|
-
if (this.tetaContextMenu) {
|
|
26
|
+
if (this.tetaContextMenu && !event.defaultPrevented) {
|
|
28
27
|
event.preventDefault();
|
|
29
28
|
setTimeout(() => {
|
|
30
29
|
this.createMenu(event);
|
|
@@ -38,14 +37,32 @@ export class ContextMenuDirective extends DynamicContentBaseDirective {
|
|
|
38
37
|
event.stopPropagation();
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
merge(this._click.click, this._click.contextMenu)
|
|
44
|
-
.pipe(takeWhile(() => this._alive), filter(() => this._open), filter(() => this._componentRef != null), filter((event) => !DomUtil.clickedInside(this._componentRef.location.nativeElement, event)), tap((_) => {
|
|
40
|
+
documentClick(event) {
|
|
41
|
+
if (this._open && this._componentRef && (!DomUtil.clickedInside(this._componentRef.location.nativeElement, event) || this.autoCloseIgnore.indexOf('inside') < 0)) {
|
|
45
42
|
this.destroyContentRef();
|
|
46
43
|
this.openChange.emit(false);
|
|
47
|
-
}
|
|
48
|
-
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
ngOnInit() {
|
|
47
|
+
super.ngOnInit();
|
|
48
|
+
// merge(this._click.click, this._click.contextMenu)
|
|
49
|
+
// .pipe(
|
|
50
|
+
// takeWhile(() => this._alive),
|
|
51
|
+
// filter(() => this._open),
|
|
52
|
+
// filter(() => this._componentRef != null),
|
|
53
|
+
// filter(
|
|
54
|
+
// (event: MouseEvent) =>
|
|
55
|
+
// !DomUtil.clickedInside(
|
|
56
|
+
// this._componentRef.location.nativeElement,
|
|
57
|
+
// event
|
|
58
|
+
// ) || this.autoCloseIgnore.indexOf('inside') < 0
|
|
59
|
+
// ),
|
|
60
|
+
// tap((_) => {
|
|
61
|
+
// this.destroyContentRef();
|
|
62
|
+
// this.openChange.emit(false);
|
|
63
|
+
// })
|
|
64
|
+
// )
|
|
65
|
+
// .subscribe();
|
|
49
66
|
}
|
|
50
67
|
ngOnDestroy() {
|
|
51
68
|
super.ngOnDestroy();
|
|
@@ -75,7 +92,7 @@ export class ContextMenuDirective extends DynamicContentBaseDirective {
|
|
|
75
92
|
}
|
|
76
93
|
}
|
|
77
94
|
ContextMenuDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: ContextMenuDirective, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: i1.DynamicComponentService }, { token: i0.Injector }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i2.ClickService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
78
|
-
ContextMenuDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.1", type: ContextMenuDirective, selector: "[tetaContextMenu]", inputs: { tetaContextMenu: "tetaContextMenu" }, host: { listeners: { "contextmenu": "showContent($event)", "click": "click($event)" } }, usesInheritance: true, ngImport: i0 });
|
|
95
|
+
ContextMenuDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.1", type: ContextMenuDirective, selector: "[tetaContextMenu]", inputs: { tetaContextMenu: "tetaContextMenu", autoCloseIgnore: "autoCloseIgnore" }, host: { listeners: { "contextmenu": "showContent($event)", "click": "click($event)", "document:click": "documentClick($event)", "document:contextmenu": "documentClick($event)" } }, usesInheritance: true, ngImport: i0 });
|
|
79
96
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: ContextMenuDirective, decorators: [{
|
|
80
97
|
type: Directive,
|
|
81
98
|
args: [{
|
|
@@ -86,11 +103,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
|
86
103
|
args: [DOCUMENT]
|
|
87
104
|
}] }, { type: i0.ElementRef }, { type: i1.DynamicComponentService }, { type: i0.Injector }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i2.ClickService }]; }, propDecorators: { tetaContextMenu: [{
|
|
88
105
|
type: Input
|
|
106
|
+
}], autoCloseIgnore: [{
|
|
107
|
+
type: Input
|
|
89
108
|
}], showContent: [{
|
|
90
109
|
type: HostListener,
|
|
91
110
|
args: ['contextmenu', ['$event']]
|
|
92
111
|
}], click: [{
|
|
93
112
|
type: HostListener,
|
|
94
113
|
args: ['click', ['$event']]
|
|
114
|
+
}], documentClick: [{
|
|
115
|
+
type: HostListener,
|
|
116
|
+
args: ['document:click', ['$event']]
|
|
117
|
+
}, {
|
|
118
|
+
type: HostListener,
|
|
119
|
+
args: ['document:contextmenu', ['$event']]
|
|
95
120
|
}] } });
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kaXJlY3RpdmUvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUVOLEtBQUssR0FNTixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFFOUUsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUt0RCxNQUFNLE9BQU8sb0JBQ1gsU0FBUSwyQkFBMkI7SUFnQm5DLFlBRXFCLFNBQWMsRUFDZCxXQUF1QixFQUN2QixRQUFpQyxFQUNqQyxTQUFtQixFQUNuQixLQUFhLEVBQ2IsSUFBdUIsRUFDbEMsTUFBb0I7UUFFNUIsS0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFSN0MsY0FBUyxHQUFULFNBQVMsQ0FBSztRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLGFBQVEsR0FBUixRQUFRLENBQXlCO1FBQ2pDLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFNB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QUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUc7WUFDdEMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDcEMsY0FBYztTQUNmLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDOztpSEE1R1Usb0JBQW9CLGtCQWtCckIsUUFBUTtxR0FsQlAsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBSGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtpQkFDOUI7OzBCQW1CSSxNQUFNOzJCQUFDLFFBQVE7a05BWlQsZUFBZTtzQkFBdkIsS0FBSztnQkF5Qk4sV0FBVztzQkFEVixZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFXdkMsS0FBSztzQkFESixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RHluYW1pY0NvbXBvbmVudFNlcnZpY2V9IGZyb20gJy4uLy4uL2NvbW1vbi9zZXJ2aWNlL2R5bmFtaWMtY29tcG9uZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QXJyYXlVdGlsfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbC9hcnJheS11dGlsJztcbmltcG9ydCB7RG9tVXRpbH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWwvZG9tLXV0aWwnO1xuaW1wb3J0IHtQb3NpdGlvblV0aWx9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlsL3Bvc2l0aW9uLXV0aWwnO1xuaW1wb3J0IHtEeW5hbWljQ29udGVudEJhc2VEaXJlY3RpdmV9IGZyb20gJy4uL2R5bmFtaWMtY29udGVudC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0NsaWNrU2VydmljZX0gZnJvbSAnLi4vLi4vY29tbW9uL3NlcnZpY2UvY2xpY2suc2VydmljZSc7XG5pbXBvcnQge21lcmdlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCB0YWtlV2hpbGUsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGV0YUNvbnRleHRNZW51XScsXG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHRNZW51RGlyZWN0aXZlXG4gIGV4dGVuZHMgRHluYW1pY0NvbnRlbnRCYXNlRGlyZWN0aXZlXG4gIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICAvKipcbiAgICog0KHRgtGA0L7QutCwLCDRiNCw0LHQu9C+0L0g0LjQu9C4INC60L7QvNC/0L7QvdC10L3RgiDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDQutC+0L3RgtC10LrRgdGC0L3QvtCz0L4g0LzQtdC90Y5cbiAgICovXG4gIEBJbnB1dCgpIHRldGFDb250ZXh0TWVudTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB8IFR5cGU8YW55PjtcblxuICBnZXQgX2R5bmFtaWNDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRldGFDb250ZXh0TWVudTtcbiAgfVxuXG4gIHByaXZhdGUgX2V2ZW50UG9pbnQ6IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF9kb2N1bWVudDogYW55LFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3NlcnZpY2U6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfem9uZTogTmdab25lLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9jbGljazogQ2xpY2tTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKF9kb2N1bWVudCwgX2VsZW1lbnRSZWYsIF9zZXJ2aWNlLCBfaW5qZWN0b3IsIF96b25lLCBfY2RyKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgWyckZXZlbnQnXSlcbiAgc2hvd0NvbnRlbnQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZih0aGlzLnRldGFDb250ZXh0TWVudSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNyZWF0ZU1lbnUoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBjbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuX2NvbXBvbmVudFJlZiAmJlxuICAgICAgRG9tVXRpbC5jbGlja2VkSW5zaWRlKHRoaXMuX2NvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LCBldmVudClcbiAgICApIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIG1lcmdlKHRoaXMuX2NsaWNrLmNsaWNrLCB0aGlzLl9jbGljay5jb250ZXh0TWVudSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5fb3BlbiksXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9jb21wb25lbnRSZWYgIT0gbnVsbCksXG4gICAgICAgIGZpbHRlcihcbiAgICAgICAgICAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+XG4gICAgICAgICAgICAhRG9tVXRpbC5jbGlja2VkSW5zaWRlKFxuICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgdGFwKChfKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95Q29udGVudFJlZigpO1xuICAgICAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0UG9zaXRpb24oKSB7XG4gICAgaWYgKHRoaXMuX2NvbXBvbmVudFJlZiAmJiB0aGlzLl9vcGVuKSB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IFBvc2l0aW9uVXRpbC5nZXRQb3NpdGlvbihcbiAgICAgICAge1xuICAgICAgICAgIHRvcDogdGhpcy5fZXZlbnRQb2ludC55LFxuICAgICAgICAgIGJvdHRvbTogdGhpcy5fZXZlbnRQb2ludC55LFxuICAgICAgICAgIGxlZnQ6IHRoaXMuX2V2ZW50UG9pbnQueCxcbiAgICAgICAgICByaWdodDogdGhpcy5fZXZlbnRQb2ludC54LFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLl9jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgdGhpcy5hbGlnbixcbiAgICAgICAgdGhpcy52ZXJ0aWNhbEFsaWduXG4gICAgICApO1xuICAgICAgUG9zaXRpb25VdGlsLnNldEVsZW1lbnRQb3NpdGlvbihcbiAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTWVudShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRldGFDb250ZXh0TWVudSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2V2ZW50UG9pbnQgPSBldmVudDtcbiAgICB0aGlzLl9jb21wb25lbnRSZWYgPSB0aGlzLmNyZWF0ZUNvbnRlbnRSZWYoKTtcbiAgICB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuY2xhc3NOYW1lID0gW1xuICAgICAgLi4uQXJyYXlVdGlsLmFzQXJyYXkodGhpcy5jbGFzc05hbWUpLFxuICAgICAgJ2NvbnRleHQtbWVudScsXG4gICAgXTtcbiAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxufVxuIl19
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kaXJlY3RpdmUvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUVOLEtBQUssR0FNTixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7Ozs7QUFTOUUsTUFBTSxPQUFPLG9CQUNYLFNBQVEsMkJBQTJCO0lBaUJuQyxZQUVxQixTQUFjLEVBQ2QsV0FBdUIsRUFDdkIsUUFBaUMsRUFDakMsU0FBbUIsRUFDbkIsS0FBYSxFQUNiLElBQXVCLEVBQ2xDLE1BQW9CO1FBRTVCLEtBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBUjdDLGNBQVMsR0FBVCxTQUFTLENBQUs7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUF5QjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBbkJyQixvQkFBZSxHQUEwQixFQUFFLENBQUM7SUFzQnJELENBQUM7SUFwQkQsSUFBSSxlQUFlO1FB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QyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNwQyxjQUFjO1NBQ2YsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7O2lIQXZIVSxvQkFBb0Isa0JBbUJyQixRQUFRO3FHQW5CUCxvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFIaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2lCQUM5Qjs7MEJBb0JJLE1BQU07MkJBQUMsUUFBUTtrTkFiVCxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBeUJOLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBV3ZDLEtBQUs7c0JBREosWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBYWpDLGFBQWE7c0JBRlosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3pDLFlBQVk7dUJBQUMsc0JBQXNCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0R5bmFtaWNDb21wb25lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb21tb24vc2VydmljZS9keW5hbWljLWNvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0FycmF5VXRpbH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWwvYXJyYXktdXRpbCc7XG5pbXBvcnQge0RvbVV0aWx9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlsL2RvbS11dGlsJztcbmltcG9ydCB7UG9zaXRpb25VdGlsfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbC9wb3NpdGlvbi11dGlsJztcbmltcG9ydCB7RHluYW1pY0NvbnRlbnRCYXNlRGlyZWN0aXZlfSBmcm9tICcuLi9keW5hbWljLWNvbnRlbnQtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtDbGlja1NlcnZpY2V9IGZyb20gJy4uLy4uL2NvbW1vbi9zZXJ2aWNlL2NsaWNrLnNlcnZpY2UnO1xuaW1wb3J0IHttZXJnZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgdGFrZVdoaWxlLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7QXV0b0Nsb3NlSWdub3JlQ2FzZX0gZnJvbSAnLi4vLi4vY29tbW9uL2NvbnRyYWN0L2F1dG8tY2xvc2UtaWdub3JlLWNhc2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGV0YUNvbnRleHRNZW51XScsXG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHRNZW51RGlyZWN0aXZlXG4gIGV4dGVuZHMgRHluYW1pY0NvbnRlbnRCYXNlRGlyZWN0aXZlXG4gIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICAvKipcbiAgICog0KHRgtGA0L7QutCwLCDRiNCw0LHQu9C+0L0g0LjQu9C4INC60L7QvNC/0L7QvdC10L3RgiDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDQutC+0L3RgtC10LrRgdGC0L3QvtCz0L4g0LzQtdC90Y5cbiAgICovXG4gIEBJbnB1dCgpIHRldGFDb250ZXh0TWVudTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB8IFR5cGU8YW55PjtcbiAgQElucHV0KCkgYXV0b0Nsb3NlSWdub3JlOiBBdXRvQ2xvc2VJZ25vcmVDYXNlW10gPSBbXTtcblxuICBnZXQgX2R5bmFtaWNDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRldGFDb250ZXh0TWVudTtcbiAgfVxuXG4gIHByaXZhdGUgX2V2ZW50UG9pbnQ6IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF9kb2N1bWVudDogYW55LFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3NlcnZpY2U6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfem9uZTogTmdab25lLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9jbGljazogQ2xpY2tTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKF9kb2N1bWVudCwgX2VsZW1lbnRSZWYsIF9zZXJ2aWNlLCBfaW5qZWN0b3IsIF96b25lLCBfY2RyKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgWyckZXZlbnQnXSlcbiAgc2hvd0NvbnRlbnQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50ZXRhQ29udGV4dE1lbnUgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jcmVhdGVNZW51KGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgY2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLl9jb21wb25lbnRSZWYgJiZcbiAgICAgIERvbVV0aWwuY2xpY2tlZEluc2lkZSh0aGlzLl9jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCwgZXZlbnQpXG4gICAgKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjb250ZXh0bWVudScsIFsnJGV2ZW50J10pXG4gIGRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fb3BlbiAmJiB0aGlzLl9jb21wb25lbnRSZWYgJiYgKCFEb21VdGlsLmNsaWNrZWRJbnNpZGUodGhpcy5fY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBldmVudCkgfHwgdGhpcy5hdXRvQ2xvc2VJZ25vcmUuaW5kZXhPZignaW5zaWRlJykgPCAwKSkge1xuICAgICAgdGhpcy5kZXN0cm95Q29udGVudFJlZigpO1xuICAgICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgLy8gbWVyZ2UodGhpcy5fY2xpY2suY2xpY2ssIHRoaXMuX2NsaWNrLmNvbnRleHRNZW51KVxuICAgIC8vICAgLnBpcGUoXG4gICAgLy8gICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSksXG4gICAgLy8gICAgIGZpbHRlcigoKSA9PiB0aGlzLl9vcGVuKSxcbiAgICAvLyAgICAgZmlsdGVyKCgpID0+IHRoaXMuX2NvbXBvbmVudFJlZiAhPSBudWxsKSxcbiAgICAvLyAgICAgZmlsdGVyKFxuICAgIC8vICAgICAgIChldmVudDogTW91c2VFdmVudCkgPT5cbiAgICAvLyAgICAgICAgICFEb21VdGlsLmNsaWNrZWRJbnNpZGUoXG4gICAgLy8gICAgICAgICAgIHRoaXMuX2NvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LFxuICAgIC8vICAgICAgICAgICBldmVudFxuICAgIC8vICAgICAgICAgKSB8fCB0aGlzLmF1dG9DbG9zZUlnbm9yZS5pbmRleE9mKCdpbnNpZGUnKSA8IDBcbiAgICAvLyAgICAgKSxcbiAgICAvLyAgICAgdGFwKChfKSA9PiB7XG4gICAgLy8gICAgICAgdGhpcy5kZXN0cm95Q29udGVudFJlZigpO1xuICAgIC8vICAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgIClcbiAgICAvLyAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0UG9zaXRpb24oKSB7XG4gICAgaWYgKHRoaXMuX2NvbXBvbmVudFJlZiAmJiB0aGlzLl9vcGVuKSB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IFBvc2l0aW9uVXRpbC5nZXRQb3NpdGlvbihcbiAgICAgICAge1xuICAgICAgICAgIHRvcDogdGhpcy5fZXZlbnRQb2ludC55LFxuICAgICAgICAgIGJvdHRvbTogdGhpcy5fZXZlbnRQb2ludC55LFxuICAgICAgICAgIGxlZnQ6IHRoaXMuX2V2ZW50UG9pbnQueCxcbiAgICAgICAgICByaWdodDogdGhpcy5fZXZlbnRQb2ludC54LFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLl9jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgdGhpcy5hbGlnbixcbiAgICAgICAgdGhpcy52ZXJ0aWNhbEFsaWduXG4gICAgICApO1xuICAgICAgUG9zaXRpb25VdGlsLnNldEVsZW1lbnRQb3NpdGlvbihcbiAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTWVudShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRldGFDb250ZXh0TWVudSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2V2ZW50UG9pbnQgPSBldmVudDtcbiAgICB0aGlzLl9jb21wb25lbnRSZWYgPSB0aGlzLmNyZWF0ZUNvbnRlbnRSZWYoKTtcbiAgICB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuY2xhc3NOYW1lID0gW1xuICAgICAgLi4uQXJyYXlVdGlsLmFzQXJyYXkodGhpcy5jbGFzc05hbWUpLFxuICAgICAgJ2NvbnRleHQtbWVudScsXG4gICAgXTtcbiAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { ContentChild, Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
|
|
2
|
+
import { DragPreviewDirective } from './drag-preview.directive';
|
|
3
|
+
import { DragContainerInstance } from './model/drag-container-instance';
|
|
4
|
+
import { takeWhile } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "./drag-drop.service";
|
|
7
|
+
export class DragContainerDirective {
|
|
8
|
+
constructor(_dragService, _elementRef, _viewContainerRef, _zone, _cdr) {
|
|
9
|
+
this._dragService = _dragService;
|
|
10
|
+
this._elementRef = _elementRef;
|
|
11
|
+
this._viewContainerRef = _viewContainerRef;
|
|
12
|
+
this._zone = _zone;
|
|
13
|
+
this._cdr = _cdr;
|
|
14
|
+
this.multiple = false;
|
|
15
|
+
this.allowDrop = true;
|
|
16
|
+
this.tetaDrop = new EventEmitter();
|
|
17
|
+
this.tetaDragEnter = new EventEmitter();
|
|
18
|
+
this._alive = true;
|
|
19
|
+
}
|
|
20
|
+
get isDropTarget() {
|
|
21
|
+
return this.dropTarget === this.instance;
|
|
22
|
+
}
|
|
23
|
+
mouseleave(event) {
|
|
24
|
+
this._dragService.setDropTarget(null);
|
|
25
|
+
}
|
|
26
|
+
mouseover(event) {
|
|
27
|
+
if (this.allowDrop) {
|
|
28
|
+
this._dragService.setDropTarget(this.instance);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
escape(event) {
|
|
32
|
+
this._dragService.cancelDrag();
|
|
33
|
+
}
|
|
34
|
+
ngOnInit() {
|
|
35
|
+
this.instance = new DragContainerInstance({
|
|
36
|
+
data: this.data,
|
|
37
|
+
previewTemplate: this._previewTemplate?.templateRef,
|
|
38
|
+
viewContainer: this._viewContainerRef
|
|
39
|
+
});
|
|
40
|
+
this._dragService.dropTarget.pipe(takeWhile(() => this._alive))
|
|
41
|
+
.subscribe((target) => {
|
|
42
|
+
this.dropTarget = target;
|
|
43
|
+
this._cdr.detectChanges();
|
|
44
|
+
});
|
|
45
|
+
this._dragService.dropped.pipe(takeWhile(() => this._alive))
|
|
46
|
+
.subscribe((event) => {
|
|
47
|
+
this.tetaDrop.emit(event);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
ngOnDestroy() {
|
|
51
|
+
this._alive = false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
DragContainerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragContainerDirective, deps: [{ token: i1.DragDropService }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
55
|
+
DragContainerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.1", type: DragContainerDirective, selector: "[tetaDragContainer]", inputs: { data: ["tetaDragContainer", "data"], multiple: "multiple", allowDrop: "allowDrop" }, outputs: { tetaDrop: "tetaDrop", tetaDragEnter: "tetaDragEnter" }, host: { listeners: { "mouseleave": "mouseleave($event)", "mouseover": "mouseover($event)", "window:keydown.escape": "escape($event)" }, properties: { "class.teta-drag-container": "\"true\"", "class.teta-drop-target": "isDropTarget" } }, queries: [{ propertyName: "_previewTemplate", first: true, predicate: DragPreviewDirective, descendants: true, static: true }], exportAs: ["dragContainer"], ngImport: i0 });
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragContainerDirective, decorators: [{
|
|
57
|
+
type: Directive,
|
|
58
|
+
args: [{
|
|
59
|
+
selector: '[tetaDragContainer]',
|
|
60
|
+
exportAs: 'dragContainer',
|
|
61
|
+
host: {
|
|
62
|
+
'[class.teta-drag-container]': '"true"',
|
|
63
|
+
'[class.teta-drop-target]': 'isDropTarget'
|
|
64
|
+
}
|
|
65
|
+
}]
|
|
66
|
+
}], ctorParameters: function () { return [{ type: i1.DragDropService }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { data: [{
|
|
67
|
+
type: Input,
|
|
68
|
+
args: ['tetaDragContainer']
|
|
69
|
+
}], multiple: [{
|
|
70
|
+
type: Input
|
|
71
|
+
}], allowDrop: [{
|
|
72
|
+
type: Input
|
|
73
|
+
}], tetaDrop: [{
|
|
74
|
+
type: Output
|
|
75
|
+
}], tetaDragEnter: [{
|
|
76
|
+
type: Output
|
|
77
|
+
}], _previewTemplate: [{
|
|
78
|
+
type: ContentChild,
|
|
79
|
+
args: [DragPreviewDirective, {
|
|
80
|
+
static: true
|
|
81
|
+
}]
|
|
82
|
+
}], mouseleave: [{
|
|
83
|
+
type: HostListener,
|
|
84
|
+
args: ['mouseleave', ['$event']]
|
|
85
|
+
}], mouseover: [{
|
|
86
|
+
type: HostListener,
|
|
87
|
+
args: ['mouseover', ['$event']]
|
|
88
|
+
}], escape: [{
|
|
89
|
+
type: HostListener,
|
|
90
|
+
args: ['window:keydown.escape', ['$event']]
|
|
91
|
+
}] } });
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1jb250YWluZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RpcmVjdGl2ZS9kcmFnLWRyb3AvZHJhZy1jb250YWluZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxZQUFZLEVBQ1osU0FBUyxFQUNHLFlBQVksRUFDeEIsWUFBWSxFQUFFLEtBQUssRUFDWCxNQUFNLEVBRWYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7QUFhekMsTUFBTSxPQUFPLHNCQUFzQjtJQWtDakMsWUFBb0IsWUFBZ0MsRUFDaEMsV0FBdUIsRUFDdkIsaUJBQW1DLEVBQ25DLEtBQWEsRUFDYixJQUF1QjtRQUp2QixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFwQ2xDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUVoQixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFDNUMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQVF0RCxXQUFNLEdBQUcsSUFBSSxDQUFDO0lBeUJ0QixDQUFDO0lBdkJELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzNDLENBQUM7SUFFdUMsVUFBVSxDQUFDLEtBQUs7UUFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVzQyxTQUFTLENBQUMsS0FBSztRQUNwRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztJQUVrRCxNQUFNLENBQUMsS0FBSztRQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFTRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHFCQUFxQixDQUFJO1lBQzNDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLGVBQWUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVztZQUNuRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtTQUN0QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM1RCxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDekQsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7O21IQTdEVSxzQkFBc0I7dUdBQXRCLHNCQUFzQix3ZkFRbkIsb0JBQW9COzJGQVJ2QixzQkFBc0I7a0JBUmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLElBQUksRUFBRTt3QkFDSiw2QkFBNkIsRUFBRSxRQUFRO3dCQUN2QywwQkFBMEIsRUFBRSxjQUFjO3FCQUMzQztpQkFDRjttTkFFNkIsSUFBSTtzQkFBL0IsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBQ2pCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBSUksZ0JBQWdCO3NCQUYxQixZQUFZO3VCQUFDLG9CQUFvQixFQUFFO3dCQUNsQyxNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFVdUMsVUFBVTtzQkFBakQsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBSUMsU0FBUztzQkFBL0MsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTWMsTUFBTTtzQkFBeEQsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb250ZW50Q2hpbGQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSxcbiAgT25Jbml0LCBPdXRwdXQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RyYWdQcmV2aWV3RGlyZWN0aXZlfSBmcm9tICcuL2RyYWctcHJldmlldy5kaXJlY3RpdmUnO1xuaW1wb3J0IHtEcmFnQ29udGFpbmVySW5zdGFuY2V9IGZyb20gJy4vbW9kZWwvZHJhZy1jb250YWluZXItaW5zdGFuY2UnO1xuaW1wb3J0IHtEcmFnRHJvcFNlcnZpY2V9IGZyb20gJy4vZHJhZy1kcm9wLnNlcnZpY2UnO1xuaW1wb3J0IHt0YWtlV2hpbGV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RHJvcFRhcmdldH0gZnJvbSAnLi9tb2RlbC9kcm9wLXRhcmdldCc7XG5pbXBvcnQge0Ryb3BFdmVudH0gZnJvbSAnLi9tb2RlbC9kcm9wLWV2ZW50JztcbmltcG9ydCB7RHJhZ0luc3RhbmNlfSBmcm9tICcuL21vZGVsL2RyYWctaW5zdGFuY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGV0YURyYWdDb250YWluZXJdJyxcbiAgZXhwb3J0QXM6ICdkcmFnQ29udGFpbmVyJyxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MudGV0YS1kcmFnLWNvbnRhaW5lcl0nOiAnXCJ0cnVlXCInLFxuICAgICdbY2xhc3MudGV0YS1kcm9wLXRhcmdldF0nOiAnaXNEcm9wVGFyZ2V0J1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIERyYWdDb250YWluZXJEaXJlY3RpdmU8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgndGV0YURyYWdDb250YWluZXInKSBkYXRhOiBUW107XG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFsbG93RHJvcCA9IHRydWU7XG5cbiAgQE91dHB1dCgpIHRldGFEcm9wID0gbmV3IEV2ZW50RW1pdHRlcjxEcm9wRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSB0ZXRhRHJhZ0VudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxEcmFnSW5zdGFuY2U8VD4+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChEcmFnUHJldmlld0RpcmVjdGl2ZSwge1xuICAgIHN0YXRpYzogdHJ1ZVxuICB9KSBwcml2YXRlIF9wcmV2aWV3VGVtcGxhdGU6IERyYWdQcmV2aWV3RGlyZWN0aXZlO1xuXG4gIGluc3RhbmNlOiBEcmFnQ29udGFpbmVySW5zdGFuY2U8VD47XG4gIGRyb3BUYXJnZXQ6IERyb3BUYXJnZXQ8VD47XG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcblxuICBnZXQgaXNEcm9wVGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmRyb3BUYXJnZXQgPT09IHRoaXMuaW5zdGFuY2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJywgWyckZXZlbnQnXSkgbW91c2VsZWF2ZShldmVudCkge1xuICAgIHRoaXMuX2RyYWdTZXJ2aWNlLnNldERyb3BUYXJnZXQobnVsbCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZW92ZXInLCBbJyRldmVudCddKSBtb3VzZW92ZXIoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5hbGxvd0Ryb3ApIHtcbiAgICAgIHRoaXMuX2RyYWdTZXJ2aWNlLnNldERyb3BUYXJnZXQodGhpcy5pbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSkgZXNjYXBlKGV2ZW50KSB7XG4gICAgdGhpcy5fZHJhZ1NlcnZpY2UuY2FuY2VsRHJhZygpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZHJhZ1NlcnZpY2U6IERyYWdEcm9wU2VydmljZTxUPixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfem9uZTogTmdab25lLFxuICAgICAgICAgICAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluc3RhbmNlID0gbmV3IERyYWdDb250YWluZXJJbnN0YW5jZTxUPih7XG4gICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICBwcmV2aWV3VGVtcGxhdGU6IHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT8udGVtcGxhdGVSZWYsXG4gICAgICB2aWV3Q29udGFpbmVyOiB0aGlzLl92aWV3Q29udGFpbmVyUmVmXG4gICAgfSk7XG4gICAgdGhpcy5fZHJhZ1NlcnZpY2UuZHJvcFRhcmdldC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKCh0YXJnZXQpID0+IHtcbiAgICAgICAgdGhpcy5kcm9wVGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9kcmFnU2VydmljZS5kcm9wcGVkLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMudGV0YURyb3AuZW1pdChldmVudCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DragContainerDirective } from './drag-container.directive';
|
|
4
|
+
import { DragDirective } from './drag.directive';
|
|
5
|
+
import { DragPreviewDirective } from './drag-preview.directive';
|
|
6
|
+
import { DragPlaceholderDirective } from './drag-placeholder.directive';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class DragDropModule {
|
|
9
|
+
}
|
|
10
|
+
DragDropModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
11
|
+
DragDropModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragDropModule, declarations: [DragContainerDirective,
|
|
12
|
+
DragDirective,
|
|
13
|
+
DragPreviewDirective,
|
|
14
|
+
DragPlaceholderDirective], imports: [CommonModule], exports: [DragContainerDirective,
|
|
15
|
+
DragDirective,
|
|
16
|
+
DragPreviewDirective,
|
|
17
|
+
DragPlaceholderDirective] });
|
|
18
|
+
DragDropModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragDropModule, imports: [[
|
|
19
|
+
CommonModule
|
|
20
|
+
]] });
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragDropModule, decorators: [{
|
|
22
|
+
type: NgModule,
|
|
23
|
+
args: [{
|
|
24
|
+
declarations: [
|
|
25
|
+
DragContainerDirective,
|
|
26
|
+
DragDirective,
|
|
27
|
+
DragPreviewDirective,
|
|
28
|
+
DragPlaceholderDirective
|
|
29
|
+
],
|
|
30
|
+
exports: [
|
|
31
|
+
DragContainerDirective,
|
|
32
|
+
DragDirective,
|
|
33
|
+
DragPreviewDirective,
|
|
34
|
+
DragPlaceholderDirective
|
|
35
|
+
],
|
|
36
|
+
imports: [
|
|
37
|
+
CommonModule
|
|
38
|
+
]
|
|
39
|
+
}]
|
|
40
|
+
}] });
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kaXJlY3RpdmUvZHJhZy1kcm9wL2RyYWctZHJvcC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDOztBQW1CdEUsTUFBTSxPQUFPLGNBQWM7OzJHQUFkLGNBQWM7NEdBQWQsY0FBYyxpQkFmdkIsc0JBQXNCO1FBQ3RCLGFBQWE7UUFDYixvQkFBb0I7UUFDcEIsd0JBQXdCLGFBU3hCLFlBQVksYUFOWixzQkFBc0I7UUFDdEIsYUFBYTtRQUNiLG9CQUFvQjtRQUNwQix3QkFBd0I7NEdBTWYsY0FBYyxZQUpoQjtZQUNQLFlBQVk7U0FDYjsyRkFFVSxjQUFjO2tCQWpCMUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3FCQUN6QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1Asc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3FCQUN6QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTtxQkFDYjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0RyYWdDb250YWluZXJEaXJlY3RpdmV9IGZyb20gJy4vZHJhZy1jb250YWluZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7RHJhZ0RpcmVjdGl2ZX0gZnJvbSAnLi9kcmFnLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0RyYWdQcmV2aWV3RGlyZWN0aXZlfSBmcm9tICcuL2RyYWctcHJldmlldy5kaXJlY3RpdmUnO1xuaW1wb3J0IHtEcmFnUGxhY2Vob2xkZXJEaXJlY3RpdmV9IGZyb20gJy4vZHJhZy1wbGFjZWhvbGRlci5kaXJlY3RpdmUnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBEcmFnQ29udGFpbmVyRGlyZWN0aXZlLFxuICAgIERyYWdEaXJlY3RpdmUsXG4gICAgRHJhZ1ByZXZpZXdEaXJlY3RpdmUsXG4gICAgRHJhZ1BsYWNlaG9sZGVyRGlyZWN0aXZlXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBEcmFnQ29udGFpbmVyRGlyZWN0aXZlLFxuICAgIERyYWdEaXJlY3RpdmUsXG4gICAgRHJhZ1ByZXZpZXdEaXJlY3RpdmUsXG4gICAgRHJhZ1BsYWNlaG9sZGVyRGlyZWN0aXZlXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEcmFnRHJvcE1vZHVsZSB7XG59XG4iXX0=
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { DOCUMENT } from '@angular/common';
|
|
3
|
+
import { BehaviorSubject, fromEvent, merge, Subject } from 'rxjs';
|
|
4
|
+
import { filter, withLatestFrom } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class DragDropService {
|
|
7
|
+
constructor(_document, _rendererFactory) {
|
|
8
|
+
this._document = _document;
|
|
9
|
+
this._rendererFactory = _rendererFactory;
|
|
10
|
+
this.dropTarget$ = new BehaviorSubject(null);
|
|
11
|
+
this._delta = 10;
|
|
12
|
+
this.dropped$ = new Subject();
|
|
13
|
+
this._renderer = this._rendererFactory.createRenderer(null, null);
|
|
14
|
+
this.dropTarget = this.dropTarget$.asObservable();
|
|
15
|
+
this.dropped = this.dropped$.asObservable();
|
|
16
|
+
merge(fromEvent(this._document, 'mousemove'), fromEvent(this._document, 'touchmove')).pipe(filter(() => {
|
|
17
|
+
return this.startPosition != null;
|
|
18
|
+
})).subscribe((event) => {
|
|
19
|
+
if (!this.dragProcess && this.getDelta(event) > this._delta) {
|
|
20
|
+
this.startProcess();
|
|
21
|
+
}
|
|
22
|
+
if (this.dragProcess && this._preview) {
|
|
23
|
+
this.movePreview(event);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
merge(fromEvent(this._document, 'mouseup'), fromEvent(this._document, 'touchend')).pipe(withLatestFrom(this.dropTarget)).subscribe((data) => {
|
|
27
|
+
const [event, target] = data;
|
|
28
|
+
if (target) {
|
|
29
|
+
this.dropped$.next({
|
|
30
|
+
target,
|
|
31
|
+
container: this.dragProcess.selection.container,
|
|
32
|
+
data: [...this.dragProcess.selection.items]
|
|
33
|
+
});
|
|
34
|
+
this.cancelDrag();
|
|
35
|
+
}
|
|
36
|
+
this.stopProcess();
|
|
37
|
+
});
|
|
38
|
+
merge(fromEvent(this._document, 'visibilitychange'), fromEvent(window, 'blur'))
|
|
39
|
+
.subscribe(() => {
|
|
40
|
+
this.cancelDrag();
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
setDropTarget(target) {
|
|
44
|
+
if (this.dragProcess) {
|
|
45
|
+
this.dropTarget$.next(target);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
setStartPosition(point) {
|
|
49
|
+
this.startPosition = point;
|
|
50
|
+
}
|
|
51
|
+
setSelection(instance, container) {
|
|
52
|
+
if (this.selection?.container === container && this.selection?.items?.indexOf(instance) >= 0) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
this.selection = {
|
|
56
|
+
container,
|
|
57
|
+
items: [instance]
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
addSelection(instance, container) {
|
|
61
|
+
if (!this.selection) {
|
|
62
|
+
this.setSelection(instance, container);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (this.selection && this.selection.container !== container) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const index = this.selection.items.indexOf(instance);
|
|
69
|
+
if (index < 0) {
|
|
70
|
+
this.selection.items.push(instance);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
this.selection.items.splice(index, 1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
clearSelection() {
|
|
77
|
+
this.selection = null;
|
|
78
|
+
}
|
|
79
|
+
cancelDrag() {
|
|
80
|
+
this.setDropTarget(null);
|
|
81
|
+
this.clearSelection();
|
|
82
|
+
this.stopProcess();
|
|
83
|
+
}
|
|
84
|
+
startProcess() {
|
|
85
|
+
this.dragProcess = {
|
|
86
|
+
selection: this.selection
|
|
87
|
+
};
|
|
88
|
+
this._preview = this.createPreview();
|
|
89
|
+
}
|
|
90
|
+
stopProcess() {
|
|
91
|
+
this.destroyPreview();
|
|
92
|
+
this.dragProcess = null;
|
|
93
|
+
this.startPosition = null;
|
|
94
|
+
}
|
|
95
|
+
getDelta(event) {
|
|
96
|
+
return Math.max(Math.abs(this.startPosition.x - event.x), Math.abs(this.startPosition.y - event.y));
|
|
97
|
+
}
|
|
98
|
+
createPreview() {
|
|
99
|
+
if (this.dragProcess.selection.container.previewTemplate) {
|
|
100
|
+
this._previewRef = this.dragProcess.selection.container.viewContainer.createEmbeddedView(this.dragProcess.selection.container.previewTemplate, {
|
|
101
|
+
$implicit: this.dragProcess.selection.items,
|
|
102
|
+
data: this.dragProcess.selection.items
|
|
103
|
+
});
|
|
104
|
+
const preview = this._renderer.createElement('div');
|
|
105
|
+
this._renderer.setStyle(preview, 'position', 'fixed');
|
|
106
|
+
this._renderer.setStyle(preview, 'pointer-events', 'none');
|
|
107
|
+
this._renderer.setStyle(preview, 'top', '0');
|
|
108
|
+
this._renderer.setStyle(preview, 'left', '0');
|
|
109
|
+
this._renderer.appendChild(preview, this._previewRef.rootNodes[0]);
|
|
110
|
+
this._renderer.appendChild(document.body, preview);
|
|
111
|
+
return preview;
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
movePreview(event) {
|
|
116
|
+
if (this._preview) {
|
|
117
|
+
this._renderer.setStyle(this._preview, 'transform', `translate(${event.x}px, ${event.y}px)`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
destroyPreview() {
|
|
121
|
+
if (this._preview) {
|
|
122
|
+
this.dragProcess?.selection?.container?.viewContainer?.clear();
|
|
123
|
+
this._preview?.remove();
|
|
124
|
+
this._previewRef?.destroy();
|
|
125
|
+
this._preview = this._previewRef = null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
DragDropService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragDropService, deps: [{ token: DOCUMENT }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
130
|
+
DragDropService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragDropService, providedIn: 'root' });
|
|
131
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragDropService, decorators: [{
|
|
132
|
+
type: Injectable,
|
|
133
|
+
args: [{
|
|
134
|
+
providedIn: 'root'
|
|
135
|
+
}]
|
|
136
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
137
|
+
type: Inject,
|
|
138
|
+
args: [DOCUMENT]
|
|
139
|
+
}] }, { type: i0.RendererFactory2 }]; } });
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGlyZWN0aXZlL2RyYWctZHJvcC9kcmFnLWRyb3Auc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLE1BQU0sRUFBRSxVQUFVLEVBQThCLE1BQU0sZUFBZSxDQUFDO0FBSy9GLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFNLE1BQU0sTUFBTSxDQUFDO0FBQ2pGLE9BQU8sRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7O0FBUXRELE1BQU0sT0FBTyxlQUFlO0lBYTFCLFlBQXNDLFNBQWMsRUFDaEMsZ0JBQWtDO1FBRGhCLGNBQVMsR0FBVCxTQUFTLENBQUs7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQVI5QyxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUN2RCxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBSVosYUFBUSxHQUFHLElBQUksT0FBTyxFQUFnQixDQUFDO1FBSTdDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QyxLQUFLLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLEVBQ3RDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxD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Q0FBQyxLQUFpQjtRQUNuQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsYUFBYSxLQUFLLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlGO0lBQ0gsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDL0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDekM7SUFDSCxDQUFDOzs0R0ExSlUsZUFBZSxrQkFhTixRQUFRO2dIQWJqQixlQUFlLGNBRmQsTUFBTTsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBY2MsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFbWJlZGRlZFZpZXdSZWYsIEluamVjdCwgSW5qZWN0YWJsZSwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RHJhZ0luc3RhbmNlfSBmcm9tICcuL21vZGVsL2RyYWctaW5zdGFuY2UnO1xuaW1wb3J0IHtEcmFnU2VsZWN0aW9ufSBmcm9tICcuL21vZGVsL2RyYWctc2VsZWN0aW9uJztcbmltcG9ydCB7RHJhZ0NvbnRhaW5lckluc3RhbmNlfSBmcm9tICcuL21vZGVsL2RyYWctY29udGFpbmVyLWluc3RhbmNlJztcbmltcG9ydCB7UG9pbnR9IGZyb20gJy4vbW9kZWwvcG9pbnQnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIHdpdGhMYXRlc3RGcm9tfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0RyYWdQcm9jZXNzfSBmcm9tICcuL21vZGVsL2RyYWctcHJvY2Vzcyc7XG5pbXBvcnQge0Ryb3BUYXJnZXR9IGZyb20gJy4vbW9kZWwvZHJvcC10YXJnZXQnO1xuaW1wb3J0IHtEcm9wRXZlbnR9IGZyb20gJy4vbW9kZWwvZHJvcC1ldmVudCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERyYWdEcm9wU2VydmljZTxUPiB7XG4gIHNlbGVjdGlvbjogRHJhZ1NlbGVjdGlvbjxUPjtcbiAgc3RhcnRQb3NpdGlvbjogUG9pbnQ7XG4gIGRyYWdQcm9jZXNzOiBEcmFnUHJvY2VzczxUPjtcbiAgZHJvcFRhcmdldDogT2JzZXJ2YWJsZTxEcm9wVGFyZ2V0PFQ+PjtcbiAgZHJvcHBlZDogT2JzZXJ2YWJsZTxEcm9wRXZlbnQ8VD4+O1xuICBwcml2YXRlIGRyb3BUYXJnZXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEcm9wVGFyZ2V0PFQ+PihudWxsKTtcbiAgcHJpdmF0ZSBfZGVsdGEgPSAxMDtcbiAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMjtcbiAgcHJpdmF0ZSBfcHJldmlldzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3ByZXZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxhbnk+O1xuICBwcml2YXRlIGRyb3BwZWQkID0gbmV3IFN1YmplY3Q8RHJvcEV2ZW50PFQ+PigpO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksXG4gICAgICAgICAgICAgIHByaXZhdGUgX3JlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5Mikge1xuICAgIHRoaXMuX3JlbmRlcmVyID0gdGhpcy5fcmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xuICAgIHRoaXMuZHJvcFRhcmdldCA9IHRoaXMuZHJvcFRhcmdldCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5kcm9wcGVkID0gdGhpcy5kcm9wcGVkJC5hc09ic2VydmFibGUoKTtcbiAgICBtZXJnZShcbiAgICAgIGZyb21FdmVudCh0aGlzLl9kb2N1bWVudCwgJ21vdXNlbW92ZScpLFxuICAgICAgZnJvbUV2ZW50KHRoaXMuX2RvY3VtZW50LCAndG91Y2htb3ZlJylcbiAgICApLnBpcGUoXG4gICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFBvc2l0aW9uICE9IG51bGw7XG4gICAgICB9KVxuICAgICkuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRyYWdQcm9jZXNzICYmIHRoaXMuZ2V0RGVsdGEoZXZlbnQpID4gdGhpcy5fZGVsdGEpIHtcbiAgICAgICAgdGhpcy5zdGFydFByb2Nlc3MoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRyYWdQcm9jZXNzICYmIHRoaXMuX3ByZXZpZXcpIHtcbiAgICAgICAgdGhpcy5tb3ZlUHJldmlldyhldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBtZXJnZShcbiAgICAgIGZyb21FdmVudCh0aGlzLl9kb2N1bWVudCwgJ21vdXNldXAnKSxcbiAgICAgIGZyb21FdmVudCh0aGlzLl9kb2N1bWVudCwgJ3RvdWNoZW5kJylcbiAgICApLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmRyb3BUYXJnZXQpXG4gICAgKS5zdWJzY3JpYmUoKGRhdGE6IFtNb3VzZUV2ZW50LCBEcm9wVGFyZ2V0PFQ+XSkgPT4ge1xuICAgICAgY29uc3QgW2V2ZW50LCB0YXJnZXRdID0gZGF0YTtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5kcm9wcGVkJC5uZXh0KHtcbiAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgY29udGFpbmVyOiB0aGlzLmRyYWdQcm9jZXNzLnNlbGVjdGlvbi5jb250YWluZXIsXG4gICAgICAgICAgZGF0YTogWy4uLnRoaXMuZHJhZ1Byb2Nlc3Muc2VsZWN0aW9uLml0ZW1zXVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jYW5jZWxEcmFnKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0b3BQcm9jZXNzKCk7XG4gICAgfSk7XG5cbiAgICBtZXJnZShmcm9tRXZlbnQodGhpcy5fZG9jdW1lbnQsICd2aXNpYmlsaXR5Y2hhbmdlJyksIGZyb21FdmVudCh3aW5kb3csICdibHVyJykpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jYW5jZWxEcmFnKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHNldERyb3BUYXJnZXQodGFyZ2V0OiBEcm9wVGFyZ2V0PFQ+KSB7XG4gICAgaWYgKHRoaXMuZHJhZ1Byb2Nlc3MpIHtcbiAgICAgIHRoaXMuZHJvcFRhcmdldCQubmV4dCh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIHNldFN0YXJ0UG9zaXRpb24ocG9pbnQ6IFBvaW50KSB7XG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gcG9pbnQ7XG4gIH1cblxuICBzZXRTZWxlY3Rpb24oaW5zdGFuY2U6IERyYWdJbnN0YW5jZTxUPiwgY29udGFpbmVyOiBEcmFnQ29udGFpbmVySW5zdGFuY2U8VD4pIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24/LmNvbnRhaW5lciA9PT0gY29udGFpbmVyICYmIHRoaXMuc2VsZWN0aW9uPy5pdGVtcz8uaW5kZXhPZihpbnN0YW5jZSkgPj0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGlvbiA9IHtcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGl0ZW1zOiBbaW5zdGFuY2VdXG4gICAgfTtcbiAgfVxuXG4gIGFkZFNlbGVjdGlvbihpbnN0YW5jZTogRHJhZ0luc3RhbmNlPFQ+LCBjb250YWluZXI6IERyYWdDb250YWluZXJJbnN0YW5jZTxUPikge1xuICAgIGlmICghdGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGluc3RhbmNlLCBjb250YWluZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gJiYgdGhpcy5zZWxlY3Rpb24uY29udGFpbmVyICE9PSBjb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0aW9uLml0ZW1zLmluZGV4T2YoaW5zdGFuY2UpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLml0ZW1zLnB1c2goaW5zdGFuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5pdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0aW9uID0gbnVsbDtcbiAgfVxuXG4gIGNhbmNlbERyYWcoKSB7XG4gICAgdGhpcy5zZXREcm9wVGFyZ2V0KG51bGwpO1xuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB0aGlzLnN0b3BQcm9jZXNzKCk7XG4gIH1cblxuICBzdGFydFByb2Nlc3MoKSB7XG4gICAgdGhpcy5kcmFnUHJvY2VzcyA9IHtcbiAgICAgIHNlbGVjdGlvbjogdGhpcy5zZWxlY3Rpb25cbiAgICB9O1xuICAgIHRoaXMuX3ByZXZpZXcgPSB0aGlzLmNyZWF0ZVByZXZpZXcoKTtcbiAgfVxuXG4gIHN0b3BQcm9jZXNzKCkge1xuICAgIHRoaXMuZGVzdHJveVByZXZpZXcoKTtcbiAgICB0aGlzLmRyYWdQcm9jZXNzID0gbnVsbDtcbiAgICB0aGlzLnN0YXJ0UG9zaXRpb24gPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWx0YShldmVudDogTW91c2VFdmVudCkge1xuICAgIHJldHVybiBNYXRoLm1heChNYXRoLmFicyh0aGlzLnN0YXJ0UG9zaXRpb24ueCAtIGV2ZW50LngpLCBNYXRoLmFicyh0aGlzLnN0YXJ0UG9zaXRpb24ueSAtIGV2ZW50LnkpKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUHJldmlldygpIHtcbiAgICBpZiAodGhpcy5kcmFnUHJvY2Vzcy5zZWxlY3Rpb24uY29udGFpbmVyLnByZXZpZXdUZW1wbGF0ZSkge1xuICAgICAgdGhpcy5fcHJldmlld1JlZiA9IHRoaXMuZHJhZ1Byb2Nlc3Muc2VsZWN0aW9uLmNvbnRhaW5lci52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgdGhpcy5kcmFnUHJvY2Vzcy5zZWxlY3Rpb24uY29udGFpbmVyLnByZXZpZXdUZW1wbGF0ZSwge1xuICAgICAgICAgICRpbXBsaWNpdDogdGhpcy5kcmFnUHJvY2Vzcy5zZWxlY3Rpb24uaXRlbXMsXG4gICAgICAgICAgZGF0YTogdGhpcy5kcmFnUHJvY2Vzcy5zZWxlY3Rpb24uaXRlbXNcbiAgICAgICAgfSk7XG4gICAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5fcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwcmV2aWV3LCAncG9zaXRpb24nLCAnZml4ZWQnKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHByZXZpZXcsICdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwcmV2aWV3LCAndG9wJywgJzAnKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHByZXZpZXcsICdsZWZ0JywgJzAnKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKHByZXZpZXcsIHRoaXMuX3ByZXZpZXdSZWYucm9vdE5vZGVzWzBdKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmJvZHksIHByZXZpZXcpO1xuICAgICAgcmV0dXJuIHByZXZpZXc7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlUHJldmlldyhldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLl9wcmV2aWV3KSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLl9wcmV2aWV3LCAndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke2V2ZW50Lnh9cHgsICR7ZXZlbnQueX1weClgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lQcmV2aWV3KCkge1xuICAgIGlmICh0aGlzLl9wcmV2aWV3KSB7XG4gICAgICB0aGlzLmRyYWdQcm9jZXNzPy5zZWxlY3Rpb24/LmNvbnRhaW5lcj8udmlld0NvbnRhaW5lcj8uY2xlYXIoKTtcbiAgICAgIHRoaXMuX3ByZXZpZXc/LnJlbW92ZSgpO1xuICAgICAgdGhpcy5fcHJldmlld1JlZj8uZGVzdHJveSgpO1xuICAgICAgdGhpcy5fcHJldmlldyA9IHRoaXMuX3ByZXZpZXdSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class DragPlaceholderDirective {
|
|
4
|
+
constructor() { }
|
|
5
|
+
}
|
|
6
|
+
DragPlaceholderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragPlaceholderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
7
|
+
DragPlaceholderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.1", type: DragPlaceholderDirective, selector: "[tetaDragPlaceholder]", ngImport: i0 });
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragPlaceholderDirective, decorators: [{
|
|
9
|
+
type: Directive,
|
|
10
|
+
args: [{
|
|
11
|
+
selector: '[tetaDragPlaceholder]'
|
|
12
|
+
}]
|
|
13
|
+
}], ctorParameters: function () { return []; } });
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1wbGFjZWhvbGRlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGlyZWN0aXZlL2RyYWctZHJvcC9kcmFnLXBsYWNlaG9sZGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUsxQyxNQUFNLE9BQU8sd0JBQXdCO0lBRW5DLGdCQUFnQixDQUFDOztxSEFGTix3QkFBd0I7eUdBQXhCLHdCQUF3QjsyRkFBeEIsd0JBQXdCO2tCQUhwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7aUJBQ2xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZXRhRHJhZ1BsYWNlaG9sZGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgRHJhZ1BsYWNlaG9sZGVyRGlyZWN0aXZlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class DragPreviewDirective {
|
|
4
|
+
constructor(templateRef) {
|
|
5
|
+
this.templateRef = templateRef;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
DragPreviewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragPreviewDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
9
|
+
DragPreviewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.1", type: DragPreviewDirective, selector: "[tetaDragPreview]", ngImport: i0 });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragPreviewDirective, decorators: [{
|
|
11
|
+
type: Directive,
|
|
12
|
+
args: [{
|
|
13
|
+
selector: '[tetaDragPreview]'
|
|
14
|
+
}]
|
|
15
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1wcmV2aWV3LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kaXJlY3RpdmUvZHJhZy1kcm9wL2RyYWctcHJldmlldy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQzs7QUFLckQsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUFtQixXQUE2QjtRQUE3QixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7SUFDaEQsQ0FBQzs7aUhBRlUsb0JBQW9CO3FHQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFIaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2lCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZXRhRHJhZ1ByZXZpZXddJ1xufSlcbmV4cG9ydCBjbGFzcyBEcmFnUHJldmlld0RpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pikge1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Directive, EventEmitter, HostBinding, HostListener, Inject, Input, Optional, Output, SkipSelf } from '@angular/core';
|
|
2
|
+
import { DragInstance } from './model/drag-instance';
|
|
3
|
+
import { DragContainerDirective } from './drag-container.directive';
|
|
4
|
+
import { filter, takeWhile } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "./drag-drop.service";
|
|
7
|
+
import * as i2 from "./drag-container.directive";
|
|
8
|
+
export class DragDirective {
|
|
9
|
+
constructor(_container, _dragService, _zone, _cdr) {
|
|
10
|
+
this._container = _container;
|
|
11
|
+
this._dragService = _dragService;
|
|
12
|
+
this._zone = _zone;
|
|
13
|
+
this._cdr = _cdr;
|
|
14
|
+
this.allowDrag = true;
|
|
15
|
+
this.allowDrop = true;
|
|
16
|
+
this.tetaDragEnter = new EventEmitter();
|
|
17
|
+
this.tetaDrop = new EventEmitter();
|
|
18
|
+
this._alive = true;
|
|
19
|
+
}
|
|
20
|
+
get selection() {
|
|
21
|
+
return this._dragService?.selection?.items?.indexOf(this.instance) >= 0;
|
|
22
|
+
}
|
|
23
|
+
get isDropTarget() {
|
|
24
|
+
return this.dropTarget === this.instance;
|
|
25
|
+
}
|
|
26
|
+
mousedown(event) {
|
|
27
|
+
if (event.ctrlKey && this._container?.multiple) {
|
|
28
|
+
this._dragService.addSelection(this.instance, this._container.instance);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
this._dragService.setSelection(this.instance, this._container.instance);
|
|
32
|
+
}
|
|
33
|
+
this._dragService.setStartPosition({
|
|
34
|
+
x: event.x,
|
|
35
|
+
y: event.y
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
mouseenter(event) {
|
|
39
|
+
if (this.allowDrop) {
|
|
40
|
+
event.stopPropagation();
|
|
41
|
+
this._dragService.setDropTarget(this.instance);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
mouseleave(event) {
|
|
45
|
+
this._dragService.setDropTarget(null);
|
|
46
|
+
}
|
|
47
|
+
ngOnInit() {
|
|
48
|
+
this.instance = new DragInstance({
|
|
49
|
+
container: this._container.instance,
|
|
50
|
+
data: this.data
|
|
51
|
+
});
|
|
52
|
+
this._dragService.dropTarget.pipe(takeWhile(() => this._alive))
|
|
53
|
+
.subscribe((target) => {
|
|
54
|
+
this.dropTarget = target;
|
|
55
|
+
if (target === this.instance) {
|
|
56
|
+
this.tetaDragEnter.emit(this.instance);
|
|
57
|
+
}
|
|
58
|
+
this._cdr.detectChanges();
|
|
59
|
+
this._cdr.markForCheck();
|
|
60
|
+
});
|
|
61
|
+
this._dragService.dropped.pipe(takeWhile(() => this._alive))
|
|
62
|
+
.pipe(filter((event) => {
|
|
63
|
+
return event.target === this.instance;
|
|
64
|
+
}))
|
|
65
|
+
.subscribe((event) => {
|
|
66
|
+
this.tetaDrop.emit(event);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
ngOnDestroy() {
|
|
70
|
+
this._alive = false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
DragDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragDirective, deps: [{ token: DragContainerDirective, optional: true, skipSelf: true }, { token: i1.DragDropService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
74
|
+
DragDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.1", type: DragDirective, selector: "[tetaDrag]", inputs: { data: ["tetaDrag", "data"], allowDrag: "allowDrag", allowDrop: "allowDrop" }, outputs: { tetaDragEnter: "tetaDragEnter", tetaDrop: "tetaDrop" }, host: { listeners: { "mousedown": "mousedown($event)", "touchstart": "mousedown($event)", "mouseenter": "mouseenter($event)", "mouseleave": "mouseleave($event)" }, properties: { "style.userSelect": "\"none\"", "class.teta-drag-item": "\"true\"", "class.teta_draggable_item": "this.allowDrag", "class.teta_droppable_item": "this.allowDrop", "class.teta-drag-selection": "this.selection", "class.teta-drop-target": "this.isDropTarget" } }, exportAs: ["drag"], ngImport: i0 });
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: DragDirective, decorators: [{
|
|
76
|
+
type: Directive,
|
|
77
|
+
args: [{
|
|
78
|
+
selector: '[tetaDrag]',
|
|
79
|
+
exportAs: 'drag',
|
|
80
|
+
host: {
|
|
81
|
+
'[style.userSelect]': '"none"',
|
|
82
|
+
'[class.teta-drag-item]': '"true"'
|
|
83
|
+
}
|
|
84
|
+
}]
|
|
85
|
+
}], ctorParameters: function () { return [{ type: i2.DragContainerDirective, decorators: [{
|
|
86
|
+
type: Inject,
|
|
87
|
+
args: [DragContainerDirective]
|
|
88
|
+
}, {
|
|
89
|
+
type: Optional
|
|
90
|
+
}, {
|
|
91
|
+
type: SkipSelf
|
|
92
|
+
}] }, { type: i1.DragDropService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { data: [{
|
|
93
|
+
type: Input,
|
|
94
|
+
args: ['tetaDrag']
|
|
95
|
+
}], allowDrag: [{
|
|
96
|
+
type: HostBinding,
|
|
97
|
+
args: ['class.teta_draggable_item']
|
|
98
|
+
}, {
|
|
99
|
+
type: Input
|
|
100
|
+
}], allowDrop: [{
|
|
101
|
+
type: HostBinding,
|
|
102
|
+
args: ['class.teta_droppable_item']
|
|
103
|
+
}, {
|
|
104
|
+
type: Input
|
|
105
|
+
}], tetaDragEnter: [{
|
|
106
|
+
type: Output
|
|
107
|
+
}], tetaDrop: [{
|
|
108
|
+
type: Output
|
|
109
|
+
}], selection: [{
|
|
110
|
+
type: HostBinding,
|
|
111
|
+
args: ['class.teta-drag-selection']
|
|
112
|
+
}], isDropTarget: [{
|
|
113
|
+
type: HostBinding,
|
|
114
|
+
args: ['class.teta-drop-target']
|
|
115
|
+
}], mousedown: [{
|
|
116
|
+
type: HostListener,
|
|
117
|
+
args: ['mousedown', ['$event']]
|
|
118
|
+
}, {
|
|
119
|
+
type: HostListener,
|
|
120
|
+
args: ['touchstart', ['$event']]
|
|
121
|
+
}], mouseenter: [{
|
|
122
|
+
type: HostListener,
|
|
123
|
+
args: ['mouseenter', ['$event']]
|
|
124
|
+
}], mouseleave: [{
|
|
125
|
+
type: HostListener,
|
|
126
|
+
args: ['mouseleave', ['$event']]
|
|
127
|
+
}] } });
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGlyZWN0aXZlL2RyYWctZHJvcC9kcmFnLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBR2xFLE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFXakQsTUFBTSxPQUFPLGFBQWE7SUFxRHhCLFlBQTRFLFVBQXFDLEVBQzdGLFlBQWdDLEVBQ2hDLEtBQWEsRUFDYixJQUF1QjtRQUhpQyxlQUFVLEdBQVYsVUFBVSxDQUEyQjtRQUM3RixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDaEMsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFNBQUksR0FBSixJQUFJLENBQW1CO1FBcERsQyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBR2pCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFFaEIsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUNwRCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFlOUMsV0FBTSxHQUFHLElBQUksQ0FBQztJQWdDdEIsQ0FBQztJQTFDRCxJQUNJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsSUFDSSxZQUFZO1FBQ2Qs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TUFBTTsyQkFBQyxzQkFBc0I7OzBCQUFHLFFBQVE7OzBCQUFJLFFBQVE7K0hBcEQ5QyxJQUFJO3NCQUF0QixLQUFLO3VCQUFDLFVBQVU7Z0JBR1IsU0FBUztzQkFEakIsV0FBVzt1QkFBQywyQkFBMkI7O3NCQUN2QyxLQUFLO2dCQUdHLFNBQVM7c0JBRGpCLFdBQVc7dUJBQUMsMkJBQTJCOztzQkFDdkMsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBTUgsU0FBUztzQkFEWixXQUFXO3VCQUFDLDJCQUEyQjtnQkFNcEMsWUFBWTtzQkFEZixXQUFXO3VCQUFDLHdCQUF3QjtnQkFTckMsU0FBUztzQkFGUixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3BDLFlBQVk7dUJBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWN0QyxVQUFVO3NCQURULFlBQVk7dUJBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVFFLFVBQVU7c0JBQWpELFlBQVk7dUJBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTa2lwU2VsZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RHJhZ0luc3RhbmNlfSBmcm9tICcuL21vZGVsL2RyYWctaW5zdGFuY2UnO1xuaW1wb3J0IHtEcmFnQ29udGFpbmVyRGlyZWN0aXZlfSBmcm9tICcuL2RyYWctY29udGFpbmVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0RyYWdEcm9wU2VydmljZX0gZnJvbSAnLi9kcmFnLWRyb3Auc2VydmljZSc7XG5pbXBvcnQge0Ryb3BUYXJnZXR9IGZyb20gJy4vbW9kZWwvZHJvcC10YXJnZXQnO1xuaW1wb3J0IHtmaWx0ZXIsIHRha2VXaGlsZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtEcm9wRXZlbnR9IGZyb20gJy4vbW9kZWwvZHJvcC1ldmVudCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZXRhRHJhZ10nLFxuICBleHBvcnRBczogJ2RyYWcnLFxuICBob3N0OiB7XG4gICAgJ1tzdHlsZS51c2VyU2VsZWN0XSc6ICdcIm5vbmVcIicsXG4gICAgJ1tjbGFzcy50ZXRhLWRyYWctaXRlbV0nOiAnXCJ0cnVlXCInXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgRHJhZ0RpcmVjdGl2ZTxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCd0ZXRhRHJhZycpIGRhdGE6IFQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50ZXRhX2RyYWdnYWJsZV9pdGVtJylcbiAgQElucHV0KCkgYWxsb3dEcmFnID0gdHJ1ZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRldGFfZHJvcHBhYmxlX2l0ZW0nKVxuICBASW5wdXQoKSBhbGxvd0Ryb3AgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSB0ZXRhRHJhZ0VudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxEcmFnSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSB0ZXRhRHJvcCA9IG5ldyBFdmVudEVtaXR0ZXI8RHJvcEV2ZW50PFQ+PigpO1xuXG4gIGRyb3BUYXJnZXQ6IERyb3BUYXJnZXQ8VD47XG4gIGluc3RhbmNlOiBEcmFnSW5zdGFuY2U8VD47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50ZXRhLWRyYWctc2VsZWN0aW9uJylcbiAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhZ1NlcnZpY2U/LnNlbGVjdGlvbj8uaXRlbXM/LmluZGV4T2YodGhpcy5pbnN0YW5jZSkgPj0gMDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MudGV0YS1kcm9wLXRhcmdldCcpXG4gIGdldCBpc0Ryb3BUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcFRhcmdldCA9PT0gdGhpcy5pbnN0YW5jZTtcbiAgfVxuXG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgbW91c2Vkb3duKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgdGhpcy5fY29udGFpbmVyPy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5fZHJhZ1NlcnZpY2UuYWRkU2VsZWN0aW9uKHRoaXMuaW5zdGFuY2UsIHRoaXMuX2NvbnRhaW5lci5pbnN0YW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RyYWdTZXJ2aWNlLnNldFNlbGVjdGlvbih0aGlzLmluc3RhbmNlLCB0aGlzLl9jb250YWluZXIuaW5zdGFuY2UpO1xuICAgIH1cbiAgICB0aGlzLl9kcmFnU2VydmljZS5zZXRTdGFydFBvc2l0aW9uKHtcbiAgICAgIHg6IGV2ZW50LngsXG4gICAgICB5OiBldmVudC55XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJywgWyckZXZlbnQnXSlcbiAgbW91c2VlbnRlcihldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmFsbG93RHJvcCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLl9kcmFnU2VydmljZS5zZXREcm9wVGFyZ2V0KHRoaXMuaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBbJyRldmVudCddKSBtb3VzZWxlYXZlKGV2ZW50KSB7XG4gICAgdGhpcy5fZHJhZ1NlcnZpY2Uuc2V0RHJvcFRhcmdldChudWxsKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSkgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcHJpdmF0ZSBfY29udGFpbmVyOiBEcmFnQ29udGFpbmVyRGlyZWN0aXZlPFQ+LFxuICAgICAgICAgICAgICBwcml2YXRlIF9kcmFnU2VydmljZTogRHJhZ0Ryb3BTZXJ2aWNlPFQ+LFxuICAgICAgICAgICAgICBwcml2YXRlIF96b25lOiBOZ1pvbmUsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5zdGFuY2UgPSBuZXcgRHJhZ0luc3RhbmNlKHtcbiAgICAgIGNvbnRhaW5lcjogdGhpcy5fY29udGFpbmVyLmluc3RhbmNlLFxuICAgICAgZGF0YTogdGhpcy5kYXRhXG4gICAgfSk7XG4gICAgdGhpcy5fZHJhZ1NlcnZpY2UuZHJvcFRhcmdldC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKCh0YXJnZXQpID0+IHtcbiAgICAgICAgdGhpcy5kcm9wVGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICBpZiAodGFyZ2V0ID09PSB0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgdGhpcy50ZXRhRHJhZ0VudGVyLmVtaXQodGhpcy5pbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgdGhpcy5fZHJhZ1NlcnZpY2UuZHJvcHBlZC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudDogRHJvcEV2ZW50PFQ+KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5pbnN0YW5jZTtcbiAgICAgICAgfSkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLnRldGFEcm9wLmVtaXQoZXZlbnQpO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9hbGl2ZSA9IGZhbHNlO1xuICB9XG59XG4iXX0=
|