ngx-drag-drop 16.0.0 → 16.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,201 @@
1
+ import { Directive, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, inject, Input, NgZone, Output, Renderer2, } from '@angular/core';
2
+ import { dndState, endDrag, startDrag } from './dnd-state';
3
+ import { calculateDragImageOffset, setDragData, setDragImage, } from './dnd-utils';
4
+ import * as i0 from "@angular/core";
5
+ class DndDragImageRefDirective {
6
+ dndDraggableDirective = inject(forwardRef(() => DndDraggableDirective));
7
+ elementRef = inject(ElementRef);
8
+ ngOnInit() {
9
+ this.dndDraggableDirective.registerDragImage(this.elementRef);
10
+ }
11
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndDragImageRefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
12
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.1", type: DndDragImageRefDirective, isStandalone: true, selector: "[dndDragImageRef]", ngImport: i0 });
13
+ }
14
+ export { DndDragImageRefDirective };
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndDragImageRefDirective, decorators: [{
16
+ type: Directive,
17
+ args: [{ selector: '[dndDragImageRef]', standalone: true }]
18
+ }] });
19
+ class DndDraggableDirective {
20
+ dndDraggable;
21
+ dndEffectAllowed = 'copy';
22
+ dndType;
23
+ dndDraggingClass = 'dndDragging';
24
+ dndDraggingSourceClass = 'dndDraggingSource';
25
+ dndDraggableDisabledClass = 'dndDraggableDisabled';
26
+ dndDragImageOffsetFunction = calculateDragImageOffset;
27
+ dndStart = new EventEmitter();
28
+ dndDrag = new EventEmitter();
29
+ dndEnd = new EventEmitter();
30
+ dndMoved = new EventEmitter();
31
+ dndCopied = new EventEmitter();
32
+ dndLinked = new EventEmitter();
33
+ dndCanceled = new EventEmitter();
34
+ draggable = true;
35
+ dndHandle;
36
+ dndDragImageElementRef;
37
+ dragImage;
38
+ isDragStarted = false;
39
+ elementRef = inject(ElementRef);
40
+ renderer = inject(Renderer2);
41
+ ngZone = inject(NgZone);
42
+ set dndDisableIf(value) {
43
+ this.draggable = !value;
44
+ if (this.draggable) {
45
+ this.renderer.removeClass(this.elementRef.nativeElement, this.dndDraggableDisabledClass);
46
+ }
47
+ else {
48
+ this.renderer.addClass(this.elementRef.nativeElement, this.dndDraggableDisabledClass);
49
+ }
50
+ }
51
+ set dndDisableDragIf(value) {
52
+ this.dndDisableIf = value;
53
+ }
54
+ ngAfterViewInit() {
55
+ this.ngZone.runOutsideAngular(() => {
56
+ this.elementRef.nativeElement.addEventListener('drag', this.dragEventHandler);
57
+ });
58
+ }
59
+ ngOnDestroy() {
60
+ this.elementRef.nativeElement.removeEventListener('drag', this.dragEventHandler);
61
+ if (this.isDragStarted) {
62
+ endDrag();
63
+ }
64
+ }
65
+ onDragStart(event) {
66
+ if (!this.draggable) {
67
+ return false;
68
+ }
69
+ // check if there is dnd handle and if the dnd handle was used to start the drag
70
+ if (this.dndHandle != null && event._dndUsingHandle == null) {
71
+ event.stopPropagation();
72
+ return false;
73
+ }
74
+ // initialize global state
75
+ startDrag(event, this.dndEffectAllowed, this.dndType);
76
+ this.isDragStarted = true;
77
+ setDragData(event, { data: this.dndDraggable, type: this.dndType }, dndState.effectAllowed);
78
+ this.dragImage = this.determineDragImage();
79
+ // set dragging css class prior to setDragImage so styles are applied before
80
+ // TODO breaking change: add class to elementRef rather than drag image which could be another element
81
+ this.renderer.addClass(this.dragImage, this.dndDraggingClass);
82
+ // set custom dragimage if present
83
+ // set dragimage if drag is started from dndHandle
84
+ if (this.dndDragImageElementRef != null || event._dndUsingHandle != null) {
85
+ setDragImage(event, this.dragImage, this.dndDragImageOffsetFunction);
86
+ }
87
+ // add dragging source css class on first drag event
88
+ const unregister = this.renderer.listen(this.elementRef.nativeElement, 'drag', () => {
89
+ this.renderer.addClass(this.elementRef.nativeElement, this.dndDraggingSourceClass);
90
+ unregister();
91
+ });
92
+ this.dndStart.emit(event);
93
+ event.stopPropagation();
94
+ setTimeout(() => {
95
+ this.renderer.setStyle(this.dragImage, 'pointer-events', 'none');
96
+ }, 100);
97
+ return true;
98
+ }
99
+ onDrag(event) {
100
+ this.dndDrag.emit(event);
101
+ }
102
+ onDragEnd(event) {
103
+ if (!this.draggable || !this.isDragStarted) {
104
+ return;
105
+ }
106
+ // get drop effect from custom stored state as its not reliable across browsers
107
+ const dropEffect = dndState.dropEffect;
108
+ this.renderer.setStyle(this.dragImage, 'pointer-events', 'unset');
109
+ let dropEffectEmitter;
110
+ switch (dropEffect) {
111
+ case 'copy':
112
+ dropEffectEmitter = this.dndCopied;
113
+ break;
114
+ case 'link':
115
+ dropEffectEmitter = this.dndLinked;
116
+ break;
117
+ case 'move':
118
+ dropEffectEmitter = this.dndMoved;
119
+ break;
120
+ default:
121
+ dropEffectEmitter = this.dndCanceled;
122
+ break;
123
+ }
124
+ dropEffectEmitter.emit(event);
125
+ this.dndEnd.emit(event);
126
+ // reset global state
127
+ endDrag();
128
+ this.isDragStarted = false;
129
+ this.renderer.removeClass(this.dragImage, this.dndDraggingClass);
130
+ // IE9 special hammering
131
+ window.setTimeout(() => {
132
+ this.renderer.removeClass(this.elementRef.nativeElement, this.dndDraggingSourceClass);
133
+ }, 0);
134
+ event.stopPropagation();
135
+ }
136
+ registerDragHandle(handle) {
137
+ this.dndHandle = handle;
138
+ }
139
+ registerDragImage(elementRef) {
140
+ this.dndDragImageElementRef = elementRef;
141
+ }
142
+ dragEventHandler = (event) => this.onDrag(event);
143
+ determineDragImage() {
144
+ // evaluate custom drag image existence
145
+ if (typeof this.dndDragImageElementRef !== 'undefined') {
146
+ return this.dndDragImageElementRef.nativeElement;
147
+ }
148
+ else {
149
+ return this.elementRef.nativeElement;
150
+ }
151
+ }
152
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndDraggableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
153
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.1", type: DndDraggableDirective, isStandalone: true, selector: "[dndDraggable]", inputs: { dndDraggable: "dndDraggable", dndEffectAllowed: "dndEffectAllowed", dndType: "dndType", dndDraggingClass: "dndDraggingClass", dndDraggingSourceClass: "dndDraggingSourceClass", dndDraggableDisabledClass: "dndDraggableDisabledClass", dndDragImageOffsetFunction: "dndDragImageOffsetFunction", dndDisableIf: "dndDisableIf", dndDisableDragIf: "dndDisableDragIf" }, outputs: { dndStart: "dndStart", dndDrag: "dndDrag", dndEnd: "dndEnd", dndMoved: "dndMoved", dndCopied: "dndCopied", dndLinked: "dndLinked", dndCanceled: "dndCanceled" }, host: { listeners: { "dragstart": "onDragStart($event)", "dragend": "onDragEnd($event)" }, properties: { "attr.draggable": "this.draggable" } }, ngImport: i0 });
154
+ }
155
+ export { DndDraggableDirective };
156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndDraggableDirective, decorators: [{
157
+ type: Directive,
158
+ args: [{ selector: '[dndDraggable]', standalone: true }]
159
+ }], propDecorators: { dndDraggable: [{
160
+ type: Input
161
+ }], dndEffectAllowed: [{
162
+ type: Input
163
+ }], dndType: [{
164
+ type: Input
165
+ }], dndDraggingClass: [{
166
+ type: Input
167
+ }], dndDraggingSourceClass: [{
168
+ type: Input
169
+ }], dndDraggableDisabledClass: [{
170
+ type: Input
171
+ }], dndDragImageOffsetFunction: [{
172
+ type: Input
173
+ }], dndStart: [{
174
+ type: Output
175
+ }], dndDrag: [{
176
+ type: Output
177
+ }], dndEnd: [{
178
+ type: Output
179
+ }], dndMoved: [{
180
+ type: Output
181
+ }], dndCopied: [{
182
+ type: Output
183
+ }], dndLinked: [{
184
+ type: Output
185
+ }], dndCanceled: [{
186
+ type: Output
187
+ }], draggable: [{
188
+ type: HostBinding,
189
+ args: ['attr.draggable']
190
+ }], dndDisableIf: [{
191
+ type: Input
192
+ }], dndDisableDragIf: [{
193
+ type: Input
194
+ }], onDragStart: [{
195
+ type: HostListener,
196
+ args: ['dragstart', ['$event']]
197
+ }], onDragEnd: [{
198
+ type: HostListener,
199
+ args: ['dragend', ['$event']]
200
+ }] } });
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWRyYWdnYWJsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kbmQvc3JjL2xpYi9kbmQtZHJhZ2dhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0QsT0FBTyxFQUNMLHdCQUF3QixFQUd4QixXQUFXLEVBQ1gsWUFBWSxHQUNiLE1BQU0sYUFBYSxDQUFDOztBQUVyQixNQUNhLHdCQUF3QjtJQUNuQyxxQkFBcUIsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztJQUN4RSxVQUFVLEdBQTRCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV6RCxRQUFRO1FBQ04sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoRSxDQUFDO3VHQU5VLHdCQUF3QjsyRkFBeEIsd0JBQXdCOztTQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFOztBQVU5RCxNQUNhLHFCQUFxQjtJQUN2QixZQUFZLENBQU07SUFDbEIsZ0JBQWdCLEdBQWtCLE1BQU0sQ0FBQztJQUN6QyxPQUFPLENBQVU7SUFDakIsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0lBQ2pDLHNCQUFzQixHQUFHLG1CQUFt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LFdBQVc7c0JBQTdCLE1BQU07Z0JBR3dCLFNBQVM7c0JBQXZDLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQVdoQixZQUFZO3NCQUF4QixLQUFLO2dCQWdCTyxnQkFBZ0I7c0JBQTVCLEtBQUs7Z0JBdUJpQyxXQUFXO3NCQUFqRCxZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkE4REEsU0FBUztzQkFBN0MsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG5kSGFuZGxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kbmQtaGFuZGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBkbmRTdGF0ZSwgZW5kRHJhZywgc3RhcnREcmFnIH0gZnJvbSAnLi9kbmQtc3RhdGUnO1xuaW1wb3J0IHsgRWZmZWN0QWxsb3dlZCB9IGZyb20gJy4vZG5kLXR5cGVzJztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZURyYWdJbWFnZU9mZnNldCxcbiAgRG5kRHJhZ0ltYWdlT2Zmc2V0RnVuY3Rpb24sXG4gIERuZEV2ZW50LFxuICBzZXREcmFnRGF0YSxcbiAgc2V0RHJhZ0ltYWdlLFxufSBmcm9tICcuL2RuZC11dGlscyc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tkbmREcmFnSW1hZ2VSZWZdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIERuZERyYWdJbWFnZVJlZkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRuZERyYWdnYWJsZURpcmVjdGl2ZSA9IGluamVjdChmb3J3YXJkUmVmKCgpID0+IERuZERyYWdnYWJsZURpcmVjdGl2ZSkpO1xuICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRuZERyYWdnYWJsZURpcmVjdGl2ZS5yZWdpc3RlckRyYWdJbWFnZSh0aGlzLmVsZW1lbnRSZWYpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tkbmREcmFnZ2FibGVdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIERuZERyYWdnYWJsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGRuZERyYWdnYWJsZTogYW55O1xuICBASW5wdXQoKSBkbmRFZmZlY3RBbGxvd2VkOiBFZmZlY3RBbGxvd2VkID0gJ2NvcHknO1xuICBASW5wdXQoKSBkbmRUeXBlPzogc3RyaW5nO1xuICBASW5wdXQoKSBkbmREcmFnZ2luZ0NsYXNzID0gJ2RuZERyYWdnaW5nJztcbiAgQElucHV0KCkgZG5kRHJhZ2dpbmdTb3VyY2VDbGFzcyA9ICdkbmREcmFnZ2luZ1NvdXJjZSc7XG4gIEBJbnB1dCgpIGRuZERyYWdnYWJsZURpc2FibGVkQ2xhc3MgPSAnZG5kRHJhZ2dhYmxlRGlzYWJsZWQnO1xuICBASW5wdXQoKSBkbmREcmFnSW1hZ2VPZmZzZXRGdW5jdGlvbjogRG5kRHJhZ0ltYWdlT2Zmc2V0RnVuY3Rpb24gPVxuICAgIGNhbGN1bGF0ZURyYWdJbWFnZU9mZnNldDtcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgZG5kU3RhcnQ6IEV2ZW50RW1pdHRlcjxEcmFnRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPERyYWdFdmVudD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGRuZERyYWc6IEV2ZW50RW1pdHRlcjxEcmFnRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPERyYWdFdmVudD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGRuZEVuZDogRXZlbnRFbWl0dGVyPERyYWdFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8RHJhZ0V2ZW50PigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZG5kTW92ZWQ6IEV2ZW50RW1pdHRlcjxEcmFnRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPERyYWdFdmVudD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGRuZENvcGllZDogRXZlbnRFbWl0dGVyPERyYWdFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8RHJhZ0V2ZW50PigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZG5kTGlua2VkOiBFdmVudEVtaXR0ZXI8RHJhZ0V2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxEcmFnRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBkbmRDYW5jZWxlZDogRXZlbnRFbWl0dGVyPERyYWdFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8RHJhZ0V2ZW50PigpO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kcmFnZ2FibGUnKSBkcmFnZ2FibGUgPSB0cnVlO1xuXG4gIHByaXZhdGUgZG5kSGFuZGxlPzogRG5kSGFuZGxlRGlyZWN0aXZlO1xuICBwcml2YXRlIGRuZERyYWdJbWFnZUVsZW1lbnRSZWY/OiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGRyYWdJbWFnZTogRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBpc0RyYWdTdGFydGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcml2YXRlIG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIEBJbnB1dCgpIHNldCBkbmREaXNhYmxlSWYodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRyYWdnYWJsZSA9ICF2YWx1ZTtcblxuICAgIGlmICh0aGlzLmRyYWdnYWJsZSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHRoaXMuZG5kRHJhZ2dhYmxlRGlzYWJsZWRDbGFzc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHRoaXMuZG5kRHJhZ2dhYmxlRGlzYWJsZWRDbGFzc1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZG5kRGlzYWJsZURyYWdJZih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZG5kRGlzYWJsZUlmID0gdmFsdWU7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2RyYWcnLFxuICAgICAgICB0aGlzLmRyYWdFdmVudEhhbmRsZXJcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgJ2RyYWcnLFxuICAgICAgdGhpcy5kcmFnRXZlbnRIYW5kbGVyXG4gICAgKTtcbiAgICBpZiAodGhpcy5pc0RyYWdTdGFydGVkKSB7XG4gICAgICBlbmREcmFnKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJhZ3N0YXJ0JywgWyckZXZlbnQnXSkgb25EcmFnU3RhcnQoZXZlbnQ6IERuZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmRyYWdnYWJsZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGRuZCBoYW5kbGUgYW5kIGlmIHRoZSBkbmQgaGFuZGxlIHdhcyB1c2VkIHRvIHN0YXJ0IHRoZSBkcmFnXG4gICAgaWYgKHRoaXMuZG5kSGFuZGxlICE9IG51bGwgJiYgZXZlbnQuX2RuZFVzaW5nSGFuZGxlID09IG51bGwpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGluaXRpYWxpemUgZ2xvYmFsIHN0YXRlXG4gICAgc3RhcnREcmFnKGV2ZW50LCB0aGlzLmRuZEVmZmVjdEFsbG93ZWQsIHRoaXMuZG5kVHlwZSk7XG5cbiAgICB0aGlzLmlzRHJhZ1N0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgc2V0RHJhZ0RhdGEoXG4gICAgICBldmVudCxcbiAgICAgIHsgZGF0YTogdGhpcy5kbmREcmFnZ2FibGUsIHR5cGU6IHRoaXMuZG5kVHlwZSB9LFxuICAgICAgZG5kU3RhdGUuZWZmZWN0QWxsb3dlZCFcbiAgICApO1xuXG4gICAgdGhpcy5kcmFnSW1hZ2UgPSB0aGlzLmRldGVybWluZURyYWdJbWFnZSgpO1xuXG4gICAgLy8gc2V0IGRyYWdnaW5nIGNzcyBjbGFzcyBwcmlvciB0byBzZXREcmFnSW1hZ2Ugc28gc3R5bGVzIGFyZSBhcHBsaWVkIGJlZm9yZVxuICAgIC8vIFRPRE8gYnJlYWtpbmcgY2hhbmdlOiBhZGQgY2xhc3MgdG8gZWxlbWVudFJlZiByYXRoZXIgdGhhbiBkcmFnIGltYWdlIHdoaWNoIGNvdWxkIGJlIGFub3RoZXIgZWxlbWVudFxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5kcmFnSW1hZ2UsIHRoaXMuZG5kRHJhZ2dpbmdDbGFzcyk7XG5cbiAgICAvLyBzZXQgY3VzdG9tIGRyYWdpbWFnZSBpZiBwcmVzZW50XG4gICAgLy8gc2V0IGRyYWdpbWFnZSBpZiBkcmFnIGlzIHN0YXJ0ZWQgZnJvbSBkbmRIYW5kbGVcbiAgICBpZiAodGhpcy5kbmREcmFnSW1hZ2VFbGVtZW50UmVmICE9IG51bGwgfHwgZXZlbnQuX2RuZFVzaW5nSGFuZGxlICE9IG51bGwpIHtcbiAgICAgIHNldERyYWdJbWFnZShldmVudCwgdGhpcy5kcmFnSW1hZ2UsIHRoaXMuZG5kRHJhZ0ltYWdlT2Zmc2V0RnVuY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIGFkZCBkcmFnZ2luZyBzb3VyY2UgY3NzIGNsYXNzIG9uIGZpcnN0IGRyYWcgZXZlbnRcbiAgICBjb25zdCB1bnJlZ2lzdGVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdkcmFnJyxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICB0aGlzLmRuZERyYWdnaW5nU291cmNlQ2xhc3NcbiAgICAgICAgKTtcbiAgICAgICAgdW5yZWdpc3RlcigpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRuZFN0YXJ0LmVtaXQoZXZlbnQpO1xuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kcmFnSW1hZ2UsICdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG4gICAgfSwgMTAwKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25EcmFnKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICB0aGlzLmRuZERyYWcuZW1pdChldmVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkcmFnZW5kJywgWyckZXZlbnQnXSkgb25EcmFnRW5kKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZHJhZ2dhYmxlIHx8ICF0aGlzLmlzRHJhZ1N0YXJ0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gZ2V0IGRyb3AgZWZmZWN0IGZyb20gY3VzdG9tIHN0b3JlZCBzdGF0ZSBhcyBpdHMgbm90IHJlbGlhYmxlIGFjcm9zcyBicm93c2Vyc1xuICAgIGNvbnN0IGRyb3BFZmZlY3QgPSBkbmRTdGF0ZS5kcm9wRWZmZWN0O1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRyYWdJbWFnZSwgJ3BvaW50ZXItZXZlbnRzJywgJ3Vuc2V0Jyk7XG5cbiAgICBsZXQgZHJvcEVmZmVjdEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxEcmFnRXZlbnQ+O1xuXG4gICAgc3dpdGNoIChkcm9wRWZmZWN0KSB7XG4gICAgICBjYXNlICdjb3B5JzpcbiAgICAgICAgZHJvcEVmZmVjdEVtaXR0ZXIgPSB0aGlzLmRuZENvcGllZDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgICBkcm9wRWZmZWN0RW1pdHRlciA9IHRoaXMuZG5kTGlua2VkO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbW92ZSc6XG4gICAgICAgIGRyb3BFZmZlY3RFbWl0dGVyID0gdGhpcy5kbmRNb3ZlZDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGRyb3BFZmZlY3RFbWl0dGVyID0gdGhpcy5kbmRDYW5jZWxlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZHJvcEVmZmVjdEVtaXR0ZXIuZW1pdChldmVudCk7XG4gICAgdGhpcy5kbmRFbmQuZW1pdChldmVudCk7XG5cbiAgICAvLyByZXNldCBnbG9iYWwgc3RhdGVcbiAgICBlbmREcmFnKCk7XG5cbiAgICB0aGlzLmlzRHJhZ1N0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5kcmFnSW1hZ2UsIHRoaXMuZG5kRHJhZ2dpbmdDbGFzcyk7XG5cbiAgICAvLyBJRTkgc3BlY2lhbCBoYW1tZXJpbmdcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgdGhpcy5kbmREcmFnZ2luZ1NvdXJjZUNsYXNzXG4gICAgICApO1xuICAgIH0sIDApO1xuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICByZWdpc3RlckRyYWdIYW5kbGUoaGFuZGxlOiBEbmRIYW5kbGVEaXJlY3RpdmUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmRuZEhhbmRsZSA9IGhhbmRsZTtcbiAgfVxuXG4gIHJlZ2lzdGVyRHJhZ0ltYWdlKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmRuZERyYWdJbWFnZUVsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkcmFnRXZlbnRIYW5kbGVyOiAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZCA9IChcbiAgICBldmVudDogRHJhZ0V2ZW50XG4gICkgPT4gdGhpcy5vbkRyYWcoZXZlbnQpO1xuXG4gIHByaXZhdGUgZGV0ZXJtaW5lRHJhZ0ltYWdlKCk6IEVsZW1lbnQge1xuICAgIC8vIGV2YWx1YXRlIGN1c3RvbSBkcmFnIGltYWdlIGV4aXN0ZW5jZVxuICAgIGlmICh0eXBlb2YgdGhpcy5kbmREcmFnSW1hZ2VFbGVtZW50UmVmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXMuZG5kRHJhZ0ltYWdlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,282 @@
1
+ import { ContentChild, Directive, EventEmitter, HostListener, Input, Output, } from '@angular/core';
2
+ import { getDndType, getDropEffect, isExternalDrag, setDropEffect, } from './dnd-state';
3
+ import { getDirectChildElement, getDropData, shouldPositionPlaceholderBeforeElement, } from './dnd-utils';
4
+ import * as i0 from "@angular/core";
5
+ class DndPlaceholderRefDirective {
6
+ elementRef;
7
+ constructor(elementRef) {
8
+ this.elementRef = elementRef;
9
+ }
10
+ ngOnInit() {
11
+ // placeholder has to be "invisible" to the cursor, or it would interfere with the dragover detection for the same dropzone
12
+ this.elementRef.nativeElement.style.pointerEvents = 'none';
13
+ }
14
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndPlaceholderRefDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
15
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.1", type: DndPlaceholderRefDirective, isStandalone: true, selector: "[dndPlaceholderRef]", ngImport: i0 });
16
+ }
17
+ export { DndPlaceholderRefDirective };
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndPlaceholderRefDirective, decorators: [{
19
+ type: Directive,
20
+ args: [{ selector: '[dndPlaceholderRef]', standalone: true }]
21
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
22
+ class DndDropzoneDirective {
23
+ ngZone;
24
+ elementRef;
25
+ renderer;
26
+ dndDropzone = '';
27
+ dndEffectAllowed = 'uninitialized';
28
+ dndAllowExternal = false;
29
+ dndHorizontal = false;
30
+ dndDragoverClass = 'dndDragover';
31
+ dndDropzoneDisabledClass = 'dndDropzoneDisabled';
32
+ dndDragover = new EventEmitter();
33
+ dndDrop = new EventEmitter();
34
+ dndPlaceholderRef;
35
+ placeholder = null;
36
+ disabled = false;
37
+ constructor(ngZone, elementRef, renderer) {
38
+ this.ngZone = ngZone;
39
+ this.elementRef = elementRef;
40
+ this.renderer = renderer;
41
+ }
42
+ set dndDisableIf(value) {
43
+ this.disabled = value;
44
+ if (this.disabled) {
45
+ this.renderer.addClass(this.elementRef.nativeElement, this.dndDropzoneDisabledClass);
46
+ }
47
+ else {
48
+ this.renderer.removeClass(this.elementRef.nativeElement, this.dndDropzoneDisabledClass);
49
+ }
50
+ }
51
+ set dndDisableDropIf(value) {
52
+ this.dndDisableIf = value;
53
+ }
54
+ ngAfterViewInit() {
55
+ this.placeholder = this.tryGetPlaceholder();
56
+ this.removePlaceholderFromDOM();
57
+ this.ngZone.runOutsideAngular(() => {
58
+ this.elementRef.nativeElement.addEventListener('dragenter', this.dragEnterEventHandler);
59
+ this.elementRef.nativeElement.addEventListener('dragover', this.dragOverEventHandler);
60
+ this.elementRef.nativeElement.addEventListener('dragleave', this.dragLeaveEventHandler);
61
+ });
62
+ }
63
+ ngOnDestroy() {
64
+ this.elementRef.nativeElement.removeEventListener('dragenter', this.dragEnterEventHandler);
65
+ this.elementRef.nativeElement.removeEventListener('dragover', this.dragOverEventHandler);
66
+ this.elementRef.nativeElement.removeEventListener('dragleave', this.dragLeaveEventHandler);
67
+ }
68
+ onDragEnter(event) {
69
+ // check if another dropzone is activated
70
+ if (event._dndDropzoneActive === true) {
71
+ this.cleanupDragoverState();
72
+ return;
73
+ }
74
+ // set as active if the target element is inside this dropzone
75
+ if (event._dndDropzoneActive == null) {
76
+ const newTarget = document.elementFromPoint(event.clientX, event.clientY);
77
+ if (this.elementRef.nativeElement.contains(newTarget)) {
78
+ event._dndDropzoneActive = true;
79
+ }
80
+ }
81
+ // check if this drag event is allowed to drop on this dropzone
82
+ const type = getDndType(event);
83
+ if (!this.isDropAllowed(type)) {
84
+ return;
85
+ }
86
+ // allow the dragenter
87
+ event.preventDefault();
88
+ }
89
+ onDragOver(event) {
90
+ // With nested dropzones, we want to ignore this event if a child dropzone
91
+ // has already handled a dragover. Historically, event.stopPropagation() was
92
+ // used to prevent this bubbling, but that prevents any dragovers outside the
93
+ // ngx-drag-drop component, and stops other use cases such as scrolling on drag.
94
+ // Instead, we can check if the event was already prevented by a child and bail early.
95
+ if (event.defaultPrevented) {
96
+ return;
97
+ }
98
+ // check if this drag event is allowed to drop on this dropzone
99
+ const type = getDndType(event);
100
+ if (!this.isDropAllowed(type)) {
101
+ return;
102
+ }
103
+ this.checkAndUpdatePlaceholderPosition(event);
104
+ const dropEffect = getDropEffect(event, this.dndEffectAllowed);
105
+ if (dropEffect === 'none') {
106
+ this.cleanupDragoverState();
107
+ return;
108
+ }
109
+ // allow the dragover
110
+ event.preventDefault();
111
+ // set the drop effect
112
+ setDropEffect(event, dropEffect);
113
+ this.dndDragover.emit(event);
114
+ this.renderer.addClass(this.elementRef.nativeElement, this.dndDragoverClass);
115
+ }
116
+ onDrop(event) {
117
+ try {
118
+ // check if this drag event is allowed to drop on this dropzone
119
+ const type = getDndType(event);
120
+ if (!this.isDropAllowed(type)) {
121
+ return;
122
+ }
123
+ const data = getDropData(event, isExternalDrag());
124
+ if (!this.isDropAllowed(data.type)) {
125
+ return;
126
+ }
127
+ // signal custom drop handling
128
+ event.preventDefault();
129
+ const dropEffect = getDropEffect(event);
130
+ setDropEffect(event, dropEffect);
131
+ if (dropEffect === 'none') {
132
+ return;
133
+ }
134
+ const dropIndex = this.getPlaceholderIndex();
135
+ // if for whatever reason the placeholder is not present in the DOM but it should be there
136
+ // we don't allow/emit the drop event since it breaks the contract
137
+ // seems to only happen if drag and drop is executed faster than the DOM updates
138
+ if (dropIndex === -1) {
139
+ return;
140
+ }
141
+ this.dndDrop.emit({
142
+ event: event,
143
+ dropEffect: dropEffect,
144
+ isExternal: isExternalDrag(),
145
+ data: data.data,
146
+ index: dropIndex,
147
+ type: type,
148
+ });
149
+ event.stopPropagation();
150
+ }
151
+ finally {
152
+ this.cleanupDragoverState();
153
+ }
154
+ }
155
+ onDragLeave(event) {
156
+ event.preventDefault();
157
+ event.stopPropagation();
158
+ // check if still inside this dropzone and not yet handled by another dropzone
159
+ if (event._dndDropzoneActive == null) {
160
+ if (this.elementRef.nativeElement.contains(event.relatedTarget)) {
161
+ event._dndDropzoneActive = true;
162
+ return;
163
+ }
164
+ }
165
+ this.cleanupDragoverState();
166
+ // cleanup drop effect when leaving dropzone
167
+ setDropEffect(event, 'none');
168
+ }
169
+ dragEnterEventHandler = (event) => this.onDragEnter(event);
170
+ dragOverEventHandler = (event) => this.onDragOver(event);
171
+ dragLeaveEventHandler = (event) => this.onDragLeave(event);
172
+ isDropAllowed(type) {
173
+ // dropzone is disabled -> deny it
174
+ if (this.disabled) {
175
+ return false;
176
+ }
177
+ // if drag did not start from our directive
178
+ // and external drag sources are not allowed -> deny it
179
+ if (isExternalDrag() && !this.dndAllowExternal) {
180
+ return false;
181
+ }
182
+ // no filtering by types -> allow it
183
+ if (!this.dndDropzone) {
184
+ return true;
185
+ }
186
+ // no type set -> allow it
187
+ if (!type) {
188
+ return true;
189
+ }
190
+ if (!Array.isArray(this.dndDropzone)) {
191
+ throw new Error('dndDropzone: bound value to [dndDropzone] must be an array!');
192
+ }
193
+ // if dropzone contains type -> allow it
194
+ return this.dndDropzone.indexOf(type) !== -1;
195
+ }
196
+ tryGetPlaceholder() {
197
+ if (typeof this.dndPlaceholderRef !== 'undefined') {
198
+ return this.dndPlaceholderRef.elementRef.nativeElement;
199
+ }
200
+ // TODO nasty workaround needed because if ng-container / template is used @ContentChild() or DI will fail because
201
+ // of wrong context see angular bug https://github.com/angular/angular/issues/13517
202
+ return this.elementRef.nativeElement.querySelector('[dndPlaceholderRef]');
203
+ }
204
+ removePlaceholderFromDOM() {
205
+ if (this.placeholder !== null && this.placeholder.parentNode !== null) {
206
+ this.placeholder.parentNode.removeChild(this.placeholder);
207
+ }
208
+ }
209
+ checkAndUpdatePlaceholderPosition(event) {
210
+ if (this.placeholder === null) {
211
+ return;
212
+ }
213
+ // make sure the placeholder is in the DOM
214
+ if (this.placeholder.parentNode !== this.elementRef.nativeElement) {
215
+ this.renderer.appendChild(this.elementRef.nativeElement, this.placeholder);
216
+ }
217
+ // update the position if the event originates from a child element of the dropzone
218
+ const directChild = getDirectChildElement(this.elementRef.nativeElement, event.target);
219
+ // early exit if no direct child or direct child is placeholder
220
+ if (directChild === null || directChild === this.placeholder) {
221
+ return;
222
+ }
223
+ const positionPlaceholderBeforeDirectChild = shouldPositionPlaceholderBeforeElement(event, directChild, this.dndHorizontal);
224
+ if (positionPlaceholderBeforeDirectChild) {
225
+ // do insert before only if necessary
226
+ if (directChild.previousSibling !== this.placeholder) {
227
+ this.renderer.insertBefore(this.elementRef.nativeElement, this.placeholder, directChild);
228
+ }
229
+ }
230
+ else {
231
+ // do insert after only if necessary
232
+ if (directChild.nextSibling !== this.placeholder) {
233
+ this.renderer.insertBefore(this.elementRef.nativeElement, this.placeholder, directChild.nextSibling);
234
+ }
235
+ }
236
+ }
237
+ getPlaceholderIndex() {
238
+ if (this.placeholder === null) {
239
+ return undefined;
240
+ }
241
+ const element = this.elementRef.nativeElement;
242
+ return Array.prototype.indexOf.call(element.children, this.placeholder);
243
+ }
244
+ cleanupDragoverState() {
245
+ this.renderer.removeClass(this.elementRef.nativeElement, this.dndDragoverClass);
246
+ this.removePlaceholderFromDOM();
247
+ }
248
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndDropzoneDirective, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
249
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.1", type: DndDropzoneDirective, isStandalone: true, selector: "[dndDropzone]", inputs: { dndDropzone: "dndDropzone", dndEffectAllowed: "dndEffectAllowed", dndAllowExternal: "dndAllowExternal", dndHorizontal: "dndHorizontal", dndDragoverClass: "dndDragoverClass", dndDropzoneDisabledClass: "dndDropzoneDisabledClass", dndDisableIf: "dndDisableIf", dndDisableDropIf: "dndDisableDropIf" }, outputs: { dndDragover: "dndDragover", dndDrop: "dndDrop" }, host: { listeners: { "drop": "onDrop($event)" } }, queries: [{ propertyName: "dndPlaceholderRef", first: true, predicate: DndPlaceholderRefDirective, descendants: true }], ngImport: i0 });
250
+ }
251
+ export { DndDropzoneDirective };
252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndDropzoneDirective, decorators: [{
253
+ type: Directive,
254
+ args: [{ selector: '[dndDropzone]', standalone: true }]
255
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { dndDropzone: [{
256
+ type: Input
257
+ }], dndEffectAllowed: [{
258
+ type: Input
259
+ }], dndAllowExternal: [{
260
+ type: Input
261
+ }], dndHorizontal: [{
262
+ type: Input
263
+ }], dndDragoverClass: [{
264
+ type: Input
265
+ }], dndDropzoneDisabledClass: [{
266
+ type: Input
267
+ }], dndDragover: [{
268
+ type: Output
269
+ }], dndDrop: [{
270
+ type: Output
271
+ }], dndPlaceholderRef: [{
272
+ type: ContentChild,
273
+ args: [DndPlaceholderRefDirective]
274
+ }], dndDisableIf: [{
275
+ type: Input
276
+ }], dndDisableDropIf: [{
277
+ type: Input
278
+ }], onDrop: [{
279
+ type: HostListener,
280
+ args: ['drop', ['$event']]
281
+ }] } });
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWRyb3B6b25lLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2RuZC9zcmMvbGliL2RuZC1kcm9wem9uZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFlBQVksRUFDWixTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxVQUFVLEVBQ1YsYUFBYSxFQUNiLGNBQWMsRUFDZCxhQUFhLEdBQ2QsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUdMLHFCQUFxQixFQUNyQixXQUFXLEVBQ1gsc0NBQXNDLEdBQ3ZDLE1BQU0sYUFBYSxDQUFDOztBQVdyQixNQUNhLDBCQUEwQjtJQUNUO0lBQTVCLFlBQTRCLFVBQW1DO1FBQW5DLGVBQVUsR0FBVixVQUFVLENBQXlCO0lBQUcsQ0FBQztJQUVuRSxRQUFRO1FBQ04sMkhBQTJIO1FBQzNILElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBQzdELENBQUM7dUdBTlUsMEJBQTBCOzJGQUExQiwwQkFBMEI7O1NBQTFCLDBCQUEwQjsyRkFBMUIsMEJBQTBCO2tCQUR0QyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7O0FBVWhFLE1BQ2Esb0JBQW9CO0lBMkJyQjtJQUNBO0lBQ0E7SUE1QkQsV0FBVyxHQUFtQixFQUFFLENBQUM7SUFFakMsZ0JBQWdCLEdBQWtCLGVBQWUsQ0FBQztJQUVsRCxnQkFBZ0IsR0FBWSxLQUFLLENBQUM7SUFFbEMsYUFBYSxHQUFZLEtBQUssQ0FBQztJQUUvQixnQkFBZ0IsR0FBVyxhQUFhLENBQUM7SUFFekMsd0JBQXdCLEdBQUcscUJBQXFCLENBQUM7SUFFdkMsV0FB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LENBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQ3RCLENBQUM7UUFFRixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO3VHQTdWVSxvQkFBb0I7MkZBQXBCLG9CQUFvQiw0aEJBbUJqQiwwQkFBMEI7O1NBbkI3QixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFEaEMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs4SUFFL0MsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFFYSxXQUFXO3NCQUE3QixNQUFNO2dCQUdZLE9BQU87c0JBQXpCLE1BQU07Z0JBSVUsaUJBQWlCO3NCQURqQyxZQUFZO3VCQUFDLDBCQUEwQjtnQkFhM0IsWUFBWTtzQkFBeEIsS0FBSztnQkFnQk8sZ0JBQWdCO3NCQUE1QixLQUFLO2dCQXlHNEIsTUFBTTtzQkFBdkMsWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb250ZW50Q2hpbGQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBnZXREbmRUeXBlLFxuICBnZXREcm9wRWZmZWN0LFxuICBpc0V4dGVybmFsRHJhZyxcbiAgc2V0RHJvcEVmZmVjdCxcbn0gZnJvbSAnLi9kbmQtc3RhdGUnO1xuaW1wb3J0IHsgRHJvcEVmZmVjdCwgRWZmZWN0QWxsb3dlZCB9IGZyb20gJy4vZG5kLXR5cGVzJztcbmltcG9ydCB7XG4gIERuZEV2ZW50LFxuICBEcmFnRHJvcERhdGEsXG4gIGdldERpcmVjdENoaWxkRWxlbWVudCxcbiAgZ2V0RHJvcERhdGEsXG4gIHNob3VsZFBvc2l0aW9uUGxhY2Vob2xkZXJCZWZvcmVFbGVtZW50LFxufSBmcm9tICcuL2RuZC11dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG5kRHJvcEV2ZW50IHtcbiAgZXZlbnQ6IERyYWdFdmVudDtcbiAgZHJvcEVmZmVjdDogRHJvcEVmZmVjdDtcbiAgaXNFeHRlcm5hbDogYm9vbGVhbjtcbiAgZGF0YT86IGFueTtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIHR5cGU/OiBhbnk7XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tkbmRQbGFjZWhvbGRlclJlZl0nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgRG5kUGxhY2Vob2xkZXJSZWZEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gcGxhY2Vob2xkZXIgaGFzIHRvIGJlIFwiaW52aXNpYmxlXCIgdG8gdGhlIGN1cnNvciwgb3IgaXQgd291bGQgaW50ZXJmZXJlIHdpdGggdGhlIGRyYWdvdmVyIGRldGVjdGlvbiBmb3IgdGhlIHNhbWUgZHJvcHpvbmVcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tkbmREcm9wem9uZV0nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgRG5kRHJvcHpvbmVEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBkbmREcm9wem9uZT86IHN0cmluZ1tdIHwgJycgPSAnJztcblxuICBASW5wdXQoKSBkbmRFZmZlY3RBbGxvd2VkOiBFZmZlY3RBbGxvd2VkID0gJ3VuaW5pdGlhbGl6ZWQnO1xuXG4gIEBJbnB1dCgpIGRuZEFsbG93RXh0ZXJuYWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBkbmRIb3Jpem9udGFsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZG5kRHJhZ292ZXJDbGFzczogc3RyaW5nID0gJ2RuZERyYWdvdmVyJztcblxuICBASW5wdXQoKSBkbmREcm9wem9uZURpc2FibGVkQ2xhc3MgPSAnZG5kRHJvcHpvbmVEaXNhYmxlZCc7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGRuZERyYWdvdmVyOiBFdmVudEVtaXR0ZXI8RHJhZ0V2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxEcmFnRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGRuZERyb3A6IEV2ZW50RW1pdHRlcjxEbmREcm9wRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPERuZERyb3BFdmVudD4oKTtcblxuICBAQ29udGVudENoaWxkKERuZFBsYWNlaG9sZGVyUmVmRGlyZWN0aXZlKVxuICBwcml2YXRlIHJlYWRvbmx5IGRuZFBsYWNlaG9sZGVyUmVmPzogRG5kUGxhY2Vob2xkZXJSZWZEaXJlY3RpdmU7XG5cbiAgcHJpdmF0ZSBwbGFjZWhvbGRlcjogRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIEBJbnB1dCgpIHNldCBkbmREaXNhYmxlSWYodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gdmFsdWU7XG5cbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHRoaXMuZG5kRHJvcHpvbmVEaXNhYmxlZENsYXNzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgdGhpcy5kbmREcm9wem9uZURpc2FibGVkQ2xhc3NcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgc2V0IGRuZERpc2FibGVEcm9wSWYodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRuZERpc2FibGVJZiA9IHZhbHVlO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLnRyeUdldFBsYWNlaG9sZGVyKCk7XG5cbiAgICB0aGlzLnJlbW92ZVBsYWNlaG9sZGVyRnJvbURPTSgpO1xuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2RyYWdlbnRlcicsXG4gICAgICAgIHRoaXMuZHJhZ0VudGVyRXZlbnRIYW5kbGVyXG4gICAgICApO1xuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2RyYWdvdmVyJyxcbiAgICAgICAgdGhpcy5kcmFnT3ZlckV2ZW50SGFuZGxlclxuICAgICAgKTtcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdkcmFnbGVhdmUnLFxuICAgICAgICB0aGlzLmRyYWdMZWF2ZUV2ZW50SGFuZGxlclxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAnZHJhZ2VudGVyJyxcbiAgICAgIHRoaXMuZHJhZ0VudGVyRXZlbnRIYW5kbGVyXG4gICAgKTtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgJ2RyYWdvdmVyJyxcbiAgICAgIHRoaXMuZHJhZ092ZXJFdmVudEhhbmRsZXJcbiAgICApO1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAnZHJhZ2xlYXZlJyxcbiAgICAgIHRoaXMuZHJhZ0xlYXZlRXZlbnRIYW5kbGVyXG4gICAgKTtcbiAgfVxuXG4gIG9uRHJhZ0VudGVyKGV2ZW50OiBEbmRFdmVudCkge1xuICAgIC8vIGNoZWNrIGlmIGFub3RoZXIgZHJvcHpvbmUgaXMgYWN0aXZhdGVkXG4gICAgaWYgKGV2ZW50Ll9kbmREcm9wem9uZUFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5jbGVhbnVwRHJhZ292ZXJTdGF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNldCBhcyBhY3RpdmUgaWYgdGhlIHRhcmdldCBlbGVtZW50IGlzIGluc2lkZSB0aGlzIGRyb3B6b25lXG4gICAgaWYgKGV2ZW50Ll9kbmREcm9wem9uZUFjdGl2ZSA9PSBudWxsKSB7XG4gICAgICBjb25zdCBuZXdUYXJnZXQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgICBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMobmV3VGFyZ2V0KSkge1xuICAgICAgICBldmVudC5fZG5kRHJvcHpvbmVBY3RpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoaXMgZHJhZyBldmVudCBpcyBhbGxvd2VkIHRvIGRyb3Agb24gdGhpcyBkcm9wem9uZVxuICAgIGNvbnN0IHR5cGUgPSBnZXREbmRUeXBlKGV2ZW50KTtcbiAgICBpZiAoIXRoaXMuaXNEcm9wQWxsb3dlZCh0eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFsbG93IHRoZSBkcmFnZW50ZXJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgLy8gV2l0aCBuZXN0ZWQgZHJvcHpvbmVzLCB3ZSB3YW50IHRvIGlnbm9yZSB0aGlzIGV2ZW50IGlmIGEgY2hpbGQgZHJvcHpvbmVcbiAgICAvLyBoYXMgYWxyZWFkeSBoYW5kbGVkIGEgZHJhZ292ZXIuICBIaXN0b3JpY2FsbHksIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIHdhc1xuICAgIC8vIHVzZWQgdG8gcHJldmVudCB0aGlzIGJ1YmJsaW5nLCBidXQgdGhhdCBwcmV2ZW50cyBhbnkgZHJhZ292ZXJzIG91dHNpZGUgdGhlXG4gICAgLy8gbmd4LWRyYWctZHJvcCBjb21wb25lbnQsIGFuZCBzdG9wcyBvdGhlciB1c2UgY2FzZXMgc3VjaCBhcyBzY3JvbGxpbmcgb24gZHJhZy5cbiAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4gY2hlY2sgaWYgdGhlIGV2ZW50IHdhcyBhbHJlYWR5IHByZXZlbnRlZCBieSBhIGNoaWxkIGFuZCBiYWlsIGVhcmx5LlxuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgdGhpcyBkcmFnIGV2ZW50IGlzIGFsbG93ZWQgdG8gZHJvcCBvbiB0aGlzIGRyb3B6b25lXG4gICAgY29uc3QgdHlwZSA9IGdldERuZFR5cGUoZXZlbnQpO1xuICAgIGlmICghdGhpcy5pc0Ryb3BBbGxvd2VkKHR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jaGVja0FuZFVwZGF0ZVBsYWNlaG9sZGVyUG9zaXRpb24oZXZlbnQpO1xuXG4gICAgY29uc3QgZHJvcEVmZmVjdCA9IGdldERyb3BFZmZlY3QoZXZlbnQsIHRoaXMuZG5kRWZmZWN0QWxsb3dlZCk7XG5cbiAgICBpZiAoZHJvcEVmZmVjdCA9PT0gJ25vbmUnKSB7XG4gICAgICB0aGlzLmNsZWFudXBEcmFnb3ZlclN0YXRlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYWxsb3cgdGhlIGRyYWdvdmVyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIHNldCB0aGUgZHJvcCBlZmZlY3RcbiAgICBzZXREcm9wRWZmZWN0KGV2ZW50LCBkcm9wRWZmZWN0KTtcblxuICAgIHRoaXMuZG5kRHJhZ292ZXIuZW1pdChldmVudCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aGlzLmRuZERyYWdvdmVyQ2xhc3NcbiAgICApO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGNoZWNrIGlmIHRoaXMgZHJhZyBldmVudCBpcyBhbGxvd2VkIHRvIGRyb3Agb24gdGhpcyBkcm9wem9uZVxuICAgICAgY29uc3QgdHlwZSA9IGdldERuZFR5cGUoZXZlbnQpO1xuICAgICAgaWYgKCF0aGlzLmlzRHJvcEFsbG93ZWQodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhOiBEcmFnRHJvcERhdGEgPSBnZXREcm9wRGF0YShldmVudCwgaXNFeHRlcm5hbERyYWcoKSk7XG5cbiAgICAgIGlmICghdGhpcy5pc0Ryb3BBbGxvd2VkKGRhdGEudHlwZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzaWduYWwgY3VzdG9tIGRyb3AgaGFuZGxpbmdcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IGRyb3BFZmZlY3QgPSBnZXREcm9wRWZmZWN0KGV2ZW50KTtcblxuICAgICAgc2V0RHJvcEVmZmVjdChldmVudCwgZHJvcEVmZmVjdCk7XG5cbiAgICAgIGlmIChkcm9wRWZmZWN0ID09PSAnbm9uZScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkcm9wSW5kZXggPSB0aGlzLmdldFBsYWNlaG9sZGVySW5kZXgoKTtcblxuICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgcGxhY2Vob2xkZXIgaXMgbm90IHByZXNlbnQgaW4gdGhlIERPTSBidXQgaXQgc2hvdWxkIGJlIHRoZXJlXG4gICAgICAvLyB3ZSBkb24ndCBhbGxvdy9lbWl0IHRoZSBkcm9wIGV2ZW50IHNpbmNlIGl0IGJyZWFrcyB0aGUgY29udHJhY3RcbiAgICAgIC8vIHNlZW1zIHRvIG9ubHkgaGFwcGVuIGlmIGRyYWcgYW5kIGRyb3AgaXMgZXhlY3V0ZWQgZmFzdGVyIHRoYW4gdGhlIERPTSB1cGRhdGVzXG4gICAgICBpZiAoZHJvcEluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZG5kRHJvcC5lbWl0KHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICBkcm9wRWZmZWN0OiBkcm9wRWZmZWN0LFxuICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsRHJhZygpLFxuICAgICAgICBkYXRhOiBkYXRhLmRhdGEsXG4gICAgICAgIGluZGV4OiBkcm9wSW5kZXgsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICB9KTtcblxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuY2xlYW51cERyYWdvdmVyU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICBvbkRyYWdMZWF2ZShldmVudDogRG5kRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gY2hlY2sgaWYgc3RpbGwgaW5zaWRlIHRoaXMgZHJvcHpvbmUgYW5kIG5vdCB5ZXQgaGFuZGxlZCBieSBhbm90aGVyIGRyb3B6b25lXG4gICAgaWYgKGV2ZW50Ll9kbmREcm9wem9uZUFjdGl2ZSA9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgZXZlbnQuX2RuZERyb3B6b25lQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2xlYW51cERyYWdvdmVyU3RhdGUoKTtcblxuICAgIC8vIGNsZWFudXAgZHJvcCBlZmZlY3Qgd2hlbiBsZWF2aW5nIGRyb3B6b25lXG4gICAgc2V0RHJvcEVmZmVjdChldmVudCwgJ25vbmUnKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZHJhZ0VudGVyRXZlbnRIYW5kbGVyOiAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZCA9IChcbiAgICBldmVudDogRHJhZ0V2ZW50XG4gICkgPT4gdGhpcy5vbkRyYWdFbnRlcihldmVudCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkcmFnT3ZlckV2ZW50SGFuZGxlcjogKGV2ZW50OiBEcmFnRXZlbnQpID0+IHZvaWQgPSAoXG4gICAgZXZlbnQ6IERyYWdFdmVudFxuICApID0+IHRoaXMub25EcmFnT3ZlcihldmVudCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkcmFnTGVhdmVFdmVudEhhbmRsZXI6IChldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkID0gKFxuICAgIGV2ZW50OiBEcmFnRXZlbnRcbiAgKSA9PiB0aGlzLm9uRHJhZ0xlYXZlKGV2ZW50KTtcblxuICBwcml2YXRlIGlzRHJvcEFsbG93ZWQodHlwZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIGRyb3B6b25lIGlzIGRpc2FibGVkIC0+IGRlbnkgaXRcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGlmIGRyYWcgZGlkIG5vdCBzdGFydCBmcm9tIG91ciBkaXJlY3RpdmVcbiAgICAvLyBhbmQgZXh0ZXJuYWwgZHJhZyBzb3VyY2VzIGFyZSBub3QgYWxsb3dlZCAtPiBkZW55IGl0XG4gICAgaWYgKGlzRXh0ZXJuYWxEcmFnKCkgJiYgIXRoaXMuZG5kQWxsb3dFeHRlcm5hbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIG5vIGZpbHRlcmluZyBieSB0eXBlcyAtPiBhbGxvdyBpdFxuICAgIGlmICghdGhpcy5kbmREcm9wem9uZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gbm8gdHlwZSBzZXQgLT4gYWxsb3cgaXRcbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmRuZERyb3B6b25lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnZG5kRHJvcHpvbmU6IGJvdW5kIHZhbHVlIHRvIFtkbmREcm9wem9uZV0gbXVzdCBiZSBhbiBhcnJheSEnXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGlmIGRyb3B6b25lIGNvbnRhaW5zIHR5cGUgLT4gYWxsb3cgaXRcbiAgICByZXR1cm4gdGhpcy5kbmREcm9wem9uZS5pbmRleE9mKHR5cGUpICE9PSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgdHJ5R2V0UGxhY2Vob2xkZXIoKTogRWxlbWVudCB8IG51bGwge1xuICAgIGlmICh0eXBlb2YgdGhpcy5kbmRQbGFjZWhvbGRlclJlZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmRuZFBsYWNlaG9sZGVyUmVmLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBFbGVtZW50O1xuICAgIH1cblxuICAgIC8vIFRPRE8gbmFzdHkgd29ya2Fyb3VuZCBuZWVkZWQgYmVjYXVzZSBpZiBuZy1jb250YWluZXIgLyB0ZW1wbGF0ZSBpcyB1c2VkIEBDb250ZW50Q2hpbGQoKSBvciBESSB3aWxsIGZhaWwgYmVjYXVzZVxuICAgIC8vIG9mIHdyb25nIGNvbnRleHQgc2VlIGFuZ3VsYXIgYnVnIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNTE3XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkbmRQbGFjZWhvbGRlclJlZl0nKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUGxhY2Vob2xkZXJGcm9tRE9NKCkge1xuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyICE9PSBudWxsICYmIHRoaXMucGxhY2Vob2xkZXIucGFyZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbmRVcGRhdGVQbGFjZWhvbGRlclBvc2l0aW9uKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgcGxhY2Vob2xkZXIgaXMgaW4gdGhlIERPTVxuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyLnBhcmVudE5vZGUgIT09IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlclxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgdGhlIHBvc2l0aW9uIGlmIHRoZSBldmVudCBvcmlnaW5hdGVzIGZyb20gYSBjaGlsZCBlbGVtZW50IG9mIHRoZSBkcm9wem9uZVxuICAgIGNvbnN0IGRpcmVjdENoaWxkID0gZ2V0RGlyZWN0Q2hpbGRFbGVtZW50KFxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBldmVudC50YXJnZXQgYXMgRWxlbWVudFxuICAgICk7XG5cbiAgICAvLyBlYXJseSBleGl0IGlmIG5vIGRpcmVjdCBjaGlsZCBvciBkaXJlY3QgY2hpbGQgaXMgcGxhY2Vob2xkZXJcbiAgICBpZiAoZGlyZWN0Q2hpbGQgPT09IG51bGwgfHwgZGlyZWN0Q2hpbGQgPT09IHRoaXMucGxhY2Vob2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvblBsYWNlaG9sZGVyQmVmb3JlRGlyZWN0Q2hpbGQgPVxuICAgICAgc2hvdWxkUG9zaXRpb25QbGFjZWhvbGRlckJlZm9yZUVsZW1lbnQoXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBkaXJlY3RDaGlsZCxcbiAgICAgICAgdGhpcy5kbmRIb3Jpem9udGFsXG4gICAgICApO1xuXG4gICAgaWYgKHBvc2l0aW9uUGxhY2Vob2xkZXJCZWZvcmVEaXJlY3RDaGlsZCkge1xuICAgICAgLy8gZG8gaW5zZXJ0IGJlZm9yZSBvbmx5IGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKGRpcmVjdENoaWxkLnByZXZpb3VzU2libGluZyAhPT0gdGhpcy5wbGFjZWhvbGRlcikge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZShcbiAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIGRpcmVjdENoaWxkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRvIGluc2VydCBhZnRlciBvbmx5IGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKGRpcmVjdENoaWxkLm5leHRTaWJsaW5nICE9PSB0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKFxuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgZGlyZWN0Q2hpbGQubmV4dFNpYmxpbmdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBsYWNlaG9sZGVySW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlbGVtZW50LmNoaWxkcmVuLCB0aGlzLnBsYWNlaG9sZGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cERyYWdvdmVyU3RhdGUoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5kbmREcmFnb3ZlckNsYXNzXG4gICAgKTtcblxuICAgIHRoaXMucmVtb3ZlUGxhY2Vob2xkZXJGcm9tRE9NKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ import { Directive, HostBinding, HostListener, inject, } from '@angular/core';
2
+ import { DndDraggableDirective } from './dnd-draggable.directive';
3
+ import * as i0 from "@angular/core";
4
+ class DndHandleDirective {
5
+ draggable = true;
6
+ dndDraggableDirective = inject(DndDraggableDirective);
7
+ ngOnInit() {
8
+ this.dndDraggableDirective.registerDragHandle(this);
9
+ }
10
+ onDragEvent(event) {
11
+ event._dndUsingHandle = true;
12
+ }
13
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndHandleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
14
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.1", type: DndHandleDirective, isStandalone: true, selector: "[dndHandle]", host: { listeners: { "dragstart": "onDragEvent($event)", "dragend": "onDragEvent($event)" }, properties: { "attr.draggable": "this.draggable" } }, ngImport: i0 });
15
+ }
16
+ export { DndHandleDirective };
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndHandleDirective, decorators: [{
18
+ type: Directive,
19
+ args: [{ selector: '[dndHandle]', standalone: true }]
20
+ }], propDecorators: { draggable: [{
21
+ type: HostBinding,
22
+ args: ['attr.draggable']
23
+ }], onDragEvent: [{
24
+ type: HostListener,
25
+ args: ['dragstart', ['$event']]
26
+ }, {
27
+ type: HostListener,
28
+ args: ['dragend', ['$event']]
29
+ }] } });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWhhbmRsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kbmQvc3JjL2xpYi9kbmQtaGFuZGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUdsRSxNQUNhLGtCQUFrQjtJQUNFLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFFaEQscUJBQXFCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFdEQsUUFBUTtRQUNOLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBSUQsV0FBVyxDQUFDLEtBQWU7UUFDekIsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDL0IsQ0FBQzt1R0FiVSxrQkFBa0I7MkZBQWxCLGtCQUFrQjs7U0FBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7OEJBRXZCLFNBQVM7c0JBQXZDLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQVU3QixXQUFXO3NCQUZWLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDcEMsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERuZERyYWdnYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vZG5kLWRyYWdnYWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRG5kRXZlbnQgfSBmcm9tICcuL2RuZC11dGlscyc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tkbmRIYW5kbGVdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIERuZEhhbmRsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kcmFnZ2FibGUnKSBkcmFnZ2FibGUgPSB0cnVlO1xuXG4gIGRuZERyYWdnYWJsZURpcmVjdGl2ZSA9IGluamVjdChEbmREcmFnZ2FibGVEaXJlY3RpdmUpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZG5kRHJhZ2dhYmxlRGlyZWN0aXZlLnJlZ2lzdGVyRHJhZ0hhbmRsZSh0aGlzKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdzdGFydCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdlbmQnLCBbJyRldmVudCddKVxuICBvbkRyYWdFdmVudChldmVudDogRG5kRXZlbnQpIHtcbiAgICBldmVudC5fZG5kVXNpbmdIYW5kbGUgPSB0cnVlO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,39 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { DndDraggableDirective, DndDragImageRefDirective, } from './dnd-draggable.directive';
3
+ import { DndDropzoneDirective, DndPlaceholderRefDirective, } from './dnd-dropzone.directive';
4
+ import { DndHandleDirective } from './dnd-handle.directive';
5
+ import * as i0 from "@angular/core";
6
+ class DndModule {
7
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: DndModule, imports: [DndDragImageRefDirective,
9
+ DndDropzoneDirective,
10
+ DndHandleDirective,
11
+ DndPlaceholderRefDirective,
12
+ DndDraggableDirective], exports: [DndDraggableDirective,
13
+ DndDropzoneDirective,
14
+ DndHandleDirective,
15
+ DndPlaceholderRefDirective,
16
+ DndDragImageRefDirective] });
17
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndModule });
18
+ }
19
+ export { DndModule };
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndModule, decorators: [{
21
+ type: NgModule,
22
+ args: [{
23
+ exports: [
24
+ DndDraggableDirective,
25
+ DndDropzoneDirective,
26
+ DndHandleDirective,
27
+ DndPlaceholderRefDirective,
28
+ DndDragImageRefDirective,
29
+ ],
30
+ imports: [
31
+ DndDragImageRefDirective,
32
+ DndDropzoneDirective,
33
+ DndHandleDirective,
34
+ DndPlaceholderRefDirective,
35
+ DndDraggableDirective,
36
+ ],
37
+ }]
38
+ }] });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2RuZC9zcmMvbGliL2RuZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUN6QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsMEJBQTBCLEdBQzNCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBRTVELE1BZ0JhLFNBQVM7dUdBQVQsU0FBUzt3R0FBVCxTQUFTLFlBUGxCLHdCQUF3QjtZQUN4QixvQkFBb0I7WUFDcEIsa0JBQWtCO1lBQ2xCLDBCQUEwQjtZQUMxQixxQkFBcUIsYUFYckIscUJBQXFCO1lBQ3JCLG9CQUFvQjtZQUNwQixrQkFBa0I7WUFDbEIsMEJBQTBCO1lBQzFCLHdCQUF3Qjt3R0FVZixTQUFTOztTQUFULFNBQVM7MkZBQVQsU0FBUztrQkFoQnJCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLHFCQUFxQjt3QkFDckIsb0JBQW9CO3dCQUNwQixrQkFBa0I7d0JBQ2xCLDBCQUEwQjt3QkFDMUIsd0JBQXdCO3FCQUN6QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1Asd0JBQXdCO3dCQUN4QixvQkFBb0I7d0JBQ3BCLGtCQUFrQjt3QkFDbEIsMEJBQTBCO3dCQUMxQixxQkFBcUI7cUJBQ3RCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERuZERyYWdnYWJsZURpcmVjdGl2ZSxcbiAgRG5kRHJhZ0ltYWdlUmVmRGlyZWN0aXZlLFxufSBmcm9tICcuL2RuZC1kcmFnZ2FibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gIERuZERyb3B6b25lRGlyZWN0aXZlLFxuICBEbmRQbGFjZWhvbGRlclJlZkRpcmVjdGl2ZSxcbn0gZnJvbSAnLi9kbmQtZHJvcHpvbmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IERuZEhhbmRsZURpcmVjdGl2ZSB9IGZyb20gJy4vZG5kLWhhbmRsZS5kaXJlY3RpdmUnO1xuXG5ATmdNb2R1bGUoe1xuICBleHBvcnRzOiBbXG4gICAgRG5kRHJhZ2dhYmxlRGlyZWN0aXZlLFxuICAgIERuZERyb3B6b25lRGlyZWN0aXZlLFxuICAgIERuZEhhbmRsZURpcmVjdGl2ZSxcbiAgICBEbmRQbGFjZWhvbGRlclJlZkRpcmVjdGl2ZSxcbiAgICBEbmREcmFnSW1hZ2VSZWZEaXJlY3RpdmUsXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBEbmREcmFnSW1hZ2VSZWZEaXJlY3RpdmUsXG4gICAgRG5kRHJvcHpvbmVEaXJlY3RpdmUsXG4gICAgRG5kSGFuZGxlRGlyZWN0aXZlLFxuICAgIERuZFBsYWNlaG9sZGVyUmVmRGlyZWN0aXZlLFxuICAgIERuZERyYWdnYWJsZURpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG5kTW9kdWxlIHt9XG4iXX0=