{"version":3,"file":"ngx-explorer-dnd.mjs","sources":["../../../projects/ngx-explorer-dnd/src/lib/core/css-helper.ts","../../../projects/ngx-explorer-dnd/src/lib/core/utils.ts","../../../projects/ngx-explorer-dnd/src/lib/services/dnd.service.ts","../../../projects/ngx-explorer-dnd/src/lib/directives/ngx-explorer-container.directive.ts","../../../projects/ngx-explorer-dnd/src/lib/core/file-folder.ts","../../../projects/ngx-explorer-dnd/src/lib/directives/ngx-explorer-target.directive.ts","../../../projects/ngx-explorer-dnd/src/lib/directives/ngx-explorer-item.directive.ts","../../../projects/ngx-explorer-dnd/src/lib/directives/ngx-drag-selection.directive.ts","../../../projects/ngx-explorer-dnd/src/lib/ngx-explorer-dnd.module.ts","../../../projects/ngx-explorer-dnd/src/public-api.ts","../../../projects/ngx-explorer-dnd/src/ngx-explorer-dnd.ts"],"sourcesContent":["/**\n * Set styles to a HTMLElement.\n * @param dest HTMLElements style property.\n * @param source The styles as JS object.\n * @param importantProperties Name of important style properties. This properties will be set to `!important`.\n */\nexport function extendStyles(\n  dest: CSSStyleDeclaration,\n  source: Record<string, string>,\n  importantProperties?: Set<string>\n) {\n  for (let key in source) {\n    if (source.hasOwnProperty(key)) {\n      const value = source[key];\n\n      if (value) {\n        dest.setProperty(\n          key,\n          value,\n          importantProperties?.has(key) ? 'important' : ''\n        );\n      } else {\n        dest.removeProperty(key);\n      }\n    }\n  }\n\n  return dest;\n}\n","// With help from cdkDrag: https://github.com/angular/components/blob/72547a41d4230cea0c6a5448e85bd60cfc26bd35/src/cdk/drag-drop/drag-utils.ts\n/** Clamps a number between zero and a maximum. */\nfunction clamp(value: number, max: number): number {\n  return Math.max(0, Math.min(max, value));\n}\n\nexport interface Translate3DPosition {\n  startX: number;\n  startY: number;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  halfWidthX: number;\n  halfHeightY: number;\n}\n\nexport enum DragRowPosition {\n  SMALLER,\n  GREATER,\n  SAME,\n  UNDEFINED,\n}\n\nexport interface SameDragRow {\n  sameRow: boolean;\n  dragRowPosition: DragRowPosition;\n  sameLineAsMouse: DragRowPosition;\n}\n\n/**\n * Moves an item one index in an array to another.\n * @param array Array in which to move the item.\n * @param fromIndex Starting index of the item.\n * @param toIndex Index to which the item should be moved.\n */\nexport function moveItemInArray<T = any>(\n  array: T[],\n  fromIndex: number,\n  toIndex: number\n): void {\n  const from = clamp(fromIndex, array.length - 1);\n  const to = clamp(toIndex, array.length - 1);\n\n  console.log(from, to);\n  if (from === to) {\n    return;\n  }\n\n  const target = array[from];\n  const delta = to < from ? -1 : 1;\n\n  for (let i = from; i !== to; i += delta) {\n    array[i] = array[i + delta];\n  }\n\n  array[to] = target;\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DndService {\n  private dragElementSubject: Subject<HTMLElement | null> =\n    new Subject<HTMLElement | null>();\n\n  constructor() {}\n\n  getDragElementSubject() {\n    return this.dragElementSubject.asObservable();\n  }\n\n  setCurrentDragElement(element: HTMLElement | null) {\n    this.dragElementSubject.next(element);\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n  Directive,\n  EventEmitter,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport { extendStyles } from '../core/css-helper';\nimport {\n  DragRowPosition,\n  SameDragRow,\n  Translate3DPosition,\n} from '../core/utils';\nimport { DndService } from '../services/dnd.service';\nimport { NgxExplorerItemDirective } from './ngx-explorer-item.directive';\nimport { NgxExplorerTargetDirective } from './ngx-explorer-target.directive';\n\nexport const EXPLORER_DND_CONTAINER =\n  new InjectionToken<NgxExplorerContainerDirective>('EXPLORER_DND_CONTAINER');\n\n@Directive({\n  selector: '[ngxExplorerDndContainer]',\n  providers: [\n    {\n      provide: EXPLORER_DND_CONTAINER,\n      useExisting: NgxExplorerContainerDirective,\n    },\n  ],\n})\nexport class NgxExplorerContainerDirective<T = any>\n  implements OnInit, OnDestroy\n{\n  /** The current dragged element from type `NgxExplorerItemDirective`. */\n  private _currentDragElement!: NgxExplorerItemDirective | null;\n\n  /** The current target element from type `NgxExplorerTargetDirective`. */\n  private _currentTargetElement!: NgxExplorerTargetDirective | null;\n\n  /** The registered elements as array from type `NgxExplorerItemDirective`. */\n  private _dragElements: NgxExplorerItemDirective[] = [];\n\n  /** The generated deep clone preview element. */\n  private previewElement!: HTMLElement | null;\n\n  /** If drag startet. */\n  private dragStarted = false;\n\n  /** Check if the current element can be moved with the intern `isMinRangeMoved` method. */\n  private canMove = false;\n\n  /** The position of the dragged element. */\n  private position!: any;\n\n  /** If sorting is enabled the new position of the dragged element is stored here to handle correct drop animation. */\n  private positionDifference!: any;\n\n  /** The start position of the mouse when beginning dragging. */\n  private startPosition!: any;\n\n  /** A unsorted list of all registered components */\n  private unsortedItems: {\n    htmlElement: HTMLElement;\n    posData: { x: number; y: number; width: number; height: number };\n  }[] = [];\n\n  /** A sorted list of all registered components (sorted by position in the DOM) */\n  private sortedItems: {\n    htmlElement: HTMLElement;\n    posData: { x: number; y: number; width: number; height: number };\n  }[] = [];\n\n  /** Event emitted when the drag progress was started. */\n  @Output() dragInProgress: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n  /** Event emitted when the files are dropped with `mouseup`. */\n  @Output() drop: EventEmitter<{\n    item: any;\n    target: any;\n    optionalDragData?: any;\n    oldIndex?: number;\n    newIndex?: number;\n  }> = new EventEmitter<{ item: any; target: any; optionalDragData?: any }>();\n\n  /** Event emitted when a target under the mouse will change */\n  @Output() targetChange: EventEmitter<{ target: any }> = new EventEmitter<{\n    target: any;\n  }>();\n\n  /** Set optional data to the dragged element. */\n  @Input() dragData!: any;\n\n  /** Set a optional badge to the dragged element e.g. 2 if you drag multiple files. */\n  @Input() badge!: string | null;\n\n  /** Cancel move back animation after `mouseup` event */\n  @Input() cancelAnimation: boolean = false;\n\n  /** Can the file/folder components are sorted */\n  @Input() sortingEnabled: boolean = false;\n\n  //#region Helper\n  /** Deep clone the current element for a preview element. */\n  deepCloneNode(node: HTMLElement, badge?: string): HTMLElement {\n    const clone = node.cloneNode(true) as HTMLElement;\n    if (badge) {\n      const badgeElement = document.createElement('div');\n      badgeElement.innerHTML = badge;\n      extendStyles(badgeElement.style, {\n        margin: '0',\n        position: 'absolute',\n        top: '0',\n        right: '0',\n        'text-align': 'center',\n        'border-style': 'solid',\n        'border-radius': '50%',\n        'border-width': '0',\n        'background-color': 'red',\n        width: '20px',\n        height: '20px',\n        color: 'white',\n      });\n      clone.appendChild(badgeElement);\n    }\n    const descendantsWithId = clone.querySelectorAll('[id]');\n\n    // Remove the `id` to avoid having multiple elements with the same id on the page.\n    clone.removeAttribute('id');\n\n    for (let i = 0; i < descendantsWithId.length; i++) {\n      descendantsWithId[i].removeAttribute('id');\n    }\n\n    return clone;\n  }\n\n  /** Hide/show the dragged component */\n  toggleVisibility(element: HTMLElement, visible: boolean) {\n    extendStyles(element.style, {\n      opacity: visible ? '0' : '',\n      // position: visible ? 'fixed' : '',\n      // left: visible ? '0' : '',\n      // top: visible ? '-500em' : '',\n    });\n  }\n\n  /** Creates a list with all registered components and their positions */\n  createUnsortedList() {\n    const unsortedItems: any[] = [];\n    // All registered components\n    for (let data of this._dragElements) {\n      const clientRect = data.htmlElement.getBoundingClientRect();\n      const posData = {\n        x: clientRect.x,\n        y: clientRect.y,\n        width: clientRect.width,\n        height: clientRect.height,\n      };\n      unsortedItems.push({ htmlElement: data.htmlElement, posData });\n    }\n\n    return unsortedItems;\n  }\n\n  /** Gets the registered items in the list, sorted by their position in the DOM. */\n  getSortedItems(): any[] {\n    return Array.from(this.createUnsortedList()).sort((a: any, b: any) => {\n      const documentPosition = a.htmlElement.compareDocumentPosition(\n        b.htmlElement\n      );\n\n      // `compareDocumentPosition` returns a bitmask so we have to use a bitwise operator.\n      // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n      // tslint:disable-next-line:no-bitwise\n      return documentPosition & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n    });\n  }\n\n  /** Check if the element has a translate3d style and returns the \"real\" values of x, y, width and height. */\n  getCurrentPositionInclusiveTranslate3d(\n    element: HTMLElement\n  ): Translate3DPosition {\n    const rect = element.getBoundingClientRect();\n    let translateX = 0,\n      translateY = 0;\n    if (element.style.transform) {\n      translateX =\n        +element.style.transform\n          .replace(/translate3d|px|\\(|\\)/gi, '')\n          .split(',')[0] || 0;\n      translateY =\n        +element.style.transform\n          .replace(/translate3d|px|\\(|\\)/gi, '')\n          .split(',')[1] || 0;\n    }\n\n    return {\n      startX: rect.x - translateX,\n      startY: rect.y - translateY,\n      x: rect.x,\n      y: rect.y,\n      width: rect.width,\n      height: rect.height,\n      halfWidthX: rect.x + rect.width / 2,\n      halfHeightY: rect.y + rect.height / 2,\n    };\n  }\n\n  /** Checks goes the new position of the element outside of the parent and set new row position */\n  needToMoveUpOrDown(\n    parentRect: DOMRect,\n    indexOfElement: number,\n    addDirection: number\n  ): { transX: string; transY: string } | boolean {\n    let transX: string = '0px',\n      transY: string = '0px';\n    let posChanged = false;\n\n    const currentElement = this.sortedItems[indexOfElement];\n\n    if (\n      currentElement.posData.x + addDirection < parentRect.x &&\n      indexOfElement > 0\n    ) {\n      transX =\n        this.sortedItems[indexOfElement - 1].posData.x -\n        this.sortedItems[indexOfElement].posData.x +\n        'px';\n      transY =\n        this.sortedItems[indexOfElement - 1].posData.y -\n        this.sortedItems[indexOfElement].posData.y +\n        'px';\n      posChanged = true;\n    } else if (\n      currentElement.posData.x + currentElement.posData.width + addDirection >\n      parentRect.x + parentRect.width\n    ) {\n      transX =\n        this.sortedItems[indexOfElement + 1].posData.x -\n        this.sortedItems[indexOfElement].posData.x +\n        'px';\n      transY =\n        this.sortedItems[indexOfElement + 1].posData.y -\n        this.sortedItems[indexOfElement].posData.y +\n        'px';\n      posChanged = true;\n    }\n\n    return posChanged ? { transX, transY } : false;\n  }\n\n  /** Set the position of the dragged element */\n  setCurrentPositionOfDraggedElement(\n    draggedElement: HTMLElement | undefined,\n    mousePosition: { x: number; y: number }\n  ) {\n    if (!draggedElement) return;\n\n    const parentRect = draggedElement.parentElement?.getBoundingClientRect();\n    if (!parentRect) return;\n\n    // Intern helpers ------------------------------------------\n    /** If the cursor moving in same row like the dragged element */\n    const isInSameLine = (): SameDragRow => {\n      const el = draggedElement.getBoundingClientRect();\n\n      if (mousePosition.y >= el.y && mousePosition.y <= el.y + el.height)\n        return {\n          sameRow: true,\n          dragRowPosition: DragRowPosition.SAME,\n          sameLineAsMouse: DragRowPosition.UNDEFINED,\n        };\n      else if (mousePosition.y < el.y)\n        return {\n          sameRow: false,\n          dragRowPosition: DragRowPosition.SMALLER,\n          sameLineAsMouse: DragRowPosition.UNDEFINED,\n        };\n      else\n        return {\n          sameRow: false,\n          dragRowPosition: DragRowPosition.GREATER,\n          sameLineAsMouse: DragRowPosition.UNDEFINED,\n        };\n    };\n\n    /** If the element is in the same line as the dragged element */\n    const amIAtTheSameRow = (y: number, height?: number): SameDragRow => {\n      const el = draggedElement.getBoundingClientRect();\n      let mouseRowPosition: DragRowPosition = DragRowPosition.UNDEFINED;\n\n      if (height) {\n        if (mousePosition.y > y + height)\n          mouseRowPosition = DragRowPosition.SMALLER;\n        else if (mousePosition.y < y)\n          mouseRowPosition = DragRowPosition.GREATER;\n        else if (mousePosition.y >= y && mousePosition.y <= y + height)\n          mouseRowPosition = DragRowPosition.SAME;\n      }\n\n      if (y === el.y) {\n        return {\n          sameRow: true,\n          dragRowPosition: DragRowPosition.SAME,\n          sameLineAsMouse: mouseRowPosition,\n        };\n      } else if (y > el.y) {\n        return {\n          sameRow: false,\n          dragRowPosition: DragRowPosition.GREATER,\n          sameLineAsMouse: mouseRowPosition,\n        };\n      } else {\n        return {\n          sameRow: false,\n          dragRowPosition: DragRowPosition.SMALLER,\n          sameLineAsMouse: mouseRowPosition,\n        };\n      }\n    };\n\n    // Mouse is right to new elmement\n    const isRightToElement = (halfWidth: number): boolean => {\n      if (mousePosition.x > halfWidth) return true;\n      return false;\n    };\n\n    // Mouse is left to new element\n    const isLeftToElement = (halfWidth: number): boolean => {\n      if (mousePosition.x < halfWidth) return true;\n      return false;\n    };\n\n    /** If the start position of the current element before `true`or after `false` the dragged element */\n    const posIsBeforeDraggedElement = (x: number, y?: number) => {\n      const el = draggedElement.getBoundingClientRect();\n\n      if (y) {\n        if (y < el.y) return true;\n        if (y > el.y) return false;\n\n        if (x < el.x && y === el.y) return true;\n        return false;\n      }\n      if (x < el.x) return true;\n      return false;\n    };\n    // ---------------------------------------------------------\n\n    // Only if the mouse is inside the parent\n    if (\n      mousePosition.x >= parentRect.x &&\n      mousePosition.x <= parentRect.x + parentRect?.width &&\n      mousePosition.y >= parentRect.y &&\n      mousePosition.y <= parentRect.y + parentRect?.height\n    ) {\n      const draggedRect = draggedElement.getBoundingClientRect();\n      this.positionDifference = { ...this.position };\n\n      let index = 0; // Index of the current unsorted item\n      for (let element of this.sortedItems) {\n        if (element.htmlElement !== draggedElement) {\n          const rect = this.getCurrentPositionInclusiveTranslate3d(\n            element.htmlElement\n          );\n\n          // if (\n          //   element.htmlElement.getAttribute('ng-reflect-file-name') &&\n          //   element.htmlElement.getAttribute('ng-reflect-file-name') ===\n          //     'File 6'\n          // ) {\n          //console.log(rect.x, rect.startX, rect.startY);\n          // console.log(\n          //   mousePosition.x,\n          //   rect.halfWidthX,\n          //   rect.startX,\n          //   mousePosition.y,\n          //   rect.startY,\n          //   rect.startY + rect.height\n          // );\n          // }\n\n          let translateXValue = '0px',\n            translateYValue = '0px';\n\n          // Part: in same line\n          // Are the current elements all in the same line as the dragged element, handle it here\n          if (\n            isInSameLine().sameRow &&\n            amIAtTheSameRow(rect.y).sameRow &&\n            isLeftToElement(rect.halfWidthX) &&\n            posIsBeforeDraggedElement(rect.startX)\n          ) {\n            translateXValue = draggedRect.width + 'px';\n          } else if (\n            isInSameLine().sameRow &&\n            amIAtTheSameRow(rect.y).sameRow &&\n            isRightToElement(rect.halfWidthX) &&\n            !posIsBeforeDraggedElement(rect.startX)\n          ) {\n            translateXValue = -draggedRect.width + 'px';\n          }\n\n          // Part: in other line\n          // Are the current elements are greater or smaller than the dragged element, handle it here\n          if (!isInSameLine().sameRow) {\n            // Check all elements their position are smaller then the current\n            if (isInSameLine().dragRowPosition == DragRowPosition.GREATER) {\n              // Mouse goes under the dragged element; all elements they are greater as dragged element, but smaller/same as mouse will be handled here\n              if (\n                (amIAtTheSameRow(rect.y).dragRowPosition ===\n                  DragRowPosition.GREATER ||\n                  amIAtTheSameRow(rect.y).dragRowPosition ===\n                    DragRowPosition.SAME) &&\n                (amIAtTheSameRow(rect.y, rect.height).sameLineAsMouse ===\n                  DragRowPosition.SAME ||\n                  amIAtTheSameRow(rect.y, rect.height).sameLineAsMouse ===\n                    DragRowPosition.SMALLER) &&\n                !posIsBeforeDraggedElement(rect.startX, rect.startY)\n              ) {\n                if (\n                  isRightToElement(rect.halfWidthX) ||\n                  amIAtTheSameRow(rect.y).dragRowPosition ==\n                    DragRowPosition.SAME ||\n                  (amIAtTheSameRow(rect.y).dragRowPosition ==\n                    DragRowPosition.GREATER &&\n                    amIAtTheSameRow(rect.y, rect.height).sameLineAsMouse !==\n                      DragRowPosition.SAME)\n                ) {\n                  translateXValue = -draggedRect.width + 'px';\n                }\n              }\n            } else if (\n              isInSameLine().dragRowPosition == DragRowPosition.SMALLER\n            ) {\n              if (\n                (amIAtTheSameRow(rect.y).dragRowPosition ===\n                  DragRowPosition.SMALLER ||\n                  amIAtTheSameRow(rect.y).dragRowPosition ===\n                    DragRowPosition.SAME) &&\n                (amIAtTheSameRow(rect.y, rect.height).sameLineAsMouse ===\n                  DragRowPosition.SAME ||\n                  amIAtTheSameRow(rect.y, rect.height).sameLineAsMouse ===\n                    DragRowPosition.GREATER) &&\n                posIsBeforeDraggedElement(rect.startX, rect.startY)\n              ) {\n                if (\n                  isLeftToElement(rect.halfWidthX) ||\n                  amIAtTheSameRow(rect.y).dragRowPosition ==\n                    DragRowPosition.SAME ||\n                  (amIAtTheSameRow(rect.y).dragRowPosition ==\n                    DragRowPosition.SMALLER &&\n                    amIAtTheSameRow(rect.y, rect.height).sameLineAsMouse !==\n                      DragRowPosition.SAME)\n                ) {\n                  translateXValue = draggedRect.width + 'px';\n                }\n              }\n            }\n          }\n\n          // Check goes any element outside the parent. So change it's row position\n          const checkNeedToMoveUpOrDown = this.needToMoveUpOrDown(\n            parentRect,\n            index,\n            +translateXValue.replace('px', '')\n          );\n          if (checkNeedToMoveUpOrDown) {\n            translateXValue = (<{ transX: string; transY: string }>(\n              checkNeedToMoveUpOrDown\n            )).transX;\n            translateYValue = (<{ transX: string; transY: string }>(\n              checkNeedToMoveUpOrDown\n            )).transY;\n          }\n\n          extendStyles(element.htmlElement.style, {\n            transform: `translate3d(${translateXValue},${translateYValue},0)`,\n          });\n        }\n\n        index++;\n      }\n    }\n  }\n\n  /** Removes the transform3d positions from all elements */\n  resetPositions(draggedElement: HTMLElement | undefined) {\n    if (!draggedElement) return;\n\n    for (let element of this.unsortedItems) {\n      if (element.htmlElement !== draggedElement) {\n        extendStyles(element.htmlElement.style, {\n          transform: '',\n        });\n      }\n    }\n  }\n\n  /** Set the position of the preview element */\n  setPreviewElementPosition(posX: number, posY: number) {\n    if (this.previewElement) {\n      if (this.previewElement.style.display === 'none') {\n        this.previewElement.style.display = 'unset';\n      }\n\n      this.previewElement.style.left =\n        posX - this.previewElement.clientWidth / 2 + 'px';\n      this.previewElement.style.top =\n        posY - this.previewElement.clientHeight / 2 + 'px';\n    }\n  }\n\n  /** Dragging start if the pressed mouse moved the min range. */\n  isMinRangeMoved(posX: number, posY: number): boolean {\n    // Standard is 8px\n    if (this.previewElement) {\n      if (\n        this.startPosition.left - 7 > posX ||\n        this.startPosition.left + 7 < posX ||\n        this.startPosition.top - 7 > posY ||\n        this.startPosition.top + 7 < posY\n      ) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /** Check if element is inside rect. */\n  checkIfElementInsideRect(\n    rect: any,\n    selectionBorder: { x: number; y: number; width: number; height: number }\n  ) {\n    if (\n      ((selectionBorder.x >= rect.x &&\n        selectionBorder.x <= rect.x + rect.width) ||\n        (selectionBorder.x <= rect.x &&\n          selectionBorder.x + selectionBorder.width >= rect.x)) &&\n      ((selectionBorder.y >= rect.y &&\n        selectionBorder.y <= rect.y + rect.height) ||\n        (selectionBorder.y <= rect.y &&\n          selectionBorder.y + selectionBorder.height >= rect.y))\n    ) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /** Get all elements of type `NgxExplorerItemDirective` from an event. */\n  getTargetHandle(event: Event): NgxExplorerItemDirective | undefined {\n    return this._dragElements.find((handle) => {\n      return (\n        event.target &&\n        (event.target === handle.htmlElement ||\n          handle.htmlElement.contains(event.target as Node))\n      );\n    });\n  }\n\n  /** Get all elements of type `NgxExplorerItemDirective` from a HTMLElement. */\n  getTargetHandleFromHTMLElement(\n    element: HTMLElement\n  ): HTMLElement | undefined {\n    return this._dragElements.find((handle) => {\n      return (\n        element === handle.htmlElement || element.contains(element as Node)\n      );\n    })?.htmlElement;\n  }\n\n  /** Get the current index of the dragged element in the unsorted list */\n  getCurrentIndexPosition(\n    lastMouseX: number,\n    lastMouseY: number,\n    draggedElement: HTMLElement\n  ): { x: number; y: number; oldIndex: number; newIndex: number } | undefined {\n    const parentRect = draggedElement.parentElement?.getBoundingClientRect();\n    let currentPosition = undefined;\n    if (parentRect) {\n      let newIndex = 0,\n        oldIndex = 0;\n      for (let elIndex = 0; elIndex < this.sortedItems.length; elIndex++) {\n        if (this.sortedItems[elIndex].htmlElement === draggedElement) {\n          oldIndex = elIndex;\n          break;\n        }\n      }\n\n      for (let el of this.sortedItems) {\n        if (el.htmlElement !== draggedElement) {\n          // Mouse has position of Object\n          if (\n            lastMouseX >= el.posData.x &&\n            lastMouseX <= el.posData.x + el.posData.width &&\n            lastMouseY >= el.posData.y &&\n            lastMouseY <= el.posData.y + el.posData.height\n          ) {\n            currentPosition = {\n              x: el.posData.x,\n              y: el.posData.y,\n              oldIndex,\n              newIndex,\n            };\n            break;\n          }\n        }\n        newIndex++;\n      }\n    }\n\n    return currentPosition;\n  }\n\n  /** Returns a list of all elements of type `NgxExplorerItemDirective` they are inside a specific rect. */\n  getElementsInsideSelectionDiv(\n    x: number,\n    y: number,\n    width: number,\n    height: number\n  ): NgxExplorerItemDirective[] {\n    const result: NgxExplorerItemDirective[] = [];\n\n    this._dragElements.forEach((data) => {\n      const rect = data.htmlElement.getBoundingClientRect();\n      if (\n        this.checkIfElementInsideRect(rect, {\n          x,\n          y,\n          width,\n          height,\n        })\n      ) {\n        result.push(data);\n      }\n    });\n\n    return result;\n  }\n\n  /** Initialize all event listener. */\n  initAll(): this {\n    // Use arrow functions to use \"this\" in onMouseDown (as example) or use .....bind(this)\n    // We can use @HostListener instead.\n    this._document.addEventListener('mousedown', this.onMouseDown.bind(this));\n    this._document.addEventListener('mousemove', this.onMouseMove);\n    this._document.addEventListener('mouseup', this.onMouseUp);\n\n    return this;\n  }\n\n  /** Remove all event listener. */\n  clearAll() {\n    this._document.removeEventListener('mousedown', this.onMouseDown);\n    this._document.removeEventListener('mousemove', this.onMouseMove);\n    this._document.removeEventListener('mouseup', this.onMouseUp);\n  }\n  //#endregion\n\n  constructor(\n    private _ngZone: NgZone,\n    @Inject(DOCUMENT) private _document: Document,\n    private dndService: DndService\n  ) {}\n\n  ngOnInit(): void {\n    this.initAll();\n  }\n\n  ngOnDestroy(): void {\n    this.clearAll();\n  }\n\n  private onMouseDown(event: MouseEvent) {\n    if (event.button !== 0) {\n      event.preventDefault();\n      return;\n    }\n\n    // List of the current registered elements\n    if (this.sortingEnabled) {\n      this.unsortedItems = this.createUnsortedList();\n      this.sortedItems = this.getSortedItems();\n    }\n\n    this.dragStarted = true;\n\n    this._currentDragElement = this.getTargetHandle(event) || null;\n    const htmlElement = this._currentDragElement?.htmlElement;\n\n    if (htmlElement) {\n      this.previewElement = this.deepCloneNode(\n        htmlElement as HTMLElement,\n        this.badge as string\n      );\n      this.position = {\n        left: htmlElement.getBoundingClientRect().left,\n        top: htmlElement.getBoundingClientRect().top,\n      };\n      this.startPosition = {\n        left: event.x,\n        top: event.y,\n      };\n\n      extendStyles(\n        this.previewElement.style,\n        {\n          'pointer-events': 'none',\n          margin: '0',\n          position: 'fixed',\n          top: '0',\n          left: '0',\n          'z-index': '1000',\n          display: 'none',\n        },\n        new Set(['position'])\n      );\n\n      this._document.body.appendChild(this.previewElement);\n\n      this.dndService.setCurrentDragElement(htmlElement);\n\n      event.stopPropagation();\n      event.preventDefault();\n\n      this.dragInProgress.emit(true);\n    }\n  }\n\n  private onMouseMove = (event: MouseEvent) => {\n    if (this.dragStarted) {\n      if (this.isMinRangeMoved(event.x, event.y)) {\n        this.canMove = true;\n\n        const htmlElement = this._currentDragElement?.htmlElement;\n        if (htmlElement) this.toggleVisibility(htmlElement, true);\n      }\n\n      if (!this.canMove) return;\n      if (this.sortingEnabled) {\n        this.setCurrentPositionOfDraggedElement(\n          this._currentDragElement?.htmlElement,\n          { x: event.x, y: event.y }\n        );\n      }\n\n      this.setPreviewElementPosition(event.x, event.y);\n    }\n\n    event.stopPropagation();\n    event.preventDefault();\n  };\n\n  private onMouseUp = (event: any) => {\n    this.dragStarted = false;\n    this.canMove = false;\n    let indexData: any;\n\n    if (this.previewElement) {\n      if (this._currentDragElement && this.sortingEnabled) {\n        indexData = this.getCurrentIndexPosition(\n          event.x,\n          event.y,\n          this._currentDragElement?.htmlElement\n        );\n\n        this.positionDifference = { left: indexData?.x, top: indexData?.y };\n      }\n\n      this.previewElement.style.transition = '0.2s ease-in-out';\n\n      let posX =\n        (+this.previewElement.style.left.replace('px', '').trim() -\n          (this.positionDifference\n            ? this.positionDifference.left\n            : this.position.left)) *\n        -1;\n      let posY =\n        (+this.previewElement.style.top.replace('px', '').trim() -\n          (this.positionDifference\n            ? this.positionDifference.top\n            : this.position.top)) *\n        -1;\n\n      this.previewElement.style.transform =\n        'translate(' + posX + 'px, ' + posY + 'px)';\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      setTimeout(\n        () => {\n          this.drop.emit({\n            item: this._currentDragElement?.data,\n            target: this._currentTargetElement?.data,\n            optionalDragData: this.dragData,\n            oldIndex: indexData ? indexData.oldIndex : null,\n            newIndex: indexData ? indexData.newIndex : null,\n          });\n\n          // Clear positionDifference\n          this.positionDifference = null;\n\n          if (this.previewElement)\n            this._document.body.removeChild(this.previewElement);\n          this.previewElement = null;\n\n          const htmlElement = this._currentDragElement?.htmlElement;\n\n          if (htmlElement) {\n            this.toggleVisibility(htmlElement, false);\n          }\n\n          this.resetPositions(this._currentDragElement?.htmlElement);\n\n          this.dndService.setCurrentDragElement(null);\n          this._currentDragElement = null;\n          this._currentTargetElement = null;\n        },\n        this.cancelAnimation ? 0 : 201\n      );\n\n      this.dragInProgress.emit(false);\n    }\n  };\n\n  //#region Public Voids\n  /** `ngx-explorer-item` will call this method to register itself. */\n  addDragElement(element: NgxExplorerItemDirective) {\n    this._dragElements.push(element);\n  }\n\n  /** `ngx-explorer-target` will call this method to register itself as target on mouseenter */\n  setCurrentTarget(element: NgxExplorerTargetDirective | null) {\n    this._currentTargetElement = element;\n    this.targetChange.emit({ target: element?.getHostComponent() });\n  }\n  //#endregion\n}\n","/** Enum of the type of the FileFolder class. */\nexport enum FileFolderType {\n  File,\n  Folder,\n}\n\n/** This class can be extended to a component. */\nexport abstract class FileFolder {\n  public selected: boolean = false;\n  public type: FileFolderType = FileFolderType.File;\n  public position?: number;\n  public id?: string;\n}\n","import {\n  Directive,\n  ElementRef,\n  HostListener,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Renderer2,\n  SkipSelf,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { FileFolder } from '../core/file-folder';\nimport { DndService } from '../services/dnd.service';\nimport {\n  EXPLORER_DND_CONTAINER,\n  NgxExplorerContainerDirective,\n} from './ngx-explorer-container.directive';\n\n@Directive({\n  selector: '[ngxExplorerDndTarget]',\n  providers: [\n    {\n      provide: EXPLORER_DND_CONTAINER,\n      useExisting: NgxExplorerTargetDirective,\n    },\n  ],\n})\nexport class NgxExplorerTargetDirective implements OnInit, OnDestroy {\n  private dragElementSubscription: Subscription = Subscription.EMPTY;\n  private currentDragElement!: HTMLElement | null;\n\n  @Input('dndTargetData') data!: any;\n\n  constructor(\n    private element: ElementRef,\n    private renderer: Renderer2,\n    private dndService: DndService,\n    @Optional()\n    @SkipSelf()\n    @Inject(EXPLORER_DND_CONTAINER)\n    private _parentDrag?: NgxExplorerContainerDirective,\n    @Optional()\n    private host?: FileFolder\n  ) {}\n\n  ngOnInit(): void {\n    if (this._parentDrag) {\n      this.dragElementSubscription = this.dndService\n        .getDragElementSubject()\n        .subscribe((element) => {\n          this.currentDragElement = element;\n        });\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.dragElementSubscription.unsubscribe();\n  }\n\n  @HostListener('mouseenter', ['$event'])\n  onMouseEnter(ev: any) {\n    if (!this.currentDragElement) {\n      ev.preventDefault();\n      return;\n    }\n    const htmlElement = this._parentDrag?.getTargetHandleFromHTMLElement(\n      this.currentDragElement\n    );\n    if (htmlElement) {\n      this.renderer.addClass(\n        this.element.nativeElement,\n        'dnd-target-highlight'\n      );\n    }\n\n    this._parentDrag?.setCurrentTarget(this);\n  }\n\n  @HostListener('mouseleave', ['$event'])\n  onMouseLeave(ev: any) {\n    this.renderer.removeClass(\n      this.element.nativeElement,\n      'dnd-target-highlight'\n    );\n    this._parentDrag?.setCurrentTarget(null);\n  }\n\n  /** Return the host component. */\n  getHostComponent() {\n    return this.host;\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  Inject,\n  Input,\n  Optional,\n  SkipSelf,\n} from '@angular/core';\nimport { FileFolder } from '../core/file-folder';\nimport {\n  EXPLORER_DND_CONTAINER,\n  NgxExplorerContainerDirective,\n} from './ngx-explorer-container.directive';\n\n@Directive({\n  selector: '[ngxExplorerDndElement]',\n  providers: [\n    {\n      provide: EXPLORER_DND_CONTAINER,\n      useExisting: NgxExplorerItemDirective,\n    },\n  ],\n})\nexport class NgxExplorerItemDirective<T = any> {\n  /** The host HTMLElement */\n  htmlElement!: HTMLElement;\n\n  /** Optional drag data. */\n  @Input('dndElementData') data!: any;\n\n  constructor(\n    private elementRef: ElementRef,\n    @Optional()\n    @SkipSelf()\n    @Inject(EXPLORER_DND_CONTAINER)\n    private _parentDrag?: NgxExplorerContainerDirective,\n    @Optional()\n    private host?: FileFolder\n  ) {\n    this.htmlElement = this.elementRef.nativeElement;\n    if (this._parentDrag) {\n      this._parentDrag.addDragElement(this);\n    }\n  }\n\n  /** Return the host component. */\n  getHostComponent() {\n    return this.host;\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n  Directive,\n  EventEmitter,\n  HostListener,\n  Inject,\n  Input,\n  Output,\n} from '@angular/core';\nimport {\n  EXPLORER_DND_CONTAINER,\n  NgxExplorerContainerDirective,\n} from './ngx-explorer-container.directive';\nimport { extendStyles } from '../core/css-helper';\nimport { FileFolder } from '../core/file-folder';\n\n@Directive({\n  selector: '[ngxDragSelection]',\n})\nexport class NgxDragSelectionDirective {\n  /** The current x position of the selection div. */\n  private startX: number = 0;\n\n  /** The current y position of the selection div. */\n  private startY: number = 0;\n\n  /**\n   * The initial x position of the selection div.\n   * Will be used to handle negative x position.\n   */\n  private initialX: number = 0;\n\n  /**\n   * The initial y position of the selection div.\n   * Will be used to handle negative y position.\n   */\n  private initialY: number = 0;\n\n  /**\n   * Will be used to set current selected elements to check has\n   * the current selected elements changed to before.\n   */\n  private selectedElements: Set<number> = new Set<number>();\n\n  /** The current x position from the fired event. */\n  private currentX: number = 0;\n\n  /** the current y position from the fired event. */\n  private currentY: number = 0;\n\n  /** The current calculated width of the selection div. */\n  private currentWidth: number = 0;\n\n  /** The current calculated height of the selection div. */\n  private currentHeight: number = 0;\n\n  /** Will be true if selection in progress. */\n  private selectingInProgress: boolean = false;\n\n  /** The selection border created by this directive. */\n  private selectionDiv!: HTMLElement;\n\n  /** Sets whether ngx-drag-selection can be used.  */\n  @Input() selectionAllowed: boolean = true;\n\n  /** Set a custom selection div `HTMLElement`. */\n  @Input() selectionDivElement!: HTMLElement | null | undefined;\n\n  /** Event emitted when the selected elements are changed. */\n  @Output() selectedElementsChange: EventEmitter<{\n    count: number;\n    data: FileFolder[];\n  }> = new EventEmitter();\n\n  //#region Helper\n  /** Checks if a registered element of type `ngx-explorer-item` inside the selection div rect. */\n  checkIfElementInsideRect(\n    rect: any,\n    selectionBorder: { x: number; y: number; width: number; height: number }\n  ) {\n    if (\n      ((selectionBorder.x >= rect.x &&\n        selectionBorder.x <= rect.x + rect.width) ||\n        (selectionBorder.x <= rect.x &&\n          selectionBorder.x + selectionBorder.width >= rect.x)) &&\n      ((selectionBorder.y >= rect.y &&\n        selectionBorder.y <= rect.y + rect.height) ||\n        (selectionBorder.y <= rect.y &&\n          selectionBorder.y + selectionBorder.height >= rect.y))\n    ) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /** Checks whether the selected elements have changed.  */\n  checkIfSelectedElementsChanged(items: number[]): boolean {\n    let changed: boolean = false;\n\n    for (let item of items) {\n      if (!this.selectedElements.has(item)) {\n        // data has changed...\n        changed = true;\n      }\n    }\n\n    if (!changed) {\n      if (this.selectedElements.size !== items.length) changed = true;\n    }\n\n    if (changed)\n      // Changed? So \"reset\" selectedElements\n      this.selectedElements = new Set(items);\n\n    return changed;\n  }\n\n  /** Creates the selection div into document.body. */\n  createSelectionDiv() {\n    if (this.selectionDivElement) {\n      this.selectionDiv = this.selectionDivElement;\n\n      extendStyles(this.selectionDiv.style, {\n        display: 'none',\n        position: 'fixed',\n        top: '0',\n        left: '0',\n        width: '0px',\n        height: '0px',\n      });\n    } else {\n      this.selectionDiv = document.createElement('div');\n\n      extendStyles(this.selectionDiv.style, {\n        display: 'none',\n        position: 'fixed',\n        opacity: '0.5',\n        top: '0',\n        left: '0',\n        'border-style': 'solid',\n        'border-radius': '6px',\n        'border-width': '0',\n        'border-color': '#7a7afa',\n        'background-color': '#add8e6',\n        width: '0px',\n        height: '0px',\n      });\n    }\n\n    this._document.body.appendChild(this.selectionDiv);\n  }\n\n  /** On `mousemove` this will set the current position and width of the selection div. */\n  setSelectionDivPosition(mouseX: number, mouseY: number) {\n    this.currentX = mouseX;\n    this.currentY = mouseY;\n    this.currentWidth = this.currentX - this.startX;\n    this.currentHeight = this.currentY - this.startY;\n    if (this.initialX >= this.currentX) {\n      this.currentWidth = this.initialX - this.currentX;\n      this.startX = this.currentX;\n    }\n    if (this.initialY >= this.currentY) {\n      this.currentHeight = this.initialY - this.currentY;\n      this.startY = this.currentY;\n    }\n\n    // div is not visible on start\n    if (this.selectionDiv.style.display === 'none') {\n      this.selectionDiv.style.display = 'unset';\n    }\n    extendStyles(this.selectionDiv.style, {\n      left: this.startX + 'px',\n      top: this.startY + 'px',\n      width: this.currentWidth + 'px',\n      height: this.currentHeight + 'px',\n    });\n  }\n  //#endregion\n\n  constructor(\n    @Inject(DOCUMENT) private _document: Document,\n    @Inject(EXPLORER_DND_CONTAINER)\n    private _parentDrag?: NgxExplorerContainerDirective\n  ) {}\n\n  //#region HostListener\n  @HostListener('document:mousedown', ['$event'])\n  onMouseDown(ev: any) {\n    if (!this.selectionAllowed) {\n      ev.preventDefault();\n      return;\n    }\n\n    if (!this.selectingInProgress) {\n      this.startX = ev.x;\n      this.startY = ev.y;\n      this.initialX = this.startX;\n      this.initialY = this.startY;\n\n      this.selectingInProgress = true;\n      this.createSelectionDiv();\n      this.setSelectionDivPosition(this.startX, this.startY);\n    }\n  }\n\n  @HostListener('document:mousemove', ['$event'])\n  onMouseMove(ev: any) {\n    if (!this.selectingInProgress || !this.selectionAllowed) {\n      ev.preventDefault();\n      return;\n    }\n    this.setSelectionDivPosition(ev.clientX, ev.clientY);\n\n    if (this._parentDrag) {\n      const data = this._parentDrag.getElementsInsideSelectionDiv(\n        this.startX,\n        this.startY,\n        this.currentWidth,\n        this.currentHeight\n      );\n      const result: FileFolder[] = [];\n      if (data.length > 0) {\n        for (let _data of data) {\n          const fileFolderComponent = _data.getHostComponent();\n          if (fileFolderComponent) {\n            result.push(fileFolderComponent);\n          }\n        }\n      }\n\n      if (\n        this.checkIfSelectedElementsChanged(\n          result.map((data) => {\n            return (data as any).__ngContext__;\n          })\n        )\n      ) {\n        this.selectedElementsChange.emit({\n          count: result.length,\n          data: result,\n        });\n      }\n    }\n  }\n\n  @HostListener('document:mouseup', ['$event'])\n  onMouseUp(ev: any) {\n    if (this.selectingInProgress) {\n      this.selectingInProgress = false;\n      this._document.body.removeChild(this.selectionDiv);\n    }\n  }\n  //#endregion\n}\n","import { NgModule } from '@angular/core';\nimport { NgxExplorerContainerDirective } from './directives/ngx-explorer-container.directive';\nimport { NgxExplorerItemDirective } from './directives/ngx-explorer-item.directive';\nimport { NgxExplorerTargetDirective } from './directives/ngx-explorer-target.directive';\nimport { NgxDragSelectionDirective } from './directives/ngx-drag-selection.directive';\n\n@NgModule({\n  declarations: [\n    NgxExplorerContainerDirective,\n    NgxExplorerItemDirective,\n    NgxExplorerTargetDirective,\n    NgxDragSelectionDirective,\n  ],\n  imports: [],\n  exports: [\n    NgxExplorerItemDirective,\n    NgxExplorerContainerDirective,\n    NgxExplorerTargetDirective,\n    NgxDragSelectionDirective,\n  ],\n})\nexport class NgxExplorerDndModule {}\n","/*\n * Public API Surface of ngx-explorer-dnd\n */\n\nexport * from './lib/directives/ngx-explorer-container.directive';\nexport * from './lib/directives/ngx-explorer-target.directive';\nexport * from './lib/directives/ngx-explorer-item.directive';\nexport * from './lib/directives/ngx-drag-selection.directive';\nexport * from './lib/core/file-folder';\nexport * from './lib/core/utils';\nexport * from './lib/ngx-explorer-dnd.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DndService","i2.FileFolder","i1.FileFolder"],"mappings":"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"}