@fundamental-ngx/cdk 0.40.0-rc.13 → 0.40.0-rc.14
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/esm2020/utils/drag-and-drop/dnd-list/dnd-list.directive.mjs +120 -12
- package/esm2020/utils/drag-and-drop/dnd.interfaces.mjs +1 -1
- package/fesm2015/fundamental-ngx-cdk-utils.mjs +118 -10
- package/fesm2015/fundamental-ngx-cdk-utils.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-cdk-utils.mjs +118 -10
- package/fesm2020/fundamental-ngx-cdk-utils.mjs.map +1 -1
- package/fundamental-ngx-cdk-v0.40.0-rc.14.tgz +0 -0
- package/package.json +2 -2
- package/utils/drag-and-drop/dnd-list/dnd-list.directive.d.ts +39 -5
- package/utils/drag-and-drop/dnd.interfaces.d.ts +4 -0
- package/fundamental-ngx-cdk-v0.40.0-rc.13.tgz +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ContentChildren, Directive, EventEmitter, forwardRef, Input, Output, QueryList } from '@angular/core';
|
|
1
|
+
import { ContentChildren, Directive, EventEmitter, forwardRef, HostBinding, Input, Output, QueryList } from '@angular/core';
|
|
2
2
|
import { merge, Subject } from 'rxjs';
|
|
3
3
|
import { startWith, takeUntil } from 'rxjs/operators';
|
|
4
4
|
import { DND_ITEM, DND_LIST } from '../tokens';
|
|
@@ -6,12 +6,27 @@ import * as i0 from "@angular/core";
|
|
|
6
6
|
export class DndListDirective {
|
|
7
7
|
constructor() {
|
|
8
8
|
/**
|
|
9
|
-
* Defines if the
|
|
9
|
+
* Defines if the element is allowed to be dragged in 2 dimensions,
|
|
10
10
|
* When true - replace indicator will be displayed vertically
|
|
11
11
|
*/
|
|
12
12
|
this.gridMode = false;
|
|
13
|
-
/**
|
|
14
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Defines drop strategy:
|
|
15
|
+
* * `shift` mode will create line after closest drop element.
|
|
16
|
+
* * `group` mode will create replace indicator on whole closest drop element.
|
|
17
|
+
* * `auto` mode will create line after closest drop element,
|
|
18
|
+
* if dragged element coordinates are shifted for 30% from center of the closest drop element.
|
|
19
|
+
* Otherwise, it will create replace indicator on whole closest drop element.
|
|
20
|
+
*
|
|
21
|
+
* `shift` mode is the default.
|
|
22
|
+
*/
|
|
23
|
+
this.dropMode = 'shift';
|
|
24
|
+
/**
|
|
25
|
+
* Threshold of dragged item over another item to define which type of `dropMode` should be used.
|
|
26
|
+
*/
|
|
27
|
+
this.threshold = 0.3;
|
|
28
|
+
/** @hidden */
|
|
29
|
+
this._replaceMode = false;
|
|
15
30
|
/** Event that is thrown, when items are reordered */
|
|
16
31
|
this.itemsChange = new EventEmitter();
|
|
17
32
|
/** Event that is thrown, when the item is dropped */
|
|
@@ -26,6 +41,27 @@ export class DndListDirective {
|
|
|
26
41
|
this._onDestroy$ = new Subject();
|
|
27
42
|
/** @hidden */
|
|
28
43
|
this._draggable = true;
|
|
44
|
+
/** @hidden */
|
|
45
|
+
this._initialClass = 'fd-dnd-list';
|
|
46
|
+
/** @hidden */
|
|
47
|
+
this._linesRemoved = true;
|
|
48
|
+
/** @hidden */
|
|
49
|
+
this._indicatorsRemoved = true;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated
|
|
53
|
+
* Use `dropMode` property for better configuration.
|
|
54
|
+
*
|
|
55
|
+
* @description
|
|
56
|
+
* When enabled, replace indicator will appear on whole element, instead of horizontal/vertical line before/after element.
|
|
57
|
+
*/
|
|
58
|
+
set replaceMode(value) {
|
|
59
|
+
this._replaceMode = value;
|
|
60
|
+
this.dropMode = value ? 'group' : 'shift';
|
|
61
|
+
this._detectedDropMode = this.dropMode;
|
|
62
|
+
}
|
|
63
|
+
get replaceMode() {
|
|
64
|
+
return this._replaceMode;
|
|
29
65
|
}
|
|
30
66
|
/** Defines if drag and drop feature should be enabled for list items */
|
|
31
67
|
set draggable(draggable) {
|
|
@@ -60,8 +96,11 @@ export class DndListDirective {
|
|
|
60
96
|
if (!closestItem) {
|
|
61
97
|
closestItemIndex = null;
|
|
62
98
|
}
|
|
63
|
-
/** If the closest element is different
|
|
64
|
-
if ((closestItemIndex || closestItemIndex === 0) &&
|
|
99
|
+
/** If the closest element is different from the old one, new one is picked. It prevents from performance issues */
|
|
100
|
+
if ((closestItemIndex || closestItemIndex === 0) &&
|
|
101
|
+
(closestItemIndex !== this._closestItemIndex || this.dropMode === 'auto')) {
|
|
102
|
+
this._removeAllLines();
|
|
103
|
+
this._removeAllReplaceIndicators();
|
|
65
104
|
this._closestItemIndex = closestItemIndex;
|
|
66
105
|
this._closestItemPosition = this._elementsCoordinates[closestItemIndex].position;
|
|
67
106
|
// If closest item index is same as dragged item, just remove indicators
|
|
@@ -71,18 +110,21 @@ export class DndListDirective {
|
|
|
71
110
|
return;
|
|
72
111
|
}
|
|
73
112
|
/** Generating line, that shows where the element will be placed, on drop */
|
|
74
|
-
if (this.
|
|
113
|
+
if (this.dropMode === 'group') {
|
|
75
114
|
this._createReplaceIndicator(this._closestItemIndex);
|
|
76
115
|
}
|
|
77
|
-
else {
|
|
116
|
+
else if (this.dropMode === 'shift') {
|
|
78
117
|
this._createLine(this._closestItemIndex, this._closestItemPosition);
|
|
79
118
|
}
|
|
119
|
+
else {
|
|
120
|
+
this._selectDropModeIndicator(draggedItemIndex, closestItem, closestItemIndex);
|
|
121
|
+
}
|
|
80
122
|
}
|
|
81
123
|
}
|
|
82
124
|
/** Method called, when element is started to be dragged */
|
|
83
125
|
dragStart(index) {
|
|
84
126
|
const draggedItemElement = this._dndItemReference[index].elementRef;
|
|
85
|
-
/** Counting all
|
|
127
|
+
/** Counting all the element's chords */
|
|
86
128
|
this._elementsCoordinates = this._dndItemReference.map((item) => item.getElementCoordinates(this._isBefore(draggedItemElement, item.elementRef), this.gridMode));
|
|
87
129
|
}
|
|
88
130
|
/** Method called, when element is released */
|
|
@@ -109,7 +151,9 @@ export class DndListDirective {
|
|
|
109
151
|
this.itemDropped.emit({
|
|
110
152
|
replacedItemIndex,
|
|
111
153
|
draggedItemIndex,
|
|
112
|
-
items
|
|
154
|
+
items,
|
|
155
|
+
insertAt: this._closestItemPosition,
|
|
156
|
+
mode: this.dropMode !== 'auto' ? this.dropMode : this._detectedDropMode
|
|
113
157
|
});
|
|
114
158
|
this._removeAllLines();
|
|
115
159
|
this._removeAllReplaceIndicators();
|
|
@@ -120,21 +164,54 @@ export class DndListDirective {
|
|
|
120
164
|
}
|
|
121
165
|
}
|
|
122
166
|
/** @hidden */
|
|
167
|
+
_selectDropModeIndicator(draggedItemIndex, closestItem, closestItemIndex) {
|
|
168
|
+
if (!closestItem || !this._dndItemReference[draggedItemIndex]) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
let newDetectedDropMode;
|
|
172
|
+
const draggedElmCoords = this._dndItemReference[draggedItemIndex].elementRef.nativeElement.getBoundingClientRect();
|
|
173
|
+
const closestItemBoundaries = getElementBoundaries(closestItem, this.threshold);
|
|
174
|
+
const draggedItemStartCoords = getElementStartCoords(draggedElmCoords, closestItem.position);
|
|
175
|
+
if (_between(draggedItemStartCoords.x, closestItemBoundaries.x.start, closestItemBoundaries.x.end) &&
|
|
176
|
+
_between(draggedItemStartCoords.y, closestItemBoundaries.y.start, closestItemBoundaries.y.end)) {
|
|
177
|
+
newDetectedDropMode = 'group';
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
newDetectedDropMode = 'shift';
|
|
181
|
+
}
|
|
182
|
+
if (newDetectedDropMode === this._detectedDropMode && (!this._linesRemoved || !this._indicatorsRemoved)) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
this._detectedDropMode = newDetectedDropMode;
|
|
186
|
+
if (this._detectedDropMode === 'shift') {
|
|
187
|
+
this._createLine(closestItemIndex, this._elementsCoordinates[closestItemIndex].position);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
this._createReplaceIndicator(closestItemIndex);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/** @hidden */
|
|
123
194
|
_removeAllLines() {
|
|
195
|
+
this._linesRemoved = true;
|
|
124
196
|
this.dndItems.forEach((item) => item.removeLine());
|
|
125
197
|
}
|
|
126
198
|
/** @hidden */
|
|
127
199
|
_removeAllReplaceIndicators() {
|
|
200
|
+
this._indicatorsRemoved = true;
|
|
128
201
|
this.dndItems.forEach((item) => item.removeReplaceIndicator());
|
|
129
202
|
}
|
|
130
203
|
/** @hidden */
|
|
131
204
|
_createLine(closestItemIndex, linkPosition) {
|
|
132
205
|
this._removeAllLines();
|
|
206
|
+
this._removeAllReplaceIndicators();
|
|
207
|
+
this._linesRemoved = false;
|
|
133
208
|
this._dndItemReference[closestItemIndex].createLine(linkPosition, this.gridMode);
|
|
134
209
|
}
|
|
135
210
|
/** @hidden */
|
|
136
211
|
_createReplaceIndicator(closestItemIndex) {
|
|
212
|
+
this._removeAllLines();
|
|
137
213
|
this._removeAllReplaceIndicators();
|
|
214
|
+
this._indicatorsRemoved = false;
|
|
138
215
|
this._dndItemReference[closestItemIndex].createReplaceIndicator();
|
|
139
216
|
}
|
|
140
217
|
/** @hidden */
|
|
@@ -183,7 +260,7 @@ export class DndListDirective {
|
|
|
183
260
|
}
|
|
184
261
|
}
|
|
185
262
|
DndListDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DndListDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
186
|
-
DndListDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.1", type: DndListDirective, selector: "[fdkDndList], [fd-dnd-list]", inputs: { gridMode: "gridMode", replaceMode: "replaceMode", items: "items", draggable: "draggable" }, outputs: { itemsChange: "itemsChange", itemDropped: "itemDropped" }, providers: [{ provide: DND_LIST, useExisting: forwardRef(() => DndListDirective) }], queries: [{ propertyName: "dndItems", predicate: DND_ITEM }], ngImport: i0 });
|
|
263
|
+
DndListDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.1", type: DndListDirective, selector: "[fdkDndList], [fd-dnd-list]", inputs: { gridMode: "gridMode", dropMode: "dropMode", threshold: "threshold", replaceMode: "replaceMode", items: "items", draggable: "draggable" }, outputs: { itemsChange: "itemsChange", itemDropped: "itemDropped" }, host: { properties: { "class": "this._initialClass" } }, providers: [{ provide: DND_LIST, useExisting: forwardRef(() => DndListDirective) }], queries: [{ propertyName: "dndItems", predicate: DND_ITEM }], ngImport: i0 });
|
|
187
264
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DndListDirective, decorators: [{
|
|
188
265
|
type: Directive,
|
|
189
266
|
args: [{
|
|
@@ -192,6 +269,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
|
|
|
192
269
|
}]
|
|
193
270
|
}], propDecorators: { gridMode: [{
|
|
194
271
|
type: Input
|
|
272
|
+
}], dropMode: [{
|
|
273
|
+
type: Input
|
|
274
|
+
}], threshold: [{
|
|
275
|
+
type: Input
|
|
195
276
|
}], replaceMode: [{
|
|
196
277
|
type: Input
|
|
197
278
|
}], items: [{
|
|
@@ -205,6 +286,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
|
|
|
205
286
|
}], dndItems: [{
|
|
206
287
|
type: ContentChildren,
|
|
207
288
|
args: [DND_ITEM]
|
|
289
|
+
}], _initialClass: [{
|
|
290
|
+
type: HostBinding,
|
|
291
|
+
args: ['class']
|
|
208
292
|
}] } });
|
|
209
293
|
function _isMouseOnElement(element, mousePosition) {
|
|
210
294
|
const startX = element.x;
|
|
@@ -216,4 +300,28 @@ function _isMouseOnElement(element, mousePosition) {
|
|
|
216
300
|
function _between(x, min, max) {
|
|
217
301
|
return x >= min && x <= max;
|
|
218
302
|
}
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWxpc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi91dGlscy9kcmFnLWFuZC1kcm9wL2RuZC1saXN0L2RuZC1saXN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsZUFBZSxFQUNmLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBTS9DLE1BQU0sT0FBTyxnQkFBZ0I7SUFKN0I7UUFLSTs7O1dBR0c7UUFFSCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLDZIQUE2SDtRQUU3SCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQWFwQixxREFBcUQ7UUFFNUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBRXBELHFEQUFxRDtRQUU1QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBUzFELGNBQWM7UUFDTixzQkFBaUIsR0FBa0IsSUFBSSxDQUFDO1FBRWhELGNBQWM7UUFDTix5QkFBb0IsR0FBOEIsSUFBSSxDQUFDO1FBRS9ELGtGQUFrRjtRQUNqRSxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVqRCxjQUFjO1FBQ0csZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBS25ELGNBQWM7UUFDTixlQUFVLEdBQUcsSUFBSSxDQUFDO0tBK0s3QjtJQXJORyx3RUFBd0U7SUFDeEUsSUFDSSxTQUFTLENBQUMs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QUFROztBQXVNN0IsU0FBUyxpQkFBaUIsQ0FBQyxPQUFxQixFQUFFLGFBQThCO0lBQzVFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBRXZDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBRXhDLE9BQU8sUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5RixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBUyxFQUFFLEdBQVcsRUFBRSxHQUFXO0lBQ2pELE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWxlbWVudENob3JkLCBGZERyb3BFdmVudCwgTGlua1Bvc2l0aW9uLCBFbGVtZW50UG9zaXRpb24sIERuZEl0ZW0gfSBmcm9tICcuLi9kbmQuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBETkRfSVRFTSwgRE5EX0xJU1QgfSBmcm9tICcuLi90b2tlbnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tmZGtEbmRMaXN0XSwgW2ZkLWRuZC1saXN0XScsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBETkRfTElTVCwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRG5kTGlzdERpcmVjdGl2ZSkgfV1cbn0pXG5leHBvcnQgY2xhc3MgRG5kTGlzdERpcmVjdGl2ZTxUPiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBpZiB0aGUgdGhlIGVsZW1lbnQgaXMgYWxsb3dlZCB0byBiZSBkcmFnZ2VkIGluIDIgZGltZW5zaW9ucyxcbiAgICAgKiBXaGVuIHRydWUgLSByZXBsYWNlIGluZGljYXRvciB3aWxsIGJlIGRpc3BsYXllZCB2ZXJ0aWNhbGx5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBncmlkTW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZW4gZW5hYmxlZCwgcmVwbGFjZSBpbmRpY2F0b3Igd2lsbCBhcHBlYXIgb24gd2hvbGUgZWxlbWVudCwgaW5zdGVhZCBvZiBob3Jpem9udGFsL3ZlcnRpY2FsIGxpbmUgYmVmb3JlL2FmdGVyIGVsZW1lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlcGxhY2VNb2RlID0gZmFsc2U7XG5cbiAgICAvKiogQXJyYXkgb2YgaXRlbXMsIHRoYXQgd2lsbCBiZSBzb3J0ZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1zOiBBcnJheTxUPjtcblxuICAgIC8qKiBEZWZpbmVzIGlmIGRyYWcgYW5kIGRyb3AgZmVhdHVyZSBzaG91bGQgYmUgZW5hYmxlZCBmb3IgbGlzdCBpdGVtcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRyYWdnYWJsZShkcmFnZ2FibGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlID0gZHJhZ2dhYmxlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEcmFnZ2FibGVTdGF0ZShkcmFnZ2FibGUpO1xuICAgIH1cblxuICAgIC8qKiBFdmVudCB0aGF0IGlzIHRocm93biwgd2hlbiBpdGVtcyBhcmUgcmVvcmRlcmVkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgaXRlbXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IHRoYXQgaXMgdGhyb3duLCB3aGVuIHRoZSBpdGVtIGlzIGRyb3BwZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpdGVtRHJvcHBlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmREcm9wRXZlbnQ8VD4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oRE5EX0lURU0pXG4gICAgZG5kSXRlbXM6IFF1ZXJ5TGlzdDxEbmRJdGVtPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZWxlbWVudHNDb29yZGluYXRlczogRWxlbWVudENob3JkW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Nsb3Nlc3RJdGVtSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jbG9zZXN0SXRlbVBvc2l0aW9uOiAnYmVmb3JlJyB8ICdhZnRlcicgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGN1cnJlbnQgZGF0YSBzdHJlYW0gKGZvciB1bnN1YnNjcmliaW5nKSAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZWZyZXNoJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gICovXG4gICAgcHJpdmF0ZSBfZG5kSXRlbVJlZmVyZW5jZTogRG5kSXRlbVtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnZ2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZURyYWdnYWJsZVN0YXRlKHRoaXMuX2RyYWdnYWJsZSk7XG4gICAgICAgIHRoaXMuZG5kSXRlbXMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSwgc3RhcnRXaXRoKDApKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fcmVmcmVzaFF1ZXJ5TGlzdCgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgY2FsbGVkLCB3aGVuIHRoZSBpdGVtIGlzIGJlaW5nIG1vdmVkIGJ5IDEgcHggKi9cbiAgICBvbk1vdmUobW91c2VQb3NpdGlvbjogRWxlbWVudFBvc2l0aW9uLCBkcmFnZ2VkSXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLyoqIFRlbXBvcmFyeSBvYmplY3QsIHRvIHN0b3JlIGxvd2VzdCBkaXN0YW5jZSB2YWx1ZXMgKi9cbiAgICAgICAgbGV0IGNsb3Nlc3RJdGVtSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIGNvbnN0IGNsb3Nlc3RJdGVtID0gdGhpcy5fZWxlbWVudHNDb29yZGluYXRlcy5maW5kKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgLyoqIENoZWNrIGlmIGVsZW1lbnQgY2FuIGJlIHJlcGxhY2VkICovXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQuc3RpY2tUb1Bvc2l0aW9uICYmIGNsb3Nlc3RJdGVtSW5kZXggIT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNNb3VzZU9uRWxlbWVudCA9IF9pc01vdXNlT25FbGVtZW50KGVsZW1lbnQsIG1vdXNlUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIGlmIChpc01vdXNlT25FbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RJdGVtSW5kZXggPSBpbmRleDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghY2xvc2VzdEl0ZW0pIHtcbiAgICAgICAgICAgIGNsb3Nlc3RJdGVtSW5kZXggPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIElmIHRoZSBjbG9zZXN0IGVsZW1lbnQgaXMgZGlmZmVyZW50IHRoYW4gdGhlIG9sZCBvbmUsIG5ldyBvbmUgaXMgcGlja2VkLiBJdCBwcmV2ZW50cyBmcm9tIHBlcmZvcm1hbmNlIGlzc3VlcyAqL1xuICAgICAgICBpZiAoKGNsb3Nlc3RJdGVtSW5kZXggfHwgY2xvc2VzdEl0ZW1JbmRleCA9PT0gMCkgJiYgY2xvc2VzdEl0ZW1JbmRleCAhPT0gdGhpcy5fY2xvc2VzdEl0ZW1JbmRleCkge1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VzdEl0ZW1JbmRleCA9IGNsb3Nlc3RJdGVtSW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZXN0SXRlbVBvc2l0aW9uID0gdGhpcy5fZWxlbWVudHNDb29yZGluYXRlc1tjbG9zZXN0SXRlbUluZGV4XS5wb3NpdGlvbjtcbiAgICAgICAgICAgIC8vIElmIGNsb3Nlc3QgaXRlbSBpbmRleCBpcyBzYW1lIGFzIGRyYWdnZWQgaXRlbSwganVzdCByZW1vdmUgaW5kaWNhdG9yc1xuICAgICAgICAgICAgaWYgKGNsb3Nlc3RJdGVtSW5kZXggPT09IGRyYWdnZWRJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxMaW5lcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFJlcGxhY2VJbmRpY2F0b3JzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqIEdlbmVyYXRpbmcgbGluZSwgdGhhdCBzaG93cyB3aGVyZSB0aGUgZWxlbWVudCB3aWxsIGJlIHBsYWNlZCwgb24gZHJvcCAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucmVwbGFjZU1vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVSZXBsYWNlSW5kaWNhdG9yKHRoaXMuX2Nsb3Nlc3RJdGVtSW5kZXgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVMaW5lKHRoaXMuX2Nsb3Nlc3RJdGVtSW5kZXgsIHRoaXMuX2Nsb3Nlc3RJdGVtUG9zaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBjYWxsZWQsIHdoZW4gZWxlbWVudCBpcyBzdGFydGVkIHRvIGJlIGRyYWdnZWQgKi9cbiAgICBkcmFnU3RhcnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbUVsZW1lbnQgPSB0aGlzLl9kbmRJdGVtUmVmZXJlbmNlW2luZGV4XS5lbGVtZW50UmVmO1xuICAgICAgICAvKiogQ291bnRpbmcgYWxsIG9mIHRoZSBlbGVtZW50cydzIGNob3JkcyAqL1xuICAgICAgICB0aGlzLl9lbGVtZW50c0Nvb3JkaW5hdGVzID0gdGhpcy5fZG5kSXRlbVJlZmVyZW5jZS5tYXAoKGl0ZW06IERuZEl0ZW0pID0+XG4gICAgICAgICAgICBpdGVtLmdldEVsZW1lbnRDb29yZGluYXRlcyh0aGlzLl9pc0JlZm9yZShkcmFnZ2VkSXRlbUVsZW1lbnQsIGl0ZW0uZWxlbWVudFJlZiksIHRoaXMuZ3JpZE1vZGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBjYWxsZWQsIHdoZW4gZWxlbWVudCBpcyByZWxlYXNlZCAqL1xuICAgIGRyYWdFbmQoZHJhZ2dlZEl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcy5zbGljZSgpO1xuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW1JbmRleCA9IHRoaXMuX2Nsb3Nlc3RJdGVtSW5kZXg7XG4gICAgICAgIGNvbnN0IGRyYWdnZWRJdGVtID0gaXRlbXNbZHJhZ2dlZEl0ZW1JbmRleF07XG5cbiAgICAgICAgaWYgKHJlcGxhY2VkSXRlbUluZGV4IHx8IHJlcGxhY2VkSXRlbUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoZHJhZ2dlZEl0ZW1JbmRleCAhPT0gcmVwbGFjZWRJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZHJhZ2dlZEl0ZW1JbmRleCA8IHJlcGxhY2VkSXRlbUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBkcmFnZ2VkSXRlbUluZGV4OyBpIDwgcmVwbGFjZWRJdGVtSW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbaV0gPSBpdGVtc1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZHJhZ2dlZEl0ZW1JbmRleDsgaSA+IHJlcGxhY2VkSXRlbUluZGV4OyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zW2ldID0gaXRlbXNbaSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqIFJlcGxhY2luZyBpdGVtcyAqL1xuICAgICAgICAgICAgICAgIGl0ZW1zW3JlcGxhY2VkSXRlbUluZGV4XSA9IGRyYWdnZWRJdGVtO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pdGVtRHJvcHBlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICByZXBsYWNlZEl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICBkcmFnZ2VkSXRlbUluZGV4LFxuICAgICAgICAgICAgICAgIGl0ZW1zXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsTGluZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFJlcGxhY2VJbmRpY2F0b3JzKCk7XG5cbiAgICAgICAgICAgIC8qKiBSZXNldCAqL1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudHNDb29yZGluYXRlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VzdEl0ZW1JbmRleCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZXN0SXRlbVBvc2l0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlQWxsTGluZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG5kSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbS5yZW1vdmVMaW5lKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlQWxsUmVwbGFjZUluZGljYXRvcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG5kSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbS5yZW1vdmVSZXBsYWNlSW5kaWNhdG9yKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlTGluZShjbG9zZXN0SXRlbUluZGV4OiBudW1iZXIsIGxpbmtQb3NpdGlvbjogTGlua1Bvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUFsbExpbmVzKCk7XG4gICAgICAgIHRoaXMuX2RuZEl0ZW1SZWZlcmVuY2VbY2xvc2VzdEl0ZW1JbmRleF0uY3JlYXRlTGluZShsaW5rUG9zaXRpb24sIHRoaXMuZ3JpZE1vZGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlUmVwbGFjZUluZGljYXRvcihjbG9zZXN0SXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQWxsUmVwbGFjZUluZGljYXRvcnMoKTtcbiAgICAgICAgdGhpcy5fZG5kSXRlbVJlZmVyZW5jZVtjbG9zZXN0SXRlbUluZGV4XS5jcmVhdGVSZXBsYWNlSW5kaWNhdG9yKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoUXVlcnlMaXN0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWZyZXNoJCA9IG1lcmdlKHRoaXMuX3JlZnJlc2gkLCB0aGlzLl9vbkRlc3Ryb3kkKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaCQubmV4dCgpO1xuXG4gICAgICAgIHRoaXMuX2RuZEl0ZW1SZWZlcmVuY2UgPSB0aGlzLmRuZEl0ZW1zLnRvQXJyYXkoKTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VEcmFnZ2FibGVTdGF0ZSh0aGlzLl9kcmFnZ2FibGUpO1xuXG4gICAgICAgIHRoaXMuZG5kSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGl0ZW0ubW92ZWQucGlwZSh0YWtlVW50aWwocmVmcmVzaCQpKS5zdWJzY3JpYmUoKHBvc2l0aW9uOiBFbGVtZW50UG9zaXRpb24pID0+IHRoaXMub25Nb3ZlKHBvc2l0aW9uLCBpbmRleCkpO1xuICAgICAgICAgICAgaXRlbS5zdGFydGVkLnBpcGUodGFrZVVudGlsKHJlZnJlc2gkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuZHJhZ1N0YXJ0KGluZGV4KSk7XG4gICAgICAgICAgICBpdGVtLnJlbGVhc2VkLnBpcGUodGFrZVVudGlsKHJlZnJlc2gkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuZHJhZ0VuZChpbmRleCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQGhpZGRlblxuICAgICAqIFJldHVybiBpbmZvcm1hdGlvbiBpZiBlbGVtZW50IGlzIHBsYWNlZCBiZWZvcmUgdGhlIGRyYWdnZWQgZWxlbWVudFxuICAgICAqL1xuICAgIHByaXZhdGUgX2lzQmVmb3JlKGRyYWdnZWRFbGVtZW50OiBFbGVtZW50UmVmLCB0YXJnZXRFbGVtZW50OiBFbGVtZW50UmVmKTogYm9vbGVhbiB7XG4gICAgICAgIC8qKiBTb21ldGltZXMgdGhlIGVsZW1lbnQgYXJlIG5vdCBzdHJhaWdodCBpbiBvbmUgY29sdW1uLCB0aGF0J3Mgd2h5IG9mZnNldCBpcyBuZWVkZWQgKi9cbiAgICAgICAgY29uc3QgVkVSVElDQUxfT0ZGU0VUID0gMjA7XG5cbiAgICAgICAgLyoqIERpc3RhbmNlcyBmcm9tIHRoZSB0b3Agb2Ygc2NyZWVuICovXG4gICAgICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50Qm91bmQgPSA8RE9NUmVjdD5kcmFnZ2VkRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50Qm91bmQgPSA8RE9NUmVjdD50YXJnZXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKGRyYWdnZWRFbGVtZW50Qm91bmQudG9wIC0gdGFyZ2V0RWxlbWVudEJvdW5kLnRvcCA+IFZFUlRJQ0FMX09GRlNFVCkge1xuICAgICAgICAgICAgLyoqIElmIGVsZW1lbnQgaXMgaGlnaGVyIHRoYW4gdGhlIGRyYWdnZWQgZWxlbWVudCwgaXQncyBmb3Igc3VyZSBiZWZvcmUgKi9cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldEVsZW1lbnRCb3VuZC50b3AgLSBkcmFnZ2VkRWxlbWVudEJvdW5kLnRvcCA+IFZFUlRJQ0FMX09GRlNFVCkge1xuICAgICAgICAgICAgLyoqIElmIGVsZW1lbnQgaXMgbG93ZXIgdGhhbiB0aGUgZHJhZ2dlZCBlbGVtZW50LCBpdCdzIGZvciBzdXJlIGFmdGVyICovXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiogSWYgZWxlbWVudHMgYXJlIGluIHNhbWUgbGV2ZWwsIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIGRlY2lkZXMgaWYgaXQncyBiZWZvcmUvYWZ0ZXIgKi9cbiAgICAgICAgICAgIHJldHVybiBkcmFnZ2VkRWxlbWVudEJvdW5kLmxlZnQgLSB0YXJnZXRFbGVtZW50Qm91bmQubGVmdCA+IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoYW5nZURyYWdnYWJsZVN0YXRlKGRyYWdnYWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kbmRJdGVtcykge1xuICAgICAgICAgICAgdGhpcy5kbmRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbS5saXN0RHJhZ2dhYmxlID0gZHJhZ2dhYmxlO1xuICAgICAgICAgICAgICAgIGl0ZW0uY2hhbmdlQ0RLRHJhZ1N0YXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gX2lzTW91c2VPbkVsZW1lbnQoZWxlbWVudDogRWxlbWVudENob3JkLCBtb3VzZVBvc2l0aW9uOiBFbGVtZW50UG9zaXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGFydFggPSBlbGVtZW50Lng7XG4gICAgY29uc3QgZW5kWCA9IGVsZW1lbnQueCArIGVsZW1lbnQud2lkdGg7XG5cbiAgICBjb25zdCBzdGFydFkgPSBlbGVtZW50Lnk7XG4gICAgY29uc3QgZW5kWSA9IGVsZW1lbnQueSArIGVsZW1lbnQuaGVpZ2h0O1xuXG4gICAgcmV0dXJuIF9iZXR3ZWVuKG1vdXNlUG9zaXRpb24ueCwgc3RhcnRYLCBlbmRYKSAmJiBfYmV0d2Vlbihtb3VzZVBvc2l0aW9uLnksIHN0YXJ0WSwgZW5kWSk7XG59XG5cbmZ1bmN0aW9uIF9iZXR3ZWVuKHg6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHggPj0gbWluICYmIHggPD0gbWF4O1xufVxuIl19
|
|
303
|
+
function getElementStartCoords(rect, position) {
|
|
304
|
+
return {
|
|
305
|
+
x: position === 'after' ? rect.x + rect.width : rect.x,
|
|
306
|
+
y: position === 'after' ? rect.y + rect.height : rect.y
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
function getElementBoundaries(coordinates, threshold) {
|
|
310
|
+
const widthOffset = coordinates.width * (coordinates.position === 'after' ? 1 : -1);
|
|
311
|
+
const heightOffset = coordinates.height * (coordinates.position === 'after' ? 1 : -1);
|
|
312
|
+
const xStart = coordinates.position === 'after' ? coordinates.x : coordinates.x + coordinates.width;
|
|
313
|
+
const xEnd = xStart + widthOffset + (widthOffset / 2) * threshold;
|
|
314
|
+
const yStart = coordinates.position === 'after' ? coordinates.y : coordinates.y + coordinates.height;
|
|
315
|
+
const yEnd = yStart + heightOffset + (heightOffset / 2) * threshold;
|
|
316
|
+
return {
|
|
317
|
+
x: {
|
|
318
|
+
start: xStart > xEnd ? xEnd : xStart,
|
|
319
|
+
end: xStart > xEnd ? xStart : xEnd
|
|
320
|
+
},
|
|
321
|
+
y: {
|
|
322
|
+
start: yStart > yEnd ? yEnd : yStart,
|
|
323
|
+
end: yStart > yEnd ? yStart : yEnd
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWxpc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi91dGlscy9kcmFnLWFuZC1kcm9wL2RuZC1saXN0L2RuZC1saXN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsZUFBZSxFQUNmLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQU0vQyxNQUFNLE9BQU8sZ0JBQWdCO0lBSjdCO1FBS0k7OztXQUdHO1FBRUgsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQjs7Ozs7Ozs7O1dBU0c7UUFFSCxhQUFRLEdBQWtCLE9BQU8sQ0FBQztRQUVsQzs7V0FFRztRQUVILGNBQVMsR0FBRyxHQUFHLENBQUM7UUFvQmhCLGNBQWM7UUFDTixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQWE3QixxREFBcUQ7UUFFNUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBRXBELHFEQUFxRDtRQUU1QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBUzFELGNBQWM7UUFDTixzQkFBaUIsR0FBa0IsSUFBSSxDQUFDO1FBRWhELGNBQWM7UUFDTix5QkFBb0IsR0FBOEIsSUFBSSxDQUFDO1FBRS9ELGtGQUFrRjtRQUNqRSxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVqRCxjQUFjO1FBQ0csZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBS25ELGNBQWM7UUFDTixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRTFCLGNBQWM7UUFFRyxrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUsvQyxjQUFjO1FBQ04sa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFFN0IsY0FBYztRQUNOLHVCQUFrQixHQUFHLElBQUksQ0FBQztLQXFPckM7SUFqVEc7Ozs7OztPQU1HO0lBQ0gsSUFDSSxXQUFXLENBQUMsS0FBYztRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDMUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBU0Qsd0VBQXdFO0lBQ3hFLElBQ0ksU0FBUyxDQUFDLFNBQWtCO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBZ0RELGNBQWM7SUFDZCxrQkFBa0I7UUFDZCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ3BILENBQUM7SUFFRCxjQUFjO0lBQ2QsV0FBVztRQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsMERBQTBEO0lBQzFELE1BQU0sQ0FBQyxhQUE4QixFQUFFLGdCQUF3QjtRQUMzRCx3REFBd0Q7UUFDeEQsSUFBSSxnQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBRTNDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbEUsdUNBQXVDO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxJQUFJLGdCQUFnQixLQUFLLEtBQUssRUFBRTtnQkFDeEQsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ25FLElBQUksZ0JBQWdCLEVBQUU7b0JBQ2xCLGdCQUFnQixHQUFHLEtBQUssQ0FBQztvQkFFekIsT0FBTyxJQUFJLENBQUM7aUJBQ2Y7YUFDSjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNkLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUMzQjtRQUVELG1IQUFtSDtRQUNuSCxJQUNJLENBQUMsZ0JBQWdCLElBQUksZ0JBQWdCLEtBQUssQ0FBQyxDQUFDO1lBQzVDLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLEVBQzNFO1lBQ0UsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztZQUMxQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ2pGLHdFQUF3RTtZQUN4RSxJQUFJLGdCQUFnQixLQUFLLGdCQUFnQixFQUFFO2dCQUN2QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO2dCQUNuQyxPQUFPO2FBQ1Y7WUFDRCw0RUFBNEU7WUFDNUUsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRTtnQkFDM0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3hEO2lCQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQ3ZFO2lCQUFNO2dCQUNILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzthQUNsRjtTQUNKO0lBQ0wsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxTQUFTLENBQUMsS0FBYTtRQUNuQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDcEUsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FDckUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDakcsQ0FBQztJQUNOLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsT0FBTyxDQUFDLGdCQUF3QjtRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ2pELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTVDLElBQUksaUJBQWlCLElBQUksaUJBQWlCLEtBQUssQ0FBQyxFQUFFO1lBQzlDLElBQUksZ0JBQWdCLEtBQUssaUJBQWlCLEVBQUU7Z0JBQ3hDLElBQUksZ0JBQWdCLEdBQUcsaUJBQWlCLEVBQUU7b0JBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLGlCQUFpQixFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN2RCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDM0I7aUJBQ0o7cUJBQU07b0JBQ0gsS0FBSyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3ZELEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUMzQjtpQkFDSjtnQkFFRCxzQkFBc0I7Z0JBQ3RCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFdBQVcsQ0FBQztnQkFFdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEM7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDbEIsaUJBQWlCO2dCQUNqQixnQkFBZ0I7Z0JBQ2hCLEtBQUs7Z0JBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxvQkFBb0I7Z0JBQ25DLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQjthQUMxRSxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFFbkMsWUFBWTtZQUNaLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUM5QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDTix3QkFBd0IsQ0FDNUIsZ0JBQXdCLEVBQ3hCLFdBQXFDLEVBQ3JDLGdCQUF3QjtRQUV4QixJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDM0QsT0FBTztTQUNWO1FBRUQsSUFBSSxtQkFBc0MsQ0FBQztRQUMzQyxNQUFNLGdCQUFnQixHQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFOUYsTUFBTSxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sc0JBQXNCLEdBQUcscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTdGLElBQ0ksUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDOUYsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDaEc7WUFDRSxtQkFBbUIsR0FBRyxPQUFPLENBQUM7U0FDakM7YUFBTTtZQUNILG1CQUFtQixHQUFHLE9BQU8sQ0FBQztTQUNqQztRQUVELElBQUksbUJBQW1CLEtBQUssSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDckcsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDO1FBRTdDLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLE9BQU8sRUFBRTtZQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzVGO2FBQU07WUFDSCxJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNsRDtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sZUFBZTtRQUNuQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGNBQWM7SUFDTiwyQkFBMkI7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsY0FBYztJQUNOLFdBQVcsQ0FBQyxnQkFBd0IsRUFBRSxZQUEwQjtRQUNwRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELGNBQWM7SUFDTix1QkFBdUIsQ0FBQyxnQkFBd0I7UUFDcEQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQsY0FBYztJQUNOLGlCQUFpQjtRQUNyQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVqRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQXlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDNUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFNBQVMsQ0FBQyxjQUEwQixFQUFFLGFBQXlCO1FBQ25FLHdGQUF3RjtRQUN4RixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFFM0IsdUNBQXVDO1FBQ3ZDLE1BQU0sbUJBQW1CLEdBQVksY0FBYyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzFGLE1BQU0sa0JBQWtCLEdBQVksYUFBYSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRXhGLElBQUksbUJBQW1CLENBQUMsR0FBRyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxlQUFlLEVBQUU7WUFDcEUsMEVBQTBFO1lBQzFFLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7YUFBTSxJQUFJLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLEdBQUcsZUFBZSxFQUFFO1lBQzNFLHdFQUF3RTtZQUN4RSxPQUFPLEtBQUssQ0FBQztTQUNoQjthQUFNO1lBQ0gsMEZBQTBGO1lBQzFGLE9BQU8sbUJBQW1CLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7U0FDakU7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLHFCQUFxQixDQUFDLFNBQWtCO1FBQzVDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO2dCQUMvQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQzs7NkdBM1VRLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLHdVQUZkLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLG1EQXNFbEUsUUFBUTsyRkFwRWhCLGdCQUFnQjtrQkFKNUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsNkJBQTZCO29CQUN2QyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxDQUFDO2lCQUN0Rjs4QkFPRyxRQUFRO3NCQURQLEtBQUs7Z0JBY04sUUFBUTtzQkFEUCxLQUFLO2dCQU9OLFNBQVM7c0JBRFIsS0FBSztnQkFXRixXQUFXO3NCQURkLEtBQUs7Z0JBZ0JOLEtBQUs7c0JBREosS0FBSztnQkFLRixTQUFTO3NCQURaLEtBQUs7Z0JBUUcsV0FBVztzQkFEbkIsTUFBTTtnQkFLRSxXQUFXO3NCQURuQixNQUFNO2dCQUtQLFFBQVE7c0JBRFAsZUFBZTt1QkFBQyxRQUFRO2dCQTBCUixhQUFhO3NCQUQ3QixXQUFXO3VCQUFDLE9BQU87O0FBaVB4QixTQUFTLGlCQUFpQixDQUFDLE9BQXFCLEVBQUUsYUFBOEI7SUFDNUUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFFdkMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFFeEMsT0FBTyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlGLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxDQUFTLEVBQUUsR0FBVyxFQUFFLEdBQVc7SUFDakQsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDaEMsQ0FBQztBQWFELFNBQVMscUJBQXFCLENBQUMsSUFBYSxFQUFFLFFBQWtDO0lBQzVFLE9BQU87UUFDSCxDQUFDLEVBQUUsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxDQUFDLEVBQUUsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMxRCxDQUFDO0FBQ04sQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsV0FBeUIsRUFBRSxTQUFpQjtJQUN0RSxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO0lBQ3BHLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxXQUFXLEdBQUcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDckcsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLFlBQVksR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDcEUsT0FBTztRQUNILENBQUMsRUFBRTtZQUNDLEtBQUssRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDcEMsR0FBRyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUNyQztRQUNELENBQUMsRUFBRTtZQUNDLEtBQUssRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDcEMsR0FBRyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUNyQztLQUNKLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1lcmdlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVsZW1lbnRDaG9yZCwgRmREcm9wRXZlbnQsIExpbmtQb3NpdGlvbiwgRWxlbWVudFBvc2l0aW9uLCBEbmRJdGVtLCBGZERuZERyb3BUeXBlIH0gZnJvbSAnLi4vZG5kLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgRE5EX0lURU0sIERORF9MSVNUIH0gZnJvbSAnLi4vdG9rZW5zJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZmRrRG5kTGlzdF0sIFtmZC1kbmQtbGlzdF0nLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogRE5EX0xJU1QsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERuZExpc3REaXJlY3RpdmUpIH1dXG59KVxuZXhwb3J0IGNsYXNzIERuZExpc3REaXJlY3RpdmU8VD4gaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgaWYgdGhlIGVsZW1lbnQgaXMgYWxsb3dlZCB0byBiZSBkcmFnZ2VkIGluIDIgZGltZW5zaW9ucyxcbiAgICAgKiBXaGVuIHRydWUgLSByZXBsYWNlIGluZGljYXRvciB3aWxsIGJlIGRpc3BsYXllZCB2ZXJ0aWNhbGx5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBncmlkTW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBkcm9wIHN0cmF0ZWd5OlxuICAgICAqICogYHNoaWZ0YCBtb2RlIHdpbGwgY3JlYXRlIGxpbmUgYWZ0ZXIgY2xvc2VzdCBkcm9wIGVsZW1lbnQuXG4gICAgICogKiBgZ3JvdXBgIG1vZGUgd2lsbCBjcmVhdGUgcmVwbGFjZSBpbmRpY2F0b3Igb24gd2hvbGUgY2xvc2VzdCBkcm9wIGVsZW1lbnQuXG4gICAgICogKiBgYXV0b2AgbW9kZSB3aWxsIGNyZWF0ZSBsaW5lIGFmdGVyIGNsb3Nlc3QgZHJvcCBlbGVtZW50LFxuICAgICAqIGlmIGRyYWdnZWQgZWxlbWVudCBjb29yZGluYXRlcyBhcmUgc2hpZnRlZCBmb3IgMzAlIGZyb20gY2VudGVyIG9mIHRoZSBjbG9zZXN0IGRyb3AgZWxlbWVudC5cbiAgICAgKiBPdGhlcndpc2UsIGl0IHdpbGwgY3JlYXRlIHJlcGxhY2UgaW5kaWNhdG9yIG9uIHdob2xlIGNsb3Nlc3QgZHJvcCBlbGVtZW50LlxuICAgICAqXG4gICAgICogYHNoaWZ0YCBtb2RlIGlzIHRoZSBkZWZhdWx0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZHJvcE1vZGU6IEZkRG5kRHJvcFR5cGUgPSAnc2hpZnQnO1xuXG4gICAgLyoqXG4gICAgICogVGhyZXNob2xkIG9mIGRyYWdnZWQgaXRlbSBvdmVyIGFub3RoZXIgaXRlbSB0byBkZWZpbmUgd2hpY2ggdHlwZSBvZiBgZHJvcE1vZGVgIHNob3VsZCBiZSB1c2VkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGhyZXNob2xkID0gMC4zO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKiBVc2UgYGRyb3BNb2RlYCBwcm9wZXJ0eSBmb3IgYmV0dGVyIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBXaGVuIGVuYWJsZWQsIHJlcGxhY2UgaW5kaWNhdG9yIHdpbGwgYXBwZWFyIG9uIHdob2xlIGVsZW1lbnQsIGluc3RlYWQgb2YgaG9yaXpvbnRhbC92ZXJ0aWNhbCBsaW5lIGJlZm9yZS9hZnRlciBlbGVtZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJlcGxhY2VNb2RlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3JlcGxhY2VNb2RlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZHJvcE1vZGUgPSB2YWx1ZSA/ICdncm91cCcgOiAnc2hpZnQnO1xuICAgICAgICB0aGlzLl9kZXRlY3RlZERyb3BNb2RlID0gdGhpcy5kcm9wTW9kZTtcbiAgICB9XG5cbiAgICBnZXQgcmVwbGFjZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXBsYWNlTW9kZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlcGxhY2VNb2RlID0gZmFsc2U7XG5cbiAgICAvKiogQXJyYXkgb2YgaXRlbXMsIHRoYXQgd2lsbCBiZSBzb3J0ZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1zOiBBcnJheTxUPjtcblxuICAgIC8qKiBEZWZpbmVzIGlmIGRyYWcgYW5kIGRyb3AgZmVhdHVyZSBzaG91bGQgYmUgZW5hYmxlZCBmb3IgbGlzdCBpdGVtcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRyYWdnYWJsZShkcmFnZ2FibGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlID0gZHJhZ2dhYmxlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEcmFnZ2FibGVTdGF0ZShkcmFnZ2FibGUpO1xuICAgIH1cblxuICAgIC8qKiBFdmVudCB0aGF0IGlzIHRocm93biwgd2hlbiBpdGVtcyBhcmUgcmVvcmRlcmVkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgaXRlbXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IHRoYXQgaXMgdGhyb3duLCB3aGVuIHRoZSBpdGVtIGlzIGRyb3BwZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpdGVtRHJvcHBlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmREcm9wRXZlbnQ8VD4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oRE5EX0lURU0pXG4gICAgZG5kSXRlbXM6IFF1ZXJ5TGlzdDxEbmRJdGVtPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZWxlbWVudHNDb29yZGluYXRlczogRWxlbWVudENob3JkW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Nsb3Nlc3RJdGVtSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jbG9zZXN0SXRlbVBvc2l0aW9uOiAnYmVmb3JlJyB8ICdhZnRlcicgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGN1cnJlbnQgZGF0YSBzdHJlYW0gKGZvciB1bnN1YnNjcmliaW5nKSAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZWZyZXNoJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gICovXG4gICAgcHJpdmF0ZSBfZG5kSXRlbVJlZmVyZW5jZTogRG5kSXRlbVtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnZ2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pbml0aWFsQ2xhc3MgPSAnZmQtZG5kLWxpc3QnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZXRlY3RlZERyb3BNb2RlOiAnc2hpZnQnIHwgJ2dyb3VwJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGluZXNSZW1vdmVkID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5kaWNhdG9yc1JlbW92ZWQgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZURyYWdnYWJsZVN0YXRlKHRoaXMuX2RyYWdnYWJsZSk7XG4gICAgICAgIHRoaXMuZG5kSXRlbXMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSwgc3RhcnRXaXRoKDApKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fcmVmcmVzaFF1ZXJ5TGlzdCgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgY2FsbGVkLCB3aGVuIHRoZSBpdGVtIGlzIGJlaW5nIG1vdmVkIGJ5IDEgcHggKi9cbiAgICBvbk1vdmUobW91c2VQb3NpdGlvbjogRWxlbWVudFBvc2l0aW9uLCBkcmFnZ2VkSXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLyoqIFRlbXBvcmFyeSBvYmplY3QsIHRvIHN0b3JlIGxvd2VzdCBkaXN0YW5jZSB2YWx1ZXMgKi9cbiAgICAgICAgbGV0IGNsb3Nlc3RJdGVtSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIGNvbnN0IGNsb3Nlc3RJdGVtID0gdGhpcy5fZWxlbWVudHNDb29yZGluYXRlcy5maW5kKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgLyoqIENoZWNrIGlmIGVsZW1lbnQgY2FuIGJlIHJlcGxhY2VkICovXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQuc3RpY2tUb1Bvc2l0aW9uICYmIGNsb3Nlc3RJdGVtSW5kZXggIT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNNb3VzZU9uRWxlbWVudCA9IF9pc01vdXNlT25FbGVtZW50KGVsZW1lbnQsIG1vdXNlUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIGlmIChpc01vdXNlT25FbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RJdGVtSW5kZXggPSBpbmRleDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghY2xvc2VzdEl0ZW0pIHtcbiAgICAgICAgICAgIGNsb3Nlc3RJdGVtSW5kZXggPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIElmIHRoZSBjbG9zZXN0IGVsZW1lbnQgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9sZCBvbmUsIG5ldyBvbmUgaXMgcGlja2VkLiBJdCBwcmV2ZW50cyBmcm9tIHBlcmZvcm1hbmNlIGlzc3VlcyAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY2xvc2VzdEl0ZW1JbmRleCB8fCBjbG9zZXN0SXRlbUluZGV4ID09PSAwKSAmJlxuICAgICAgICAgICAgKGNsb3Nlc3RJdGVtSW5kZXggIT09IHRoaXMuX2Nsb3Nlc3RJdGVtSW5kZXggfHwgdGhpcy5kcm9wTW9kZSA9PT0gJ2F1dG8nKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbExpbmVzKCk7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxSZXBsYWNlSW5kaWNhdG9ycygpO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VzdEl0ZW1JbmRleCA9IGNsb3Nlc3RJdGVtSW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZXN0SXRlbVBvc2l0aW9uID0gdGhpcy5fZWxlbWVudHNDb29yZGluYXRlc1tjbG9zZXN0SXRlbUluZGV4XS5wb3NpdGlvbjtcbiAgICAgICAgICAgIC8vIElmIGNsb3Nlc3QgaXRlbSBpbmRleCBpcyBzYW1lIGFzIGRyYWdnZWQgaXRlbSwganVzdCByZW1vdmUgaW5kaWNhdG9yc1xuICAgICAgICAgICAgaWYgKGNsb3Nlc3RJdGVtSW5kZXggPT09IGRyYWdnZWRJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxMaW5lcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFJlcGxhY2VJbmRpY2F0b3JzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqIEdlbmVyYXRpbmcgbGluZSwgdGhhdCBzaG93cyB3aGVyZSB0aGUgZWxlbWVudCB3aWxsIGJlIHBsYWNlZCwgb24gZHJvcCAqL1xuICAgICAgICAgICAgaWYgKHRoaXMuZHJvcE1vZGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVSZXBsYWNlSW5kaWNhdG9yKHRoaXMuX2Nsb3Nlc3RJdGVtSW5kZXgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyb3BNb2RlID09PSAnc2hpZnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTGluZSh0aGlzLl9jbG9zZXN0SXRlbUluZGV4LCB0aGlzLl9jbG9zZXN0SXRlbVBvc2l0aW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0RHJvcE1vZGVJbmRpY2F0b3IoZHJhZ2dlZEl0ZW1JbmRleCwgY2xvc2VzdEl0ZW0sIGNsb3Nlc3RJdGVtSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBjYWxsZWQsIHdoZW4gZWxlbWVudCBpcyBzdGFydGVkIHRvIGJlIGRyYWdnZWQgKi9cbiAgICBkcmFnU3RhcnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbUVsZW1lbnQgPSB0aGlzLl9kbmRJdGVtUmVmZXJlbmNlW2luZGV4XS5lbGVtZW50UmVmO1xuICAgICAgICAvKiogQ291bnRpbmcgYWxsIHRoZSBlbGVtZW50J3MgY2hvcmRzICovXG4gICAgICAgIHRoaXMuX2VsZW1lbnRzQ29vcmRpbmF0ZXMgPSB0aGlzLl9kbmRJdGVtUmVmZXJlbmNlLm1hcCgoaXRlbTogRG5kSXRlbSkgPT5cbiAgICAgICAgICAgIGl0ZW0uZ2V0RWxlbWVudENvb3JkaW5hdGVzKHRoaXMuX2lzQmVmb3JlKGRyYWdnZWRJdGVtRWxlbWVudCwgaXRlbS5lbGVtZW50UmVmKSwgdGhpcy5ncmlkTW9kZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGNhbGxlZCwgd2hlbiBlbGVtZW50IGlzIHJlbGVhc2VkICovXG4gICAgZHJhZ0VuZChkcmFnZ2VkSXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKCk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VkSXRlbUluZGV4ID0gdGhpcy5fY2xvc2VzdEl0ZW1JbmRleDtcbiAgICAgICAgY29uc3QgZHJhZ2dlZEl0ZW0gPSBpdGVtc1tkcmFnZ2VkSXRlbUluZGV4XTtcblxuICAgICAgICBpZiAocmVwbGFjZWRJdGVtSW5kZXggfHwgcmVwbGFjZWRJdGVtSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIGlmIChkcmFnZ2VkSXRlbUluZGV4ICE9PSByZXBsYWNlZEl0ZW1JbmRleCkge1xuICAgICAgICAgICAgICAgIGlmIChkcmFnZ2VkSXRlbUluZGV4IDwgcmVwbGFjZWRJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGRyYWdnZWRJdGVtSW5kZXg7IGkgPCByZXBsYWNlZEl0ZW1JbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1tpXSA9IGl0ZW1zW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBkcmFnZ2VkSXRlbUluZGV4OyBpID4gcmVwbGFjZWRJdGVtSW5kZXg7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbaV0gPSBpdGVtc1tpIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKiogUmVwbGFjaW5nIGl0ZW1zICovXG4gICAgICAgICAgICAgICAgaXRlbXNbcmVwbGFjZWRJdGVtSW5kZXhdID0gZHJhZ2dlZEl0ZW07XG5cbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLml0ZW1Ecm9wcGVkLmVtaXQoe1xuICAgICAgICAgICAgICAgIHJlcGxhY2VkSXRlbUluZGV4LFxuICAgICAgICAgICAgICAgIGRyYWdnZWRJdGVtSW5kZXgsXG4gICAgICAgICAgICAgICAgaXRlbXMsXG4gICAgICAgICAgICAgICAgaW5zZXJ0QXQ6IHRoaXMuX2Nsb3Nlc3RJdGVtUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgbW9kZTogdGhpcy5kcm9wTW9kZSAhPT0gJ2F1dG8nID8gdGhpcy5kcm9wTW9kZSA6IHRoaXMuX2RldGVjdGVkRHJvcE1vZGVcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxMaW5lcygpO1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsUmVwbGFjZUluZGljYXRvcnMoKTtcblxuICAgICAgICAgICAgLyoqIFJlc2V0ICovXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50c0Nvb3JkaW5hdGVzID0gW107XG4gICAgICAgICAgICB0aGlzLl9jbG9zZXN0SXRlbUluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3Nlc3RJdGVtUG9zaXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3REcm9wTW9kZUluZGljYXRvcihcbiAgICAgICAgZHJhZ2dlZEl0ZW1JbmRleDogbnVtYmVyLFxuICAgICAgICBjbG9zZXN0SXRlbTogRWxlbWVudENob3JkIHwgdW5kZWZpbmVkLFxuICAgICAgICBjbG9zZXN0SXRlbUluZGV4OiBudW1iZXJcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjbG9zZXN0SXRlbSB8fCAhdGhpcy5fZG5kSXRlbVJlZmVyZW5jZVtkcmFnZ2VkSXRlbUluZGV4XSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5ld0RldGVjdGVkRHJvcE1vZGU6ICdzaGlmdCcgfCAnZ3JvdXAnO1xuICAgICAgICBjb25zdCBkcmFnZ2VkRWxtQ29vcmRzID1cbiAgICAgICAgICAgIHRoaXMuX2RuZEl0ZW1SZWZlcmVuY2VbZHJhZ2dlZEl0ZW1JbmRleF0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGNvbnN0IGNsb3Nlc3RJdGVtQm91bmRhcmllcyA9IGdldEVsZW1lbnRCb3VuZGFyaWVzKGNsb3Nlc3RJdGVtLCB0aGlzLnRocmVzaG9sZCk7XG4gICAgICAgIGNvbnN0IGRyYWdnZWRJdGVtU3RhcnRDb29yZHMgPSBnZXRFbGVtZW50U3RhcnRDb29yZHMoZHJhZ2dlZEVsbUNvb3JkcywgY2xvc2VzdEl0ZW0ucG9zaXRpb24pO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIF9iZXR3ZWVuKGRyYWdnZWRJdGVtU3RhcnRDb29yZHMueCwgY2xvc2VzdEl0ZW1Cb3VuZGFyaWVzLnguc3RhcnQsIGNsb3Nlc3RJdGVtQm91bmRhcmllcy54LmVuZCkgJiZcbiAgICAgICAgICAgIF9iZXR3ZWVuKGRyYWdnZWRJdGVtU3RhcnRDb29yZHMueSwgY2xvc2VzdEl0ZW1Cb3VuZGFyaWVzLnkuc3RhcnQsIGNsb3Nlc3RJdGVtQm91bmRhcmllcy55LmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBuZXdEZXRlY3RlZERyb3BNb2RlID0gJ2dyb3VwJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0RldGVjdGVkRHJvcE1vZGUgPSAnc2hpZnQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld0RldGVjdGVkRHJvcE1vZGUgPT09IHRoaXMuX2RldGVjdGVkRHJvcE1vZGUgJiYgKCF0aGlzLl9saW5lc1JlbW92ZWQgfHwgIXRoaXMuX2luZGljYXRvcnNSZW1vdmVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGV0ZWN0ZWREcm9wTW9kZSA9IG5ld0RldGVjdGVkRHJvcE1vZGU7XG5cbiAgICAgICAgaWYgKHRoaXMuX2RldGVjdGVkRHJvcE1vZGUgPT09ICdzaGlmdCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUxpbmUoY2xvc2VzdEl0ZW1JbmRleCwgdGhpcy5fZWxlbWVudHNDb29yZGluYXRlc1tjbG9zZXN0SXRlbUluZGV4XS5wb3NpdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVSZXBsYWNlSW5kaWNhdG9yKGNsb3Nlc3RJdGVtSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZW1vdmVBbGxMaW5lcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGluZXNSZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kbmRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLnJlbW92ZUxpbmUoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZW1vdmVBbGxSZXBsYWNlSW5kaWNhdG9ycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5kaWNhdG9yc1JlbW92ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmRuZEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGl0ZW0ucmVtb3ZlUmVwbGFjZUluZGljYXRvcigpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NyZWF0ZUxpbmUoY2xvc2VzdEl0ZW1JbmRleDogbnVtYmVyLCBsaW5rUG9zaXRpb246IExpbmtQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVBbGxMaW5lcygpO1xuICAgICAgICB0aGlzLl9yZW1vdmVBbGxSZXBsYWNlSW5kaWNhdG9ycygpO1xuICAgICAgICB0aGlzLl9saW5lc1JlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZG5kSXRlbVJlZmVyZW5jZVtjbG9zZXN0SXRlbUluZGV4XS5jcmVhdGVMaW5lKGxpbmtQb3NpdGlvbiwgdGhpcy5ncmlkTW9kZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jcmVhdGVSZXBsYWNlSW5kaWNhdG9yKGNsb3Nlc3RJdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVBbGxMaW5lcygpO1xuICAgICAgICB0aGlzLl9yZW1vdmVBbGxSZXBsYWNlSW5kaWNhdG9ycygpO1xuICAgICAgICB0aGlzLl9pbmRpY2F0b3JzUmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kbmRJdGVtUmVmZXJlbmNlW2Nsb3Nlc3RJdGVtSW5kZXhdLmNyZWF0ZVJlcGxhY2VJbmRpY2F0b3IoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2hRdWVyeUxpc3QoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2gkID0gbWVyZ2UodGhpcy5fcmVmcmVzaCQsIHRoaXMuX29uRGVzdHJveSQpO1xuICAgICAgICB0aGlzLl9yZWZyZXNoJC5uZXh0KCk7XG5cbiAgICAgICAgdGhpcy5fZG5kSXRlbVJlZmVyZW5jZSA9IHRoaXMuZG5kSXRlbXMudG9BcnJheSgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURyYWdnYWJsZVN0YXRlKHRoaXMuX2RyYWdnYWJsZSk7XG5cbiAgICAgICAgdGhpcy5kbmRJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5tb3ZlZC5waXBlKHRha2VVbnRpbChyZWZyZXNoJCkpLnN1YnNjcmliZSgocG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbikgPT4gdGhpcy5vbk1vdmUocG9zaXRpb24sIGluZGV4KSk7XG4gICAgICAgICAgICBpdGVtLnN0YXJ0ZWQucGlwZSh0YWtlVW50aWwocmVmcmVzaCQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kcmFnU3RhcnQoaW5kZXgpKTtcbiAgICAgICAgICAgIGl0ZW0ucmVsZWFzZWQucGlwZSh0YWtlVW50aWwocmVmcmVzaCQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kcmFnRW5kKGluZGV4KSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBAaGlkZGVuXG4gICAgICogUmV0dXJuIGluZm9ybWF0aW9uIGlmIGVsZW1lbnQgaXMgcGxhY2VkIGJlZm9yZSB0aGUgZHJhZ2dlZCBlbGVtZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBfaXNCZWZvcmUoZHJhZ2dlZEVsZW1lbnQ6IEVsZW1lbnRSZWYsIHRhcmdldEVsZW1lbnQ6IEVsZW1lbnRSZWYpOiBib29sZWFuIHtcbiAgICAgICAgLyoqIFNvbWV0aW1lcyB0aGUgZWxlbWVudCBhcmUgbm90IHN0cmFpZ2h0IGluIG9uZSBjb2x1bW4sIHRoYXQncyB3aHkgb2Zmc2V0IGlzIG5lZWRlZCAqL1xuICAgICAgICBjb25zdCBWRVJUSUNBTF9PRkZTRVQgPSAyMDtcblxuICAgICAgICAvKiogRGlzdGFuY2VzIGZyb20gdGhlIHRvcCBvZiBzY3JlZW4gKi9cbiAgICAgICAgY29uc3QgZHJhZ2dlZEVsZW1lbnRCb3VuZCA9IDxET01SZWN0PmRyYWdnZWRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRCb3VuZCA9IDxET01SZWN0PnRhcmdldEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnRCb3VuZC50b3AgLSB0YXJnZXRFbGVtZW50Qm91bmQudG9wID4gVkVSVElDQUxfT0ZGU0VUKSB7XG4gICAgICAgICAgICAvKiogSWYgZWxlbWVudCBpcyBoaWdoZXIgdGhhbiB0aGUgZHJhZ2dlZCBlbGVtZW50LCBpdCdzIGZvciBzdXJlIGJlZm9yZSAqL1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0RWxlbWVudEJvdW5kLnRvcCAtIGRyYWdnZWRFbGVtZW50Qm91bmQudG9wID4gVkVSVElDQUxfT0ZGU0VUKSB7XG4gICAgICAgICAgICAvKiogSWYgZWxlbWVudCBpcyBsb3dlciB0aGFuIHRoZSBkcmFnZ2VkIGVsZW1lbnQsIGl0J3MgZm9yIHN1cmUgYWZ0ZXIgKi9cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8qKiBJZiBlbGVtZW50cyBhcmUgaW4gc2FtZSBsZXZlbCwgdGhlIGhvcml6b250YWwgcG9zaXRpb24gZGVjaWRlcyBpZiBpdCdzIGJlZm9yZS9hZnRlciAqL1xuICAgICAgICAgICAgcmV0dXJuIGRyYWdnZWRFbGVtZW50Qm91bmQubGVmdCAtIHRhcmdldEVsZW1lbnRCb3VuZC5sZWZ0ID4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2hhbmdlRHJhZ2dhYmxlU3RhdGUoZHJhZ2dhYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRuZEl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLmRuZEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3REcmFnZ2FibGUgPSBkcmFnZ2FibGU7XG4gICAgICAgICAgICAgICAgaXRlbS5jaGFuZ2VDREtEcmFnU3RhdGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfaXNNb3VzZU9uRWxlbWVudChlbGVtZW50OiBFbGVtZW50Q2hvcmQsIG1vdXNlUG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0YXJ0WCA9IGVsZW1lbnQueDtcbiAgICBjb25zdCBlbmRYID0gZWxlbWVudC54ICsgZWxlbWVudC53aWR0aDtcblxuICAgIGNvbnN0IHN0YXJ0WSA9IGVsZW1lbnQueTtcbiAgICBjb25zdCBlbmRZID0gZWxlbWVudC55ICsgZWxlbWVudC5oZWlnaHQ7XG5cbiAgICByZXR1cm4gX2JldHdlZW4obW91c2VQb3NpdGlvbi54LCBzdGFydFgsIGVuZFgpICYmIF9iZXR3ZWVuKG1vdXNlUG9zaXRpb24ueSwgc3RhcnRZLCBlbmRZKTtcbn1cblxuZnVuY3Rpb24gX2JldHdlZW4oeDogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4geCA+PSBtaW4gJiYgeCA8PSBtYXg7XG59XG5cbmludGVyZmFjZSBFbGVtZW50Qm91bmRhcmllcyB7XG4gICAgeDoge1xuICAgICAgICBzdGFydDogbnVtYmVyO1xuICAgICAgICBlbmQ6IG51bWJlcjtcbiAgICB9O1xuICAgIHk6IHtcbiAgICAgICAgc3RhcnQ6IG51bWJlcjtcbiAgICAgICAgZW5kOiBudW1iZXI7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudFN0YXJ0Q29vcmRzKHJlY3Q6IERPTVJlY3QsIHBvc2l0aW9uOiBFbGVtZW50Q2hvcmRbJ3Bvc2l0aW9uJ10pOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHBvc2l0aW9uID09PSAnYWZ0ZXInID8gcmVjdC54ICsgcmVjdC53aWR0aCA6IHJlY3QueCxcbiAgICAgICAgeTogcG9zaXRpb24gPT09ICdhZnRlcicgPyByZWN0LnkgKyByZWN0LmhlaWdodCA6IHJlY3QueVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRCb3VuZGFyaWVzKGNvb3JkaW5hdGVzOiBFbGVtZW50Q2hvcmQsIHRocmVzaG9sZDogbnVtYmVyKTogRWxlbWVudEJvdW5kYXJpZXMge1xuICAgIGNvbnN0IHdpZHRoT2Zmc2V0ID0gY29vcmRpbmF0ZXMud2lkdGggKiAoY29vcmRpbmF0ZXMucG9zaXRpb24gPT09ICdhZnRlcicgPyAxIDogLTEpO1xuICAgIGNvbnN0IGhlaWdodE9mZnNldCA9IGNvb3JkaW5hdGVzLmhlaWdodCAqIChjb29yZGluYXRlcy5wb3NpdGlvbiA9PT0gJ2FmdGVyJyA/IDEgOiAtMSk7XG4gICAgY29uc3QgeFN0YXJ0ID0gY29vcmRpbmF0ZXMucG9zaXRpb24gPT09ICdhZnRlcicgPyBjb29yZGluYXRlcy54IDogY29vcmRpbmF0ZXMueCArIGNvb3JkaW5hdGVzLndpZHRoO1xuICAgIGNvbnN0IHhFbmQgPSB4U3RhcnQgKyB3aWR0aE9mZnNldCArICh3aWR0aE9mZnNldCAvIDIpICogdGhyZXNob2xkO1xuICAgIGNvbnN0IHlTdGFydCA9IGNvb3JkaW5hdGVzLnBvc2l0aW9uID09PSAnYWZ0ZXInID8gY29vcmRpbmF0ZXMueSA6IGNvb3JkaW5hdGVzLnkgKyBjb29yZGluYXRlcy5oZWlnaHQ7XG4gICAgY29uc3QgeUVuZCA9IHlTdGFydCArIGhlaWdodE9mZnNldCArIChoZWlnaHRPZmZzZXQgLyAyKSAqIHRocmVzaG9sZDtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiB7XG4gICAgICAgICAgICBzdGFydDogeFN0YXJ0ID4geEVuZCA/IHhFbmQgOiB4U3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHhTdGFydCA+IHhFbmQgPyB4U3RhcnQgOiB4RW5kXG4gICAgICAgIH0sXG4gICAgICAgIHk6IHtcbiAgICAgICAgICAgIHN0YXJ0OiB5U3RhcnQgPiB5RW5kID8geUVuZCA6IHlTdGFydCxcbiAgICAgICAgICAgIGVuZDogeVN0YXJ0ID4geUVuZCA/IHlTdGFydCA6IHlFbmRcbiAgICAgICAgfVxuICAgIH07XG59XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLmludGVyZmFjZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL3V0aWxzL2RyYWctYW5kLWRyb3AvZG5kLmludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgTGlua1Bvc2l0aW9uID0gJ2FmdGVyJyB8ICdiZWZvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRDaG9yZCB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICBwb3NpdGlvbjogTGlua1Bvc2l0aW9uO1xuICAgIHN0aWNrVG9Qb3NpdGlvbj86IGJvb2xlYW47XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZERyb3BFdmVudDxUPiB7XG4gICAgaXRlbXM6IEFycmF5PFQ+
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLmludGVyZmFjZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL3V0aWxzL2RyYWctYW5kLWRyb3AvZG5kLmludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgTGlua1Bvc2l0aW9uID0gJ2FmdGVyJyB8ICdiZWZvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRDaG9yZCB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICBwb3NpdGlvbjogTGlua1Bvc2l0aW9uO1xuICAgIHN0aWNrVG9Qb3NpdGlvbj86IGJvb2xlYW47XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZERyb3BFdmVudDxUPiB7XG4gICAgaXRlbXM6IEFycmF5PFQ+O1xuICAgIHJlcGxhY2VkSXRlbUluZGV4OiBudW1iZXI7XG4gICAgZHJhZ2dlZEl0ZW1JbmRleDogbnVtYmVyO1xuICAgIGluc2VydEF0OiAnYmVmb3JlJyB8ICdhZnRlcicgfCBudWxsO1xuICAgIG1vZGU6IEZkRG5kRHJvcEV2ZW50TW9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50UG9zaXRpb24ge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG5kSXRlbSB7XG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgICBnZXRFbGVtZW50Q29vcmRpbmF0ZXM6IChpc0JlZm9yZTogYm9vbGVhbiwgZ3JpZE1vZGU6IGJvb2xlYW4pID0+IEVsZW1lbnRDaG9yZDtcbiAgICByZW1vdmVMaW5lOiAoKSA9PiB2b2lkO1xuICAgIHJlbW92ZVJlcGxhY2VJbmRpY2F0b3I6ICgpID0+IHZvaWQ7XG4gICAgY3JlYXRlTGluZTogKGxpbmtQb3NpdGlvbjogTGlua1Bvc2l0aW9uLCBncmlkTW9kZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgICBjcmVhdGVSZXBsYWNlSW5kaWNhdG9yOiAoKSA9PiB2b2lkO1xuICAgIG1vdmVkOiBPYnNlcnZhYmxlPEVsZW1lbnRQb3NpdGlvbj47XG4gICAgcmVsZWFzZWQ6IE9ic2VydmFibGU8dm9pZD47XG4gICAgc3RhcnRlZDogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgICBsaXN0RHJhZ2dhYmxlOiBib29sZWFuO1xuICAgIGNoYW5nZUNES0RyYWdTdGF0ZTogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgRmREbmREcm9wVHlwZSA9ICdzaGlmdCcgfCAnZ3JvdXAnIHwgJ2F1dG8nO1xuZXhwb3J0IHR5cGUgRmREbmREcm9wRXZlbnRNb2RlID0gJ3NoaWZ0JyB8ICdncm91cCc7XG4iXX0=
|
|
@@ -4915,12 +4915,27 @@ const DND_LIST = new InjectionToken('Drag and drop List');
|
|
|
4915
4915
|
class DndListDirective {
|
|
4916
4916
|
constructor() {
|
|
4917
4917
|
/**
|
|
4918
|
-
* Defines if the
|
|
4918
|
+
* Defines if the element is allowed to be dragged in 2 dimensions,
|
|
4919
4919
|
* When true - replace indicator will be displayed vertically
|
|
4920
4920
|
*/
|
|
4921
4921
|
this.gridMode = false;
|
|
4922
|
-
/**
|
|
4923
|
-
|
|
4922
|
+
/**
|
|
4923
|
+
* Defines drop strategy:
|
|
4924
|
+
* * `shift` mode will create line after closest drop element.
|
|
4925
|
+
* * `group` mode will create replace indicator on whole closest drop element.
|
|
4926
|
+
* * `auto` mode will create line after closest drop element,
|
|
4927
|
+
* if dragged element coordinates are shifted for 30% from center of the closest drop element.
|
|
4928
|
+
* Otherwise, it will create replace indicator on whole closest drop element.
|
|
4929
|
+
*
|
|
4930
|
+
* `shift` mode is the default.
|
|
4931
|
+
*/
|
|
4932
|
+
this.dropMode = 'shift';
|
|
4933
|
+
/**
|
|
4934
|
+
* Threshold of dragged item over another item to define which type of `dropMode` should be used.
|
|
4935
|
+
*/
|
|
4936
|
+
this.threshold = 0.3;
|
|
4937
|
+
/** @hidden */
|
|
4938
|
+
this._replaceMode = false;
|
|
4924
4939
|
/** Event that is thrown, when items are reordered */
|
|
4925
4940
|
this.itemsChange = new EventEmitter();
|
|
4926
4941
|
/** Event that is thrown, when the item is dropped */
|
|
@@ -4935,6 +4950,27 @@ class DndListDirective {
|
|
|
4935
4950
|
this._onDestroy$ = new Subject();
|
|
4936
4951
|
/** @hidden */
|
|
4937
4952
|
this._draggable = true;
|
|
4953
|
+
/** @hidden */
|
|
4954
|
+
this._initialClass = 'fd-dnd-list';
|
|
4955
|
+
/** @hidden */
|
|
4956
|
+
this._linesRemoved = true;
|
|
4957
|
+
/** @hidden */
|
|
4958
|
+
this._indicatorsRemoved = true;
|
|
4959
|
+
}
|
|
4960
|
+
/**
|
|
4961
|
+
* @deprecated
|
|
4962
|
+
* Use `dropMode` property for better configuration.
|
|
4963
|
+
*
|
|
4964
|
+
* @description
|
|
4965
|
+
* When enabled, replace indicator will appear on whole element, instead of horizontal/vertical line before/after element.
|
|
4966
|
+
*/
|
|
4967
|
+
set replaceMode(value) {
|
|
4968
|
+
this._replaceMode = value;
|
|
4969
|
+
this.dropMode = value ? 'group' : 'shift';
|
|
4970
|
+
this._detectedDropMode = this.dropMode;
|
|
4971
|
+
}
|
|
4972
|
+
get replaceMode() {
|
|
4973
|
+
return this._replaceMode;
|
|
4938
4974
|
}
|
|
4939
4975
|
/** Defines if drag and drop feature should be enabled for list items */
|
|
4940
4976
|
set draggable(draggable) {
|
|
@@ -4969,8 +5005,11 @@ class DndListDirective {
|
|
|
4969
5005
|
if (!closestItem) {
|
|
4970
5006
|
closestItemIndex = null;
|
|
4971
5007
|
}
|
|
4972
|
-
/** If the closest element is different
|
|
4973
|
-
if ((closestItemIndex || closestItemIndex === 0) &&
|
|
5008
|
+
/** If the closest element is different from the old one, new one is picked. It prevents from performance issues */
|
|
5009
|
+
if ((closestItemIndex || closestItemIndex === 0) &&
|
|
5010
|
+
(closestItemIndex !== this._closestItemIndex || this.dropMode === 'auto')) {
|
|
5011
|
+
this._removeAllLines();
|
|
5012
|
+
this._removeAllReplaceIndicators();
|
|
4974
5013
|
this._closestItemIndex = closestItemIndex;
|
|
4975
5014
|
this._closestItemPosition = this._elementsCoordinates[closestItemIndex].position;
|
|
4976
5015
|
// If closest item index is same as dragged item, just remove indicators
|
|
@@ -4980,18 +5019,21 @@ class DndListDirective {
|
|
|
4980
5019
|
return;
|
|
4981
5020
|
}
|
|
4982
5021
|
/** Generating line, that shows where the element will be placed, on drop */
|
|
4983
|
-
if (this.
|
|
5022
|
+
if (this.dropMode === 'group') {
|
|
4984
5023
|
this._createReplaceIndicator(this._closestItemIndex);
|
|
4985
5024
|
}
|
|
4986
|
-
else {
|
|
5025
|
+
else if (this.dropMode === 'shift') {
|
|
4987
5026
|
this._createLine(this._closestItemIndex, this._closestItemPosition);
|
|
4988
5027
|
}
|
|
5028
|
+
else {
|
|
5029
|
+
this._selectDropModeIndicator(draggedItemIndex, closestItem, closestItemIndex);
|
|
5030
|
+
}
|
|
4989
5031
|
}
|
|
4990
5032
|
}
|
|
4991
5033
|
/** Method called, when element is started to be dragged */
|
|
4992
5034
|
dragStart(index) {
|
|
4993
5035
|
const draggedItemElement = this._dndItemReference[index].elementRef;
|
|
4994
|
-
/** Counting all
|
|
5036
|
+
/** Counting all the element's chords */
|
|
4995
5037
|
this._elementsCoordinates = this._dndItemReference.map((item) => item.getElementCoordinates(this._isBefore(draggedItemElement, item.elementRef), this.gridMode));
|
|
4996
5038
|
}
|
|
4997
5039
|
/** Method called, when element is released */
|
|
@@ -5018,7 +5060,9 @@ class DndListDirective {
|
|
|
5018
5060
|
this.itemDropped.emit({
|
|
5019
5061
|
replacedItemIndex,
|
|
5020
5062
|
draggedItemIndex,
|
|
5021
|
-
items
|
|
5063
|
+
items,
|
|
5064
|
+
insertAt: this._closestItemPosition,
|
|
5065
|
+
mode: this.dropMode !== 'auto' ? this.dropMode : this._detectedDropMode
|
|
5022
5066
|
});
|
|
5023
5067
|
this._removeAllLines();
|
|
5024
5068
|
this._removeAllReplaceIndicators();
|
|
@@ -5029,21 +5073,54 @@ class DndListDirective {
|
|
|
5029
5073
|
}
|
|
5030
5074
|
}
|
|
5031
5075
|
/** @hidden */
|
|
5076
|
+
_selectDropModeIndicator(draggedItemIndex, closestItem, closestItemIndex) {
|
|
5077
|
+
if (!closestItem || !this._dndItemReference[draggedItemIndex]) {
|
|
5078
|
+
return;
|
|
5079
|
+
}
|
|
5080
|
+
let newDetectedDropMode;
|
|
5081
|
+
const draggedElmCoords = this._dndItemReference[draggedItemIndex].elementRef.nativeElement.getBoundingClientRect();
|
|
5082
|
+
const closestItemBoundaries = getElementBoundaries(closestItem, this.threshold);
|
|
5083
|
+
const draggedItemStartCoords = getElementStartCoords(draggedElmCoords, closestItem.position);
|
|
5084
|
+
if (_between(draggedItemStartCoords.x, closestItemBoundaries.x.start, closestItemBoundaries.x.end) &&
|
|
5085
|
+
_between(draggedItemStartCoords.y, closestItemBoundaries.y.start, closestItemBoundaries.y.end)) {
|
|
5086
|
+
newDetectedDropMode = 'group';
|
|
5087
|
+
}
|
|
5088
|
+
else {
|
|
5089
|
+
newDetectedDropMode = 'shift';
|
|
5090
|
+
}
|
|
5091
|
+
if (newDetectedDropMode === this._detectedDropMode && (!this._linesRemoved || !this._indicatorsRemoved)) {
|
|
5092
|
+
return;
|
|
5093
|
+
}
|
|
5094
|
+
this._detectedDropMode = newDetectedDropMode;
|
|
5095
|
+
if (this._detectedDropMode === 'shift') {
|
|
5096
|
+
this._createLine(closestItemIndex, this._elementsCoordinates[closestItemIndex].position);
|
|
5097
|
+
}
|
|
5098
|
+
else {
|
|
5099
|
+
this._createReplaceIndicator(closestItemIndex);
|
|
5100
|
+
}
|
|
5101
|
+
}
|
|
5102
|
+
/** @hidden */
|
|
5032
5103
|
_removeAllLines() {
|
|
5104
|
+
this._linesRemoved = true;
|
|
5033
5105
|
this.dndItems.forEach((item) => item.removeLine());
|
|
5034
5106
|
}
|
|
5035
5107
|
/** @hidden */
|
|
5036
5108
|
_removeAllReplaceIndicators() {
|
|
5109
|
+
this._indicatorsRemoved = true;
|
|
5037
5110
|
this.dndItems.forEach((item) => item.removeReplaceIndicator());
|
|
5038
5111
|
}
|
|
5039
5112
|
/** @hidden */
|
|
5040
5113
|
_createLine(closestItemIndex, linkPosition) {
|
|
5041
5114
|
this._removeAllLines();
|
|
5115
|
+
this._removeAllReplaceIndicators();
|
|
5116
|
+
this._linesRemoved = false;
|
|
5042
5117
|
this._dndItemReference[closestItemIndex].createLine(linkPosition, this.gridMode);
|
|
5043
5118
|
}
|
|
5044
5119
|
/** @hidden */
|
|
5045
5120
|
_createReplaceIndicator(closestItemIndex) {
|
|
5121
|
+
this._removeAllLines();
|
|
5046
5122
|
this._removeAllReplaceIndicators();
|
|
5123
|
+
this._indicatorsRemoved = false;
|
|
5047
5124
|
this._dndItemReference[closestItemIndex].createReplaceIndicator();
|
|
5048
5125
|
}
|
|
5049
5126
|
/** @hidden */
|
|
@@ -5092,7 +5169,7 @@ class DndListDirective {
|
|
|
5092
5169
|
}
|
|
5093
5170
|
}
|
|
5094
5171
|
DndListDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DndListDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
5095
|
-
DndListDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.1", type: DndListDirective, selector: "[fdkDndList], [fd-dnd-list]", inputs: { gridMode: "gridMode", replaceMode: "replaceMode", items: "items", draggable: "draggable" }, outputs: { itemsChange: "itemsChange", itemDropped: "itemDropped" }, providers: [{ provide: DND_LIST, useExisting: forwardRef(() => DndListDirective) }], queries: [{ propertyName: "dndItems", predicate: DND_ITEM }], ngImport: i0 });
|
|
5172
|
+
DndListDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.1", type: DndListDirective, selector: "[fdkDndList], [fd-dnd-list]", inputs: { gridMode: "gridMode", dropMode: "dropMode", threshold: "threshold", replaceMode: "replaceMode", items: "items", draggable: "draggable" }, outputs: { itemsChange: "itemsChange", itemDropped: "itemDropped" }, host: { properties: { "class": "this._initialClass" } }, providers: [{ provide: DND_LIST, useExisting: forwardRef(() => DndListDirective) }], queries: [{ propertyName: "dndItems", predicate: DND_ITEM }], ngImport: i0 });
|
|
5096
5173
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DndListDirective, decorators: [{
|
|
5097
5174
|
type: Directive,
|
|
5098
5175
|
args: [{
|
|
@@ -5101,6 +5178,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
|
|
|
5101
5178
|
}]
|
|
5102
5179
|
}], propDecorators: { gridMode: [{
|
|
5103
5180
|
type: Input
|
|
5181
|
+
}], dropMode: [{
|
|
5182
|
+
type: Input
|
|
5183
|
+
}], threshold: [{
|
|
5184
|
+
type: Input
|
|
5104
5185
|
}], replaceMode: [{
|
|
5105
5186
|
type: Input
|
|
5106
5187
|
}], items: [{
|
|
@@ -5114,6 +5195,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
|
|
|
5114
5195
|
}], dndItems: [{
|
|
5115
5196
|
type: ContentChildren,
|
|
5116
5197
|
args: [DND_ITEM]
|
|
5198
|
+
}], _initialClass: [{
|
|
5199
|
+
type: HostBinding,
|
|
5200
|
+
args: ['class']
|
|
5117
5201
|
}] } });
|
|
5118
5202
|
function _isMouseOnElement(element, mousePosition) {
|
|
5119
5203
|
const startX = element.x;
|
|
@@ -5125,6 +5209,30 @@ function _isMouseOnElement(element, mousePosition) {
|
|
|
5125
5209
|
function _between(x, min, max) {
|
|
5126
5210
|
return x >= min && x <= max;
|
|
5127
5211
|
}
|
|
5212
|
+
function getElementStartCoords(rect, position) {
|
|
5213
|
+
return {
|
|
5214
|
+
x: position === 'after' ? rect.x + rect.width : rect.x,
|
|
5215
|
+
y: position === 'after' ? rect.y + rect.height : rect.y
|
|
5216
|
+
};
|
|
5217
|
+
}
|
|
5218
|
+
function getElementBoundaries(coordinates, threshold) {
|
|
5219
|
+
const widthOffset = coordinates.width * (coordinates.position === 'after' ? 1 : -1);
|
|
5220
|
+
const heightOffset = coordinates.height * (coordinates.position === 'after' ? 1 : -1);
|
|
5221
|
+
const xStart = coordinates.position === 'after' ? coordinates.x : coordinates.x + coordinates.width;
|
|
5222
|
+
const xEnd = xStart + widthOffset + (widthOffset / 2) * threshold;
|
|
5223
|
+
const yStart = coordinates.position === 'after' ? coordinates.y : coordinates.y + coordinates.height;
|
|
5224
|
+
const yEnd = yStart + heightOffset + (heightOffset / 2) * threshold;
|
|
5225
|
+
return {
|
|
5226
|
+
x: {
|
|
5227
|
+
start: xStart > xEnd ? xEnd : xStart,
|
|
5228
|
+
end: xStart > xEnd ? xStart : xEnd
|
|
5229
|
+
},
|
|
5230
|
+
y: {
|
|
5231
|
+
start: yStart > yEnd ? yEnd : yStart,
|
|
5232
|
+
end: yStart > yEnd ? yStart : yEnd
|
|
5233
|
+
}
|
|
5234
|
+
};
|
|
5235
|
+
}
|
|
5128
5236
|
|
|
5129
5237
|
class DndItemDirective {
|
|
5130
5238
|
/** Defines if element is draggable */
|