@schneideress/dashboardframework 13.0.0 → 17.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +7 -7
  2. package/esm2022/gridster/index.mjs +12 -0
  3. package/esm2022/gridster/lib/gridster.component.mjs +627 -0
  4. package/esm2022/gridster/lib/gridster.interface.mjs +3 -0
  5. package/esm2022/gridster/lib/gridster.module.mjs +17 -0
  6. package/esm2022/gridster/lib/gridsterCompact.service.mjs +126 -0
  7. package/esm2022/gridster/lib/gridsterConfig.constant.mjs +118 -0
  8. package/esm2022/gridster/lib/gridsterConfig.interface.mjs +37 -0
  9. package/esm2022/gridster/lib/gridsterConfigS.interface.mjs +2 -0
  10. package/esm2022/gridster/lib/gridsterDraggable.service.mjs +405 -0
  11. package/esm2022/gridster/lib/gridsterEmptyCell.service.mjs +255 -0
  12. package/esm2022/gridster/lib/gridsterItem.component.mjs +228 -0
  13. package/esm2022/gridster/lib/gridsterItem.interface.mjs +3 -0
  14. package/esm2022/gridster/lib/gridsterPreview.component.mjs +36 -0
  15. package/esm2022/gridster/lib/gridsterPush.service.mjs +316 -0
  16. package/esm2022/gridster/lib/gridsterPushResize.service.mjs +225 -0
  17. package/esm2022/gridster/lib/gridsterRenderer.interface.mjs +2 -0
  18. package/esm2022/gridster/lib/gridsterRenderer.service.mjs +274 -0
  19. package/esm2022/gridster/lib/gridsterResizable.service.mjs +470 -0
  20. package/esm2022/gridster/lib/gridsterResizeEventType.interface.mjs +2 -0
  21. package/esm2022/gridster/lib/gridsterScroll.service.mjs +134 -0
  22. package/esm2022/gridster/lib/gridsterSwap.service.mjs +87 -0
  23. package/esm2022/gridster/lib/gridsterUtils.service.mjs +92 -0
  24. package/esm2022/lib/custom.notifier.options.mjs +41 -0
  25. package/esm2022/lib/ra-dashboard-area/ra.dashboard.area.mjs +460 -0
  26. package/esm2022/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.mjs +43 -0
  27. package/esm2022/lib/ra-widget-container/ra.widget.container.component.mjs +767 -0
  28. package/esm2022/lib/ra.base.dashboard.filter.mjs +41 -0
  29. package/esm2022/lib/ra.base.dashboard.template.mjs +33 -0
  30. package/esm2022/lib/ra.dashbard.event.bus.mjs +46 -0
  31. package/esm2022/lib/ra.dashboard.module.mjs +55 -0
  32. package/esm2022/lib/ra.dashboard.responsive.service.mjs +139 -0
  33. package/esm2022/lib/ra.dashboard.service.mjs +77 -0
  34. package/esm2022/lib/ra.event.enum.mjs +60 -0
  35. package/esm2022/lib/ra.gridster.config.mjs +56 -0
  36. package/esm2022/public-api.mjs +13 -0
  37. package/esm2022/schneideress-dashboardframework.mjs +5 -0
  38. package/fesm2022/schneideress-dashboardframework.mjs +5198 -0
  39. package/fesm2022/schneideress-dashboardframework.mjs.map +1 -0
  40. package/gridster/index.d.ts +9 -0
  41. package/gridster/lib/gridster.component.d.ts +79 -0
  42. package/gridster/lib/gridster.interface.d.ts +49 -0
  43. package/gridster/lib/gridster.module.d.ts +8 -0
  44. package/gridster/lib/gridsterCompact.service.d.ts +11 -0
  45. package/gridster/lib/gridsterConfig.constant.d.ts +2 -0
  46. package/gridster/lib/gridsterConfig.interface.d.ts +155 -0
  47. package/gridster/lib/gridsterConfigS.interface.d.ts +107 -0
  48. package/gridster/lib/gridsterDraggable.service.d.ts +68 -0
  49. package/gridster/lib/gridsterEmptyCell.service.d.ts +31 -0
  50. package/gridster/lib/gridsterItem.component.d.ts +61 -0
  51. package/gridster/lib/gridsterItem.interface.d.ts +64 -0
  52. package/gridster/lib/gridsterPreview.component.d.ts +17 -0
  53. package/gridster/lib/gridsterPush.service.d.ts +34 -0
  54. package/gridster/lib/gridsterPushResize.service.d.ts +26 -0
  55. package/gridster/lib/gridsterRenderer.interface.d.ts +14 -0
  56. package/gridster/lib/gridsterRenderer.service.d.ts +37 -0
  57. package/gridster/lib/gridsterResizable.service.d.ts +86 -0
  58. package/gridster/lib/gridsterResizeEventType.interface.d.ts +6 -0
  59. package/gridster/lib/gridsterScroll.service.d.ts +7 -0
  60. package/gridster/lib/gridsterSwap.service.d.ts +13 -0
  61. package/gridster/lib/gridsterUtils.service.d.ts +16 -0
  62. package/{schneideress-dashboardframework.d.ts → index.d.ts} +5 -5
  63. package/lib/custom.notifier.options.d.ts +2 -2
  64. package/lib/ra-dashboard-area/ra.dashboard.area.d.ts +88 -88
  65. package/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.d.ts +20 -20
  66. package/lib/ra-widget-container/ra.widget.container.component.d.ts +142 -142
  67. package/lib/ra.base.dashboard.filter.d.ts +17 -17
  68. package/lib/ra.base.dashboard.template.d.ts +18 -18
  69. package/lib/ra.dashbard.event.bus.d.ts +23 -23
  70. package/lib/ra.dashboard.module.d.ts +16 -17
  71. package/lib/ra.dashboard.responsive.service.d.ts +24 -24
  72. package/lib/ra.dashboard.service.d.ts +25 -25
  73. package/lib/ra.event.enum.d.ts +57 -57
  74. package/lib/ra.gridster.config.d.ts +2 -2
  75. package/package.json +11 -17
  76. package/public-api.d.ts +9 -9
  77. package/esm2020/lib/custom.notifier.options.mjs +0 -41
  78. package/esm2020/lib/ra-dashboard-area/ra.dashboard.area.mjs +0 -445
  79. package/esm2020/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.mjs +0 -43
  80. package/esm2020/lib/ra-widget-container/ra.widget.container.component.mjs +0 -767
  81. package/esm2020/lib/ra.base.dashboard.filter.mjs +0 -44
  82. package/esm2020/lib/ra.base.dashboard.template.mjs +0 -36
  83. package/esm2020/lib/ra.dashbard.event.bus.mjs +0 -46
  84. package/esm2020/lib/ra.dashboard.module.mjs +0 -64
  85. package/esm2020/lib/ra.dashboard.responsive.service.mjs +0 -136
  86. package/esm2020/lib/ra.dashboard.service.mjs +0 -77
  87. package/esm2020/lib/ra.event.enum.mjs +0 -60
  88. package/esm2020/lib/ra.gridster.config.mjs +0 -56
  89. package/esm2020/public-api.mjs +0 -15
  90. package/esm2020/schneideress-dashboardframework.mjs +0 -5
  91. package/fesm2015/schneideress-dashboardframework.mjs +0 -1800
  92. package/fesm2015/schneideress-dashboardframework.mjs.map +0 -1
  93. package/fesm2020/schneideress-dashboardframework.mjs +0 -1790
  94. package/fesm2020/schneideress-dashboardframework.mjs.map +0 -1
