@libs-ui/components-drag-drop 0.2.96 → 0.2.98

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.
@@ -8,7 +8,7 @@ export declare class LibsUiComponentsDragContainerDirective extends LibsUiCompon
8
8
  readonly disableDragContainer: import("@angular/core").InputSignal<boolean | undefined>;
9
9
  readonly mode: import("@angular/core").InputSignalWithTransform<string, "move" | "copy" | "deepCopy">;
10
10
  readonly directionDrag: import("@angular/core").InputSignal<"horizontal" | "vertical" | undefined>;
11
- readonly viewEncapsulation: import("@angular/core").InputSignalWithTransform<"emulated" | "none", "emulated" | "none" | undefined>;
11
+ readonly viewEncapsulation: import("@angular/core").InputSignalWithTransform<"none" | "emulated", "none" | "emulated" | undefined>;
12
12
  readonly acceptDragSameGroup: import("@angular/core").InputSignalWithTransform<boolean, boolean | undefined>;
13
13
  readonly placeholder: import("@angular/core").InputSignalWithTransform<boolean, boolean | undefined>;
14
14
  readonly groupName: import("@angular/core").InputSignalWithTransform<string, string | undefined>;
@@ -147,7 +147,7 @@ export class LibsUiDragItemDirective extends LibsUiDragItemInContainerVirtualScr
147
147
  this.dragDropService.ItemDragInfo = undefined;
148
148
  this.dragDropService.OnDragEnd.next(dragEndEvent);
149
149
  this.outDragEnd.emit(dragEndEvent);
150
- document.body.classList.remove('select-none');
150
+ document.body.classList.remove('!select-none');
151
151
  nodeClone.classList.remove('libs-ui-drag-drop-item-dragging');
152
152
  styleTag.remove();
153
153
  updatePositionElementRootAndRemoveNodeClone();
@@ -206,7 +206,7 @@ export class LibsUiDragItemDirective extends LibsUiDragItemInContainerVirtualScr
206
206
  nodeClone.style.height = `${rectElement.height}px`;
207
207
  nodeClone.style.left = `${-999}px`;
208
208
  nodeClone.style.top = `${-999}px`;
209
- document.body.classList.add('select-none');
209
+ document.body.classList.add('!select-none');
210
210
  document.body.append(nodeClone);
211
211
  if (this.dragRootElement()) {
212
212
  element.classList.add('opacity-0');
@@ -260,4 +260,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
260
260
  standalone: true
261
261
  }]
