@tetacom/ng-components 1.0.35 → 1.0.38

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