@@ -0,0 +1,36 @@
1
+ import { Component, Input, ViewEncapsulation } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class GridsterPreviewComponent {
4
+ constructor(el, renderer) {
5
+ this.renderer = renderer;
6
+ this.el = el.nativeElement;
7
+ }
8
+ ngOnInit() {
9
+ this.sub = this.previewStyle$.subscribe(options => this.previewStyle(options));
10
+ }
11
+ ngOnDestroy() {
12
+ if (this.sub) {
13
+ this.sub.unsubscribe();
14
+ }
15
+ }
16
+ previewStyle(item) {
17
+ if (item) {
18
+ this.renderer.setStyle(this.el, 'display', 'block');
19
+ this.gridRenderer.updateItem(this.el, item, this.renderer);
20
+ }
21
+ else {
22
+ this.renderer.setStyle(this.el, 'display', '');
23
+ }
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: GridsterPreviewComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
26
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.0", type: GridsterPreviewComponent, isStandalone: true, selector: "gridster-preview", inputs: { previewStyle$: "previewStyle$", gridRenderer: "gridRenderer" }, ngImport: i0, template: '', isInline: true, styles: ["gridster-preview{position:absolute;display:none;background:#00000026}\n"], encapsulation: i0.ViewEncapsulation.None }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: GridsterPreviewComponent, decorators: [{
29
+ type: Component,
30
+ args: [{ selector: 'gridster-preview', template: '', encapsulation: ViewEncapsulation.None, standalone: true, styles: ["gridster-preview{position:absolute;display:none;background:#00000026}\n"] }]
31
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { previewStyle$: [{
32
+ type: Input
33
+ }], gridRenderer: [{
34
+ type: Input
35
+ }] } });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJQcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JhLWRhc2hib2FyZC1mcmFtZXdvcmsvc3JjL2dyaWRzdGVyL2xpYi9ncmlkc3RlclByZXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsS0FBSyxFQUlMLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQzs7QUFZdkIsTUFBTSxPQUFPLHdCQUF3QjtJQU1uQyxZQUFZLEVBQWMsRUFBVSxRQUFtQjtRQUFuQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ3JELElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUM3QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FDM0IsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLElBQXlCO1FBQzVDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0QsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQzs4R0E3QlUsd0JBQXdCO2tHQUF4Qix3QkFBd0Isc0pBTHpCLEVBQUU7OzJGQUtELHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSxrQkFBa0IsWUFDbEIsRUFBRSxpQkFFRyxpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCLElBQUk7dUdBR1AsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR3JpZHN0ZXJJdGVtIH0gZnJvbSAnLi9ncmlkc3Rlckl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRzdGVyUmVuZGVyZXIgfSBmcm9tICcuL2dyaWRzdGVyUmVuZGVyZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dyaWRzdGVyLXByZXZpZXcnLFxuICB0ZW1wbGF0ZTogJycsXG4gIHN0eWxlVXJsczogWycuL2dyaWRzdGVyUHJldmlldy5jc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBHcmlkc3RlclByZXZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHByZXZpZXdTdHlsZSQhOiBFdmVudEVtaXR0ZXI8R3JpZHN0ZXJJdGVtIHwgbnVsbD47XG4gIEBJbnB1dCgpIGdyaWRSZW5kZXJlciE6IEdyaWRzdGVyUmVuZGVyZXI7XG4gIHByaXZhdGUgZWw6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIHN1YiE6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XG4gICAgdGhpcy5lbCA9IGVsLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YiA9IHRoaXMucHJldmlld1N0eWxlJC5zdWJzY3JpYmUob3B0aW9ucyA9PlxuICAgICAgdGhpcy5wcmV2aWV3U3R5bGUob3B0aW9ucylcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYodGhpcy5zdWIpIHtcbiAgICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcmV2aWV3U3R5bGUoaXRlbTogR3JpZHN0ZXJJdGVtIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICB0aGlzLmdyaWRSZW5kZXJlci51cGRhdGVJdGVtKHRoaXMuZWwsIGl0ZW0sIHRoaXMucmVuZGVyZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwsICdkaXNwbGF5JywgJycpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,316 @@
1
+ export class GridsterPush {
2
+ constructor(gridsterItem) {
3
+ this.iteration = 0;
4
+ this.pushedItems = [];
5
+ this.pushedItemsTemp = [];
6
+ this.pushedItemsTempPath = [];
7
+ this.pushedItemsPath = [];
8
+ this.gridsterItem = gridsterItem;
9
+ this.gridster = gridsterItem.gridster;
10
+ this.tryPattern = {
11
+ fromEast: [this.tryWest, this.trySouth, this.tryNorth, this.tryEast],
12
+ fromWest: [this.tryEast, this.trySouth, this.tryNorth, this.tryWest],
13
+ fromNorth: [this.trySouth, this.tryEast, this.tryWest, this.tryNorth],
14
+ fromSouth: [this.tryNorth, this.tryEast, this.tryWest, this.trySouth]
15
+ };
16
+ this.fromSouth = 'fromSouth';
17
+ this.fromNorth = 'fromNorth';
18
+ this.fromEast = 'fromEast';
19
+ this.fromWest = 'fromWest';
20
+ }
21
+ destroy() {
22
+ this.gridster = this.gridsterItem = null;
23
+ }
24
+ pushItems(direction, disable) {
25
+ if (this.gridster.$options.pushItems && !disable) {
26
+ this.pushedItemsOrder = [];
27
+ this.iteration = 0;
28
+ const pushed = this.push(this.gridsterItem, direction);
29
+ if (!pushed) {
30
+ this.restoreTempItems();
31
+ }
32
+ this.pushedItemsOrder = [];
33
+ this.pushedItemsTemp = [];
34
+ this.pushedItemsTempPath = [];
35
+ return pushed;
36
+ }
37
+ else {
38
+ return false;
39
+ }
40
+ }
41
+ restoreTempItems() {
42
+ let i = this.pushedItemsTemp.length - 1;
43
+ for (; i > -1; i--) {
44
+ this.removeFromTempPushed(this.pushedItemsTemp[i]);
45
+ }
46
+ }
47
+ restoreItems() {
48
+ let i = 0;
49
+ const l = this.pushedItems.length;
50
+ let pushedItem;
51
+ for (; i < l; i++) {
52
+ pushedItem = this.pushedItems[i];
53
+ pushedItem.$item.x = pushedItem.item.x || 0;
54
+ pushedItem.$item.y = pushedItem.item.y || 0;
55
+ pushedItem.setSize();
56
+ }
57
+ this.pushedItems = [];
58
+ this.pushedItemsPath = [];
59
+ }
60
+ setPushedItems() {
61
+ let i = 0;
62
+ const l = this.pushedItems.length;
63
+ let pushedItem;
64
+ for (; i < l; i++) {
65
+ pushedItem = this.pushedItems[i];
66
+ pushedItem.checkItemChanges(pushedItem.$item, pushedItem.item);
67
+ }
68
+ this.pushedItems = [];
69
+ this.pushedItemsPath = [];
70
+ }
71
+ checkPushBack() {
72
+ let i = this.pushedItems.length - 1;
73
+ let change = false;
74
+ for (; i > -1; i--) {
75
+ if (this.checkPushedItem(this.pushedItems[i], i)) {
76
+ change = true;
77
+ }
78
+ }
79
+ if (change) {
80
+ this.checkPushBack();
81
+ }
82
+ }
83
+ push(gridsterItem, direction) {
84
+ if (this.iteration > 100) {
85
+ console.warn('max iteration reached');
86
+ return false;
87
+ }
88
+ if (this.gridster.checkGridCollision(gridsterItem.$item)) {
89
+ return false;
90
+ }
91
+ if (direction === '') {
92
+ return false;
93
+ }
94
+ const conflicts = this.gridster.findItemsWithItem(gridsterItem.$item);
95
+ const invert = direction === this.fromNorth || direction === this.fromWest;
96
+ // sort the list of conflicts in order of [y,x]. Invert when the push is from north and west
97
+ // this is done so they don't conflict witch each other and revert positions, keeping the previous order
98
+ conflicts.sort((a, b) => {
99
+ if (invert) {
100
+ return b.$item.y - a.$item.y || b.$item.x - a.$item.x;
101
+ }
102
+ else {
103
+ return a.$item.y - b.$item.y || a.$item.x - b.$item.x;
104
+ }
105
+ });
106
+ let i = 0;
107
+ let itemCollision;
108
+ let makePush = true;
109
+ const pushedItems = [];
110
+ for (; i < conflicts.length; i++) {
111
+ itemCollision = conflicts[i];
112
+ if (itemCollision === this.gridsterItem) {
113
+ continue;
114
+ }
115
+ if (!itemCollision.canBeDragged()) {
116
+ makePush = false;
117
+ break;
118
+ }
119
+ const p = this.pushedItemsTemp.indexOf(itemCollision);
120
+ if (p > -1 && this.pushedItemsTempPath[p].length > 10) {
121
+ // stop if item is pushed more than 10 times to break infinite loops
122
+ makePush = false;
123
+ break;
124
+ }
125
+ let tryPattern = this.tryPattern;
126
+ if (tryPattern[direction][0].call(this, itemCollision, gridsterItem)) {
127
+ this.pushedItemsOrder.push(itemCollision);
128
+ pushedItems.push(itemCollision);
129
+ }
130
+ else if (tryPattern[direction][1].call(this, itemCollision, gridsterItem)) {
131
+ this.pushedItemsOrder.push(itemCollision);
132
+ pushedItems.push(itemCollision);
133
+ }
134
+ else if (tryPattern[direction][2].call(this, itemCollision, gridsterItem)) {
135
+ this.pushedItemsOrder.push(itemCollision);
136
+ pushedItems.push(itemCollision);
137
+ }
138
+ else if (tryPattern[direction][3].call(this, itemCollision, gridsterItem)) {
139
+ this.pushedItemsOrder.push(itemCollision);
140
+ pushedItems.push(itemCollision);
141
+ }
142
+ else {
143
+ makePush = false;
144
+ break;
145
+ }
146
+ }
147
+ if (!makePush) {
148
+ i = this.pushedItemsOrder.lastIndexOf(pushedItems[0]);
149
+ if (i > -1) {
150
+ let j = this.pushedItemsOrder.length - 1;
151
+ for (; j >= i; j--) {
152
+ itemCollision = this.pushedItemsOrder[j];
153
+ this.pushedItemsOrder.pop();
154
+ this.removeFromTempPushed(itemCollision);
155
+ this.removeFromPushedItem(itemCollision);
156
+ }
157
+ }
158
+ }
159
+ this.iteration++;
160
+ return makePush;
161
+ }
162
+ trySouth(gridsterItemCollide, gridsterItem) {
163
+ if (!this.gridster.$options.pushDirections.south) {
164
+ return false;
165
+ }
166
+ this.addToTempPushed(gridsterItemCollide);
167
+ gridsterItemCollide.$item.y =
168
+ gridsterItem.$item.y + gridsterItem.$item.rows;
169
+ if (this.push(gridsterItemCollide, this.fromNorth)) {
170
+ gridsterItemCollide.setSize();
171
+ this.addToPushed(gridsterItemCollide);
172
+ return true;
173
+ }
174
+ else {
175
+ this.removeFromTempPushed(gridsterItemCollide);
176
+ }
177
+ return false;
178
+ }
179
+ tryNorth(gridsterItemCollide, gridsterItem) {
180
+ if (!this.gridster.$options.pushDirections.north) {
181
+ return false;
182
+ }
183
+ this.addToTempPushed(gridsterItemCollide);
184
+ gridsterItemCollide.$item.y =
185
+ gridsterItem.$item.y - gridsterItemCollide.$item.rows;
186
+ if (this.push(gridsterItemCollide, this.fromSouth)) {
187
+ gridsterItemCollide.setSize();
188
+ this.addToPushed(gridsterItemCollide);
189
+ return true;
190
+ }
191
+ else {
192
+ this.removeFromTempPushed(gridsterItemCollide);
193
+ }
194
+ return false;
195
+ }
196
+ tryEast(gridsterItemCollide, gridsterItem) {
197
+ if (!this.gridster.$options.pushDirections.east) {
198
+ return false;
199
+ }
200
+ this.addToTempPushed(gridsterItemCollide);
201
+ gridsterItemCollide.$item.x =
202
+ gridsterItem.$item.x + gridsterItem.$item.cols;
203
+ if (this.push(gridsterItemCollide, this.fromWest)) {
204
+ gridsterItemCollide.setSize();
205
+ this.addToPushed(gridsterItemCollide);
206
+ return true;
207
+ }
208
+ else {
209
+ this.removeFromTempPushed(gridsterItemCollide);
210
+ }
211
+ return false;
212
+ }
213
+ tryWest(gridsterItemCollide, gridsterItem) {
214
+ if (!this.gridster.$options.pushDirections.west) {
215
+ return false;
216
+ }
217
+ this.addToTempPushed(gridsterItemCollide);
218
+ gridsterItemCollide.$item.x =
219
+ gridsterItem.$item.x - gridsterItemCollide.$item.cols;
220
+ if (this.push(gridsterItemCollide, this.fromEast)) {
221
+ gridsterItemCollide.setSize();
222
+ this.addToPushed(gridsterItemCollide);
223
+ return true;
224
+ }
225
+ else {
226
+ this.removeFromTempPushed(gridsterItemCollide);
227
+ }
228
+ return false;
229
+ }
230
+ addToTempPushed(gridsterItem) {
231
+ let i = this.pushedItemsTemp.indexOf(gridsterItem);
232
+ if (i === -1) {
233
+ i = this.pushedItemsTemp.push(gridsterItem) - 1;
234
+ this.pushedItemsTempPath[i] = [];
235
+ }
236
+ this.pushedItemsTempPath[i].push({
237
+ x: gridsterItem.$item.x,
238
+ y: gridsterItem.$item.y
239
+ });
240
+ }
241
+ removeFromTempPushed(gridsterItem) {
242
+ const i = this.pushedItemsTemp.indexOf(gridsterItem);
243
+ const tempPosition = this.pushedItemsTempPath[i].pop();
244
+ if (!tempPosition) {
245
+ return;
246
+ }
247
+ gridsterItem.$item.x = tempPosition.x;
248
+ gridsterItem.$item.y = tempPosition.y;
249
+ gridsterItem.setSize();
250
+ if (!this.pushedItemsTempPath[i].length) {
251
+ this.pushedItemsTemp.splice(i, 1);
252
+ this.pushedItemsTempPath.splice(i, 1);
253
+ }
254
+ }
255
+ addToPushed(gridsterItem) {
256
+ if (this.pushedItems.indexOf(gridsterItem) < 0) {
257
+ this.pushedItems.push(gridsterItem);
258
+ this.pushedItemsPath.push([
259
+ { x: gridsterItem.item.x || 0, y: gridsterItem.item.y || 0 },
260
+ { x: gridsterItem.$item.x, y: gridsterItem.$item.y }
261
+ ]);
262
+ }
263
+ else {
264
+ const i = this.pushedItems.indexOf(gridsterItem);
265
+ this.pushedItemsPath[i].push({
266
+ x: gridsterItem.$item.x,
267
+ y: gridsterItem.$item.y
268
+ });
269
+ }
270
+ }
271
+ removeFromPushed(i) {
272
+ if (i > -1) {
273
+ this.pushedItems.splice(i, 1);
274
+ this.pushedItemsPath.splice(i, 1);
275
+ }
276
+ }
277
+ removeFromPushedItem(gridsterItem) {
278
+ const i = this.pushedItems.indexOf(gridsterItem);
279
+ if (i > -1) {
280
+ this.pushedItemsPath[i].pop();
281
+ if (!this.pushedItemsPath.length) {
282
+ this.pushedItems.splice(i, 1);
283
+ this.pushedItemsPath.splice(i, 1);
284
+ }
285
+ }
286
+ }
287
+ checkPushedItem(pushedItem, i) {
288
+ const path = this.pushedItemsPath[i];
289
+ let j = path.length - 2;
290
+ let lastPosition;
291
+ let x;
292
+ let y;
293
+ let change = false;
294
+ for (; j > -1; j--) {
295
+ lastPosition = path[j];
296
+ x = pushedItem.$item.x;
297
+ y = pushedItem.$item.y;
298
+ pushedItem.$item.x = lastPosition.x;
299
+ pushedItem.$item.y = lastPosition.y;
300
+ if (!this.gridster.findItemWithItem(pushedItem.$item)) {
301
+ pushedItem.setSize();
302
+ path.splice(j + 1, path.length - j - 1);
303
+ change = true;
304
+ }
305
+ else {
306
+ pushedItem.$item.x = x;
307
+ pushedItem.$item.y = y;
308
+ }
309
+ }
310
+ if (path.length < 2) {
311
+ this.removeFromPushed(i);
312
+ }
313
+ return change;
314
+ }
315
+ }
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJQdXNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYS1kYXNoYm9hcmQtZnJhbWV3b3JrL3NyYy9ncmlkc3Rlci9saWIvZ3JpZHN0ZXJQdXNoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLFlBQVk7SUFnQ3ZCLFlBQVksWUFBNEM7UUFGaEQsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUdwQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHO1lBQ2hCLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDcEUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNwRSxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3JFLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxR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QUM7UUFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNuQixZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN2QixDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdkIsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNwQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNoQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UgfSBmcm9tICcuL2dyaWRzdGVySXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JpZHN0ZXJDb21wb25lbnRJbnRlcmZhY2UgfSBmcm9tICcuL2dyaWRzdGVyLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBHcmlkc3RlclB1c2gge1xuICBwdWJsaWMgZnJvbVNvdXRoOiBzdHJpbmc7XG4gIHB1YmxpYyBmcm9tTm9ydGg6IHN0cmluZztcbiAgcHVibGljIGZyb21FYXN0OiBzdHJpbmc7XG4gIHB1YmxpYyBmcm9tV2VzdDogc3RyaW5nO1xuICBwcml2YXRlIHB1c2hlZEl0ZW1zOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2VbXTtcbiAgcHJpdmF0ZSBwdXNoZWRJdGVtc1RlbXA6IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZVtdO1xuICBwcml2YXRlIHB1c2hlZEl0ZW1zVGVtcFBhdGg6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfVtdW107XG4gIHByaXZhdGUgcHVzaGVkSXRlbXNQYXRoOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1bXVtdO1xuICBwcml2YXRlIGdyaWRzdGVySXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlO1xuICBwcml2YXRlIGdyaWRzdGVyOiBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZTtcbiAgcHJpdmF0ZSBwdXNoZWRJdGVtc09yZGVyITogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlW107XG4gIHByaXZhdGUgdHJ5UGF0dGVybjoge1xuICAgIGZyb21FYXN0OiAoKFxuICAgICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlLFxuICAgICAgZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2VcbiAgICApID0+IGJvb2xlYW4pW107XG4gICAgZnJvbVdlc3Q6ICgoXG4gICAgICBncmlkc3Rlckl0ZW1Db2xsaWRlOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UsXG4gICAgICBncmlkc3Rlckl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZVxuICAgICkgPT4gYm9vbGVhbilbXTtcbiAgICBmcm9tTm9ydGg6ICgoXG4gICAgICBncmlkc3Rlckl0ZW1Db2xsaWRlOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UsXG4gICAgICBncmlkc3Rlckl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZVxuICAgICkgPT4gYm9vbGVhbilbXTtcbiAgICBmcm9tU291dGg6ICgoXG4gICAgICBncmlkc3Rlckl0ZW1Db2xsaWRlOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UsXG4gICAgICBncmlkc3Rlckl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZVxuICAgICkgPT4gYm9vbGVhbilbXTtcbiAgfTtcbiAgcHJpdmF0ZSBpdGVyYXRpb24gPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGdyaWRzdGVySXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlKSB7XG4gICAgdGhpcy5wdXNoZWRJdGVtcyA9IFtdO1xuICAgIHRoaXMucHVzaGVkSXRlbXNUZW1wID0gW107XG4gICAgdGhpcy5wdXNoZWRJdGVtc1RlbXBQYXRoID0gW107XG4gICAgdGhpcy5wdXNoZWRJdGVtc1BhdGggPSBbXTtcbiAgICB0aGlzLmdyaWRzdGVySXRlbSA9IGdyaWRzdGVySXRlbTtcbiAgICB0aGlzLmdyaWRzdGVyID0gZ3JpZHN0ZXJJdGVtLmdyaWRzdGVyO1xuICAgIHRoaXMudHJ5UGF0dGVybiA9IHtcbiAgICAgIGZyb21FYXN0OiBbdGhpcy50cnlXZXN0LCB0aGlzLnRyeVNvdXRoLCB0aGlzLnRyeU5vcnRoLCB0aGlzLnRyeUVhc3RdLFxuICAgICAgZnJvbVdlc3Q6IFt0aGlzLnRyeUVhc3QsIHRoaXMudHJ5U291dGgsIHRoaXMudHJ5Tm9ydGgsIHRoaXMudHJ5V2VzdF0sXG4gICAgICBmcm9tTm9ydGg6IFt0aGlzLnRyeVNvdXRoLCB0aGlzLnRyeUVhc3QsIHRoaXMudHJ5V2VzdCwgdGhpcy50cnlOb3J0aF0sXG4gICAgICBmcm9tU291dGg6IFt0aGlzLnRyeU5vcnRoLCB0aGlzLnRyeUVhc3QsIHRoaXMudHJ5V2VzdCwgdGhpcy50cnlTb3V0aF1cbiAgICB9O1xuICAgIHRoaXMuZnJvbVNvdXRoID0gJ2Zyb21Tb3V0aCc7XG4gICAgdGhpcy5mcm9tTm9ydGggPSAnZnJvbU5vcnRoJztcbiAgICB0aGlzLmZyb21FYXN0ID0gJ2Zyb21FYXN0JztcbiAgICB0aGlzLmZyb21XZXN0ID0gJ2Zyb21XZXN0JztcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkc3RlciA9IHRoaXMuZ3JpZHN0ZXJJdGVtID0gbnVsbCE7XG4gIH1cblxuICBwdXNoSXRlbXMoZGlyZWN0aW9uOiBzdHJpbmcsIGRpc2FibGU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMucHVzaEl0ZW1zICYmICFkaXNhYmxlKSB7XG4gICAgICB0aGlzLnB1c2hlZEl0ZW1zT3JkZXIgPSBbXTtcbiAgICAgIHRoaXMuaXRlcmF0aW9uID0gMDtcbiAgICAgIGNvbnN0IHB1c2hlZCA9IHRoaXMucHVzaCh0aGlzLmdyaWRzdGVySXRlbSwgZGlyZWN0aW9uKTtcbiAgICAgIGlmICghcHVzaGVkKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZVRlbXBJdGVtcygpO1xuICAgICAgfVxuICAgICAgdGhpcy5wdXNoZWRJdGVtc09yZGVyID0gW107XG4gICAgICB0aGlzLnB1c2hlZEl0ZW1zVGVtcCA9IFtdO1xuICAgICAgdGhpcy5wdXNoZWRJdGVtc1RlbXBQYXRoID0gW107XG4gICAgICByZXR1cm4gcHVzaGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmVzdG9yZVRlbXBJdGVtcygpOiB2b2lkIHtcbiAgICBsZXQgaSA9IHRoaXMucHVzaGVkSXRlbXNUZW1wLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGkgPiAtMTsgaS0tKSB7XG4gICAgICB0aGlzLnJlbW92ZUZyb21UZW1wUHVzaGVkKHRoaXMucHVzaGVkSXRlbXNUZW1wW2ldKTtcbiAgICB9XG4gIH1cblxuICByZXN0b3JlSXRlbXMoKTogdm9pZCB7XG4gICAgbGV0IGkgPSAwO1xuICAgIGNvbnN0IGw6IG51bWJlciA9IHRoaXMucHVzaGVkSXRlbXMubGVuZ3RoO1xuICAgIGxldCBwdXNoZWRJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2U7XG4gICAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHB1c2hlZEl0ZW0gPSB0aGlzLnB1c2hlZEl0ZW1zW2ldO1xuICAgICAgcHVzaGVkSXRlbS4kaXRlbS54ID0gcHVzaGVkSXRlbS5pdGVtLnggfHwgMDtcbiAgICAgIHB1c2hlZEl0ZW0uJGl0ZW0ueSA9IHB1c2hlZEl0ZW0uaXRlbS55IHx8IDA7XG4gICAgICBwdXNoZWRJdGVtLnNldFNpemUoKTtcbiAgICB9XG4gICAgdGhpcy5wdXNoZWRJdGVtcyA9IFtdO1xuICAgIHRoaXMucHVzaGVkSXRlbXNQYXRoID0gW107XG4gIH1cblxuICBzZXRQdXNoZWRJdGVtcygpOiB2b2lkIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgY29uc3QgbDogbnVtYmVyID0gdGhpcy5wdXNoZWRJdGVtcy5sZW5ndGg7XG4gICAgbGV0IHB1c2hlZEl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZTtcbiAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgcHVzaGVkSXRlbSA9IHRoaXMucHVzaGVkSXRlbXNbaV07XG4gICAgICBwdXNoZWRJdGVtLmNoZWNrSXRlbUNoYW5nZXMocHVzaGVkSXRlbS4kaXRlbSwgcHVzaGVkSXRlbS5pdGVtKTtcbiAgICB9XG4gICAgdGhpcy5wdXNoZWRJdGVtcyA9IFtdO1xuICAgIHRoaXMucHVzaGVkSXRlbXNQYXRoID0gW107XG4gIH1cblxuICBjaGVja1B1c2hCYWNrKCk6IHZvaWQge1xuICAgIGxldCBpOiBudW1iZXIgPSB0aGlzLnB1c2hlZEl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xuICAgIGZvciAoOyBpID4gLTE7IGktLSkge1xuICAgICAgaWYgKHRoaXMuY2hlY2tQdXNoZWRJdGVtKHRoaXMucHVzaGVkSXRlbXNbaV0sIGkpKSB7XG4gICAgICAgIGNoYW5nZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgIHRoaXMuY2hlY2tQdXNoQmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHVzaChcbiAgICBncmlkc3Rlckl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSxcbiAgICBkaXJlY3Rpb246IHN0cmluZ1xuICApOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pdGVyYXRpb24gPiAxMDApIHtcbiAgICAgIGNvbnNvbGUud2FybignbWF4IGl0ZXJhdGlvbiByZWFjaGVkJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmdyaWRzdGVyLmNoZWNrR3JpZENvbGxpc2lvbihncmlkc3Rlckl0ZW0uJGl0ZW0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChkaXJlY3Rpb24gPT09ICcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZsaWN0czogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlW10gPVxuICAgICAgdGhpcy5ncmlkc3Rlci5maW5kSXRlbXNXaXRoSXRlbShncmlkc3Rlckl0ZW0uJGl0ZW0pO1xuICAgIGNvbnN0IGludmVydCA9IGRpcmVjdGlvbiA9PT0gdGhpcy5mcm9tTm9ydGggfHwgZGlyZWN0aW9uID09PSB0aGlzLmZyb21XZXN0O1xuICAgIC8vIHNvcnQgdGhlIGxpc3Qgb2YgY29uZmxpY3RzIGluIG9yZGVyIG9mIFt5LHhdLiBJbnZlcnQgd2hlbiB0aGUgcHVzaCBpcyBmcm9tIG5vcnRoIGFuZCB3ZXN0XG4gICAgLy8gdGhpcyBpcyBkb25lIHNvIHRoZXkgZG9uJ3QgY29uZmxpY3Qgd2l0Y2ggZWFjaCBvdGhlciBhbmQgcmV2ZXJ0IHBvc2l0aW9ucywga2VlcGluZyB0aGUgcHJldmlvdXMgb3JkZXJcbiAgICBjb25mbGljdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKGludmVydCkge1xuICAgICAgICByZXR1cm4gYi4kaXRlbS55IC0gYS4kaXRlbS55IHx8IGIuJGl0ZW0ueCAtIGEuJGl0ZW0ueDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhLiRpdGVtLnkgLSBiLiRpdGVtLnkgfHwgYS4kaXRlbS54IC0gYi4kaXRlbS54O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgaXRlbUNvbGxpc2lvbjogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlO1xuICAgIGxldCBtYWtlUHVzaCA9IHRydWU7XG4gICAgY29uc3QgcHVzaGVkSXRlbXM6IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZVtdID0gW107XG4gICAgZm9yICg7IGkgPCBjb25mbGljdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW1Db2xsaXNpb24gPSBjb25mbGljdHNbaV07XG4gICAgICBpZiAoaXRlbUNvbGxpc2lvbiA9PT0gdGhpcy5ncmlkc3Rlckl0ZW0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIWl0ZW1Db2xsaXNpb24uY2FuQmVEcmFnZ2VkKCkpIHtcbiAgICAgICAgbWFrZVB1c2ggPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb25zdCBwID0gdGhpcy5wdXNoZWRJdGVtc1RlbXAuaW5kZXhPZihpdGVtQ29sbGlzaW9uKTtcbiAgICAgIGlmIChwID4gLTEgJiYgdGhpcy5wdXNoZWRJdGVtc1RlbXBQYXRoW3BdLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgIC8vIHN0b3AgaWYgaXRlbSBpcyBwdXNoZWQgbW9yZSB0aGFuIDEwIHRpbWVzIHRvIGJyZWFrIGluZmluaXRlIGxvb3BzXG4gICAgICAgIG1ha2VQdXNoID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbGV0IHRyeVBhdHRlcm4gOmFueSA9IHRoaXMudHJ5UGF0dGVybjtcbiAgICAgIGlmIChcbiAgICAgICAgdHJ5UGF0dGVybltkaXJlY3Rpb25dWzBdLmNhbGwodGhpcywgaXRlbUNvbGxpc2lvbiwgZ3JpZHN0ZXJJdGVtKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucHVzaGVkSXRlbXNPcmRlci5wdXNoKGl0ZW1Db2xsaXNpb24pO1xuICAgICAgICBwdXNoZWRJdGVtcy5wdXNoKGl0ZW1Db2xsaXNpb24pO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHJ5UGF0dGVybltkaXJlY3Rpb25dWzFdLmNhbGwodGhpcywgaXRlbUNvbGxpc2lvbiwgZ3JpZHN0ZXJJdGVtKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucHVzaGVkSXRlbXNPcmRlci5wdXNoKGl0ZW1Db2xsaXNpb24pO1xuICAgICAgICBwdXNoZWRJdGVtcy5wdXNoKGl0ZW1Db2xsaXNpb24pO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHJ5UGF0dGVybltkaXJlY3Rpb25dWzJdLmNhbGwodGhpcywgaXRlbUNvbGxpc2lvbiwgZ3JpZHN0ZXJJdGVtKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucHVzaGVkSXRlbXNPcmRlci5wdXNoKGl0ZW1Db2xsaXNpb24pO1xuICAgICAgICBwdXNoZWRJdGVtcy5wdXNoKGl0ZW1Db2xsaXNpb24pO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHJ5UGF0dGVybltkaXJlY3Rpb25dWzNdLmNhbGwodGhpcywgaXRlbUNvbGxpc2lvbiwgZ3JpZHN0ZXJJdGVtKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucHVzaGVkSXRlbXNPcmRlci5wdXNoKGl0ZW1Db2xsaXNpb24pO1xuICAgICAgICBwdXNoZWRJdGVtcy5wdXNoKGl0ZW1Db2xsaXNpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFrZVB1c2ggPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbWFrZVB1c2gpIHtcbiAgICAgIGkgPSB0aGlzLnB1c2hlZEl0ZW1zT3JkZXIubGFzdEluZGV4T2YocHVzaGVkSXRlbXNbMF0pO1xuICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICBsZXQgaiA9IHRoaXMucHVzaGVkSXRlbXNPcmRlci5sZW5ndGggLSAxO1xuICAgICAgICBmb3IgKDsgaiA+PSBpOyBqLS0pIHtcbiAgICAgICAgICBpdGVtQ29sbGlzaW9uID0gdGhpcy5wdXNoZWRJdGVtc09yZGVyW2pdO1xuICAgICAgICAgIHRoaXMucHVzaGVkSXRlbXNPcmRlci5wb3AoKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21UZW1wUHVzaGVkKGl0ZW1Db2xsaXNpb24pO1xuICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbVB1c2hlZEl0ZW0oaXRlbUNvbGxpc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pdGVyYXRpb24rKztcbiAgICByZXR1cm4gbWFrZVB1c2g7XG4gIH1cblxuICBwcml2YXRlIHRyeVNvdXRoKFxuICAgIGdyaWRzdGVySXRlbUNvbGxpZGU6IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSxcbiAgICBncmlkc3Rlckl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMucHVzaERpcmVjdGlvbnMuc291dGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5hZGRUb1RlbXBQdXNoZWQoZ3JpZHN0ZXJJdGVtQ29sbGlkZSk7XG4gICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbS55ID1cbiAgICAgIGdyaWRzdGVySXRlbS4kaXRlbS55ICsgZ3JpZHN0ZXJJdGVtLiRpdGVtLnJvd3M7XG4gICAgaWYgKHRoaXMucHVzaChncmlkc3Rlckl0ZW1Db2xsaWRlLCB0aGlzLmZyb21Ob3J0aCkpIHtcbiAgICAgIGdyaWRzdGVySXRlbUNvbGxpZGUuc2V0U2l6ZSgpO1xuICAgICAgdGhpcy5hZGRUb1B1c2hlZChncmlkc3Rlckl0ZW1Db2xsaWRlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZUZyb21UZW1wUHVzaGVkKGdyaWRzdGVySXRlbUNvbGxpZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHRyeU5vcnRoKFxuICAgIGdyaWRzdGVySXRlbUNvbGxpZGU6IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSxcbiAgICBncmlkc3Rlckl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMucHVzaERpcmVjdGlvbnMubm9ydGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5hZGRUb1RlbXBQdXNoZWQoZ3JpZHN0ZXJJdGVtQ29sbGlkZSk7XG4gICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbS55ID1cbiAgICAgIGdyaWRzdGVySXRlbS4kaXRlbS55IC0gZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbS5yb3dzO1xuICAgIGlmICh0aGlzLnB1c2goZ3JpZHN0ZXJJdGVtQ29sbGlkZSwgdGhpcy5mcm9tU291dGgpKSB7XG4gICAgICBncmlkc3Rlckl0ZW1Db2xsaWRlLnNldFNpemUoKTtcbiAgICAgIHRoaXMuYWRkVG9QdXNoZWQoZ3JpZHN0ZXJJdGVtQ29sbGlkZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVGcm9tVGVtcFB1c2hlZChncmlkc3Rlckl0ZW1Db2xsaWRlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnlFYXN0KFxuICAgIGdyaWRzdGVySXRlbUNvbGxpZGU6IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSxcbiAgICBncmlkc3Rlckl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMucHVzaERpcmVjdGlvbnMuZWFzdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmFkZFRvVGVtcFB1c2hlZChncmlkc3Rlckl0ZW1Db2xsaWRlKTtcbiAgICBncmlkc3Rlckl0ZW1Db2xsaWRlLiRpdGVtLnggPVxuICAgICAgZ3JpZHN0ZXJJdGVtLiRpdGVtLnggKyBncmlkc3Rlckl0ZW0uJGl0ZW0uY29scztcbiAgICBpZiAodGhpcy5wdXNoKGdyaWRzdGVySXRlbUNvbGxpZGUsIHRoaXMuZnJvbVdlc3QpKSB7XG4gICAgICBncmlkc3Rlckl0ZW1Db2xsaWRlLnNldFNpemUoKTtcbiAgICAgIHRoaXMuYWRkVG9QdXNoZWQoZ3JpZHN0ZXJJdGVtQ29sbGlkZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVGcm9tVGVtcFB1c2hlZChncmlkc3Rlckl0ZW1Db2xsaWRlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnlXZXN0KFxuICAgIGdyaWRzdGVySXRlbUNvbGxpZGU6IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSxcbiAgICBncmlkc3Rlckl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMucHVzaERpcmVjdGlvbnMud2VzdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmFkZFRvVGVtcFB1c2hlZChncmlkc3Rlckl0ZW1Db2xsaWRlKTtcbiAgICBncmlkc3Rlckl0ZW1Db2xsaWRlLiRpdGVtLnggPVxuICAgICAgZ3JpZHN0ZXJJdGVtLiRpdGVtLnggLSBncmlkc3Rlckl0ZW1Db2xsaWRlLiRpdGVtLmNvbHM7XG4gICAgaWYgKHRoaXMucHVzaChncmlkc3Rlckl0ZW1Db2xsaWRlLCB0aGlzLmZyb21FYXN0KSkge1xuICAgICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZS5zZXRTaXplKCk7XG4gICAgICB0aGlzLmFkZFRvUHVzaGVkKGdyaWRzdGVySXRlbUNvbGxpZGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3ZlRnJvbVRlbXBQdXNoZWQoZ3JpZHN0ZXJJdGVtQ29sbGlkZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9UZW1wUHVzaGVkKGdyaWRzdGVySXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlKTogdm9pZCB7XG4gICAgbGV0IGkgPSB0aGlzLnB1c2hlZEl0ZW1zVGVtcC5pbmRleE9mKGdyaWRzdGVySXRlbSk7XG4gICAgaWYgKGkgPT09IC0xKSB7XG4gICAgICBpID0gdGhpcy5wdXNoZWRJdGVtc1RlbXAucHVzaChncmlkc3Rlckl0ZW0pIC0gMTtcbiAgICAgIHRoaXMucHVzaGVkSXRlbXNUZW1wUGF0aFtpXSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnB1c2hlZEl0ZW1zVGVtcFBhdGhbaV0ucHVzaCh7XG4gICAgICB4OiBncmlkc3Rlckl0ZW0uJGl0ZW0ueCxcbiAgICAgIHk6IGdyaWRzdGVySXRlbS4kaXRlbS55XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUZyb21UZW1wUHVzaGVkKFxuICAgIGdyaWRzdGVySXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGkgPSB0aGlzLnB1c2hlZEl0ZW1zVGVtcC5pbmRleE9mKGdyaWRzdGVySXRlbSk7XG4gICAgY29uc3QgdGVtcFBvc2l0aW9uID0gdGhpcy5wdXNoZWRJdGVtc1RlbXBQYXRoW2ldLnBvcCgpO1xuICAgIGlmICghdGVtcFBvc2l0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyaWRzdGVySXRlbS4kaXRlbS54ID0gdGVtcFBvc2l0aW9uLng7XG4gICAgZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgPSB0ZW1wUG9zaXRpb24ueTtcbiAgICBncmlkc3Rlckl0ZW0uc2V0U2l6ZSgpO1xuICAgIGlmICghdGhpcy5wdXNoZWRJdGVtc1RlbXBQYXRoW2ldLmxlbmd0aCkge1xuICAgICAgdGhpcy5wdXNoZWRJdGVtc1RlbXAuc3BsaWNlKGksIDEpO1xuICAgICAgdGhpcy5wdXNoZWRJdGVtc1RlbXBQYXRoLnNwbGljZShpLCAxKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZFRvUHVzaGVkKGdyaWRzdGVySXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHVzaGVkSXRlbXMuaW5kZXhPZihncmlkc3Rlckl0ZW0pIDwgMCkge1xuICAgICAgdGhpcy5wdXNoZWRJdGVtcy5wdXNoKGdyaWRzdGVySXRlbSk7XG4gICAgICB0aGlzLnB1c2hlZEl0ZW1zUGF0aC5wdXNoKFtcbiAgICAgICAgeyB4OiBncmlkc3Rlckl0ZW0uaXRlbS54IHx8IDAsIHk6IGdyaWRzdGVySXRlbS5pdGVtLnkgfHwgMCB9LFxuICAgICAgICB7IHg6IGdyaWRzdGVySXRlbS4kaXRlbS54LCB5OiBncmlkc3Rlckl0ZW0uJGl0ZW0ueSB9XG4gICAgICBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaSA9IHRoaXMucHVzaGVkSXRlbXMuaW5kZXhPZihncmlkc3Rlckl0ZW0pO1xuICAgICAgdGhpcy5wdXNoZWRJdGVtc1BhdGhbaV0ucHVzaCh7XG4gICAgICAgIHg6IGdyaWRzdGVySXRlbS4kaXRlbS54LFxuICAgICAgICB5OiBncmlkc3Rlckl0ZW0uJGl0ZW0ueVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVGcm9tUHVzaGVkKGk6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChpID4gLTEpIHtcbiAgICAgIHRoaXMucHVzaGVkSXRlbXMuc3BsaWNlKGksIDEpO1xuICAgICAgdGhpcy5wdXNoZWRJdGVtc1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRnJvbVB1c2hlZEl0ZW0oXG4gICAgZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2VcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgaSA9IHRoaXMucHVzaGVkSXRlbXMuaW5kZXhPZihncmlkc3Rlckl0ZW0pO1xuICAgIGlmIChpID4gLTEpIHtcbiAgICAgIHRoaXMucHVzaGVkSXRlbXNQYXRoW2ldLnBvcCgpO1xuICAgICAgaWYgKCF0aGlzLnB1c2hlZEl0ZW1zUGF0aC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5wdXNoZWRJdGVtcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHRoaXMucHVzaGVkSXRlbXNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrUHVzaGVkSXRlbShcbiAgICBwdXNoZWRJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UsXG4gICAgaTogbnVtYmVyXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLnB1c2hlZEl0ZW1zUGF0aFtpXTtcbiAgICBsZXQgaiA9IHBhdGgubGVuZ3RoIC0gMjtcbiAgICBsZXQgbGFzdFBvc2l0aW9uO1xuICAgIGxldCB4O1xuICAgIGxldCB5O1xuICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcbiAgICBmb3IgKDsgaiA+IC0xOyBqLS0pIHtcbiAgICAgIGxhc3RQb3NpdGlvbiA9IHBhdGhbal07XG4gICAgICB4ID0gcHVzaGVkSXRlbS4kaXRlbS54O1xuICAgICAgeSA9IHB1c2hlZEl0ZW0uJGl0ZW0ueTtcbiAgICAgIHB1c2hlZEl0ZW0uJGl0ZW0ueCA9IGxhc3RQb3NpdGlvbi54O1xuICAgICAgcHVzaGVkSXRlbS4kaXRlbS55ID0gbGFzdFBvc2l0aW9uLnk7XG4gICAgICBpZiAoIXRoaXMuZ3JpZHN0ZXIuZmluZEl0ZW1XaXRoSXRlbShwdXNoZWRJdGVtLiRpdGVtKSkge1xuICAgICAgICBwdXNoZWRJdGVtLnNldFNpemUoKTtcbiAgICAgICAgcGF0aC5zcGxpY2UoaiArIDEsIHBhdGgubGVuZ3RoIC0gaiAtIDEpO1xuICAgICAgICBjaGFuZ2UgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHVzaGVkSXRlbS4kaXRlbS54ID0geDtcbiAgICAgICAgcHVzaGVkSXRlbS4kaXRlbS55ID0geTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhdGgubGVuZ3RoIDwgMikge1xuICAgICAgdGhpcy5yZW1vdmVGcm9tUHVzaGVkKGkpO1xuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlO1xuICB9XG59XG4iXX0=