262
262
  }], ctorParameters: () => [] });
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kcmFnLWRyb3Avc3JjL2RyYWctaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBYSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEcsT0FBTyxFQUFjLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSwrQ0FBK0MsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOztBQVFwSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsK0NBQStDO0lBQzFGLGNBQWM7SUFDTixVQUFVLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLFVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFNUMsV0FBVztJQUNYLHFFQUFxRTtJQUM1RCxPQUFPLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLElBQUksR0FBRyxLQUFLLENBQU0sU0FBUyxDQUFDLENBQUM7SUFDN0IsNEJBQTRCLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDekQsb0NBQW9DO0lBQzNCLGdDQUFnQyxHQUFHLEtBQUssQ0FBNkIsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUcsZUFBZSxHQUFHLEtBQUss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QUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0FwU1UsdUJBQXVCOzRGQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBTG5DLFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0IH0gZnJvbSBcIkBsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXNcIjtcbmltcG9ydCB7IGNoZWNrTW91c2VPdmVySW5Db250YWluZXIsIGNoZWNrVmlld0luU2NyZWVuLCBnZXQsIGdldFZpZXdwb3J0IH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tRXZlbnQsIG1lcmdlTWFwLCBzdGFydFdpdGgsIHRha2VVbnRpbCwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgTGlic1VpRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxEaXJlY3RpdmUgfSBmcm9tIFwiLi9kcmFnLWl0ZW0taW4tY29udGFpbmVyLXZpcnR1YWwtc2Nyb2xsLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgSURyYWdFbmQsIElEcmFnTGVhdmUsIElEcmFnT3ZlciwgSURyYWdTdGFydCwgSURyb3AgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2V2ZW50LmludGVyZmFjZVwiO1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6IFwiW0xpYnNVaURyYWdJdGVtRGlyZWN0aXZlXVwiLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlIGV4dGVuZHMgTGlic1VpRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcml2YXRlIGlzRHJhZ092ZXIgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGlzRHJhZ2dpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qIElOUFVUICovXG4gIC8vc2V0dXAgMyBmaWVsZCBwaMOtYSBkxrDhu5tpIG7hur91IMSRYW5nIHPhu60gZOG7pW5nIGl0ZW0gdHJvbmcgdmlydHVhbC1zY3JvbGwgXG4gIHJlYWRvbmx5IGZpZWxkSWQgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgaXRlbSA9IGlucHV0PGFueT4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgaXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICByZWFkb25seSB0aHJvdHRsZVRpbWVIYW5kbGVyRHJhZ2dpbmdFdmVudCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigwLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgfHwgMCB9KTtcbiAgcmVhZG9ubHkgaWdub3JlU3RvcEV2ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb25seU1vdXNlRG93blN0b3BFdmVudCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRyYWdSb290RWxlbWVudCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGdyb3VwTmFtZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignZ3JvdXBEcmFnQW5kRHJvcERlZmF1bHQnLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gJ2dyb3VwRHJhZ0FuZERyb3BEZWZhdWx0JyB9KTtcbiAgcmVhZG9ubHkgZHJhZ0JvdW5kYXJ5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZHJhZ0JvdW5kYXJ5QWNjZXB0TW91c2VMZWF2ZUNvbnRhaW5lciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGVsZW1lbnRDb250YWluZXIgPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDEzMDAsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyAxMzAwIH0pO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICAvKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0RHJhZ1N0YXJ0ID0gb3V0cHV0PElEcmFnU3RhcnQ+KCk7XG4gIHJlYWRvbmx5IG91dERyYWdPdmVyID0gb3V0cHV0PElEcmFnT3Zlcj4oKTtcbiAgcmVhZG9ubHkgb3V0RHJhZ0xlYXZlID0gb3V0cHV0PElEcmFnTGVhdmU+KCk7XG4gIHJlYWRvbmx5IG91dERyYWdFbmQgPSBvdXRwdXQ8SURyYWdFbmQ+KCk7XG4gIHJlYWRvbmx5IG91dERyb3BwZWQgPSBvdXRwdXQ8SURyb3A+KCk7XG5cbiAgLyogSU5KRUNUICovXG4gIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShgJHt0aGlzLmRyYWdEcm9wU2VydmljZS5DbGFzc0l0ZW1EZWZpbmV9LWRpc2FibGVgKTtcbiAgICAgIGlmICh0aGlzLmRpc2FibGUoKSAmJiAhZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoYCR7dGhpcy5kcmFnRHJvcFNlcnZpY2UuQ2xhc3NJdGVtRGVmaW5lfS1kaXNhYmxlYCkpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGAke3RoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNsYXNzSXRlbURlZmluZX0tZGlzYWJsZWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGhpcy5maWVsZElkKCkpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdmaWVsZF9pZCcsIHRoaXMuZmllbGRJZCgpKTtcbiAgICAgIGlmICh0aGlzLml0ZW0oKSkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnaXRlbV9pZCcsIGdldCh0aGlzLml0ZW0oKSwgdGhpcy5maWVsZElkKCkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2dyb3VwTmFtZScsIHRoaXMuZ3JvdXBOYW1lKCkpO1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmRyYWdEcm9wU2VydmljZS5DbGFzc0l0ZW1EZWZpbmUpO1xuICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ2dpbmcucGlwZSh0aHJvdHRsZVRpbWUodGhpcy50aHJvdHRsZVRpbWVIYW5kbGVyRHJhZ2dpbmdFdmVudCgpKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKChldmVudERyYWdnaW5nKSA9PiB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlKCkgfHwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVEcmFnQ29udGFpbmVyJykgfHwgKHRoaXMuZmllbGRJZCgpICYmIHRoaXMuaXRlbSgpICYmIGV2ZW50RHJhZ2dpbmcuZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdpdGVtX2lkJykgPT09IGdldCh0aGlzLml0ZW0oKSwgdGhpcy5maWVsZElkKCkpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjb250YWluZXJCeUlkID0gdGhpcy5kcmFnRHJvcFNlcnZpY2UuQ29udGFpbmVyKCkuZ2V0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdncm91cElEJykgfHwgJycpO1xuXG4gICAgICBpZiAoY29udGFpbmVyQnlJZCkge1xuICAgICAgICBpZiAoZXZlbnREcmFnZ2luZy5lbGVtZW50S2VlcENvbnRhaW5lciB8fCAhdGhpcy5kcmFnRHJvcFNlcnZpY2UuY2hlY2tFbGVtZW50T3ZlckFjY2VwdEVsZW1lbnREcmFnKGNvbnRhaW5lckJ5SWQuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2dyb3VwTmFtZScpLCBldmVudERyYWdnaW5nLmVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnZ3JvdXBOYW1lJyksIGV2ZW50RHJhZ2dpbmcuZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdkcm9wVG9Hcm91cE5hbWUnKSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja01vdXNlT3ZlckluQ29udGFpbmVyKGV2ZW50RHJhZ2dpbmcubW91c2VQb3NpdGlvbiwgZWxlbWVudCkgJiYgZWxlbWVudCAhPT0gZXZlbnREcmFnZ2luZy5lbGVtZW50RHJhZyAmJiBjb250YWluZXJCeUlkICYmIGNoZWNrVmlld0luU2NyZWVuKGNvbnRhaW5lckJ5SWQuZWxlbWVudCwgZWxlbWVudCwgY29udGFpbmVyQnlJZC5lbGVtZW50U2Nyb2xsKSkge1xuICAgICAgICBpZiAodGhpcy5pc0RyYWdPdmVyKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnREcmFnT3ZlciA9IHsgLi4uZXZlbnREcmFnZ2luZywgZWxlbWVudERyYWdPdmVyOiBlbGVtZW50IH07XG5cbiAgICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25EcmFnT3Zlci5uZXh0KGV2ZW50RHJhZ092ZXIpO1xuICAgICAgICB0aGlzLm91dERyYWdPdmVyLmVtaXQoZXZlbnREcmFnT3Zlcik7XG4gICAgICAgIHRoaXMuaXNEcmFnT3Zlci5zZXQodHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pc0RyYWdPdmVyKCkpIHtcbiAgICAgICAgY29uc3QgZXZlbnREcmFnTGVhdmUgPSB7IC4uLmV2ZW50RHJhZ2dpbmcsIGVsZW1lbnREcmFnTGVhdmU6IGVsZW1lbnQgfTtcbiAgICAgICAgdGhpcy5pc0RyYWdPdmVyLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ0xlYXZlLm5leHQoZXZlbnREcmFnTGVhdmUpO1xuICAgICAgICB0aGlzLm91dERyYWdMZWF2ZS5lbWl0KGV2ZW50RHJhZ0xlYXZlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJvcENvbnRhaW5lci5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoZXZlbnREcm9wKSA9PiB7XG4gICAgICBpZiAoZXZlbnREcm9wLmVsZW1lbnREcm9wICE9PSBlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRyb3BFdmVudCA9IHsgZWxlbWVudERyYWc6IGV2ZW50RHJvcC5lbGVtZW50RHJhZywgZWxlbWVudERyb3A6IGVsZW1lbnQsIGl0ZW1EcmFnSW5mbzogZXZlbnREcm9wLml0ZW1EcmFnSW5mbyB9O1xuXG4gICAgICB0aGlzLm91dERyb3BwZWQuZW1pdChkcm9wRXZlbnQpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0eWxlVGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXG4gICAgc3R5bGVUYWcudGV4dENvbnRlbnQgPSBgLmxpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZHJhZ2dpbmd7Y3Vyc29yOm1vdmV9YDtcbiAgICBsZXQgbm9kZUNsb25lID0gZWxlbWVudDtcbiAgICBsZXQgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQgPSAtMTtcbiAgICBsZXQgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZVRvcCA9IC0xO1xuICAgIGxldCBjb250ZXh0TWVudSA9IGZhbHNlO1xuICAgIGNvbnN0IHN0b3BFdmVudE1vdXNlID0gKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghdGhpcy5pZ25vcmVTdG9wRXZlbnQoKSkge1xuICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG1vdXNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVQb3NpdGlvbkVsZW1lbnRSb290QW5kUmVtb3ZlTm9kZUNsb25lID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZHJhZ1Jvb3RFbGVtZW50KCkpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyQnlJZCA9IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNvbnRhaW5lcigpLmdldChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpIHx8ICcnKTtcblxuICAgICAgICBjb25zdCBjb250YWluZXJJdGVtID0gdGhpcy5lbGVtZW50Q29udGFpbmVyKCkgfHwgY29udGFpbmVyQnlJZD8uZWxlbWVudFNjcm9sbCB8fCBjb250YWluZXJCeUlkPy5lbGVtZW50IHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIGNvbnN0IHJlY3RDb250YWluZXIgPSBjb250YWluZXJJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCByZWN0Tm9kZUNsb25lID0gbm9kZUNsb25lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBudW1iZXJTdWIgPSBOdW1iZXIoKGdldENvbXB1dGVkU3R5bGUoY29udGFpbmVySXRlbSkuYm9yZGVyLm1hdGNoKC9cXGQrcHgvZ2kpIHx8IFsnMCddKVswXS5yZXBsYWNlKC9cXEQrL2lnLCAnJykpLnZhbHVlT2YoKTtcblxuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSAocmVjdE5vZGVDbG9uZS5sZWZ0IC0gcmVjdENvbnRhaW5lci5sZWZ0IC0gbnVtYmVyU3ViKSArICdweCc7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gKHJlY3ROb2RlQ2xvbmUudG9wIC0gcmVjdENvbnRhaW5lci50b3AgLSBudW1iZXJTdWIpICsgJ3B4JztcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdvcGFjaXR5LTAnKTtcbiAgICAgIH1cbiAgICAgIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0ID0gLTE7XG4gICAgICBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wID0gLTE7XG4gICAgICBub2RlQ2xvbmUucmVtb3ZlKCk7XG4gICAgfTtcblxuICAgIGZyb21FdmVudChkb2N1bWVudCwgJ2NvbnRleHRtZW51JykucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uRWxlbWVudFJvb3RBbmRSZW1vdmVOb2RlQ2xvbmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0TWVudSA9IHRydWU7XG5cbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICkuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBkb2N1bWVudE1vdXNlVXAgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZXVwJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGV2ZW50TW91c2V1cCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlTW91c2VFdmVudHNXaGVuTW92ZU92ZXJJZnJhbWUoJ2F1dG8nKTtcbiAgICAgICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5yZXNldEl0ZW1DbGljaygpO1xuICAgICAgICAgIHN0b3BFdmVudE1vdXNlKGV2ZW50TW91c2V1cCk7XG4gICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZSgpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlRHJhZ0NvbnRhaW5lcicpIHx8IGNvbnRleHRNZW51IHx8ICF0aGlzLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICAgICAgY29udGV4dE1lbnUgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250ZXh0TWVudSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLlRhcmdldEl0ZW1EcmFnRmxhZyk7XG4gICAgICAgICAgaWYgKHRoaXMuaXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG1vdXNlUG9zaXRpb24gPSB7IGNsaWVudFg6IGV2ZW50TW91c2V1cC5jbGllbnRYLCBjbGllbnRZOiBldmVudE1vdXNldXAuY2xpZW50WSB9O1xuXG4gICAgICAgICAgaWYgKHRoaXMuZHJhZ0JvdW5kYXJ5KCkgJiYgdGhpcy5kcmFnQm91bmRhcnlBY2NlcHRNb3VzZUxlYXZlQ29udGFpbmVyKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0Q2xpZW50UG9zaXRpb24oZWxlbWVudCwgbW91c2VQb3NpdGlvbiwgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQsIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3AsIHRoaXMuZHJhZ0JvdW5kYXJ5KCksIHRoaXMuZWxlbWVudENvbnRhaW5lcigpKTtcblxuICAgICAgICAgICAgbW91c2VQb3NpdGlvbi5jbGllbnRYID0gcmVzdWx0LmNsaWVudFg7XG4gICAgICAgICAgICBtb3VzZVBvc2l0aW9uLmNsaWVudFkgPSByZXN1bHQuY2xpZW50WTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZHJhZ0VuZEV2ZW50ID0geyBtb3VzZVBvc2l0aW9uLCBlbGVtZW50RHJhZzogZWxlbWVudCwgaXRlbURyYWdJbmZvOiB0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtRHJhZ0luZm8gfTtcblxuICAgICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1EcmFnSW5mbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5PbkRyYWdFbmQubmV4dChkcmFnRW5kRXZlbnQpO1xuICAgICAgICAgIHRoaXMub3V0RHJhZ0VuZC5lbWl0KGRyYWdFbmRFdmVudCk7XG5cbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdC1ub25lJyk7XG4gICAgICAgICAgbm9kZUNsb25lLmNsYXNzTGlzdC5yZW1vdmUoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZHJhZ2dpbmcnKTtcbiAgICAgICAgICBzdHlsZVRhZy5yZW1vdmUoKTtcblxuICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uRWxlbWVudFJvb3RBbmRSZW1vdmVOb2RlQ2xvbmUoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSlcbiAgICAgICk7XG5cbiAgICBjb25zdCBlbGVtZW50TW91c2VEb3duID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGVsZW1lbnQsICdtb3VzZWRvd24nKS5waXBlKFxuICAgICAgdGFwKGV2ZW50TW91c2Vkb3duID0+IHtcbiAgICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuSXRlbUNsaWNrID0gZWxlbWVudDtcbiAgICAgICAgY29udGV4dE1lbnUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51cGRhdGVNb3VzZUV2ZW50c1doZW5Nb3ZlT3ZlcklmcmFtZSgnbm9uZScpO1xuICAgICAgICBpZiAoKHRoaXMuZGlzYWJsZSgpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlRHJhZ0NvbnRhaW5lcicpIHx8ICF0aGlzLmlzRHJhZ2dpbmcoKSB8fCB0aGlzLml0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwoKSkgJiYgIXRoaXMub25seU1vdXNlRG93blN0b3BFdmVudCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0b3BFdmVudE1vdXNlKGV2ZW50TW91c2Vkb3duKTtcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICk7XG4gICAgY29uc3QgZG9jdW1lbnRNb3VzZU1vdmUgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZW1vdmUnKS5waXBlKHRhcCgoZXZlbnRNb3VzZW1vdmUpID0+IHN0b3BFdmVudE1vdXNlKGV2ZW50TW91c2Vtb3ZlKSksIHRha2VVbnRpbCgoZG9jdW1lbnRNb3VzZVVwKSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpO1xuICAgIGNvbnN0IGRyYWcgPSBlbGVtZW50TW91c2VEb3duLnBpcGUobWVyZ2VNYXAoKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IGRvY3VtZW50TW91c2VNb3ZlLnBpcGUoc3RhcnRXaXRoKChtb3VzZUV2ZW50KSkpKSkgYXMgT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PjtcbiAgICBsZXQgaWdub3JlTW91c2Vkb3duID0gZmFsc2U7XG5cbiAgICBkcmFnLnBpcGUodGFwKChkcmFnTW91c2VFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgcmVjdEVsZW1lbnQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSBnZXRWaWV3cG9ydCgpIGFzIElCb3VuZGluZ0NsaWVudFJlY3Q7XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGUoKSB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZURyYWdDb250YWluZXInKSB8fCAhZHJhZ01vdXNlRXZlbnQuY2xpZW50WCB8fCAoIWlnbm9yZU1vdXNlZG93biAmJiBkcmFnTW91c2VFdmVudC50eXBlID09PSAnbW91c2Vkb3duJyAmJiByZWN0RWxlbWVudC5oZWlnaHQgKyByZWN0RWxlbWVudC50b3AgPj0gdmlld3BvcnQuaGVpZ2h0KSkge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgY2xpZW50WCwgY2xpZW50WSB9ID0gZHJhZ01vdXNlRXZlbnQ7XG5cbiAgICAgIGlmIChkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlTGVmdCA9PT0gLTEpIHtcbiAgICAgICAgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQgPSBjbGllbnRYIC0gcmVjdEVsZW1lbnQubGVmdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3AgPT09IC0xKSB7XG4gICAgICAgIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3AgPSBjbGllbnRZIC0gcmVjdEVsZW1lbnQudG9wO1xuICAgICAgfVxuICAgIH0pLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoZHJhZ01vdXNlRXZlbnQgPT4ge1xuICAgICAgaWYgKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1DbGljay5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSBlbGVtZW50KS5zb21lKGl0ZW0gPT4gZWxlbWVudC5jb250YWlucyhpdGVtKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGlzYWJsZSgpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlRHJhZ0NvbnRhaW5lcicpIHx8ICFkcmFnTW91c2VFdmVudC5jbGllbnRYIHx8IGRyYWdNb3VzZUV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nIHx8IGNvbnRleHRNZW51IHx8ICh0aGlzLml0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwoKSAmJiB0aGlzLmlzRHJhZ2dpbmcoKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWdub3JlTW91c2Vkb3duID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHsgY2xpZW50WCwgY2xpZW50WSB9ID0gZHJhZ01vdXNlRXZlbnQ7XG4gICAgICBjb25zdCBtb3VzZVBvc2l0aW9uID0geyBjbGllbnRYLCBjbGllbnRZIH07XG4gICAgICBjb25zdCByZWN0RWxlbWVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKCkpIHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nLnNldCh0cnVlKTtcbiAgICAgICAgY29uc3QgZXZlbnREcmFnU3RhcnQgPSB7IG1vdXNlUG9zaXRpb24sIGVsZW1lbnREcmFnOiBlbGVtZW50LCBpdGVtRHJhZ0luZm86IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1EcmFnSW5mbyB9O1xuXG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLlRhcmdldEl0ZW1EcmFnRmxhZywgJ3RydWUnKTtcbiAgICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25EcmFnU3RhcnQubmV4dChldmVudERyYWdTdGFydCk7XG4gICAgICAgIGV2ZW50RHJhZ1N0YXJ0Lml0ZW1EcmFnSW5mbyA9IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1EcmFnSW5mbztcbiAgICAgICAgdGhpcy5vdXREcmFnU3RhcnQuZW1pdChldmVudERyYWdTdGFydCk7XG5cbiAgICAgICAgbm9kZUNsb25lID0gZWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIG5vZGVDbG9uZS5zdHlsZS56SW5kZXggPSBgJHt0aGlzLnpJbmRleCgpfWA7XG4gICAgICAgIG5vZGVDbG9uZS5jbGFzc0xpc3QuYWRkKCchZml4ZWQnKTtcbiAgICAgICAgbm9kZUNsb25lLmNsYXNzTGlzdC5yZW1vdmUoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tb3JpZ2luLXBsYWNlaG9sZGVyJyk7XG4gICAgICAgIG5vZGVDbG9uZS5jbGFzc0xpc3QucmVtb3ZlKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLXBsYWNlaG9sZGVyJyk7XG4gICAgICAgIG5vZGVDbG9uZS5hcHBlbmRDaGlsZChzdHlsZVRhZyk7XG4gICAgICAgIG5vZGVDbG9uZS5jbGFzc0xpc3QuYWRkKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLWRyYWdnaW5nJyk7XG4gICAgICAgIG5vZGVDbG9uZS5zdHlsZS53aWR0aCA9IGAke3JlY3RFbGVtZW50LndpZHRofXB4YDtcbiAgICAgICAgbm9kZUNsb25lLnN0eWxlLmhlaWdodCA9IGAke3JlY3RFbGVtZW50LmhlaWdodH1weGA7XG4gICAgICAgIG5vZGVDbG9uZS5zdHlsZS5sZWZ0ID0gYCR7LTk5OX1weGA7XG4gICAgICAgIG5vZGVDbG9uZS5zdHlsZS50b3AgPSBgJHstOTk5fXB4YDtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdzZWxlY3Qtbm9uZScpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChub2RlQ2xvbmUpO1xuICAgICAgICBpZiAodGhpcy5kcmFnUm9vdEVsZW1lbnQoKSkge1xuICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnb3BhY2l0eS0wJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsKCkpIHtcbiAgICAgICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5PbkRyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsLm5leHQoe1xuICAgICAgICAgICAgaXRlbURyYWdJbmZvOiB0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtRHJhZ0luZm8sXG4gICAgICAgICAgICBlbGVtZW50RHJhZzogbm9kZUNsb25lLFxuICAgICAgICAgICAgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZVRvcCxcbiAgICAgICAgICAgIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0LFxuICAgICAgICAgICAgZWxlbWVudENvbnRhaW5lcjogdGhpcy5lbGVtZW50Q29udGFpbmVyKCksXG4gICAgICAgICAgICBkcmFnQm91bmRhcnk6IHRoaXMuZHJhZ0JvdW5kYXJ5KCksXG4gICAgICAgICAgICBkcmFnQm91bmRhcnlBY2NlcHRNb3VzZUxlYXZlQ29udGFpbmVyOiB0aGlzLmRyYWdCb3VuZGFyeUFjY2VwdE1vdXNlTGVhdmVDb250YWluZXIoKSxcbiAgICAgICAgICAgIGlnbm9yZVN0b3BFdmVudDogdGhpcy5pZ25vcmVTdG9wRXZlbnQoKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldENsaWVudFBvc2l0aW9uKG5vZGVDbG9uZSwgbW91c2VQb3NpdGlvbiwgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQsIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3AsIHRoaXMuZHJhZ0JvdW5kYXJ5KCksIHRoaXMuZWxlbWVudENvbnRhaW5lcigpKTtcblxuICAgICAgY29uc3QgZWxlbWVudEtlZXBDb250YWluZXIgPSByZXN1bHQuZWxlbWVudEtlZXBDb250YWluZXI7XG4gICAgICBjb25zdCBsZWZ0ID0gcmVzdWx0LmNsaWVudFggLSBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlTGVmdDtcbiAgICAgIGNvbnN0IHRvcCA9IHJlc3VsdC5jbGllbnRZIC0gZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZVRvcDtcblxuICAgICAgaWYgKHRoaXMuZHJhZ0JvdW5kYXJ5KCkgJiYgdGhpcy5kcmFnQm91bmRhcnlBY2NlcHRNb3VzZUxlYXZlQ29udGFpbmVyKCkpIHtcbiAgICAgICAgaWYgKGNsaWVudFggPCByZXN1bHQudmlld3BvcnQubGVmdCkge1xuICAgICAgICAgIG1vdXNlUG9zaXRpb24uY2xpZW50WCA9IHJlc3VsdC52aWV3cG9ydC5sZWZ0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGllbnRYID4gcmVzdWx0LnZpZXdwb3J0LndpZHRoKSB7XG4gICAgICAgICAgbW91c2VQb3NpdGlvbi5jbGllbnRYID0gcmVzdWx0LnZpZXdwb3J0LndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGllbnRZIDwgcmVzdWx0LnZpZXdwb3J0LnRvcCkge1xuICAgICAgICAgIG1vdXNlUG9zaXRpb24uY2xpZW50WSA9IHJlc3VsdC52aWV3cG9ydC50b3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsaWVudFkgPiByZXN1bHQudmlld3BvcnQuaGVpZ2h0KSB7XG4gICAgICAgICAgbW91c2VQb3NpdGlvbi5jbGllbnRZID0gcmVzdWx0LnZpZXdwb3J0LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbm9kZUNsb25lLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YDtcbiAgICAgIG5vZGVDbG9uZS5zdHlsZS50b3AgPSBgJHt0b3B9cHhgO1xuXG4gICAgICBjb25zdCBldmVudERyYWdnaW5nID0geyBtb3VzZVBvc2l0aW9uLCBlbGVtZW50RHJhZzogbm9kZUNsb25lLCBlbGVtZW50S2VlcENvbnRhaW5lciwgaXRlbURyYWdJbmZvOiB0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtRHJhZ0luZm8gfTtcblxuICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25EcmFnZ2luZy5uZXh0KGV2ZW50RHJhZ2dpbmcpO1xuICAgIH0pO1xuICB9XG59Il19
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kcmFnLWRyb3Avc3JjL2RyYWctaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBYSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEcsT0FBTyxFQUFjLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSwrQ0FBK0MsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOztBQVFwSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsK0NBQStDO0lBQzFGLGNBQWM7SUFDTixVQUFVLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLFVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFNUMsV0FBVztJQUNYLHFFQUFxRTtJQUM1RCxPQUFPLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLElBQUksR0FBRyxLQUFLLENBQU0sU0FBUyxDQUFDLENBQUM7SUFDN0IsNEJBQTRCLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDekQsb0NBQW9DO0lBQzNCLGdDQUFnQyxHQUFHLEtBQUssQ0FBNkIsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUcsZUFBZSxHQUFHLEtBQUss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QUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0FwU1UsdUJBQXVCOzRGQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBTG5DLFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0IH0gZnJvbSBcIkBsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXNcIjtcbmltcG9ydCB7IGNoZWNrTW91c2VPdmVySW5Db250YWluZXIsIGNoZWNrVmlld0luU2NyZWVuLCBnZXQsIGdldFZpZXdwb3J0IH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tRXZlbnQsIG1lcmdlTWFwLCBzdGFydFdpdGgsIHRha2VVbnRpbCwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgTGlic1VpRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxEaXJlY3RpdmUgfSBmcm9tIFwiLi9kcmFnLWl0ZW0taW4tY29udGFpbmVyLXZpcnR1YWwtc2Nyb2xsLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgSURyYWdFbmQsIElEcmFnTGVhdmUsIElEcmFnT3ZlciwgSURyYWdTdGFydCwgSURyb3AgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2V2ZW50LmludGVyZmFjZVwiO1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6IFwiW0xpYnNVaURyYWdJdGVtRGlyZWN0aXZlXVwiLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlIGV4dGVuZHMgTGlic1VpRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGxEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcml2YXRlIGlzRHJhZ092ZXIgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGlzRHJhZ2dpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qIElOUFVUICovXG4gIC8vc2V0dXAgMyBmaWVsZCBwaMOtYSBkxrDhu5tpIG7hur91IMSRYW5nIHPhu60gZOG7pW5nIGl0ZW0gdHJvbmcgdmlydHVhbC1zY3JvbGwgXG4gIHJlYWRvbmx5IGZpZWxkSWQgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgaXRlbSA9IGlucHV0PGFueT4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgaXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICByZWFkb25seSB0aHJvdHRsZVRpbWVIYW5kbGVyRHJhZ2dpbmdFdmVudCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigwLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgfHwgMCB9KTtcbiAgcmVhZG9ubHkgaWdub3JlU3RvcEV2ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb25seU1vdXNlRG93blN0b3BFdmVudCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRyYWdSb290RWxlbWVudCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGdyb3VwTmFtZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignZ3JvdXBEcmFnQW5kRHJvcERlZmF1bHQnLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gJ2dyb3VwRHJhZ0FuZERyb3BEZWZhdWx0JyB9KTtcbiAgcmVhZG9ubHkgZHJhZ0JvdW5kYXJ5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZHJhZ0JvdW5kYXJ5QWNjZXB0TW91c2VMZWF2ZUNvbnRhaW5lciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGVsZW1lbnRDb250YWluZXIgPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDEzMDAsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyAxMzAwIH0pO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICAvKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0RHJhZ1N0YXJ0ID0gb3V0cHV0PElEcmFnU3RhcnQ+KCk7XG4gIHJlYWRvbmx5IG91dERyYWdPdmVyID0gb3V0cHV0PElEcmFnT3Zlcj4oKTtcbiAgcmVhZG9ubHkgb3V0RHJhZ0xlYXZlID0gb3V0cHV0PElEcmFnTGVhdmU+KCk7XG4gIHJlYWRvbmx5IG91dERyYWdFbmQgPSBvdXRwdXQ8SURyYWdFbmQ+KCk7XG4gIHJlYWRvbmx5IG91dERyb3BwZWQgPSBvdXRwdXQ8SURyb3A+KCk7XG5cbiAgLyogSU5KRUNUICovXG4gIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShgJHt0aGlzLmRyYWdEcm9wU2VydmljZS5DbGFzc0l0ZW1EZWZpbmV9LWRpc2FibGVgKTtcbiAgICAgIGlmICh0aGlzLmRpc2FibGUoKSAmJiAhZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoYCR7dGhpcy5kcmFnRHJvcFNlcnZpY2UuQ2xhc3NJdGVtRGVmaW5lfS1kaXNhYmxlYCkpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGAke3RoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNsYXNzSXRlbURlZmluZX0tZGlzYWJsZWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGhpcy5maWVsZElkKCkpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdmaWVsZF9pZCcsIHRoaXMuZmllbGRJZCgpKTtcbiAgICAgIGlmICh0aGlzLml0ZW0oKSkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnaXRlbV9pZCcsIGdldCh0aGlzLml0ZW0oKSwgdGhpcy5maWVsZElkKCkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2dyb3VwTmFtZScsIHRoaXMuZ3JvdXBOYW1lKCkpO1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmRyYWdEcm9wU2VydmljZS5DbGFzc0l0ZW1EZWZpbmUpO1xuICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ2dpbmcucGlwZSh0aHJvdHRsZVRpbWUodGhpcy50aHJvdHRsZVRpbWVIYW5kbGVyRHJhZ2dpbmdFdmVudCgpKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKChldmVudERyYWdnaW5nKSA9PiB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlKCkgfHwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVEcmFnQ29udGFpbmVyJykgfHwgKHRoaXMuZmllbGRJZCgpICYmIHRoaXMuaXRlbSgpICYmIGV2ZW50RHJhZ2dpbmcuZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdpdGVtX2lkJykgPT09IGdldCh0aGlzLml0ZW0oKSwgdGhpcy5maWVsZElkKCkpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjb250YWluZXJCeUlkID0gdGhpcy5kcmFnRHJvcFNlcnZpY2UuQ29udGFpbmVyKCkuZ2V0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdncm91cElEJykgfHwgJycpO1xuXG4gICAgICBpZiAoY29udGFpbmVyQnlJZCkge1xuICAgICAgICBpZiAoZXZlbnREcmFnZ2luZy5lbGVtZW50S2VlcENvbnRhaW5lciB8fCAhdGhpcy5kcmFnRHJvcFNlcnZpY2UuY2hlY2tFbGVtZW50T3ZlckFjY2VwdEVsZW1lbnREcmFnKGNvbnRhaW5lckJ5SWQuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2dyb3VwTmFtZScpLCBldmVudERyYWdnaW5nLmVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnZ3JvdXBOYW1lJyksIGV2ZW50RHJhZ2dpbmcuZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdkcm9wVG9Hcm91cE5hbWUnKSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja01vdXNlT3ZlckluQ29udGFpbmVyKGV2ZW50RHJhZ2dpbmcubW91c2VQb3NpdGlvbiwgZWxlbWVudCkgJiYgZWxlbWVudCAhPT0gZXZlbnREcmFnZ2luZy5lbGVtZW50RHJhZyAmJiBjb250YWluZXJCeUlkICYmIGNoZWNrVmlld0luU2NyZWVuKGNvbnRhaW5lckJ5SWQuZWxlbWVudCwgZWxlbWVudCwgY29udGFpbmVyQnlJZC5lbGVtZW50U2Nyb2xsKSkge1xuICAgICAgICBpZiAodGhpcy5pc0RyYWdPdmVyKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnREcmFnT3ZlciA9IHsgLi4uZXZlbnREcmFnZ2luZywgZWxlbWVudERyYWdPdmVyOiBlbGVtZW50IH07XG5cbiAgICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25EcmFnT3Zlci5uZXh0KGV2ZW50RHJhZ092ZXIpO1xuICAgICAgICB0aGlzLm91dERyYWdPdmVyLmVtaXQoZXZlbnREcmFnT3Zlcik7XG4gICAgICAgIHRoaXMuaXNEcmFnT3Zlci5zZXQodHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pc0RyYWdPdmVyKCkpIHtcbiAgICAgICAgY29uc3QgZXZlbnREcmFnTGVhdmUgPSB7IC4uLmV2ZW50RHJhZ2dpbmcsIGVsZW1lbnREcmFnTGVhdmU6IGVsZW1lbnQgfTtcbiAgICAgICAgdGhpcy5pc0RyYWdPdmVyLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ0xlYXZlLm5leHQoZXZlbnREcmFnTGVhdmUpO1xuICAgICAgICB0aGlzLm91dERyYWdMZWF2ZS5lbWl0KGV2ZW50RHJhZ0xlYXZlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJvcENvbnRhaW5lci5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoZXZlbnREcm9wKSA9PiB7XG4gICAgICBpZiAoZXZlbnREcm9wLmVsZW1lbnREcm9wICE9PSBlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRyb3BFdmVudCA9IHsgZWxlbWVudERyYWc6IGV2ZW50RHJvcC5lbGVtZW50RHJhZywgZWxlbWVudERyb3A6IGVsZW1lbnQsIGl0ZW1EcmFnSW5mbzogZXZlbnREcm9wLml0ZW1EcmFnSW5mbyB9O1xuXG4gICAgICB0aGlzLm91dERyb3BwZWQuZW1pdChkcm9wRXZlbnQpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0eWxlVGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXG4gICAgc3R5bGVUYWcudGV4dENvbnRlbnQgPSBgLmxpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZHJhZ2dpbmd7Y3Vyc29yOm1vdmV9YDtcbiAgICBsZXQgbm9kZUNsb25lID0gZWxlbWVudDtcbiAgICBsZXQgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQgPSAtMTtcbiAgICBsZXQgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZVRvcCA9IC0xO1xuICAgIGxldCBjb250ZXh0TWVudSA9IGZhbHNlO1xuICAgIGNvbnN0IHN0b3BFdmVudE1vdXNlID0gKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghdGhpcy5pZ25vcmVTdG9wRXZlbnQoKSkge1xuICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG1vdXNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVQb3NpdGlvbkVsZW1lbnRSb290QW5kUmVtb3ZlTm9kZUNsb25lID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZHJhZ1Jvb3RFbGVtZW50KCkpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyQnlJZCA9IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNvbnRhaW5lcigpLmdldChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpIHx8ICcnKTtcblxuICAgICAgICBjb25zdCBjb250YWluZXJJdGVtID0gdGhpcy5lbGVtZW50Q29udGFpbmVyKCkgfHwgY29udGFpbmVyQnlJZD8uZWxlbWVudFNjcm9sbCB8fCBjb250YWluZXJCeUlkPy5lbGVtZW50IHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIGNvbnN0IHJlY3RDb250YWluZXIgPSBjb250YWluZXJJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCByZWN0Tm9kZUNsb25lID0gbm9kZUNsb25lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBudW1iZXJTdWIgPSBOdW1iZXIoKGdldENvbXB1dGVkU3R5bGUoY29udGFpbmVySXRlbSkuYm9yZGVyLm1hdGNoKC9cXGQrcHgvZ2kpIHx8IFsnMCddKVswXS5yZXBsYWNlKC9cXEQrL2lnLCAnJykpLnZhbHVlT2YoKTtcblxuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSAocmVjdE5vZGVDbG9uZS5sZWZ0IC0gcmVjdENvbnRhaW5lci5sZWZ0IC0gbnVtYmVyU3ViKSArICdweCc7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gKHJlY3ROb2RlQ2xvbmUudG9wIC0gcmVjdENvbnRhaW5lci50b3AgLSBudW1iZXJTdWIpICsgJ3B4JztcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdvcGFjaXR5LTAnKTtcbiAgICAgIH1cbiAgICAgIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0ID0gLTE7XG4gICAgICBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wID0gLTE7XG4gICAgICBub2RlQ2xvbmUucmVtb3ZlKCk7XG4gICAgfTtcblxuICAgIGZyb21FdmVudChkb2N1bWVudCwgJ2NvbnRleHRtZW51JykucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uRWxlbWVudFJvb3RBbmRSZW1vdmVOb2RlQ2xvbmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0TWVudSA9IHRydWU7XG5cbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICkuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBkb2N1bWVudE1vdXNlVXAgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZXVwJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGV2ZW50TW91c2V1cCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlTW91c2VFdmVudHNXaGVuTW92ZU92ZXJJZnJhbWUoJ2F1dG8nKTtcbiAgICAgICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5yZXNldEl0ZW1DbGljaygpO1xuICAgICAgICAgIHN0b3BFdmVudE1vdXNlKGV2ZW50TW91c2V1cCk7XG4gICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZSgpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlRHJhZ0NvbnRhaW5lcicpIHx8IGNvbnRleHRNZW51IHx8ICF0aGlzLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICAgICAgY29udGV4dE1lbnUgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250ZXh0TWVudSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLlRhcmdldEl0ZW1EcmFnRmxhZyk7XG4gICAgICAgICAgaWYgKHRoaXMuaXRlbUluQ29udGFpbmVyVmlydHVhbFNjcm9sbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG1vdXNlUG9zaXRpb24gPSB7IGNsaWVudFg6IGV2ZW50TW91c2V1cC5jbGllbnRYLCBjbGllbnRZOiBldmVudE1vdXNldXAuY2xpZW50WSB9O1xuXG4gICAgICAgICAgaWYgKHRoaXMuZHJhZ0JvdW5kYXJ5KCkgJiYgdGhpcy5kcmFnQm91bmRhcnlBY2NlcHRNb3VzZUxlYXZlQ29udGFpbmVyKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0Q2xpZW50UG9zaXRpb24oZWxlbWVudCwgbW91c2VQb3NpdGlvbiwgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQsIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3AsIHRoaXMuZHJhZ0JvdW5kYXJ5KCksIHRoaXMuZWxlbWVudENvbnRhaW5lcigpKTtcblxuICAgICAgICAgICAgbW91c2VQb3NpdGlvbi5jbGllbnRYID0gcmVzdWx0LmNsaWVudFg7XG4gICAgICAgICAgICBtb3VzZVBvc2l0aW9uLmNsaWVudFkgPSByZXN1bHQuY2xpZW50WTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZHJhZ0VuZEV2ZW50ID0geyBtb3VzZVBvc2l0aW9uLCBlbGVtZW50RHJhZzogZWxlbWVudCwgaXRlbURyYWdJbmZvOiB0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtRHJhZ0luZm8gfTtcblxuICAgICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1EcmFnSW5mbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5PbkRyYWdFbmQubmV4dChkcmFnRW5kRXZlbnQpO1xuICAgICAgICAgIHRoaXMub3V0RHJhZ0VuZC5lbWl0KGRyYWdFbmRFdmVudCk7XG5cbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJyFzZWxlY3Qtbm9uZScpO1xuICAgICAgICAgIG5vZGVDbG9uZS5jbGFzc0xpc3QucmVtb3ZlKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLWRyYWdnaW5nJyk7XG4gICAgICAgICAgc3R5bGVUYWcucmVtb3ZlKCk7XG5cbiAgICAgICAgICB1cGRhdGVQb3NpdGlvbkVsZW1lbnRSb290QW5kUmVtb3ZlTm9kZUNsb25lKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgICApO1xuXG4gICAgY29uc3QgZWxlbWVudE1vdXNlRG93biA9IGZyb21FdmVudDxNb3VzZUV2ZW50PihlbGVtZW50LCAnbW91c2Vkb3duJykucGlwZShcbiAgICAgIHRhcChldmVudE1vdXNlZG93biA9PiB7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1DbGljayA9IGVsZW1lbnQ7XG4gICAgICAgIGNvbnRleHRNZW51ID0gZmFsc2U7XG4gICAgICAgIHRoaXMudXBkYXRlTW91c2VFdmVudHNXaGVuTW92ZU92ZXJJZnJhbWUoJ25vbmUnKTtcbiAgICAgICAgaWYgKCh0aGlzLmRpc2FibGUoKSB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZURyYWdDb250YWluZXInKSB8fCAhdGhpcy5pc0RyYWdnaW5nKCkgfHwgdGhpcy5pdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsKCkpICYmICF0aGlzLm9ubHlNb3VzZURvd25TdG9wRXZlbnQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdG9wRXZlbnRNb3VzZShldmVudE1vdXNlZG93bik7XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSlcbiAgICApO1xuICAgIGNvbnN0IGRvY3VtZW50TW91c2VNb3ZlID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vtb3ZlJykucGlwZSh0YXAoKGV2ZW50TW91c2Vtb3ZlKSA9PiBzdG9wRXZlbnRNb3VzZShldmVudE1vdXNlbW92ZSkpLCB0YWtlVW50aWwoKGRvY3VtZW50TW91c2VVcCkpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKTtcbiAgICBjb25zdCBkcmFnID0gZWxlbWVudE1vdXNlRG93bi5waXBlKG1lcmdlTWFwKChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiBkb2N1bWVudE1vdXNlTW92ZS5waXBlKHN0YXJ0V2l0aCgobW91c2VFdmVudCkpKSkpIGFzIE9ic2VydmFibGU8TW91c2VFdmVudD47XG4gICAgbGV0IGlnbm9yZU1vdXNlZG93biA9IGZhbHNlO1xuXG4gICAgZHJhZy5waXBlKHRhcCgoZHJhZ01vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHJlY3RFbGVtZW50ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2V0Vmlld3BvcnQoKSBhcyBJQm91bmRpbmdDbGllbnRSZWN0O1xuXG4gICAgICBpZiAodGhpcy5kaXNhYmxlKCkgfHwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVEcmFnQ29udGFpbmVyJykgfHwgIWRyYWdNb3VzZUV2ZW50LmNsaWVudFggfHwgKCFpZ25vcmVNb3VzZWRvd24gJiYgZHJhZ01vdXNlRXZlbnQudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgcmVjdEVsZW1lbnQuaGVpZ2h0ICsgcmVjdEVsZW1lbnQudG9wID49IHZpZXdwb3J0LmhlaWdodCkpIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IGRyYWdNb3VzZUV2ZW50O1xuXG4gICAgICBpZiAoZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQgPT09IC0xKSB7XG4gICAgICAgIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0ID0gY2xpZW50WCAtIHJlY3RFbGVtZW50LmxlZnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wID09PSAtMSkge1xuICAgICAgICBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wID0gY2xpZW50WSAtIHJlY3RFbGVtZW50LnRvcDtcbiAgICAgIH1cbiAgICB9KSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKGRyYWdNb3VzZUV2ZW50ID0+IHtcbiAgICAgIGlmICh0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtQ2xpY2suZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gZWxlbWVudCkuc29tZShpdGVtID0+IGVsZW1lbnQuY29udGFpbnMoaXRlbSkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRpc2FibGUoKSB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZURyYWdDb250YWluZXInKSB8fCAhZHJhZ01vdXNlRXZlbnQuY2xpZW50WCB8fCBkcmFnTW91c2VFdmVudC50eXBlID09PSAnbW91c2Vkb3duJyB8fCBjb250ZXh0TWVudSB8fCAodGhpcy5pdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsKCkgJiYgdGhpcy5pc0RyYWdnaW5nKCkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlnbm9yZU1vdXNlZG93biA9IHRydWU7XG4gICAgICBjb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IGRyYWdNb3VzZUV2ZW50O1xuICAgICAgY29uc3QgbW91c2VQb3NpdGlvbiA9IHsgY2xpZW50WCwgY2xpZW50WSB9O1xuICAgICAgY29uc3QgcmVjdEVsZW1lbnQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZygpKSB7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZy5zZXQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IGV2ZW50RHJhZ1N0YXJ0ID0geyBtb3VzZVBvc2l0aW9uLCBlbGVtZW50RHJhZzogZWxlbWVudCwgaXRlbURyYWdJbmZvOiB0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtRHJhZ0luZm8gfTtcblxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLmRyYWdEcm9wU2VydmljZS5UYXJnZXRJdGVtRHJhZ0ZsYWcsICd0cnVlJyk7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ1N0YXJ0Lm5leHQoZXZlbnREcmFnU3RhcnQpO1xuICAgICAgICBldmVudERyYWdTdGFydC5pdGVtRHJhZ0luZm8gPSB0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtRHJhZ0luZm87XG4gICAgICAgIHRoaXMub3V0RHJhZ1N0YXJ0LmVtaXQoZXZlbnREcmFnU3RhcnQpO1xuXG4gICAgICAgIG5vZGVDbG9uZSA9IGVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBub2RlQ2xvbmUuc3R5bGUuekluZGV4ID0gYCR7dGhpcy56SW5kZXgoKX1gO1xuICAgICAgICBub2RlQ2xvbmUuY2xhc3NMaXN0LmFkZCgnIWZpeGVkJyk7XG4gICAgICAgIG5vZGVDbG9uZS5jbGFzc0xpc3QucmVtb3ZlKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLW9yaWdpbi1wbGFjZWhvbGRlcicpO1xuICAgICAgICBub2RlQ2xvbmUuY2xhc3NMaXN0LnJlbW92ZSgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1wbGFjZWhvbGRlcicpO1xuICAgICAgICBub2RlQ2xvbmUuYXBwZW5kQ2hpbGQoc3R5bGVUYWcpO1xuICAgICAgICBub2RlQ2xvbmUuY2xhc3NMaXN0LmFkZCgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1kcmFnZ2luZycpO1xuICAgICAgICBub2RlQ2xvbmUuc3R5bGUud2lkdGggPSBgJHtyZWN0RWxlbWVudC53aWR0aH1weGA7XG4gICAgICAgIG5vZGVDbG9uZS5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0RWxlbWVudC5oZWlnaHR9cHhgO1xuICAgICAgICBub2RlQ2xvbmUuc3R5bGUubGVmdCA9IGAkey05OTl9cHhgO1xuICAgICAgICBub2RlQ2xvbmUuc3R5bGUudG9wID0gYCR7LTk5OX1weGA7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnIXNlbGVjdC1ub25lJyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKG5vZGVDbG9uZSk7XG4gICAgICAgIGlmICh0aGlzLmRyYWdSb290RWxlbWVudCgpKSB7XG4gICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdvcGFjaXR5LTAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLml0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwoKSkge1xuICAgICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwubmV4dCh7XG4gICAgICAgICAgICBpdGVtRHJhZ0luZm86IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1EcmFnSW5mbyxcbiAgICAgICAgICAgIGVsZW1lbnREcmFnOiBub2RlQ2xvbmUsXG4gICAgICAgICAgICBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wLFxuICAgICAgICAgICAgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQsXG4gICAgICAgICAgICBlbGVtZW50Q29udGFpbmVyOiB0aGlzLmVsZW1lbnRDb250YWluZXIoKSxcbiAgICAgICAgICAgIGRyYWdCb3VuZGFyeTogdGhpcy5kcmFnQm91bmRhcnkoKSxcbiAgICAgICAgICAgIGRyYWdCb3VuZGFyeUFjY2VwdE1vdXNlTGVhdmVDb250YWluZXI6IHRoaXMuZHJhZ0JvdW5kYXJ5QWNjZXB0TW91c2VMZWF2ZUNvbnRhaW5lcigpLFxuICAgICAgICAgICAgaWdub3JlU3RvcEV2ZW50OiB0aGlzLmlnbm9yZVN0b3BFdmVudCgpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0Q2xpZW50UG9zaXRpb24obm9kZUNsb25lLCBtb3VzZVBvc2l0aW9uLCBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlTGVmdCwgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZVRvcCwgdGhpcy5kcmFnQm91bmRhcnkoKSwgdGhpcy5lbGVtZW50Q29udGFpbmVyKCkpO1xuXG4gICAgICBjb25zdCBlbGVtZW50S2VlcENvbnRhaW5lciA9IHJlc3VsdC5lbGVtZW50S2VlcENvbnRhaW5lcjtcbiAgICAgIGNvbnN0IGxlZnQgPSByZXN1bHQuY2xpZW50WCAtIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0O1xuICAgICAgY29uc3QgdG9wID0gcmVzdWx0LmNsaWVudFkgLSBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wO1xuXG4gICAgICBpZiAodGhpcy5kcmFnQm91bmRhcnkoKSAmJiB0aGlzLmRyYWdCb3VuZGFyeUFjY2VwdE1vdXNlTGVhdmVDb250YWluZXIoKSkge1xuICAgICAgICBpZiAoY2xpZW50WCA8IHJlc3VsdC52aWV3cG9ydC5sZWZ0KSB7XG4gICAgICAgICAgbW91c2VQb3NpdGlvbi5jbGllbnRYID0gcmVzdWx0LnZpZXdwb3J0LmxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsaWVudFggPiByZXN1bHQudmlld3BvcnQud2lkdGgpIHtcbiAgICAgICAgICBtb3VzZVBvc2l0aW9uLmNsaWVudFggPSByZXN1bHQudmlld3BvcnQud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsaWVudFkgPCByZXN1bHQudmlld3BvcnQudG9wKSB7XG4gICAgICAgICAgbW91c2VQb3NpdGlvbi5jbGllbnRZID0gcmVzdWx0LnZpZXdwb3J0LnRvcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xpZW50WSA+IHJlc3VsdC52aWV3cG9ydC5oZWlnaHQpIHtcbiAgICAgICAgICBtb3VzZVBvc2l0aW9uLmNsaWVudFkgPSByZXN1bHQudmlld3BvcnQuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBub2RlQ2xvbmUuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgO1xuICAgICAgbm9kZUNsb25lLnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG5cbiAgICAgIGNvbnN0IGV2ZW50RHJhZ2dpbmcgPSB7IG1vdXNlUG9zaXRpb24sIGVsZW1lbnREcmFnOiBub2RlQ2xvbmUsIGVsZW1lbnRLZWVwQ29udGFpbmVyLCBpdGVtRHJhZ0luZm86IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1EcmFnSW5mbyB9O1xuXG4gICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5PbkRyYWdnaW5nLm5leHQoZXZlbnREcmFnZ2luZyk7XG4gICAgfSk7XG4gIH1cbn0iXX0=
@@ -1055,7 +1055,7 @@ class LibsUiDragItemDirective extends LibsUiDragItemInContainerVirtualScrollDire
1055
1055
  this.dragDropService.ItemDragInfo = undefined;
1056
1056
  this.dragDropService.OnDragEnd.next(dragEndEvent);
1057
1057
  this.outDragEnd.emit(dragEndEvent);
1058
- document.body.classList.remove('select-none');
1058
+ document.body.classList.remove('!select-none');
1059
1059
  nodeClone.classList.remove('libs-ui-drag-drop-item-dragging');
1060
1060
  styleTag.remove();
1061
1061
  updatePositionElementRootAndRemoveNodeClone();
@@ -1114,7 +1114,7 @@ class LibsUiDragItemDirective extends LibsUiDragItemInContainerVirtualScrollDire
1114
1114
  nodeClone.style.height = `${rectElement.height}px`;
1115
1115
  nodeClone.style.left = `${-999}px`;
1116
1116
  nodeClone.style.top = `${-999}px`;
1117
- document.body.classList.add('select-none');
1117
+ document.body.classList.add('!select-none');
1118
1118
  document.body.append(nodeClone);
1119
1119
  if (this.dragRootElement()) {
1120
1120
  element.classList.add('opacity-0');
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-drag-drop.mjs","sources":["../../../../../libs-ui/components/drag-drop/src/defines/css.define.ts","../../../../../libs-ui/components/drag-drop/src/drag-drop.service.ts","../../../../../libs-ui/components/drag-drop/src/drag-scroll.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-drop.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-item-in-container-virtual-scroll.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-item.directive.ts","../../../../../libs-ui/components/drag-drop/src/libs-ui-components-drag-drop.ts"],"sourcesContent":["export const styleContainer = (config: Array<{ className: string, styles: string }>, viewEncapsulation: 'emulated' | 'none', groupID: string): string => {\n const defaultConfig = [{\n className: 'libs-ui-drag-drop-container',\n styles: `display:block;`\n },\n {\n className: 'libs-ui-drag-drop-item',\n styles: `\n cursor:move;`\n },\n {\n className: 'libs-ui-drag-drop-item-placeholder',\n styles: `visibility: hidden;`\n },\n {\n className: 'libs-ui-drag-drop-item-origin-placeholder',\n styles: `visibility: hidden;`\n },\n {\n className: 'libs-ui-drag-drop-item-drop-placeholder',\n styles: `visibility: hidden;`\n },\n {\n className: 'libs-ui-drag-drop-item-dragging',\n styles: `cursor:move; user-select: none; `\n },\n {\n className: 'libs-ui-drag-drop-item-disable',\n styles: ` cursor:not-allowed;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-bottom',\n styles: `position:relative;animation: translateBottom 0.35s 1 ease;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-top',\n styles: `position:relative;animation: translateTop 0.35s 1 ease;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-left',\n styles: `position:relative;animation: translateLeft 0.35s 1 ease;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-right',\n styles: `position:relative;animation: translateRight 0.35s 1 ease;`\n }];\n\n config.forEach(item => {\n const itemExits = defaultConfig.find(defaultItem => defaultItem.className === item.className);\n\n if (itemExits) {\n itemExits.styles = item.styles;\n\n return;\n }\n defaultConfig.push(item);\n });\n const groupAttr = viewEncapsulation ? `[groupID~=\"${groupID}\"]` : '';\n let styles = '';\n\n defaultConfig.forEach((item) => {\n const style = `${groupAttr}.${item.className}{${item.styles}}`;\n\n styles = `${styles}${style}\\n`;\n });\n\n styles = ` @keyframes translateTop {\n 0% {\n transform: translateY(30px);\n }\n \n 100% {\n transform: translateX(0);\n }\n }\n \n @keyframes translateBottom {\n 0% {\n transform: translateY(-30px);\n }\n \n 100% {\n transform: translateX(0px);\n }\n }\n @keyframes translateLeft {\n 0% {\n transform: translateX(30px);\n }\n \n 100% {\n transform: translateX(0);\n }\n }\n \n @keyframes translateRight {\n 0% {\n transform: translateX(-30px);\n }\n \n 100% {\n transform: translateX(0px);\n }\n }\n ${styles}`.replace(/\\n+/g, '');\n\n return styles;\n};","import { Injectable, WritableSignal, signal } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { IDragEnd, IDragItemInContainerVirtualScroll, IDragLeave, IDragOver, IDragStart, IDragging, IDrop, IItemDragInfo } from \"./interfaces/event.interface\";\n@Injectable({\n providedIn: 'any'\n})\n\nexport class MoLibsSharedDragDropService {\n private itemsClick = new Array<HTMLElement>();\n private onDragItemInContainerVirtualScroll = new Subject<IDragItemInContainerVirtualScroll>();\n private itemDragInfo?: IItemDragInfo;\n private container = signal(new Map<string, { element: HTMLElement; elementScroll?: HTMLElement }>());\n private targetItemDragFlag = 'item-drag-target';\n private classContainerDefine = 'libs-ui-drag-drop-container';\n private classItemDefine = 'libs-ui-drag-drop-item';\n private onDragging = new Subject<IDragging>();\n private onDragStart = new Subject<IDragStart>();\n private onDragEnd = new Subject<IDragEnd>();\n private onDragOver = new Subject<IDragOver>();\n private onDragLeave = new Subject<IDragLeave>();\n private onDrop = new Subject<IDrop>();\n private onDropContainer = new Subject<IDrop>();\n private onItemInit = new Subject<string>();\n\n public get OnDragItemInContainerVirtualScroll(): Subject<IDragItemInContainerVirtualScroll> {\n return this.onDragItemInContainerVirtualScroll;\n }\n\n public set ItemDragInfo(data: IItemDragInfo | undefined) {\n this.itemDragInfo = data;\n }\n\n public get ItemDragInfo(): IItemDragInfo | undefined {\n return this.itemDragInfo;\n }\n\n public get Container(): WritableSignal<Map<string, { element: HTMLElement; elementScroll?: HTMLElement }>> {\n return this.container;\n }\n\n public get TargetItemDragFlag() {\n return this.targetItemDragFlag;\n }\n\n public get ClassContainerDefine() {\n return this.classContainerDefine;\n }\n\n public get ClassItemDefine() {\n return this.classItemDefine;\n }\n\n public get OnDragging() {\n return this.onDragging;\n }\n\n public get OnDragOver() {\n return this.onDragOver;\n }\n\n public get OnDragLeave() {\n return this.onDragLeave;\n }\n\n public get OnDragStart() {\n return this.onDragStart;\n }\n\n public get OnDragEnd() {\n return this.onDragEnd;\n }\n\n public get OnDropContainer() {\n return this.onDropContainer;\n }\n\n public get OnDrop() {\n return this.onDrop;\n }\n\n public get OnItemInit() {\n return this.onItemInit;\n }\n\n public get ItemClick(): Array<HTMLElement> {\n return [...this.itemsClick];\n }\n\n public set ItemClick(item: HTMLElement) {\n this.itemsClick.push(item);\n }\n\n public resetItemClick() {\n this.itemsClick.length = 0;\n }\n\n public checkElementOverAcceptElementDrag(groupNameOfContainer: string | null, groupNameOfElementDrag: string | null, groupNameOfDropTo: string | null): boolean {\n if (groupNameOfContainer !== groupNameOfElementDrag && !groupNameOfDropTo) {\n return false;\n }\n\n if (groupNameOfDropTo !== null && !groupNameOfDropTo.toString().split(';').includes(groupNameOfContainer || 'undefinedName')) {\n return false;\n }\n\n return true;\n }\n}","import { AfterViewInit, Directive, ElementRef, OnDestroy, inject, input, signal } from \"@angular/core\";\nimport { IPageInfo, VirtualScrollerComponent } from \"@iharbeck/ngx-virtual-scroller\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\nimport { checkMouseOverInContainer, cloneIBoundingClientRect, get } from \"@libs-ui/utils\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { MoLibsSharedDragDropService } from \"./drag-drop.service\";\nimport { IDragging } from \"./interfaces/event.interface\";\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiComponentsDragScrollDirective]\",\n standalone: true\n})\nexport class LibsUiComponentsDragScrollDirective implements AfterViewInit, OnDestroy {\n /* PROPERTY */\n private stopScroll = signal<boolean>(false);\n private virtualScrollPageInfo = signal<IPageInfo | undefined>(undefined);\n protected intervalScrollToElement = signal<number | undefined>(undefined);\n protected onDestroy = new Subject<void>();\n\n /* INPUT */\n readonly ignoreAutoScroll = input<boolean>();\n readonly widthZoneDetect = input<number, number | undefined>(16, { transform: value => value ?? 16 });\n readonly movementLength = input<number, number | undefined>(6, { transform: value => value ?? 6 });\n readonly rootElementScroll = input<HTMLElement>();\n readonly virtualScrollerComponent = input<VirtualScrollerComponent>();\n\n /* INJECT */\n protected elementRef = inject(ElementRef);\n protected dragDropService = inject(MoLibsSharedDragDropService);\n\n ngAfterViewInit(): void {\n this.dragDropService.OnDragging.pipe(takeUntil(this.onDestroy)).subscribe((eventDragging) => this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll()));\n this.dragDropService.OnDragEnd.pipe(takeUntil(this.onDestroy)).subscribe(() => {\n clearInterval(this.intervalScrollToElement());\n if (this.virtualScrollPageInfo()) {\n const firstElement = get(this.virtualScrollerComponent(), 'element')?.nativeElement.firstElementChild;\n const isHorizontal = get(this.virtualScrollerComponent(), '_horizontal');\n if (isHorizontal) {\n firstElement.style.transform = `scaleX(${this.virtualScrollPageInfo()?.scrollEndPosition})`;\n }\n if (!isHorizontal) {\n firstElement.style.transform = `scaleY(${this.virtualScrollPageInfo()?.scrollEndPosition})`;\n }\n this.virtualScrollPageInfo.set(undefined);\n }\n this.stopScroll.set(false);\n });\n this.dragDropService.OnDragStart.pipe(takeUntil(this.onDestroy)).subscribe(() => {\n if (this.virtualScrollerComponent) {\n this.virtualScrollerComponent()?.scrollToIndex(0);\n }\n });\n if (!this.virtualScrollerComponent) {\n return;\n }\n this.virtualScrollerComponent()?.vsChange.pipe(takeUntil(this.onDestroy)).subscribe(pageInfo => {\n const items = get(this.virtualScrollerComponent, '_items');\n\n if (items && items.length === pageInfo.endIndex) {\n this.virtualScrollPageInfo.set(pageInfo);\n const elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n const isHorizontal = get(this.virtualScrollerComponent, '_horizontal');\n\n if (isHorizontal && pageInfo.scrollEndPosition < elementSetScroll.offsetWidth + elementSetScroll.scrollLeft + 3) {\n this.stopScroll.set(true);\n clearInterval(this.intervalScrollToElement());\n\n return;\n }\n\n if (!isHorizontal && pageInfo.scrollEndPosition < elementSetScroll.offsetHeight + elementSetScroll.scrollTop + 3) {\n this.stopScroll.set(true);\n clearInterval(this.intervalScrollToElement());\n\n return;\n }\n }\n this.stopScroll.set(false);\n });\n }\n\n /* FUNCTIONS */\n protected checkAndScrollElementToPosition(eventDragging: IDragging, ignoreAutoScroll?: boolean) {\n let elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n\n if (ignoreAutoScroll || !checkMouseOverInContainer(eventDragging.mousePosition, elementSetScroll)) {\n return;\n }\n const rectElement = cloneIBoundingClientRect(this.elementRef.nativeElement.getBoundingClientRect());\n\n if (this.rootElementScroll()) {\n const rectElementScroll = this.rootElementScroll()?.getBoundingClientRect() as IBoundingClientRect;\n\n rectElement.left = rectElementScroll.left;\n rectElement.top = rectElementScroll.top;\n }\n\n const { width, height, top, left } = rectElement;\n const { clientX, clientY } = eventDragging.mousePosition;\n const limitLeft = left + elementSetScroll.offsetWidth;\n const limitTop = top + elementSetScroll.offsetHeight;\n\n clearInterval(this.intervalScrollToElement());\n if ((clientX < left || clientX > left + width) && (clientY < top || clientY > top + height)) {\n return;\n }\n\n this.intervalScrollToElement.set(setInterval(() => {\n elementSetScroll = (this.rootElementScroll() || this.elementRef.nativeElement);\n let directionTop = 0;\n let directionLeft = 0;\n\n if (top <= clientY && clientY <= top + this.widthZoneDetect()) {\n elementSetScroll.scrollTop -= this.movementLength();\n directionTop = -1;\n }\n\n if (limitTop - this.widthZoneDetect() <= clientY && clientY <= limitTop) {\n if (this.stopScroll()) {\n return;\n }\n elementSetScroll.scrollTop += this.movementLength();\n directionTop = 1;\n }\n\n if ((limitLeft - this.widthZoneDetect() <= clientX) && (clientX <= limitLeft)) {\n if (this.stopScroll()) {\n return;\n }\n elementSetScroll.scrollLeft += this.movementLength();\n directionLeft = +1;\n\n }\n if (left <= clientX && clientX <= left + this.widthZoneDetect()) {\n elementSetScroll.scrollLeft -= this.movementLength();\n directionLeft = -1;\n }\n\n if (elementSetScroll.scrollLeft && (elementSetScroll.scrollLeft + elementSetScroll.offsetWidth >= elementSetScroll.scrollWidth)) {\n elementSetScroll.scrollLeft -= elementSetScroll.scrollLeft + elementSetScroll.offsetWidth - elementSetScroll.scrollWidth;\n }\n\n if (elementSetScroll.scrollTop && (elementSetScroll.scrollTop + elementSetScroll.offsetHeight >= elementSetScroll.scrollHeight)) {\n elementSetScroll.scrollTop -= elementSetScroll.scrollTop + elementSetScroll.offsetHeight - elementSetScroll.scrollHeight;\n }\n\n if ((directionTop < 0 && !elementSetScroll.scrollTop) || (!elementSetScroll.scrollLeft && directionLeft < 0) || (directionTop && elementSetScroll.scrollHeight <= elementSetScroll.scrollTop + elementSetScroll.offsetHeight + 3) || (directionLeft && elementSetScroll.scrollWidth <= elementSetScroll.scrollLeft + elementSetScroll.offsetWidth + 3)) {\n return clearInterval(this.intervalScrollToElement());\n }\n }, 10));\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","import { AfterViewInit, Directive, OnDestroy, effect, input, model, output, signal, untracked } from \"@angular/core\";\nimport { checkMouseOverInContainer, cloneDeep, get, set, uuid } from \"@libs-ui/utils\";\nimport { Observable, debounceTime, filter, takeUntil } from \"rxjs\";\nimport { styleContainer } from \"./defines/css.define\";\nimport { LibsUiComponentsDragScrollDirective } from \"./drag-scroll.directive\";\nimport { IDragDropFunctionControlEvent, IDragEnd, IDragLeave, IDragOver, IDragStart, IDragging, IDrop } from \"./interfaces/event.interface\";\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiComponentsDragContainerDirective]\",\n standalone: true,\n})\nexport class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDragScrollDirective implements AfterViewInit, OnDestroy {\n /* PROPERTY */\n private groupID = signal<string>(uuid());\n private isDragOver = signal<boolean>(false);\n\n /* INPUT */\n readonly disableDragContainer = input<boolean>();\n readonly mode = input<string, 'move' | 'copy' | 'deepCopy'>('move', { transform: value => value ?? 'move' });\n readonly directionDrag = input<'horizontal' | 'vertical'>();\n readonly viewEncapsulation = input<'emulated' | 'none', 'emulated' | 'none' | undefined>('emulated', { transform: value => value ?? 'emulated' });\n readonly acceptDragSameGroup = input<boolean, boolean | undefined>(false, { transform: value => value ?? false });\n readonly placeholder = input<boolean, boolean | undefined>(true, { transform: value => value ?? true });\n readonly groupName = input<string, string | undefined>('groupDragAndDropDefault', { transform: value => value ?? 'groupDragAndDropDefault' }); // nếu các group có tên trùng nhau sẽ được drop\n readonly dropToGroupName = input<Array<string> | null>(null); // nếu item trong các group A được drop vào group B nhưng group B không được drop vào group A\n readonly items = model.required<Array<unknown>>();\n readonly stylesOverride = input<Array<{ className: string, styles: string }>>();\n\n /* OUTPUT */\n readonly outDragStartContainer = output<IDragStart>();\n readonly outDragOverContainer = output<IDragOver>();\n readonly outDragLeaveContainer = output<IDragLeave>();\n readonly outDragEndContainer = output<IDragEnd>();\n readonly outDroppedContainer = output<IDrop>();\n readonly outDroppedContainerEmpty = output<IDrop>();\n readonly outFunctionControl = output<IDragDropFunctionControlEvent>();\n\n constructor() {\n super();\n const element = this.elementRef.nativeElement as HTMLElement;\n\n const container = { element };\n\n this.dragDropService.Container.update(data => {\n data.set(this.groupID(), container);\n return data;\n });\n\n effect(() => {\n if (!this.rootElementScroll()) {\n return;\n }\n untracked(() => {\n set(container, 'elementScroll', this.rootElementScroll());\n this.dragDropService.Container.update(containerMap => new Map(containerMap));\n });\n });\n\n effect(() => {\n if (this.directionDrag() && this.elementRef.nativeElement) {\n this.setAttributeElementAndItemDrag(this.elementRef.nativeElement);\n }\n });\n effect(() => {\n if (this.disableDragContainer() && this.elementRef.nativeElement) {\n this.setAttributeElementAndItemDrag(this.elementRef.nativeElement);\n }\n });\n }\n\n override ngAfterViewInit(): void {\n this.outFunctionControl.emit({ setAttributeElementAndItemDrag: () => this.setAttributeElementAndItemDrag(this.elementRef.nativeElement) });\n\n this.outDroppedContainer.subscribe(eventDropped => {\n this.dragDropService.OnDropContainer.next(eventDropped);\n });\n const sub = this.onDestroy.subscribe(() => {\n if (indexSpliceListTo > -1) {\n this.items.update(items => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n }\n\n this.dragDropService.Container().delete(this.groupID());\n sub.unsubscribe();\n });\n const elementContainer = this.elementRef.nativeElement as HTMLElement;\n\n this.initStyleAndAttribute(elementContainer, true);\n this.dragDropService.OnItemInit.pipe(debounceTime(250), filter(groupName => groupName === this.groupName()), takeUntil(this.onDestroy)).subscribe(() => this.initStyleAndAttribute(elementContainer));\n const styleTag = document.createElement(\"style\");\n\n styleTag.textContent = styleContainer((this.stylesOverride() || []), this.viewEncapsulation(), this.groupID());\n elementContainer.appendChild(styleTag);\n elementContainer.classList.add(this.dragDropService.ClassContainerDefine);\n\n const handlerDragStart = (eventDragStart: IDragStart) => {\n\n this.setAttributeElementAndItemDrag(elementContainer, true);\n if (this.groupID() === eventDragStart.elementDrag.getAttribute('groupID')) {\n this.outDragStartContainer.emit({ ...eventDragStart, itemDragInfo: this.dragDropService.ItemDragInfo });\n }\n };\n\n const storeIndex = { indexDrag: -1, indexDragOver: -1 };\n let indexSpliceListTo = -1;\n const handlerDragOver = (eventDragOver: IDragOver) => {\n const { elementDrag, elementDragOver } = eventDragOver;\n\n if (this.disableDragContainer() || !this.dragDropService.checkElementOverAcceptElementDrag(this.groupName(), elementDrag.getAttribute('groupName'), elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n const indexDrag = Number(elementDrag.getAttribute('index')).valueOf();\n const indexDragOver = Number(elementDragOver.getAttribute('index')).valueOf();\n const idGroupElementDrag = elementDrag.getAttribute('groupID');\n const idGroupElementDragOver = elementDragOver.getAttribute('groupID');\n\n if ((this.groupID() !== idGroupElementDrag) || (idGroupElementDrag !== idGroupElementDragOver)) { // xử lý cho item drag over qua 1 item khác container\n if (idGroupElementDragOver === this.groupID() && this.placeholder()) {\n const item = this.mode() === 'deepCopy' ? cloneDeep(this.dragDropService.ItemDragInfo?.item) : this.dragDropService.ItemDragInfo?.item;\n\n if (indexSpliceListTo >= 0) {\n this.items.update(items => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n\n }\n this.items.update(items => {\n items.splice(indexDragOver, 0, item);\n return [...items];\n });\n indexSpliceListTo = indexDragOver;\n this.setAttributeElementAndItemDrag(elementContainer, false, indexSpliceListTo);\n }\n\n return;\n }\n\n if (!this.acceptDragSameGroup() || indexDrag < 0 || indexDragOver < 0 || !this.items().length || indexDrag > this.items().length || indexDragOver > this.items().length || (storeIndex.indexDrag === indexDrag && storeIndex.indexDragOver === indexDragOver)) {\n return;\n }\n // xử lý cho item drag over qua 1 item cùng container\n const itemDrag = this.items()[indexDrag];\n\n this.setAnimationElementDragOver(indexDrag, indexDragOver, elementDragOver);\n storeIndex.indexDrag = indexDrag;\n storeIndex.indexDragOver = indexDragOver;\n this.items.update(items => {\n items.splice(indexDrag, 1);\n return [...items];\n });\n this.items.update(items => {\n items.splice(indexDragOver, 0, itemDrag);\n return [...items];\n });\n\n elementDrag.setAttribute('index', indexDragOver.toString());\n this.setAttributeElementAndItemDrag(elementContainer);\n };\n\n const removePlaceholderDrag = (eventDrag: IDragEnd, isDragging?: boolean) => {\n clearInterval(this.intervalScrollToElement());\n storeIndex.indexDrag = -1;\n storeIndex.indexDragOver = -1;\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n\n if (!checkMouseOverInContainer(eventDrag.mousePosition, (this.rootElementScroll() || elementContainer))) {\n const childElementIndex = Array.from<HTMLElement>(childrenElement).findIndex((child) => child.classList.contains('libs-ui-drag-drop-item-drop-placeholder'));\n\n if (childElementIndex >= 0 && this.groupID() !== eventDrag.elementDrag.getAttribute('groupID')) {\n this.items.update(items => {\n items.splice(childElementIndex, 1);\n return [...items];\n });\n }\n indexSpliceListTo = -1;\n\n this.removeAttributes(elementContainer, isDragging);\n this.setIndexElement(elementContainer);\n\n return;\n }\n if (indexSpliceListTo >= 0) {\n this.items.update(items => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n }\n indexSpliceListTo = -1;\n };\n\n const handlerDragging = (eventDragging: IDragging) => {\n this.setAttributeElementAndItemDrag(elementContainer);\n const { elementDrag } = eventDragging;\n const fieldIdItem = elementDrag.getAttribute('field_id');\n const idItemDrag = elementDrag.getAttribute('item_id');\n\n if (fieldIdItem && idItemDrag && this.items().find(item => get(item, fieldIdItem) === idItemDrag)) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n const childElement = Array.from<HTMLElement>(childrenElement).find((child) => child.getAttribute('item_id') === idItemDrag);\n\n if (this.items() === eventDragging.itemDragInfo?.itemsDrag() && childElement && !childElement.classList.contains('libs-ui-drag-drop-item-drop-placeholder') && !childElement.getAttribute(this.dragDropService.TargetItemDragFlag)) {\n childElement.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');\n this.groupID.set(elementDrag.getAttribute('groupID') || '');\n styleTag.remove();\n styleTag.textContent = styleContainer((this.stylesOverride() || []), this.viewEncapsulation(), this.groupID());\n elementContainer.appendChild(styleTag);\n this.setAttributeElementAndItemDrag(elementContainer, true);\n }\n }\n\n if (this.disableDragContainer()) {\n return;\n }\n\n if (this.groupID() === elementDrag.getAttribute('groupID') && !this.acceptDragSameGroup()) {\n this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll() || !this.acceptDragSameGroup());\n return;\n }\n\n if (!checkMouseOverInContainer(eventDragging.mousePosition, (this.rootElementScroll() || elementContainer))) {\n if (this.isDragOver()) {\n this.isDragOver.set(false);\n this.outDragLeaveContainer.emit({ ...eventDragging, elementDragLeave: elementContainer });\n }\n\n return removePlaceholderDrag(eventDragging, true);\n }\n this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll());\n\n // Đoạn code xử lý cho việc kéo một element vào 1 container nhưng container không có item hoặc item drag không over qua item trong container\n if (!this.isDragOver()) {\n elementContainer.classList.add('libs-ui-drag-drop-container-dragover');\n this.isDragOver.set(true);\n this.outDragOverContainer.emit({ ...eventDragging, elementDragOver: elementContainer });\n }\n const eventDragOver = { ...eventDragging, elementDragOver: elementContainer };\n\n if (!this.items().length) {\n eventDragOver.elementDragOver = {\n getAttribute: (name: string) => {\n if (name === 'groupID') {\n return this.groupID();\n }\n if (name !== 'index') {\n return null;\n }\n\n return 0;\n }\n } as unknown as HTMLElement;\n this.dragDropService.OnDragOver.next(eventDragOver);\n\n return;\n }\n\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let childElement = Array.from<HTMLElement>(childrenElement).find((child) => checkMouseOverInContainer(eventDragging.mousePosition, child));\n\n if (childElement) { // nếu tìm thấy thì sẽ nhận qua sự kiện của drag-item.directive emit\n return;\n }\n childElement = Array.from<HTMLElement>(childrenElement).pop();\n\n if (childElement) {\n eventDragOver.elementDragOver = childElement;\n this.dragDropService.OnDragOver.next(eventDragOver);\n }\n };\n\n const handlerDragEnd = (eventDragEnd: IDragEnd) => {\n if (this.disableDragContainer()) {\n return;\n }\n let rect = undefined;\n\n if (this.rootElementScroll() || elementContainer) {\n rect = (this.rootElementScroll() || elementContainer)?.getBoundingClientRect();\n }\n removePlaceholderDrag(eventDragEnd);\n const { elementDrag, mousePosition, itemDragInfo } = eventDragEnd;\n\n if (this.groupID() === elementDrag.getAttribute('groupID')) {\n this.outDragEndContainer.emit({ ...eventDragEnd });\n }\n if (!checkMouseOverInContainer(mousePosition, this.rootElementScroll() || elementContainer, rect)) {\n return;\n }\n const eventDrop = { elementDrag: elementDrag, elementDrop: elementContainer, itemDragInfo: itemDragInfo };\n\n if (this.disableDragContainer() || !this.dragDropService.checkElementOverAcceptElementDrag(this.groupName(), elementDrag.getAttribute('groupName'), elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n const childElement = Array.from<HTMLElement>(childrenElement).find((child) => checkMouseOverInContainer(mousePosition, child));\n\n if (childElement) {\n eventDrop.elementDrop = childElement;\n this.dragDropService.OnDrop.next(eventDrop);\n\n return;\n }\n eventDrop.elementDrop = {\n getAttribute: (name: string) => {\n if (name === 'dropContainer') {\n return true;\n }\n if (name === 'groupID') {\n return this.groupID();\n }\n if (name !== 'index') {\n return null;\n }\n\n return childrenElement.length;\n }\n } as unknown as HTMLElement;\n this.dragDropService.OnDrop.next(eventDrop);\n };\n\n const handlerDrop = (eventDrop: IDrop) => {\n if (this.disableDragContainer()) {\n return;\n }\n const { elementDrag, elementDrop, itemDragInfo } = eventDrop;\n\n if (this.groupID() === elementDrag.getAttribute('groupID') && this.groupID() === elementDrop.getAttribute('groupID')) {\n if (itemDragInfo) {\n itemDragInfo.indexDrop = Number(elementDrop.getAttribute('index')).valueOf();\n itemDragInfo.itemsDrop = this.items;\n itemDragInfo.containerDrop = elementContainer;\n }\n if (this.acceptDragSameGroup()) {\n this.outDroppedContainer.emit(eventDrop);\n }\n this.removeAttributes(elementContainer);\n this.setIndexElement(elementContainer);\n return;\n }\n\n if (this.groupID() !== elementDrop.getAttribute('groupID') || elementDrag.getAttribute('groupID') === elementDrop.getAttribute('groupID')) {\n return;\n }\n const indexDragOver = Number(elementDrop.getAttribute('index')).valueOf() - (elementDrop.getAttribute('dropContainer') ? 0 : 1);\n const item = this.mode() === 'deepCopy' ? cloneDeep(itemDragInfo?.item) : itemDragInfo?.item;\n\n if (itemDragInfo) {\n itemDragInfo.indexDrop = indexDragOver;\n itemDragInfo.itemsDrop = this.items;\n itemDragInfo.containerDrop = elementContainer;\n }\n\n if (!this.items().length) {\n this.outDroppedContainerEmpty.emit(eventDrop);\n }\n\n this.items.update(items => {\n items.splice(indexDragOver, 0, item);\n return [...items];\n });\n\n if (itemDragInfo && itemDragInfo.itemsMove && itemDragInfo.itemsMove()) {\n itemDragInfo.itemsDrag.set([...itemDragInfo.itemsMove()]);\n this.setAttributeElementAndItemDrag(elementContainer);\n }\n\n this.outDroppedContainer.emit(eventDrop);\n this.removeAttributes(elementContainer);\n this.setIndexElement(elementContainer);\n };\n\n [{\n name: 'OnDragStart',\n event: this.dragDropService.OnDragStart,\n functionCall: handlerDragStart\n }, {\n name: 'OnDragOver',\n event: this.dragDropService.OnDragOver,\n functionCall: handlerDragOver\n }, {\n name: 'OnDragging',\n event: this.dragDropService.OnDragging,\n functionCall: handlerDragging\n }, {\n name: 'OnDragEnd',\n event: this.dragDropService.OnDragEnd,\n functionCall: handlerDragEnd\n }, {\n name: 'OnDrop',\n event: this.dragDropService.OnDrop,\n functionCall: handlerDrop\n }].forEach((item: { name: string; event: Observable<unknown>; functionCall: object }) => (item.event.pipe(takeUntil(this.onDestroy)).subscribe(item.functionCall)));\n\n }\n\n /* */\n private async setAttributeElementAndItemDrag(elementContainer: HTMLElement, setItemDrag?: boolean, indexInsert?: number) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let index = -1;\n\n elementContainer.setAttribute('groupID', this.groupID());\n elementContainer.removeAttribute('disableDragContainer');\n\n if (this.disableDragContainer()) {\n elementContainer.setAttribute('disableDragContainer', `${this.disableDragContainer()}`);\n }\n if (this.groupName()) {\n elementContainer.setAttribute('groupName', this.groupName() || '');\n }\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (!childElement.hasAttribute('groupName') || childElement.getAttribute('groupName') === this.groupName()) {\n childElement.setAttribute('groupID', this.groupID());\n }\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n index += 1;\n childElement.setAttribute('index', `${index}`);\n childElement.removeAttribute('disableDragContainer');\n if (this.disableDragContainer()) {\n childElement.setAttribute('disableDragContainer', `${this.disableDragContainer()}`);\n }\n if (this.groupName() && !childElement.hasAttribute('groupName')) {\n childElement.setAttribute('groupName', this.groupName() || '');\n }\n if (this.placeholder()) {\n childElement.setAttribute('placeholder', `${this.placeholder()}`);\n }\n if (this.dropToGroupName()) {\n childElement.setAttribute('dropToGroupName', `${this.dropToGroupName()?.join(';')}`);\n }\n if (indexInsert === index && this.placeholder()) {\n if (!childElement.classList.contains('libs-ui-drag-drop-item-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-placeholder');\n }\n if (!childElement.classList.contains('libs-ui-drag-drop-item-drop-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-drop-placeholder');\n }\n }\n\n if (setItemDrag && childElement.getAttribute(this.dragDropService.TargetItemDragFlag) && this.items().length >= index) {\n if (this.placeholder()) {\n if (!childElement.classList.contains('libs-ui-drag-drop-item-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-placeholder');\n }\n if (!childElement.classList.contains('libs-ui-drag-drop-item-origin-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-origin-placeholder');\n }\n }\n\n this.dragDropService.ItemDragInfo = { item: this.items()[index] as object, indexDrag: index, itemsDrag: this.items, containerDrag: elementContainer, itemsMove: signal([...this.items()]) };\n if (this.mode() === 'move') {\n this.dragDropService.ItemDragInfo.itemsMove?.update(items => {\n items.splice(index, 1);\n return [...items]\n });\n }\n }\n });\n }\n\n private initStyleAndAttribute(elementContainer: HTMLElement, hasRemoveAttribute = false,) {\n this.setAttributeElementAndItemDrag(elementContainer);\n if (hasRemoveAttribute) {\n this.removeAttributes(elementContainer);\n }\n this.setIndexElement(elementContainer);\n };\n\n private setAnimationElementDragOver(indexDrag: number, indexDragOver: number, elementDragOver: HTMLElement) {\n if (!this.directionDrag() || !elementDragOver) {\n return;\n }\n if (this.directionDrag() === 'vertical') {\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-bottom');\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-top');\n if (indexDrag > indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-bottom');\n }\n if (indexDrag < indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-top');\n }\n\n return;\n }\n\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-left');\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-right');\n if (indexDrag > indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-right');\n }\n if (indexDrag < indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-left');\n }\n\n }\n\n private setIndexElement(elementContainer: HTMLElement) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let index = -1;\n\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n index += 1;\n childElement.setAttribute('index', `${index}`);\n });\n\n }\n\n private removeAttributes(elementContainer: HTMLElement, ignoreRemoveClassItemOriginPlaceholder?: boolean) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n\n elementContainer.classList.remove('libs-ui-drag-drop-container-dragover');\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n childElement.removeAttribute('index');\n if (!this.dropToGroupName() || !this.dropToGroupName()?.length) {\n childElement.removeAttribute('dropToGroupName');\n }\n if (!this.placeholder()) {\n childElement.removeAttribute('placeholder');\n }\n if (this.placeholder()) {\n childElement.classList.remove('libs-ui-drag-drop-item-placeholder');\n if (!ignoreRemoveClassItemOriginPlaceholder) {\n\n childElement.classList.remove('libs-ui-drag-drop-item-origin-placeholder');\n }\n childElement.classList.remove('libs-ui-drag-drop-item-drop-placeholder');\n }\n });\n\n }\n}\n","import { AfterViewInit, Directive, OnDestroy, inject, output } from \"@angular/core\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\nimport { cloneIBoundingClientRect, getViewport } from \"@libs-ui/utils\";\nimport { Subject, fromEvent, takeUntil, tap } from \"rxjs\";\nimport { MoLibsSharedDragDropService } from \"./drag-drop.service\";\nimport { IDragEnd } from \"./interfaces/event.interface\";\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiDragItemInContainerVirtualScrollDirective]\",\n standalone: true,\n\n})\nexport class LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit, OnDestroy {\n /* PROPERTY */\n protected onDestroy = new Subject<void>();\n\n /* OUTPUT */\n readonly outDragEndContainer = output<IDragEnd>();\n\n /* INJECT */\n protected dragDropService = inject(MoLibsSharedDragDropService);\n\n ngAfterViewInit(): void {\n this.dragDropService.OnDragEnd.pipe(takeUntil(this.onDestroy)).subscribe(e => {\n this.outDragEndContainer.emit(e);\n });\n this.dragDropService.OnDragItemInContainerVirtualScroll.pipe(takeUntil(this.onDestroy)).subscribe(dragItemInContainerVirtualScrollEvent => {\n const stopEventMouse = (mouseEvent: MouseEvent) => {\n if (!dragItemInContainerVirtualScrollEvent.ignoreStopEvent) {\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n }\n };\n const documentMouseUp = fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(\n tap((eventMouseUp) => {\n this.updateMouseEventsWhenMoveOverIframe('auto');\n stopEventMouse(eventMouseUp);\n const mousePosition = { clientX: eventMouseUp.clientX, clientY: eventMouseUp.clientY };\n\n if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {\n const result = this.getClientPosition(dragItemInContainerVirtualScrollEvent.elementDrag, mousePosition, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop, dragItemInContainerVirtualScrollEvent.dragBoundary, dragItemInContainerVirtualScrollEvent.elementContainer);\n\n mousePosition.clientX = result.clientX;\n mousePosition.clientY = result.clientY;\n }\n const dragEndEvent = { mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.ItemDragInfo = undefined;\n this.dragDropService.OnDragEnd.next(dragEndEvent);\n document.body.classList.remove('select-none');\n dragItemInContainerVirtualScrollEvent.elementDrag.remove();\n }),\n takeUntil(this.onDestroy)\n );\n\n fromEvent<MouseEvent>(document, 'mousemove').pipe(tap((eventMousemove) => {\n stopEventMouse(eventMousemove);\n const { clientX, clientY } = eventMousemove;\n const mousePosition = { clientX, clientY };\n\n const result = this.getClientPosition(dragItemInContainerVirtualScrollEvent.elementDrag, mousePosition, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop, dragItemInContainerVirtualScrollEvent.dragBoundary, dragItemInContainerVirtualScrollEvent.elementContainer);\n const elementKeepContainer = result.elementKeepContainer;\n const left = result.clientX - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft;\n const top = result.clientY - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop;\n\n if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {\n if (clientX < result.viewport.left) {\n mousePosition.clientX = result.viewport.left;\n }\n if (clientX > result.viewport.width) {\n mousePosition.clientX = result.viewport.width;\n }\n if (clientY < result.viewport.top) {\n mousePosition.clientY = result.viewport.top;\n }\n if (clientY > result.viewport.height) {\n mousePosition.clientY = result.viewport.height;\n }\n }\n dragItemInContainerVirtualScrollEvent.elementDrag.style.left = `${left}px`;\n dragItemInContainerVirtualScrollEvent.elementDrag.style.top = `${top}px`;\n\n this.dragDropService.OnDragging.next({ mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo });\n }), takeUntil((documentMouseUp)), takeUntil(this.onDestroy)).subscribe();\n\n });\n }\n\n /* FUNCTIONS */\n\n protected getClientPosition(element: HTMLElement, mousePosition: { clientX: number; clientY: number; }, distanceStartElementAndMouseLeft: number, distanceStartElementAndMouseTop: number, dragBoundary?: boolean, elementContainer?: HTMLElement): { clientX: number; clientY: number; elementKeepContainer: boolean; viewport: IBoundingClientRect } {\n let viewport = getViewport() as IBoundingClientRect;\n const rectElement = element.getBoundingClientRect();\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n const containerItem = elementContainer || containerById?.elementScroll || containerById?.element || document.body;\n let { clientX, clientY } = mousePosition;\n\n viewport.left = 0;\n viewport.top = 0;\n if (dragBoundary) {\n viewport = cloneIBoundingClientRect(containerItem.getBoundingClientRect());\n viewport.height = viewport.top + viewport.height;\n viewport.width = viewport.left + viewport.width;\n }\n let elementKeepContainer = false;\n\n if (clientX > viewport.width && clientY > viewport.height || clientX < viewport.left && clientY < viewport.top) {\n elementKeepContainer = true;\n }\n\n if ((clientX + (rectElement.width - distanceStartElementAndMouseLeft)) > viewport.width) {\n clientX -= (clientX + (rectElement.width - distanceStartElementAndMouseLeft) - viewport.width);\n }\n if ((clientY + (rectElement.height - distanceStartElementAndMouseTop)) > viewport.height) {\n clientY -= (clientY + (rectElement.height - distanceStartElementAndMouseTop) - viewport.height);\n }\n if ((clientX - distanceStartElementAndMouseLeft) < (dragBoundary && containerItem ? viewport.left : 0)) {\n clientX = (dragBoundary && containerItem ? viewport.left : 0) + distanceStartElementAndMouseLeft;\n }\n if ((clientY - distanceStartElementAndMouseTop) < (dragBoundary && containerItem ? viewport.top : 0)) {\n clientY = (dragBoundary && containerItem ? viewport.top : 0) + distanceStartElementAndMouseTop;\n }\n\n return { clientX, clientY, elementKeepContainer, viewport };\n }\n\n protected updateMouseEventsWhenMoveOverIframe(pointerEvents: 'none' | 'auto') {\n const frames = document.getElementsByTagName(\"iframe\");\n\n if (!frames?.length) {\n return;\n }\n\n for (let i = 0; i < frames.length; ++i) {\n frames[i].style.pointerEvents = pointerEvents;\n }\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, Directive, ElementRef, OnDestroy, effect, inject, input, output, signal } from \"@angular/core\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\nimport { checkMouseOverInContainer, checkViewInScreen, get, getViewport } from \"@libs-ui/utils\";\nimport { Observable, fromEvent, mergeMap, startWith, takeUntil, tap, throttleTime } from \"rxjs\";\nimport { LibsUiDragItemInContainerVirtualScrollDirective } from \"./drag-item-in-container-virtual-scroll.directive\";\nimport { IDragEnd, IDragLeave, IDragOver, IDragStart, IDrop } from \"./interfaces/event.interface\";\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiDragItemDirective]\",\n standalone: true\n})\nexport class LibsUiDragItemDirective extends LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit, OnDestroy {\n /* PROPERTY */\n private isDragOver = signal<boolean>(false);\n private isDragging = signal<boolean>(false);\n\n /* INPUT */\n //setup 3 field phía dưới nếu đang sử dụng item trong virtual-scroll \n readonly fieldId = input<string>('');\n readonly item = input<any>(undefined);\n readonly itemInContainerVirtualScroll = input<boolean>();\n //----------------------------------\n readonly throttleTimeHandlerDraggingEvent = input<number, number | undefined>(0, { transform: value => value || 0 });\n readonly ignoreStopEvent = input<boolean>();\n readonly onlyMouseDownStopEvent = input<boolean>();\n readonly dragRootElement = input<boolean>();\n readonly groupName = input<string, string | undefined>('groupDragAndDropDefault', { transform: value => value ?? 'groupDragAndDropDefault' });\n readonly dragBoundary = input<boolean>();\n readonly dragBoundaryAcceptMouseLeaveContainer = input<boolean>();\n readonly elementContainer = input<HTMLElement>();\n readonly zIndex = input<number, number | undefined>(1300, { transform: value => value ?? 1300 });\n readonly disable = input<boolean>();\n\n /* OUTPUT */\n readonly outDragStart = output<IDragStart>();\n readonly outDragOver = output<IDragOver>();\n readonly outDragLeave = output<IDragLeave>();\n readonly outDragEnd = output<IDragEnd>();\n readonly outDropped = output<IDrop>();\n\n /* INJECT */\n private elementRef = inject(ElementRef);\n\n constructor() {\n super();\n effect(() => {\n if (!this.elementRef?.nativeElement) {\n return;\n }\n const element = this.elementRef.nativeElement as HTMLElement;\n\n element.classList.remove(`${this.dragDropService.ClassItemDefine}-disable`);\n if (this.disable() && !element.classList.contains(`${this.dragDropService.ClassItemDefine}-disable`)) {\n element.classList.add(`${this.dragDropService.ClassItemDefine}-disable`);\n }\n });\n }\n\n override ngAfterViewInit() {\n const element = this.elementRef.nativeElement as HTMLElement;\n if (this.fieldId()) {\n element.setAttribute('field_id', this.fieldId());\n if (this.item()) {\n element.setAttribute('item_id', get(this.item(), this.fieldId()));\n }\n }\n element.setAttribute('groupName', this.groupName());\n element.classList.add(this.dragDropService.ClassItemDefine);\n this.dragDropService.OnDragging.pipe(throttleTime(this.throttleTimeHandlerDraggingEvent()), takeUntil(this.onDestroy)).subscribe((eventDragging) => {\n if (this.disable() || element.getAttribute('disableDragContainer') || (this.fieldId() && this.item() && eventDragging.elementDrag.getAttribute('item_id') === get(this.item(), this.fieldId()))) {\n return;\n }\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n\n if (containerById) {\n if (eventDragging.elementKeepContainer || !this.dragDropService.checkElementOverAcceptElementDrag(containerById.element.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n }\n if (checkMouseOverInContainer(eventDragging.mousePosition, element) && element !== eventDragging.elementDrag && containerById && checkViewInScreen(containerById.element, element, containerById.elementScroll)) {\n if (this.isDragOver()) {\n return;\n }\n const eventDragOver = { ...eventDragging, elementDragOver: element };\n\n this.dragDropService.OnDragOver.next(eventDragOver);\n this.outDragOver.emit(eventDragOver);\n this.isDragOver.set(true);\n\n return;\n }\n\n if (this.isDragOver()) {\n const eventDragLeave = { ...eventDragging, elementDragLeave: element };\n this.isDragOver.set(false);\n this.dragDropService.OnDragLeave.next(eventDragLeave);\n this.outDragLeave.emit(eventDragLeave);\n }\n });\n\n this.dragDropService.OnDropContainer.pipe(takeUntil(this.onDestroy)).subscribe((eventDrop) => {\n if (eventDrop.elementDrop !== element) {\n return;\n }\n const dropEvent = { elementDrag: eventDrop.elementDrag, elementDrop: element, itemDragInfo: eventDrop.itemDragInfo };\n\n this.outDropped.emit(dropEvent);\n });\n const styleTag = document.createElement(\"style\");\n\n styleTag.textContent = `.libs-ui-drag-drop-item-dragging{cursor:move}`;\n let nodeClone = element;\n let distanceStartElementAndMouseLeft = -1;\n let distanceStartElementAndMouseTop = -1;\n let contextMenu = false;\n const stopEventMouse = (mouseEvent: MouseEvent) => {\n if (!this.ignoreStopEvent()) {\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n }\n };\n const updatePositionElementRootAndRemoveNodeClone = () => {\n if (this.dragRootElement()) {\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n\n const containerItem = this.elementContainer() || containerById?.elementScroll || containerById?.element || document.body;\n const rectContainer = containerItem.getBoundingClientRect();\n const rectNodeClone = nodeClone.getBoundingClientRect();\n const numberSub = Number((getComputedStyle(containerItem).border.match(/\\d+px/gi) || ['0'])[0].replace(/\\D+/ig, '')).valueOf();\n\n element.style.left = (rectNodeClone.left - rectContainer.left - numberSub) + 'px';\n element.style.top = (rectNodeClone.top - rectContainer.top - numberSub) + 'px';\n element.classList.remove('opacity-0');\n }\n distanceStartElementAndMouseLeft = -1;\n distanceStartElementAndMouseTop = -1;\n nodeClone.remove();\n };\n\n fromEvent(document, 'contextmenu').pipe(\n tap(() => {\n if (this.isDragging()) {\n updatePositionElementRootAndRemoveNodeClone();\n }\n contextMenu = true;\n\n }),\n takeUntil(this.onDestroy)\n ).subscribe();\n\n const documentMouseUp = fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(\n tap((eventMouseup) => {\n this.updateMouseEventsWhenMoveOverIframe('auto');\n this.dragDropService.resetItemClick();\n stopEventMouse(eventMouseup);\n if (this.disable() || element.getAttribute('disableDragContainer') || contextMenu || !this.isDragging()) {\n contextMenu = false;\n\n return;\n }\n contextMenu = false;\n this.isDragging.set(false);\n element.removeAttribute(this.dragDropService.TargetItemDragFlag);\n if (this.itemInContainerVirtualScroll()) {\n return;\n }\n const mousePosition = { clientX: eventMouseup.clientX, clientY: eventMouseup.clientY };\n\n if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {\n const result = this.getClientPosition(element, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());\n\n mousePosition.clientX = result.clientX;\n mousePosition.clientY = result.clientY;\n }\n const dragEndEvent = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.ItemDragInfo = undefined;\n this.dragDropService.OnDragEnd.next(dragEndEvent);\n this.outDragEnd.emit(dragEndEvent);\n\n document.body.classList.remove('select-none');\n nodeClone.classList.remove('libs-ui-drag-drop-item-dragging');\n styleTag.remove();\n\n updatePositionElementRootAndRemoveNodeClone();\n }),\n takeUntil(this.onDestroy)\n );\n\n const elementMouseDown = fromEvent<MouseEvent>(element, 'mousedown').pipe(\n tap(eventMousedown => {\n this.dragDropService.ItemClick = element;\n contextMenu = false;\n this.updateMouseEventsWhenMoveOverIframe('none');\n if ((this.disable() || element.getAttribute('disableDragContainer') || !this.isDragging() || this.itemInContainerVirtualScroll()) && !this.onlyMouseDownStopEvent()) {\n return;\n }\n stopEventMouse(eventMousedown);\n }),\n takeUntil(this.onDestroy)\n );\n const documentMouseMove = fromEvent<MouseEvent>(document, 'mousemove').pipe(tap((eventMousemove) => stopEventMouse(eventMousemove)), takeUntil((documentMouseUp)), takeUntil(this.onDestroy));\n const drag = elementMouseDown.pipe(mergeMap((mouseEvent: MouseEvent) => documentMouseMove.pipe(startWith((mouseEvent))))) as Observable<MouseEvent>;\n let ignoreMousedown = false;\n\n drag.pipe(tap((dragMouseEvent: MouseEvent) => {\n const rectElement = element.getBoundingClientRect();\n const viewport = getViewport() as IBoundingClientRect;\n\n if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || (!ignoreMousedown && dragMouseEvent.type === 'mousedown' && rectElement.height + rectElement.top >= viewport.height)) {\n\n return;\n }\n const { clientX, clientY } = dragMouseEvent;\n\n if (distanceStartElementAndMouseLeft === -1) {\n distanceStartElementAndMouseLeft = clientX - rectElement.left;\n }\n\n if (distanceStartElementAndMouseTop === -1) {\n distanceStartElementAndMouseTop = clientY - rectElement.top;\n }\n }), takeUntil(this.onDestroy)).subscribe(dragMouseEvent => {\n if (this.dragDropService.ItemClick.filter(item => item !== element).some(item => element.contains(item))) {\n return;\n }\n if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || dragMouseEvent.type === 'mousedown' || contextMenu || (this.itemInContainerVirtualScroll() && this.isDragging())) {\n return;\n }\n ignoreMousedown = true;\n const { clientX, clientY } = dragMouseEvent;\n const mousePosition = { clientX, clientY };\n const rectElement = element.getBoundingClientRect();\n\n if (!this.isDragging()) {\n this.isDragging.set(true);\n const eventDragStart = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n element.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');\n this.dragDropService.OnDragStart.next(eventDragStart);\n eventDragStart.itemDragInfo = this.dragDropService.ItemDragInfo;\n this.outDragStart.emit(eventDragStart);\n\n nodeClone = element.cloneNode(true) as HTMLElement;\n nodeClone.style.zIndex = `${this.zIndex()}`;\n nodeClone.classList.add('!fixed');\n nodeClone.classList.remove('libs-ui-drag-drop-item-origin-placeholder');\n nodeClone.classList.remove('libs-ui-drag-drop-item-placeholder');\n nodeClone.appendChild(styleTag);\n nodeClone.classList.add('libs-ui-drag-drop-item-dragging');\n nodeClone.style.width = `${rectElement.width}px`;\n nodeClone.style.height = `${rectElement.height}px`;\n nodeClone.style.left = `${-999}px`;\n nodeClone.style.top = `${-999}px`;\n document.body.classList.add('select-none');\n document.body.append(nodeClone);\n if (this.dragRootElement()) {\n element.classList.add('opacity-0');\n }\n\n if (this.itemInContainerVirtualScroll()) {\n this.dragDropService.OnDragItemInContainerVirtualScroll.next({\n itemDragInfo: this.dragDropService.ItemDragInfo,\n elementDrag: nodeClone,\n distanceStartElementAndMouseTop,\n distanceStartElementAndMouseLeft,\n elementContainer: this.elementContainer(),\n dragBoundary: this.dragBoundary(),\n dragBoundaryAcceptMouseLeaveContainer: this.dragBoundaryAcceptMouseLeaveContainer(),\n ignoreStopEvent: this.ignoreStopEvent()\n });\n\n return;\n }\n }\n const result = this.getClientPosition(nodeClone, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());\n\n const elementKeepContainer = result.elementKeepContainer;\n const left = result.clientX - distanceStartElementAndMouseLeft;\n const top = result.clientY - distanceStartElementAndMouseTop;\n\n if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {\n if (clientX < result.viewport.left) {\n mousePosition.clientX = result.viewport.left;\n }\n if (clientX > result.viewport.width) {\n mousePosition.clientX = result.viewport.width;\n }\n if (clientY < result.viewport.top) {\n mousePosition.clientY = result.viewport.top;\n }\n if (clientY > result.viewport.height) {\n mousePosition.clientY = result.viewport.height;\n }\n }\n nodeClone.style.left = `${left}px`;\n nodeClone.style.top = `${top}px`;\n\n const eventDragging = { mousePosition, elementDrag: nodeClone, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.OnDragging.next(eventDragging);\n });\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libs-ui-components-drag-drop.mjs","sources":["../../../../../libs-ui/components/drag-drop/src/defines/css.define.ts","../../../../../libs-ui/components/drag-drop/src/drag-drop.service.ts","../../../../../libs-ui/components/drag-drop/src/drag-scroll.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-drop.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-item-in-container-virtual-scroll.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-item.directive.ts","../../../../../libs-ui/components/drag-drop/src/libs-ui-components-drag-drop.ts"],"sourcesContent":["export const styleContainer = (config: Array<{ className: string, styles: string }>, viewEncapsulation: 'emulated' | 'none', groupID: string): string => {\n const defaultConfig = [{\n className: 'libs-ui-drag-drop-container',\n styles: `display:block;`\n },\n {\n className: 'libs-ui-drag-drop-item',\n styles: `\n cursor:move;`\n },\n {\n className: 'libs-ui-drag-drop-item-placeholder',\n styles: `visibility: hidden;`\n },\n {\n className: 'libs-ui-drag-drop-item-origin-placeholder',\n styles: `visibility: hidden;`\n },\n {\n className: 'libs-ui-drag-drop-item-drop-placeholder',\n styles: `visibility: hidden;`\n },\n {\n className: 'libs-ui-drag-drop-item-dragging',\n styles: `cursor:move; user-select: none; `\n },\n {\n className: 'libs-ui-drag-drop-item-disable',\n styles: ` cursor:not-allowed;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-bottom',\n styles: `position:relative;animation: translateBottom 0.35s 1 ease;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-top',\n styles: `position:relative;animation: translateTop 0.35s 1 ease;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-left',\n styles: `position:relative;animation: translateLeft 0.35s 1 ease;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-right',\n styles: `position:relative;animation: translateRight 0.35s 1 ease;`\n }];\n\n config.forEach(item => {\n const itemExits = defaultConfig.find(defaultItem => defaultItem.className === item.className);\n\n if (itemExits) {\n itemExits.styles = item.styles;\n\n return;\n }\n defaultConfig.push(item);\n });\n const groupAttr = viewEncapsulation ? `[groupID~=\"${groupID}\"]` : '';\n let styles = '';\n\n defaultConfig.forEach((item) => {\n const style = `${groupAttr}.${item.className}{${item.styles}}`;\n\n styles = `${styles}${style}\\n`;\n });\n\n styles = ` @keyframes translateTop {\n 0% {\n transform: translateY(30px);\n }\n \n 100% {\n transform: translateX(0);\n }\n }\n \n @keyframes translateBottom {\n 0% {\n transform: translateY(-30px);\n }\n \n 100% {\n transform: translateX(0px);\n }\n }\n @keyframes translateLeft {\n 0% {\n transform: translateX(30px);\n }\n \n 100% {\n transform: translateX(0);\n }\n }\n \n @keyframes translateRight {\n 0% {\n transform: translateX(-30px);\n }\n \n 100% {\n transform: translateX(0px);\n }\n }\n ${styles}`.replace(/\\n+/g, '');\n\n return styles;\n};","import { Injectable, WritableSignal, signal } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { IDragEnd, IDragItemInContainerVirtualScroll, IDragLeave, IDragOver, IDragStart, IDragging, IDrop, IItemDragInfo } from \"./interfaces/event.interface\";\n@Injectable({\n providedIn: 'any'\n})\n\nexport class MoLibsSharedDragDropService {\n private itemsClick = new Array<HTMLElement>();\n private onDragItemInContainerVirtualScroll = new Subject<IDragItemInContainerVirtualScroll>();\n private itemDragInfo?: IItemDragInfo;\n private container = signal(new Map<string, { element: HTMLElement; elementScroll?: HTMLElement }>());\n private targetItemDragFlag = 'item-drag-target';\n private classContainerDefine = 'libs-ui-drag-drop-container';\n private classItemDefine = 'libs-ui-drag-drop-item';\n private onDragging = new Subject<IDragging>();\n private onDragStart = new Subject<IDragStart>();\n private onDragEnd = new Subject<IDragEnd>();\n private onDragOver = new Subject<IDragOver>();\n private onDragLeave = new Subject<IDragLeave>();\n private onDrop = new Subject<IDrop>();\n private onDropContainer = new Subject<IDrop>();\n private onItemInit = new Subject<string>();\n\n public get OnDragItemInContainerVirtualScroll(): Subject<IDragItemInContainerVirtualScroll> {\n return this.onDragItemInContainerVirtualScroll;\n }\n\n public set ItemDragInfo(data: IItemDragInfo | undefined) {\n this.itemDragInfo = data;\n }\n\n public get ItemDragInfo(): IItemDragInfo | undefined {\n return this.itemDragInfo;\n }\n\n public get Container(): WritableSignal<Map<string, { element: HTMLElement; elementScroll?: HTMLElement }>> {\n return this.container;\n }\n\n public get TargetItemDragFlag() {\n return this.targetItemDragFlag;\n }\n\n public get ClassContainerDefine() {\n return this.classContainerDefine;\n }\n\n public get ClassItemDefine() {\n return this.classItemDefine;\n }\n\n public get OnDragging() {\n return this.onDragging;\n }\n\n public get OnDragOver() {\n return this.onDragOver;\n }\n\n public get OnDragLeave() {\n return this.onDragLeave;\n }\n\n public get OnDragStart() {\n return this.onDragStart;\n }\n\n public get OnDragEnd() {\n return this.onDragEnd;\n }\n\n public get OnDropContainer() {\n return this.onDropContainer;\n }\n\n public get OnDrop() {\n return this.onDrop;\n }\n\n public get OnItemInit() {\n return this.onItemInit;\n }\n\n public get ItemClick(): Array<HTMLElement> {\n return [...this.itemsClick];\n }\n\n public set ItemClick(item: HTMLElement) {\n this.itemsClick.push(item);\n }\n\n public resetItemClick() {\n this.itemsClick.length = 0;\n }\n\n public checkElementOverAcceptElementDrag(groupNameOfContainer: string | null, groupNameOfElementDrag: string | null, groupNameOfDropTo: string | null): boolean {\n if (groupNameOfContainer !== groupNameOfElementDrag && !groupNameOfDropTo) {\n return false;\n }\n\n if (groupNameOfDropTo !== null && !groupNameOfDropTo.toString().split(';').includes(groupNameOfContainer || 'undefinedName')) {\n return false;\n }\n\n return true;\n }\n}","import { AfterViewInit, Directive, ElementRef, OnDestroy, inject, input, signal } from \"@angular/core\";\nimport { IPageInfo, VirtualScrollerComponent } from \"@iharbeck/ngx-virtual-scroller\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\nimport { checkMouseOverInContainer, cloneIBoundingClientRect, get } from \"@libs-ui/utils\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { MoLibsSharedDragDropService } from \"./drag-drop.service\";\nimport { IDragging } from \"./interfaces/event.interface\";\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiComponentsDragScrollDirective]\",\n standalone: true\n})\nexport class LibsUiComponentsDragScrollDirective implements AfterViewInit, OnDestroy {\n /* PROPERTY */\n private stopScroll = signal<boolean>(false);\n private virtualScrollPageInfo = signal<IPageInfo | undefined>(undefined);\n protected intervalScrollToElement = signal<number | undefined>(undefined);\n protected onDestroy = new Subject<void>();\n\n /* INPUT */\n readonly ignoreAutoScroll = input<boolean>();\n readonly widthZoneDetect = input<number, number | undefined>(16, { transform: value => value ?? 16 });\n readonly movementLength = input<number, number | undefined>(6, { transform: value => value ?? 6 });\n readonly rootElementScroll = input<HTMLElement>();\n readonly virtualScrollerComponent = input<VirtualScrollerComponent>();\n\n /* INJECT */\n protected elementRef = inject(ElementRef);\n protected dragDropService = inject(MoLibsSharedDragDropService);\n\n ngAfterViewInit(): void {\n this.dragDropService.OnDragging.pipe(takeUntil(this.onDestroy)).subscribe((eventDragging) => this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll()));\n this.dragDropService.OnDragEnd.pipe(takeUntil(this.onDestroy)).subscribe(() => {\n clearInterval(this.intervalScrollToElement());\n if (this.virtualScrollPageInfo()) {\n const firstElement = get(this.virtualScrollerComponent(), 'element')?.nativeElement.firstElementChild;\n const isHorizontal = get(this.virtualScrollerComponent(), '_horizontal');\n if (isHorizontal) {\n firstElement.style.transform = `scaleX(${this.virtualScrollPageInfo()?.scrollEndPosition})`;\n }\n if (!isHorizontal) {\n firstElement.style.transform = `scaleY(${this.virtualScrollPageInfo()?.scrollEndPosition})`;\n }\n this.virtualScrollPageInfo.set(undefined);\n }\n this.stopScroll.set(false);\n });\n this.dragDropService.OnDragStart.pipe(takeUntil(this.onDestroy)).subscribe(() => {\n if (this.virtualScrollerComponent) {\n this.virtualScrollerComponent()?.scrollToIndex(0);\n }\n });\n if (!this.virtualScrollerComponent) {\n return;\n }\n this.virtualScrollerComponent()?.vsChange.pipe(takeUntil(this.onDestroy)).subscribe(pageInfo => {\n const items = get(this.virtualScrollerComponent, '_items');\n\n if (items && items.length === pageInfo.endIndex) {\n this.virtualScrollPageInfo.set(pageInfo);\n const elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n const isHorizontal = get(this.virtualScrollerComponent, '_horizontal');\n\n if (isHorizontal && pageInfo.scrollEndPosition < elementSetScroll.offsetWidth + elementSetScroll.scrollLeft + 3) {\n this.stopScroll.set(true);\n clearInterval(this.intervalScrollToElement());\n\n return;\n }\n\n if (!isHorizontal && pageInfo.scrollEndPosition < elementSetScroll.offsetHeight + elementSetScroll.scrollTop + 3) {\n this.stopScroll.set(true);\n clearInterval(this.intervalScrollToElement());\n\n return;\n }\n }\n this.stopScroll.set(false);\n });\n }\n\n /* FUNCTIONS */\n protected checkAndScrollElementToPosition(eventDragging: IDragging, ignoreAutoScroll?: boolean) {\n let elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n\n if (ignoreAutoScroll || !checkMouseOverInContainer(eventDragging.mousePosition, elementSetScroll)) {\n return;\n }\n const rectElement = cloneIBoundingClientRect(this.elementRef.nativeElement.getBoundingClientRect());\n\n if (this.rootElementScroll()) {\n const rectElementScroll = this.rootElementScroll()?.getBoundingClientRect() as IBoundingClientRect;\n\n rectElement.left = rectElementScroll.left;\n rectElement.top = rectElementScroll.top;\n }\n\n const { width, height, top, left } = rectElement;\n const { clientX, clientY } = eventDragging.mousePosition;\n const limitLeft = left + elementSetScroll.offsetWidth;\n const limitTop = top + elementSetScroll.offsetHeight;\n\n clearInterval(this.intervalScrollToElement());\n if ((clientX < left || clientX > left + width) && (clientY < top || clientY > top + height)) {\n return;\n }\n\n this.intervalScrollToElement.set(setInterval(() => {\n elementSetScroll = (this.rootElementScroll() || this.elementRef.nativeElement);\n let directionTop = 0;\n let directionLeft = 0;\n\n if (top <= clientY && clientY <= top + this.widthZoneDetect()) {\n elementSetScroll.scrollTop -= this.movementLength();\n directionTop = -1;\n }\n\n if (limitTop - this.widthZoneDetect() <= clientY && clientY <= limitTop) {\n if (this.stopScroll()) {\n return;\n }\n elementSetScroll.scrollTop += this.movementLength();\n directionTop = 1;\n }\n\n if ((limitLeft - this.widthZoneDetect() <= clientX) && (clientX <= limitLeft)) {\n if (this.stopScroll()) {\n return;\n }\n elementSetScroll.scrollLeft += this.movementLength();\n directionLeft = +1;\n\n }\n if (left <= clientX && clientX <= left + this.widthZoneDetect()) {\n elementSetScroll.scrollLeft -= this.movementLength();\n directionLeft = -1;\n }\n\n if (elementSetScroll.scrollLeft && (elementSetScroll.scrollLeft + elementSetScroll.offsetWidth >= elementSetScroll.scrollWidth)) {\n elementSetScroll.scrollLeft -= elementSetScroll.scrollLeft + elementSetScroll.offsetWidth - elementSetScroll.scrollWidth;\n }\n\n if (elementSetScroll.scrollTop && (elementSetScroll.scrollTop + elementSetScroll.offsetHeight >= elementSetScroll.scrollHeight)) {\n elementSetScroll.scrollTop -= elementSetScroll.scrollTop + elementSetScroll.offsetHeight - elementSetScroll.scrollHeight;\n }\n\n if ((directionTop < 0 && !elementSetScroll.scrollTop) || (!elementSetScroll.scrollLeft && directionLeft < 0) || (directionTop && elementSetScroll.scrollHeight <= elementSetScroll.scrollTop + elementSetScroll.offsetHeight + 3) || (directionLeft && elementSetScroll.scrollWidth <= elementSetScroll.scrollLeft + elementSetScroll.offsetWidth + 3)) {\n return clearInterval(this.intervalScrollToElement());\n }\n }, 10));\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","import { AfterViewInit, Directive, OnDestroy, effect, input, model, output, signal, untracked } from \"@angular/core\";\nimport { checkMouseOverInContainer, cloneDeep, get, set, uuid } from \"@libs-ui/utils\";\nimport { Observable, debounceTime, filter, takeUntil } from \"rxjs\";\nimport { styleContainer } from \"./defines/css.define\";\nimport { LibsUiComponentsDragScrollDirective } from \"./drag-scroll.directive\";\nimport { IDragDropFunctionControlEvent, IDragEnd, IDragLeave, IDragOver, IDragStart, IDragging, IDrop } from \"./interfaces/event.interface\";\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiComponentsDragContainerDirective]\",\n standalone: true,\n})\nexport class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDragScrollDirective implements AfterViewInit, OnDestroy {\n /* PROPERTY */\n private groupID = signal<string>(uuid());\n private isDragOver = signal<boolean>(false);\n\n /* INPUT */\n readonly disableDragContainer = input<boolean>();\n readonly mode = input<string, 'move' | 'copy' | 'deepCopy'>('move', { transform: value => value ?? 'move' });\n readonly directionDrag = input<'horizontal' | 'vertical'>();\n readonly viewEncapsulation = input<'emulated' | 'none', 'emulated' | 'none' | undefined>('emulated', { transform: value => value ?? 'emulated' });\n readonly acceptDragSameGroup = input<boolean, boolean | undefined>(false, { transform: value => value ?? false });\n readonly placeholder = input<boolean, boolean | undefined>(true, { transform: value => value ?? true });\n readonly groupName = input<string, string | undefined>('groupDragAndDropDefault', { transform: value => value ?? 'groupDragAndDropDefault' }); // nếu các group có tên trùng nhau sẽ được drop\n readonly dropToGroupName = input<Array<string> | null>(null); // nếu item trong các group A được drop vào group B nhưng group B không được drop vào group A\n readonly items = model.required<Array<unknown>>();\n readonly stylesOverride = input<Array<{ className: string, styles: string }>>();\n\n /* OUTPUT */\n readonly outDragStartContainer = output<IDragStart>();\n readonly outDragOverContainer = output<IDragOver>();\n readonly outDragLeaveContainer = output<IDragLeave>();\n readonly outDragEndContainer = output<IDragEnd>();\n readonly outDroppedContainer = output<IDrop>();\n readonly outDroppedContainerEmpty = output<IDrop>();\n readonly outFunctionControl = output<IDragDropFunctionControlEvent>();\n\n constructor() {\n super();\n const element = this.elementRef.nativeElement as HTMLElement;\n\n const container = { element };\n\n this.dragDropService.Container.update(data => {\n data.set(this.groupID(), container);\n return data;\n });\n\n effect(() => {\n if (!this.rootElementScroll()) {\n return;\n }\n untracked(() => {\n set(container, 'elementScroll', this.rootElementScroll());\n this.dragDropService.Container.update(containerMap => new Map(containerMap));\n });\n });\n\n effect(() => {\n if (this.directionDrag() && this.elementRef.nativeElement) {\n this.setAttributeElementAndItemDrag(this.elementRef.nativeElement);\n }\n });\n effect(() => {\n if (this.disableDragContainer() && this.elementRef.nativeElement) {\n this.setAttributeElementAndItemDrag(this.elementRef.nativeElement);\n }\n });\n }\n\n override ngAfterViewInit(): void {\n this.outFunctionControl.emit({ setAttributeElementAndItemDrag: () => this.setAttributeElementAndItemDrag(this.elementRef.nativeElement) });\n\n this.outDroppedContainer.subscribe(eventDropped => {\n this.dragDropService.OnDropContainer.next(eventDropped);\n });\n const sub = this.onDestroy.subscribe(() => {\n if (indexSpliceListTo > -1) {\n this.items.update(items => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n }\n\n this.dragDropService.Container().delete(this.groupID());\n sub.unsubscribe();\n });\n const elementContainer = this.elementRef.nativeElement as HTMLElement;\n\n this.initStyleAndAttribute(elementContainer, true);\n this.dragDropService.OnItemInit.pipe(debounceTime(250), filter(groupName => groupName === this.groupName()), takeUntil(this.onDestroy)).subscribe(() => this.initStyleAndAttribute(elementContainer));\n const styleTag = document.createElement(\"style\");\n\n styleTag.textContent = styleContainer((this.stylesOverride() || []), this.viewEncapsulation(), this.groupID());\n elementContainer.appendChild(styleTag);\n elementContainer.classList.add(this.dragDropService.ClassContainerDefine);\n\n const handlerDragStart = (eventDragStart: IDragStart) => {\n\n this.setAttributeElementAndItemDrag(elementContainer, true);\n if (this.groupID() === eventDragStart.elementDrag.getAttribute('groupID')) {\n this.outDragStartContainer.emit({ ...eventDragStart, itemDragInfo: this.dragDropService.ItemDragInfo });\n }\n };\n\n const storeIndex = { indexDrag: -1, indexDragOver: -1 };\n let indexSpliceListTo = -1;\n const handlerDragOver = (eventDragOver: IDragOver) => {\n const { elementDrag, elementDragOver } = eventDragOver;\n\n if (this.disableDragContainer() || !this.dragDropService.checkElementOverAcceptElementDrag(this.groupName(), elementDrag.getAttribute('groupName'), elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n const indexDrag = Number(elementDrag.getAttribute('index')).valueOf();\n const indexDragOver = Number(elementDragOver.getAttribute('index')).valueOf();\n const idGroupElementDrag = elementDrag.getAttribute('groupID');\n const idGroupElementDragOver = elementDragOver.getAttribute('groupID');\n\n if ((this.groupID() !== idGroupElementDrag) || (idGroupElementDrag !== idGroupElementDragOver)) { // xử lý cho item drag over qua 1 item khác container\n if (idGroupElementDragOver === this.groupID() && this.placeholder()) {\n const item = this.mode() === 'deepCopy' ? cloneDeep(this.dragDropService.ItemDragInfo?.item) : this.dragDropService.ItemDragInfo?.item;\n\n if (indexSpliceListTo >= 0) {\n this.items.update(items => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n\n }\n this.items.update(items => {\n items.splice(indexDragOver, 0, item);\n return [...items];\n });\n indexSpliceListTo = indexDragOver;\n this.setAttributeElementAndItemDrag(elementContainer, false, indexSpliceListTo);\n }\n\n return;\n }\n\n if (!this.acceptDragSameGroup() || indexDrag < 0 || indexDragOver < 0 || !this.items().length || indexDrag > this.items().length || indexDragOver > this.items().length || (storeIndex.indexDrag === indexDrag && storeIndex.indexDragOver === indexDragOver)) {\n return;\n }\n // xử lý cho item drag over qua 1 item cùng container\n const itemDrag = this.items()[indexDrag];\n\n this.setAnimationElementDragOver(indexDrag, indexDragOver, elementDragOver);\n storeIndex.indexDrag = indexDrag;\n storeIndex.indexDragOver = indexDragOver;\n this.items.update(items => {\n items.splice(indexDrag, 1);\n return [...items];\n });\n this.items.update(items => {\n items.splice(indexDragOver, 0, itemDrag);\n return [...items];\n });\n\n elementDrag.setAttribute('index', indexDragOver.toString());\n this.setAttributeElementAndItemDrag(elementContainer);\n };\n\n const removePlaceholderDrag = (eventDrag: IDragEnd, isDragging?: boolean) => {\n clearInterval(this.intervalScrollToElement());\n storeIndex.indexDrag = -1;\n storeIndex.indexDragOver = -1;\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n\n if (!checkMouseOverInContainer(eventDrag.mousePosition, (this.rootElementScroll() || elementContainer))) {\n const childElementIndex = Array.from<HTMLElement>(childrenElement).findIndex((child) => child.classList.contains('libs-ui-drag-drop-item-drop-placeholder'));\n\n if (childElementIndex >= 0 && this.groupID() !== eventDrag.elementDrag.getAttribute('groupID')) {\n this.items.update(items => {\n items.splice(childElementIndex, 1);\n return [...items];\n });\n }\n indexSpliceListTo = -1;\n\n this.removeAttributes(elementContainer, isDragging);\n this.setIndexElement(elementContainer);\n\n return;\n }\n if (indexSpliceListTo >= 0) {\n this.items.update(items => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n }\n indexSpliceListTo = -1;\n };\n\n const handlerDragging = (eventDragging: IDragging) => {\n this.setAttributeElementAndItemDrag(elementContainer);\n const { elementDrag } = eventDragging;\n const fieldIdItem = elementDrag.getAttribute('field_id');\n const idItemDrag = elementDrag.getAttribute('item_id');\n\n if (fieldIdItem && idItemDrag && this.items().find(item => get(item, fieldIdItem) === idItemDrag)) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n const childElement = Array.from<HTMLElement>(childrenElement).find((child) => child.getAttribute('item_id') === idItemDrag);\n\n if (this.items() === eventDragging.itemDragInfo?.itemsDrag() && childElement && !childElement.classList.contains('libs-ui-drag-drop-item-drop-placeholder') && !childElement.getAttribute(this.dragDropService.TargetItemDragFlag)) {\n childElement.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');\n this.groupID.set(elementDrag.getAttribute('groupID') || '');\n styleTag.remove();\n styleTag.textContent = styleContainer((this.stylesOverride() || []), this.viewEncapsulation(), this.groupID());\n elementContainer.appendChild(styleTag);\n this.setAttributeElementAndItemDrag(elementContainer, true);\n }\n }\n\n if (this.disableDragContainer()) {\n return;\n }\n\n if (this.groupID() === elementDrag.getAttribute('groupID') && !this.acceptDragSameGroup()) {\n this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll() || !this.acceptDragSameGroup());\n return;\n }\n\n if (!checkMouseOverInContainer(eventDragging.mousePosition, (this.rootElementScroll() || elementContainer))) {\n if (this.isDragOver()) {\n this.isDragOver.set(false);\n this.outDragLeaveContainer.emit({ ...eventDragging, elementDragLeave: elementContainer });\n }\n\n return removePlaceholderDrag(eventDragging, true);\n }\n this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll());\n\n // Đoạn code xử lý cho việc kéo một element vào 1 container nhưng container không có item hoặc item drag không over qua item trong container\n if (!this.isDragOver()) {\n elementContainer.classList.add('libs-ui-drag-drop-container-dragover');\n this.isDragOver.set(true);\n this.outDragOverContainer.emit({ ...eventDragging, elementDragOver: elementContainer });\n }\n const eventDragOver = { ...eventDragging, elementDragOver: elementContainer };\n\n if (!this.items().length) {\n eventDragOver.elementDragOver = {\n getAttribute: (name: string) => {\n if (name === 'groupID') {\n return this.groupID();\n }\n if (name !== 'index') {\n return null;\n }\n\n return 0;\n }\n } as unknown as HTMLElement;\n this.dragDropService.OnDragOver.next(eventDragOver);\n\n return;\n }\n\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let childElement = Array.from<HTMLElement>(childrenElement).find((child) => checkMouseOverInContainer(eventDragging.mousePosition, child));\n\n if (childElement) { // nếu tìm thấy thì sẽ nhận qua sự kiện của drag-item.directive emit\n return;\n }\n childElement = Array.from<HTMLElement>(childrenElement).pop();\n\n if (childElement) {\n eventDragOver.elementDragOver = childElement;\n this.dragDropService.OnDragOver.next(eventDragOver);\n }\n };\n\n const handlerDragEnd = (eventDragEnd: IDragEnd) => {\n if (this.disableDragContainer()) {\n return;\n }\n let rect = undefined;\n\n if (this.rootElementScroll() || elementContainer) {\n rect = (this.rootElementScroll() || elementContainer)?.getBoundingClientRect();\n }\n removePlaceholderDrag(eventDragEnd);\n const { elementDrag, mousePosition, itemDragInfo } = eventDragEnd;\n\n if (this.groupID() === elementDrag.getAttribute('groupID')) {\n this.outDragEndContainer.emit({ ...eventDragEnd });\n }\n if (!checkMouseOverInContainer(mousePosition, this.rootElementScroll() || elementContainer, rect)) {\n return;\n }\n const eventDrop = { elementDrag: elementDrag, elementDrop: elementContainer, itemDragInfo: itemDragInfo };\n\n if (this.disableDragContainer() || !this.dragDropService.checkElementOverAcceptElementDrag(this.groupName(), elementDrag.getAttribute('groupName'), elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n const childElement = Array.from<HTMLElement>(childrenElement).find((child) => checkMouseOverInContainer(mousePosition, child));\n\n if (childElement) {\n eventDrop.elementDrop = childElement;\n this.dragDropService.OnDrop.next(eventDrop);\n\n return;\n }\n eventDrop.elementDrop = {\n getAttribute: (name: string) => {\n if (name === 'dropContainer') {\n return true;\n }\n if (name === 'groupID') {\n return this.groupID();\n }\n if (name !== 'index') {\n return null;\n }\n\n return childrenElement.length;\n }\n } as unknown as HTMLElement;\n this.dragDropService.OnDrop.next(eventDrop);\n };\n\n const handlerDrop = (eventDrop: IDrop) => {\n if (this.disableDragContainer()) {\n return;\n }\n const { elementDrag, elementDrop, itemDragInfo } = eventDrop;\n\n if (this.groupID() === elementDrag.getAttribute('groupID') && this.groupID() === elementDrop.getAttribute('groupID')) {\n if (itemDragInfo) {\n itemDragInfo.indexDrop = Number(elementDrop.getAttribute('index')).valueOf();\n itemDragInfo.itemsDrop = this.items;\n itemDragInfo.containerDrop = elementContainer;\n }\n if (this.acceptDragSameGroup()) {\n this.outDroppedContainer.emit(eventDrop);\n }\n this.removeAttributes(elementContainer);\n this.setIndexElement(elementContainer);\n return;\n }\n\n if (this.groupID() !== elementDrop.getAttribute('groupID') || elementDrag.getAttribute('groupID') === elementDrop.getAttribute('groupID')) {\n return;\n }\n const indexDragOver = Number(elementDrop.getAttribute('index')).valueOf() - (elementDrop.getAttribute('dropContainer') ? 0 : 1);\n const item = this.mode() === 'deepCopy' ? cloneDeep(itemDragInfo?.item) : itemDragInfo?.item;\n\n if (itemDragInfo) {\n itemDragInfo.indexDrop = indexDragOver;\n itemDragInfo.itemsDrop = this.items;\n itemDragInfo.containerDrop = elementContainer;\n }\n\n if (!this.items().length) {\n this.outDroppedContainerEmpty.emit(eventDrop);\n }\n\n this.items.update(items => {\n items.splice(indexDragOver, 0, item);\n return [...items];\n });\n\n if (itemDragInfo && itemDragInfo.itemsMove && itemDragInfo.itemsMove()) {\n itemDragInfo.itemsDrag.set([...itemDragInfo.itemsMove()]);\n this.setAttributeElementAndItemDrag(elementContainer);\n }\n\n this.outDroppedContainer.emit(eventDrop);\n this.removeAttributes(elementContainer);\n this.setIndexElement(elementContainer);\n };\n\n [{\n name: 'OnDragStart',\n event: this.dragDropService.OnDragStart,\n functionCall: handlerDragStart\n }, {\n name: 'OnDragOver',\n event: this.dragDropService.OnDragOver,\n functionCall: handlerDragOver\n }, {\n name: 'OnDragging',\n event: this.dragDropService.OnDragging,\n functionCall: handlerDragging\n }, {\n name: 'OnDragEnd',\n event: this.dragDropService.OnDragEnd,\n functionCall: handlerDragEnd\n }, {\n name: 'OnDrop',\n event: this.dragDropService.OnDrop,\n functionCall: handlerDrop\n }].forEach((item: { name: string; event: Observable<unknown>; functionCall: object }) => (item.event.pipe(takeUntil(this.onDestroy)).subscribe(item.functionCall)));\n\n }\n\n /* */\n private async setAttributeElementAndItemDrag(elementContainer: HTMLElement, setItemDrag?: boolean, indexInsert?: number) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let index = -1;\n\n elementContainer.setAttribute('groupID', this.groupID());\n elementContainer.removeAttribute('disableDragContainer');\n\n if (this.disableDragContainer()) {\n elementContainer.setAttribute('disableDragContainer', `${this.disableDragContainer()}`);\n }\n if (this.groupName()) {\n elementContainer.setAttribute('groupName', this.groupName() || '');\n }\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (!childElement.hasAttribute('groupName') || childElement.getAttribute('groupName') === this.groupName()) {\n childElement.setAttribute('groupID', this.groupID());\n }\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n index += 1;\n childElement.setAttribute('index', `${index}`);\n childElement.removeAttribute('disableDragContainer');\n if (this.disableDragContainer()) {\n childElement.setAttribute('disableDragContainer', `${this.disableDragContainer()}`);\n }\n if (this.groupName() && !childElement.hasAttribute('groupName')) {\n childElement.setAttribute('groupName', this.groupName() || '');\n }\n if (this.placeholder()) {\n childElement.setAttribute('placeholder', `${this.placeholder()}`);\n }\n if (this.dropToGroupName()) {\n childElement.setAttribute('dropToGroupName', `${this.dropToGroupName()?.join(';')}`);\n }\n if (indexInsert === index && this.placeholder()) {\n if (!childElement.classList.contains('libs-ui-drag-drop-item-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-placeholder');\n }\n if (!childElement.classList.contains('libs-ui-drag-drop-item-drop-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-drop-placeholder');\n }\n }\n\n if (setItemDrag && childElement.getAttribute(this.dragDropService.TargetItemDragFlag) && this.items().length >= index) {\n if (this.placeholder()) {\n if (!childElement.classList.contains('libs-ui-drag-drop-item-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-placeholder');\n }\n if (!childElement.classList.contains('libs-ui-drag-drop-item-origin-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-origin-placeholder');\n }\n }\n\n this.dragDropService.ItemDragInfo = { item: this.items()[index] as object, indexDrag: index, itemsDrag: this.items, containerDrag: elementContainer, itemsMove: signal([...this.items()]) };\n if (this.mode() === 'move') {\n this.dragDropService.ItemDragInfo.itemsMove?.update(items => {\n items.splice(index, 1);\n return [...items]\n });\n }\n }\n });\n }\n\n private initStyleAndAttribute(elementContainer: HTMLElement, hasRemoveAttribute = false,) {\n this.setAttributeElementAndItemDrag(elementContainer);\n if (hasRemoveAttribute) {\n this.removeAttributes(elementContainer);\n }\n this.setIndexElement(elementContainer);\n };\n\n private setAnimationElementDragOver(indexDrag: number, indexDragOver: number, elementDragOver: HTMLElement) {\n if (!this.directionDrag() || !elementDragOver) {\n return;\n }\n if (this.directionDrag() === 'vertical') {\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-bottom');\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-top');\n if (indexDrag > indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-bottom');\n }\n if (indexDrag < indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-top');\n }\n\n return;\n }\n\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-left');\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-right');\n if (indexDrag > indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-right');\n }\n if (indexDrag < indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-left');\n }\n\n }\n\n private setIndexElement(elementContainer: HTMLElement) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let index = -1;\n\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n index += 1;\n childElement.setAttribute('index', `${index}`);\n });\n\n }\n\n private removeAttributes(elementContainer: HTMLElement, ignoreRemoveClassItemOriginPlaceholder?: boolean) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n\n elementContainer.classList.remove('libs-ui-drag-drop-container-dragover');\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n childElement.removeAttribute('index');\n if (!this.dropToGroupName() || !this.dropToGroupName()?.length) {\n childElement.removeAttribute('dropToGroupName');\n }\n if (!this.placeholder()) {\n childElement.removeAttribute('placeholder');\n }\n if (this.placeholder()) {\n childElement.classList.remove('libs-ui-drag-drop-item-placeholder');\n if (!ignoreRemoveClassItemOriginPlaceholder) {\n\n childElement.classList.remove('libs-ui-drag-drop-item-origin-placeholder');\n }\n childElement.classList.remove('libs-ui-drag-drop-item-drop-placeholder');\n }\n });\n\n }\n}\n","import { AfterViewInit, Directive, OnDestroy, inject, output } from \"@angular/core\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\nimport { cloneIBoundingClientRect, getViewport } from \"@libs-ui/utils\";\nimport { Subject, fromEvent, takeUntil, tap } from \"rxjs\";\nimport { MoLibsSharedDragDropService } from \"./drag-drop.service\";\nimport { IDragEnd } from \"./interfaces/event.interface\";\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiDragItemInContainerVirtualScrollDirective]\",\n standalone: true,\n\n})\nexport class LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit, OnDestroy {\n /* PROPERTY */\n protected onDestroy = new Subject<void>();\n\n /* OUTPUT */\n readonly outDragEndContainer = output<IDragEnd>();\n\n /* INJECT */\n protected dragDropService = inject(MoLibsSharedDragDropService);\n\n ngAfterViewInit(): void {\n this.dragDropService.OnDragEnd.pipe(takeUntil(this.onDestroy)).subscribe(e => {\n this.outDragEndContainer.emit(e);\n });\n this.dragDropService.OnDragItemInContainerVirtualScroll.pipe(takeUntil(this.onDestroy)).subscribe(dragItemInContainerVirtualScrollEvent => {\n const stopEventMouse = (mouseEvent: MouseEvent) => {\n if (!dragItemInContainerVirtualScrollEvent.ignoreStopEvent) {\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n }\n };\n const documentMouseUp = fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(\n tap((eventMouseUp) => {\n this.updateMouseEventsWhenMoveOverIframe('auto');\n stopEventMouse(eventMouseUp);\n const mousePosition = { clientX: eventMouseUp.clientX, clientY: eventMouseUp.clientY };\n\n if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {\n const result = this.getClientPosition(dragItemInContainerVirtualScrollEvent.elementDrag, mousePosition, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop, dragItemInContainerVirtualScrollEvent.dragBoundary, dragItemInContainerVirtualScrollEvent.elementContainer);\n\n mousePosition.clientX = result.clientX;\n mousePosition.clientY = result.clientY;\n }\n const dragEndEvent = { mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.ItemDragInfo = undefined;\n this.dragDropService.OnDragEnd.next(dragEndEvent);\n document.body.classList.remove('select-none');\n dragItemInContainerVirtualScrollEvent.elementDrag.remove();\n }),\n takeUntil(this.onDestroy)\n );\n\n fromEvent<MouseEvent>(document, 'mousemove').pipe(tap((eventMousemove) => {\n stopEventMouse(eventMousemove);\n const { clientX, clientY } = eventMousemove;\n const mousePosition = { clientX, clientY };\n\n const result = this.getClientPosition(dragItemInContainerVirtualScrollEvent.elementDrag, mousePosition, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop, dragItemInContainerVirtualScrollEvent.dragBoundary, dragItemInContainerVirtualScrollEvent.elementContainer);\n const elementKeepContainer = result.elementKeepContainer;\n const left = result.clientX - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft;\n const top = result.clientY - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop;\n\n if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {\n if (clientX < result.viewport.left) {\n mousePosition.clientX = result.viewport.left;\n }\n if (clientX > result.viewport.width) {\n mousePosition.clientX = result.viewport.width;\n }\n if (clientY < result.viewport.top) {\n mousePosition.clientY = result.viewport.top;\n }\n if (clientY > result.viewport.height) {\n mousePosition.clientY = result.viewport.height;\n }\n }\n dragItemInContainerVirtualScrollEvent.elementDrag.style.left = `${left}px`;\n dragItemInContainerVirtualScrollEvent.elementDrag.style.top = `${top}px`;\n\n this.dragDropService.OnDragging.next({ mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo });\n }), takeUntil((documentMouseUp)), takeUntil(this.onDestroy)).subscribe();\n\n });\n }\n\n /* FUNCTIONS */\n\n protected getClientPosition(element: HTMLElement, mousePosition: { clientX: number; clientY: number; }, distanceStartElementAndMouseLeft: number, distanceStartElementAndMouseTop: number, dragBoundary?: boolean, elementContainer?: HTMLElement): { clientX: number; clientY: number; elementKeepContainer: boolean; viewport: IBoundingClientRect } {\n let viewport = getViewport() as IBoundingClientRect;\n const rectElement = element.getBoundingClientRect();\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n const containerItem = elementContainer || containerById?.elementScroll || containerById?.element || document.body;\n let { clientX, clientY } = mousePosition;\n\n viewport.left = 0;\n viewport.top = 0;\n if (dragBoundary) {\n viewport = cloneIBoundingClientRect(containerItem.getBoundingClientRect());\n viewport.height = viewport.top + viewport.height;\n viewport.width = viewport.left + viewport.width;\n }\n let elementKeepContainer = false;\n\n if (clientX > viewport.width && clientY > viewport.height || clientX < viewport.left && clientY < viewport.top) {\n elementKeepContainer = true;\n }\n\n if ((clientX + (rectElement.width - distanceStartElementAndMouseLeft)) > viewport.width) {\n clientX -= (clientX + (rectElement.width - distanceStartElementAndMouseLeft) - viewport.width);\n }\n if ((clientY + (rectElement.height - distanceStartElementAndMouseTop)) > viewport.height) {\n clientY -= (clientY + (rectElement.height - distanceStartElementAndMouseTop) - viewport.height);\n }\n if ((clientX - distanceStartElementAndMouseLeft) < (dragBoundary && containerItem ? viewport.left : 0)) {\n clientX = (dragBoundary && containerItem ? viewport.left : 0) + distanceStartElementAndMouseLeft;\n }\n if ((clientY - distanceStartElementAndMouseTop) < (dragBoundary && containerItem ? viewport.top : 0)) {\n clientY = (dragBoundary && containerItem ? viewport.top : 0) + distanceStartElementAndMouseTop;\n }\n\n return { clientX, clientY, elementKeepContainer, viewport };\n }\n\n protected updateMouseEventsWhenMoveOverIframe(pointerEvents: 'none' | 'auto') {\n const frames = document.getElementsByTagName(\"iframe\");\n\n if (!frames?.length) {\n return;\n }\n\n for (let i = 0; i < frames.length; ++i) {\n frames[i].style.pointerEvents = pointerEvents;\n }\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, Directive, ElementRef, OnDestroy, effect, inject, input, output, signal } from \"@angular/core\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\nimport { checkMouseOverInContainer, checkViewInScreen, get, getViewport } from \"@libs-ui/utils\";\nimport { Observable, fromEvent, mergeMap, startWith, takeUntil, tap, throttleTime } from \"rxjs\";\nimport { LibsUiDragItemInContainerVirtualScrollDirective } from \"./drag-item-in-container-virtual-scroll.directive\";\nimport { IDragEnd, IDragLeave, IDragOver, IDragStart, IDrop } from \"./interfaces/event.interface\";\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiDragItemDirective]\",\n standalone: true\n})\nexport class LibsUiDragItemDirective extends LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit, OnDestroy {\n /* PROPERTY */\n private isDragOver = signal<boolean>(false);\n private isDragging = signal<boolean>(false);\n\n /* INPUT */\n //setup 3 field phía dưới nếu đang sử dụng item trong virtual-scroll \n readonly fieldId = input<string>('');\n readonly item = input<any>(undefined);\n readonly itemInContainerVirtualScroll = input<boolean>();\n //----------------------------------\n readonly throttleTimeHandlerDraggingEvent = input<number, number | undefined>(0, { transform: value => value || 0 });\n readonly ignoreStopEvent = input<boolean>();\n readonly onlyMouseDownStopEvent = input<boolean>();\n readonly dragRootElement = input<boolean>();\n readonly groupName = input<string, string | undefined>('groupDragAndDropDefault', { transform: value => value ?? 'groupDragAndDropDefault' });\n readonly dragBoundary = input<boolean>();\n readonly dragBoundaryAcceptMouseLeaveContainer = input<boolean>();\n readonly elementContainer = input<HTMLElement>();\n readonly zIndex = input<number, number | undefined>(1300, { transform: value => value ?? 1300 });\n readonly disable = input<boolean>();\n\n /* OUTPUT */\n readonly outDragStart = output<IDragStart>();\n readonly outDragOver = output<IDragOver>();\n readonly outDragLeave = output<IDragLeave>();\n readonly outDragEnd = output<IDragEnd>();\n readonly outDropped = output<IDrop>();\n\n /* INJECT */\n private elementRef = inject(ElementRef);\n\n constructor() {\n super();\n effect(() => {\n if (!this.elementRef?.nativeElement) {\n return;\n }\n const element = this.elementRef.nativeElement as HTMLElement;\n\n element.classList.remove(`${this.dragDropService.ClassItemDefine}-disable`);\n if (this.disable() && !element.classList.contains(`${this.dragDropService.ClassItemDefine}-disable`)) {\n element.classList.add(`${this.dragDropService.ClassItemDefine}-disable`);\n }\n });\n }\n\n override ngAfterViewInit() {\n const element = this.elementRef.nativeElement as HTMLElement;\n if (this.fieldId()) {\n element.setAttribute('field_id', this.fieldId());\n if (this.item()) {\n element.setAttribute('item_id', get(this.item(), this.fieldId()));\n }\n }\n element.setAttribute('groupName', this.groupName());\n element.classList.add(this.dragDropService.ClassItemDefine);\n this.dragDropService.OnDragging.pipe(throttleTime(this.throttleTimeHandlerDraggingEvent()), takeUntil(this.onDestroy)).subscribe((eventDragging) => {\n if (this.disable() || element.getAttribute('disableDragContainer') || (this.fieldId() && this.item() && eventDragging.elementDrag.getAttribute('item_id') === get(this.item(), this.fieldId()))) {\n return;\n }\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n\n if (containerById) {\n if (eventDragging.elementKeepContainer || !this.dragDropService.checkElementOverAcceptElementDrag(containerById.element.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n }\n if (checkMouseOverInContainer(eventDragging.mousePosition, element) && element !== eventDragging.elementDrag && containerById && checkViewInScreen(containerById.element, element, containerById.elementScroll)) {\n if (this.isDragOver()) {\n return;\n }\n const eventDragOver = { ...eventDragging, elementDragOver: element };\n\n this.dragDropService.OnDragOver.next(eventDragOver);\n this.outDragOver.emit(eventDragOver);\n this.isDragOver.set(true);\n\n return;\n }\n\n if (this.isDragOver()) {\n const eventDragLeave = { ...eventDragging, elementDragLeave: element };\n this.isDragOver.set(false);\n this.dragDropService.OnDragLeave.next(eventDragLeave);\n this.outDragLeave.emit(eventDragLeave);\n }\n });\n\n this.dragDropService.OnDropContainer.pipe(takeUntil(this.onDestroy)).subscribe((eventDrop) => {\n if (eventDrop.elementDrop !== element) {\n return;\n }\n const dropEvent = { elementDrag: eventDrop.elementDrag, elementDrop: element, itemDragInfo: eventDrop.itemDragInfo };\n\n this.outDropped.emit(dropEvent);\n });\n const styleTag = document.createElement(\"style\");\n\n styleTag.textContent = `.libs-ui-drag-drop-item-dragging{cursor:move}`;\n let nodeClone = element;\n let distanceStartElementAndMouseLeft = -1;\n let distanceStartElementAndMouseTop = -1;\n let contextMenu = false;\n const stopEventMouse = (mouseEvent: MouseEvent) => {\n if (!this.ignoreStopEvent()) {\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n }\n };\n const updatePositionElementRootAndRemoveNodeClone = () => {\n if (this.dragRootElement()) {\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n\n const containerItem = this.elementContainer() || containerById?.elementScroll || containerById?.element || document.body;\n const rectContainer = containerItem.getBoundingClientRect();\n const rectNodeClone = nodeClone.getBoundingClientRect();\n const numberSub = Number((getComputedStyle(containerItem).border.match(/\\d+px/gi) || ['0'])[0].replace(/\\D+/ig, '')).valueOf();\n\n element.style.left = (rectNodeClone.left - rectContainer.left - numberSub) + 'px';\n element.style.top = (rectNodeClone.top - rectContainer.top - numberSub) + 'px';\n element.classList.remove('opacity-0');\n }\n distanceStartElementAndMouseLeft = -1;\n distanceStartElementAndMouseTop = -1;\n nodeClone.remove();\n };\n\n fromEvent(document, 'contextmenu').pipe(\n tap(() => {\n if (this.isDragging()) {\n updatePositionElementRootAndRemoveNodeClone();\n }\n contextMenu = true;\n\n }),\n takeUntil(this.onDestroy)\n ).subscribe();\n\n const documentMouseUp = fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(\n tap((eventMouseup) => {\n this.updateMouseEventsWhenMoveOverIframe('auto');\n this.dragDropService.resetItemClick();\n stopEventMouse(eventMouseup);\n if (this.disable() || element.getAttribute('disableDragContainer') || contextMenu || !this.isDragging()) {\n contextMenu = false;\n\n return;\n }\n contextMenu = false;\n this.isDragging.set(false);\n element.removeAttribute(this.dragDropService.TargetItemDragFlag);\n if (this.itemInContainerVirtualScroll()) {\n return;\n }\n const mousePosition = { clientX: eventMouseup.clientX, clientY: eventMouseup.clientY };\n\n if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {\n const result = this.getClientPosition(element, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());\n\n mousePosition.clientX = result.clientX;\n mousePosition.clientY = result.clientY;\n }\n const dragEndEvent = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.ItemDragInfo = undefined;\n this.dragDropService.OnDragEnd.next(dragEndEvent);\n this.outDragEnd.emit(dragEndEvent);\n\n document.body.classList.remove('!select-none');\n nodeClone.classList.remove('libs-ui-drag-drop-item-dragging');\n styleTag.remove();\n\n updatePositionElementRootAndRemoveNodeClone();\n }),\n takeUntil(this.onDestroy)\n );\n\n const elementMouseDown = fromEvent<MouseEvent>(element, 'mousedown').pipe(\n tap(eventMousedown => {\n this.dragDropService.ItemClick = element;\n contextMenu = false;\n this.updateMouseEventsWhenMoveOverIframe('none');\n if ((this.disable() || element.getAttribute('disableDragContainer') || !this.isDragging() || this.itemInContainerVirtualScroll()) && !this.onlyMouseDownStopEvent()) {\n return;\n }\n stopEventMouse(eventMousedown);\n }),\n takeUntil(this.onDestroy)\n );\n const documentMouseMove = fromEvent<MouseEvent>(document, 'mousemove').pipe(tap((eventMousemove) => stopEventMouse(eventMousemove)), takeUntil((documentMouseUp)), takeUntil(this.onDestroy));\n const drag = elementMouseDown.pipe(mergeMap((mouseEvent: MouseEvent) => documentMouseMove.pipe(startWith((mouseEvent))))) as Observable<MouseEvent>;\n let ignoreMousedown = false;\n\n drag.pipe(tap((dragMouseEvent: MouseEvent) => {\n const rectElement = element.getBoundingClientRect();\n const viewport = getViewport() as IBoundingClientRect;\n\n if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || (!ignoreMousedown && dragMouseEvent.type === 'mousedown' && rectElement.height + rectElement.top >= viewport.height)) {\n\n return;\n }\n const { clientX, clientY } = dragMouseEvent;\n\n if (distanceStartElementAndMouseLeft === -1) {\n distanceStartElementAndMouseLeft = clientX - rectElement.left;\n }\n\n if (distanceStartElementAndMouseTop === -1) {\n distanceStartElementAndMouseTop = clientY - rectElement.top;\n }\n }), takeUntil(this.onDestroy)).subscribe(dragMouseEvent => {\n if (this.dragDropService.ItemClick.filter(item => item !== element).some(item => element.contains(item))) {\n return;\n }\n if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || dragMouseEvent.type === 'mousedown' || contextMenu || (this.itemInContainerVirtualScroll() && this.isDragging())) {\n return;\n }\n ignoreMousedown = true;\n const { clientX, clientY } = dragMouseEvent;\n const mousePosition = { clientX, clientY };\n const rectElement = element.getBoundingClientRect();\n\n if (!this.isDragging()) {\n this.isDragging.set(true);\n const eventDragStart = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n element.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');\n this.dragDropService.OnDragStart.next(eventDragStart);\n eventDragStart.itemDragInfo = this.dragDropService.ItemDragInfo;\n this.outDragStart.emit(eventDragStart);\n\n nodeClone = element.cloneNode(true) as HTMLElement;\n nodeClone.style.zIndex = `${this.zIndex()}`;\n nodeClone.classList.add('!fixed');\n nodeClone.classList.remove('libs-ui-drag-drop-item-origin-placeholder');\n nodeClone.classList.remove('libs-ui-drag-drop-item-placeholder');\n nodeClone.appendChild(styleTag);\n nodeClone.classList.add('libs-ui-drag-drop-item-dragging');\n nodeClone.style.width = `${rectElement.width}px`;\n nodeClone.style.height = `${rectElement.height}px`;\n nodeClone.style.left = `${-999}px`;\n nodeClone.style.top = `${-999}px`;\n document.body.classList.add('!select-none');\n document.body.append(nodeClone);\n if (this.dragRootElement()) {\n element.classList.add('opacity-0');\n }\n\n if (this.itemInContainerVirtualScroll()) {\n this.dragDropService.OnDragItemInContainerVirtualScroll.next({\n itemDragInfo: this.dragDropService.ItemDragInfo,\n elementDrag: nodeClone,\n distanceStartElementAndMouseTop,\n distanceStartElementAndMouseLeft,\n elementContainer: this.elementContainer(),\n dragBoundary: this.dragBoundary(),\n dragBoundaryAcceptMouseLeaveContainer: this.dragBoundaryAcceptMouseLeaveContainer(),\n ignoreStopEvent: this.ignoreStopEvent()\n });\n\n return;\n }\n }\n const result = this.getClientPosition(nodeClone, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());\n\n const elementKeepContainer = result.elementKeepContainer;\n const left = result.clientX - distanceStartElementAndMouseLeft;\n const top = result.clientY - distanceStartElementAndMouseTop;\n\n if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {\n if (clientX < result.viewport.left) {\n mousePosition.clientX = result.viewport.left;\n }\n if (clientX > result.viewport.width) {\n mousePosition.clientX = result.viewport.width;\n }\n if (clientY < result.viewport.top) {\n mousePosition.clientY = result.viewport.top;\n }\n if (clientY > result.viewport.height) {\n mousePosition.clientY = result.viewport.height;\n }\n }\n nodeClone.style.left = `${left}px`;\n nodeClone.style.top = `${top}px`;\n\n const eventDragging = { mousePosition, elementDrag: nodeClone, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.OnDragging.next(eventDragging);\n });\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libs-ui/components-drag-drop",
3
- "version": "0.2.96",
3
+ "version": "0.2.98",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.2.0",
6
6
  "@angular/core": "^18.2.0"