{"version":3,"file":"ngx-drag-drop.mjs","sources":["../../../projects/dnd/src/lib/dnd-utils.ts","../../../projects/dnd/src/lib/dnd-state.ts","../../../projects/dnd/src/lib/dnd-draggable.directive.ts","../../../projects/dnd/src/lib/dnd-dropzone.directive.ts","../../../projects/dnd/src/lib/dnd-handle.directive.ts","../../../projects/dnd/src/lib/dnd.module.ts","../../../projects/dnd/src/public-api.ts","../../../projects/dnd/src/ngx-drag-drop.ts"],"sourcesContent":["import { DropEffect, EffectAllowed } from './dnd-types';\n\nexport interface DragDropData {\n  data?: any;\n  type?: string;\n}\n\nexport interface DndEvent extends DragEvent {\n  _dndUsingHandle?: boolean;\n  _dndDropzoneActive?: true;\n}\n\nexport type DndDragImageOffsetFunction = (\n  event: DragEvent,\n  dragImage: Element\n) => { x: number; y: number };\n\nexport const DROP_EFFECTS = ['move', 'copy', 'link'] as DropEffect[];\n\nexport const CUSTOM_MIME_TYPE = 'application/x-dnd';\nexport const JSON_MIME_TYPE = 'application/json';\nexport const MSIE_MIME_TYPE = 'Text';\n\nfunction mimeTypeIsCustom(mimeType: string) {\n  return mimeType.substr(0, CUSTOM_MIME_TYPE.length) === CUSTOM_MIME_TYPE;\n}\n\nexport function getWellKnownMimeType(event: DragEvent): string | null {\n  if (event.dataTransfer) {\n    const types = event.dataTransfer.types;\n\n    // IE 9 workaround.\n    if (!types) {\n      return MSIE_MIME_TYPE;\n    }\n\n    for (let i = 0; i < types.length; i++) {\n      if (\n        types[i] === MSIE_MIME_TYPE ||\n        types[i] === JSON_MIME_TYPE ||\n        mimeTypeIsCustom(types[i])\n      ) {\n        return types[i];\n      }\n    }\n  }\n\n  return null;\n}\n\nexport function setDragData(\n  event: DragEvent,\n  data: DragDropData,\n  effectAllowed: EffectAllowed\n): void {\n  // Internet Explorer and Microsoft Edge don't support custom mime types, see design doc:\n  // https://github.com/marceljuenemann/angular-drag-and-drop-lists/wiki/Data-Transfer-Design\n  const mimeType = CUSTOM_MIME_TYPE + (data.type ? '-' + data.type : '');\n\n  const dataString = JSON.stringify(data);\n\n  try {\n    event.dataTransfer?.setData(mimeType, dataString);\n  } catch (e) {\n    //   Setting a custom MIME type did not work, we are probably in IE or Edge.\n    try {\n      event.dataTransfer?.setData(JSON_MIME_TYPE, dataString);\n    } catch (e) {\n      //   We are in Internet Explorer and can only use the Text MIME type. Also note that IE\n      //   does not allow changing the cursor in the dragover event, therefore we have to choose\n      //   the one we want to display now by setting effectAllowed.\n      const effectsAllowed = filterEffects(DROP_EFFECTS, effectAllowed);\n      if (event.dataTransfer) {\n        event.dataTransfer.effectAllowed = effectsAllowed[0];\n      }\n\n      event.dataTransfer?.setData(MSIE_MIME_TYPE, dataString);\n    }\n  }\n}\n\nexport function getDropData(\n  event: DragEvent,\n  dragIsExternal: boolean\n): DragDropData {\n  // check if the mime type is well known\n  const mimeType = getWellKnownMimeType(event);\n\n  // drag did not originate from [dndDraggable]\n  if (dragIsExternal === true) {\n    if (mimeType !== null && mimeTypeIsCustom(mimeType)) {\n      // the type of content is well known and safe to handle\n      return JSON.parse(event.dataTransfer?.getData(mimeType) ?? '{}');\n    }\n\n    // the contained data is unknown, let user handle it\n    return {};\n  }\n\n  if (mimeType !== null) {\n    // the type of content is well known and safe to handle\n    return JSON.parse(event.dataTransfer?.getData(mimeType) ?? '{}');\n  }\n\n  // the contained data is unknown, let user handle it\n  return {};\n}\n\nexport function filterEffects(\n  effects: DropEffect[],\n  allowed: EffectAllowed | DropEffect\n): DropEffect[] {\n  if (allowed === 'all' || allowed === 'uninitialized') {\n    return effects;\n  }\n\n  return effects.filter(function (effect) {\n    return allowed.toLowerCase().indexOf(effect) !== -1;\n  });\n}\n\nexport function getDirectChildElement(\n  parentElement: Element,\n  childElement: Element\n): Element | null {\n  let directChild: Node = childElement;\n\n  while (directChild.parentNode !== parentElement) {\n    // reached root node without finding given parent\n    if (!directChild.parentNode) {\n      return null;\n    }\n\n    directChild = directChild.parentNode;\n  }\n\n  return directChild as Element;\n}\n\nexport function shouldPositionPlaceholderBeforeElement(\n  event: DragEvent,\n  element: Element,\n  horizontal: boolean\n) {\n  const bounds = element.getBoundingClientRect();\n\n  // If the pointer is in the upper half of the list item element,\n  // we position the placeholder before the list item, otherwise after it.\n  if (horizontal) {\n    return event.clientX < bounds.left + bounds.width / 2;\n  }\n\n  return event.clientY < bounds.top + bounds.height / 2;\n}\n\nexport function calculateDragImageOffset(\n  event: DragEvent,\n  dragImage: Element\n): { x: number; y: number } {\n  const dragImageComputedStyle = window.getComputedStyle(dragImage);\n  const paddingTop = parseFloat(dragImageComputedStyle.paddingTop) || 0;\n  const paddingLeft = parseFloat(dragImageComputedStyle.paddingLeft) || 0;\n  const borderTop = parseFloat(dragImageComputedStyle.borderTopWidth) || 0;\n  const borderLeft = parseFloat(dragImageComputedStyle.borderLeftWidth) || 0;\n\n  return {\n    x: event.offsetX + paddingLeft + borderLeft,\n    y: event.offsetY + paddingTop + borderTop,\n  };\n}\n\nexport function setDragImage(\n  event: DragEvent,\n  dragImage: Element,\n  offsetFunction: DndDragImageOffsetFunction\n): void {\n  const offset = offsetFunction(event, dragImage) || { x: 0, y: 0 };\n\n  (event.dataTransfer as any).setDragImage(dragImage, offset.x, offset.y);\n}\n","import { DropEffect, EffectAllowed } from './dnd-types';\nimport {\n  CUSTOM_MIME_TYPE,\n  DROP_EFFECTS,\n  filterEffects,\n  getWellKnownMimeType,\n  JSON_MIME_TYPE,\n  MSIE_MIME_TYPE,\n} from './dnd-utils';\n\nexport interface DndState {\n  isDragging: boolean;\n  dropEffect?: DropEffect;\n  effectAllowed?: EffectAllowed;\n  type?: string;\n}\n\nconst _dndState: DndState = {\n  isDragging: false,\n  dropEffect: 'none',\n  effectAllowed: 'all',\n  type: undefined,\n};\n\nexport function startDrag(\n  event: DragEvent,\n  effectAllowed: EffectAllowed,\n  type: string | undefined\n) {\n  _dndState.isDragging = true;\n  _dndState.dropEffect = 'none';\n  _dndState.effectAllowed = effectAllowed;\n  _dndState.type = type;\n\n  if (event.dataTransfer) {\n    event.dataTransfer.effectAllowed = effectAllowed;\n  }\n}\n\nexport function endDrag() {\n  _dndState.isDragging = false;\n  _dndState.dropEffect = undefined;\n  _dndState.effectAllowed = undefined;\n  _dndState.type = undefined;\n}\n\nexport function setDropEffect(event: DragEvent, dropEffect: DropEffect) {\n  if (_dndState.isDragging === true) {\n    _dndState.dropEffect = dropEffect;\n  }\n\n  if (event.dataTransfer) {\n    event.dataTransfer.dropEffect = dropEffect;\n  }\n}\n\nexport function getDropEffect(\n  event: DragEvent,\n  effectAllowed?: EffectAllowed | DropEffect\n): DropEffect {\n  const dataTransferEffectAllowed: EffectAllowed = event.dataTransfer\n    ? (event.dataTransfer.effectAllowed as EffectAllowed)\n    : 'uninitialized';\n\n  let effects = filterEffects(DROP_EFFECTS, dataTransferEffectAllowed);\n\n  if (_dndState.isDragging === true) {\n    effects = filterEffects(effects, _dndState.effectAllowed!);\n  }\n\n  if (effectAllowed) {\n    effects = filterEffects(effects, effectAllowed);\n  }\n\n  // MacOS automatically filters dataTransfer.effectAllowed depending on the modifier keys,\n  // therefore the following modifier keys will only affect other operating systems.\n  if (effects.length === 0) {\n    return 'none';\n  }\n\n  if (event.ctrlKey && effects.indexOf('copy') !== -1) {\n    return 'copy';\n  }\n\n  if (event.altKey && effects.indexOf('link') !== -1) {\n    return 'link';\n  }\n\n  return effects[0] as DropEffect;\n}\n\nexport function getDndType(event: DragEvent): string | undefined {\n  if (_dndState.isDragging === true) {\n    return _dndState.type;\n  }\n\n  const mimeType = getWellKnownMimeType(event);\n\n  if (mimeType === null) {\n    return undefined;\n  }\n\n  if (mimeType === MSIE_MIME_TYPE || mimeType === JSON_MIME_TYPE) {\n    return undefined;\n  }\n\n  return mimeType.substr(CUSTOM_MIME_TYPE.length + 1) || undefined;\n}\n\nexport function isExternalDrag(): boolean {\n  return _dndState.isDragging === false;\n}\n\nexport const dndState: Readonly<DndState> = _dndState as Readonly<DndState>;\n","import {\n  AfterViewInit,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostBinding,\n  HostListener,\n  inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n} from '@angular/core';\nimport { DndHandleDirective } from './dnd-handle.directive';\nimport { dndState, endDrag, startDrag } from './dnd-state';\nimport { EffectAllowed } from './dnd-types';\nimport {\n  calculateDragImageOffset,\n  DndDragImageOffsetFunction,\n  DndEvent,\n  setDragData,\n  setDragImage,\n} from './dnd-utils';\n\n@Directive({ selector: '[dndDragImageRef]', standalone: true })\nexport class DndDragImageRefDirective implements OnInit {\n  dndDraggableDirective = inject(forwardRef(() => DndDraggableDirective));\n  elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n\n  ngOnInit() {\n    this.dndDraggableDirective.registerDragImage(this.elementRef);\n  }\n}\n\n@Directive({ selector: '[dndDraggable]', standalone: true })\nexport class DndDraggableDirective implements AfterViewInit, OnDestroy {\n  @Input() dndDraggable: any;\n  @Input() dndEffectAllowed: EffectAllowed = 'copy';\n  @Input() dndType?: string;\n  @Input() dndDraggingClass = 'dndDragging';\n  @Input() dndDraggingSourceClass = 'dndDraggingSource';\n  @Input() dndDraggableDisabledClass = 'dndDraggableDisabled';\n  @Input() dndDragImageOffsetFunction: DndDragImageOffsetFunction =\n    calculateDragImageOffset;\n\n  @Output() readonly dndStart: EventEmitter<DragEvent> =\n    new EventEmitter<DragEvent>();\n  @Output() readonly dndDrag: EventEmitter<DragEvent> =\n    new EventEmitter<DragEvent>();\n  @Output() readonly dndEnd: EventEmitter<DragEvent> =\n    new EventEmitter<DragEvent>();\n  @Output() readonly dndMoved: EventEmitter<DragEvent> =\n    new EventEmitter<DragEvent>();\n  @Output() readonly dndCopied: EventEmitter<DragEvent> =\n    new EventEmitter<DragEvent>();\n  @Output() readonly dndLinked: EventEmitter<DragEvent> =\n    new EventEmitter<DragEvent>();\n  @Output() readonly dndCanceled: EventEmitter<DragEvent> =\n    new EventEmitter<DragEvent>();\n\n  @HostBinding('attr.draggable') draggable = true;\n\n  private dndHandle?: DndHandleDirective;\n  private dndDragImageElementRef?: ElementRef;\n  private dragImage: Element | undefined;\n  private isDragStarted: boolean = false;\n\n  private elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n  private renderer = inject(Renderer2);\n  private ngZone = inject(NgZone);\n\n  @Input() set dndDisableIf(value: boolean) {\n    this.draggable = !value;\n\n    if (this.draggable) {\n      this.renderer.removeClass(\n        this.elementRef.nativeElement,\n        this.dndDraggableDisabledClass\n      );\n    } else {\n      this.renderer.addClass(\n        this.elementRef.nativeElement,\n        this.dndDraggableDisabledClass\n      );\n    }\n  }\n\n  @Input() set dndDisableDragIf(value: boolean) {\n    this.dndDisableIf = value;\n  }\n\n  ngAfterViewInit(): void {\n    this.ngZone.runOutsideAngular(() => {\n      this.elementRef.nativeElement.addEventListener(\n        'drag',\n        this.dragEventHandler\n      );\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.elementRef.nativeElement.removeEventListener(\n      'drag',\n      this.dragEventHandler\n    );\n    if (this.isDragStarted) {\n      endDrag();\n    }\n  }\n\n  @HostListener('dragstart', ['$event']) onDragStart(event: DndEvent): boolean {\n    if (!this.draggable) {\n      return false;\n    }\n\n    // check if there is dnd handle and if the dnd handle was used to start the drag\n    if (this.dndHandle != null && event._dndUsingHandle == null) {\n      event.stopPropagation();\n      return false;\n    }\n\n    // initialize global state\n    startDrag(event, this.dndEffectAllowed, this.dndType);\n\n    this.isDragStarted = true;\n\n    setDragData(\n      event,\n      { data: this.dndDraggable, type: this.dndType },\n      dndState.effectAllowed!\n    );\n\n    this.dragImage = this.determineDragImage();\n\n    // set dragging css class prior to setDragImage so styles are applied before\n    // TODO breaking change: add class to elementRef rather than drag image which could be another element\n    this.renderer.addClass(this.dragImage, this.dndDraggingClass);\n\n    // set custom dragimage if present\n    // set dragimage if drag is started from dndHandle\n    if (this.dndDragImageElementRef != null || event._dndUsingHandle != null) {\n      setDragImage(event, this.dragImage, this.dndDragImageOffsetFunction);\n    }\n\n    // add dragging source css class on first drag event\n    const unregister = this.renderer.listen(\n      this.elementRef.nativeElement,\n      'drag',\n      () => {\n        this.renderer.addClass(\n          this.elementRef.nativeElement,\n          this.dndDraggingSourceClass\n        );\n        unregister();\n      }\n    );\n\n    this.dndStart.emit(event);\n\n    event.stopPropagation();\n\n    setTimeout(() => {\n      if(this.isDragStarted) {\n        this.renderer.setStyle(this.dragImage, 'pointer-events', 'none');\n      }\n    }, 100);\n\n    return true;\n  }\n\n  onDrag(event: DragEvent) {\n    this.dndDrag.emit(event);\n  }\n\n  @HostListener('dragend', ['$event']) onDragEnd(event: DragEvent) {\n    if (!this.draggable || !this.isDragStarted) {\n      return;\n    }\n    // get drop effect from custom stored state as its not reliable across browsers\n    const dropEffect = dndState.dropEffect;\n\n    this.renderer.setStyle(this.dragImage, 'pointer-events', 'unset');\n\n    let dropEffectEmitter: EventEmitter<DragEvent>;\n\n    switch (dropEffect) {\n      case 'copy':\n        dropEffectEmitter = this.dndCopied;\n        break;\n\n      case 'link':\n        dropEffectEmitter = this.dndLinked;\n        break;\n\n      case 'move':\n        dropEffectEmitter = this.dndMoved;\n        break;\n\n      default:\n        dropEffectEmitter = this.dndCanceled;\n        break;\n    }\n\n    dropEffectEmitter.emit(event);\n    this.dndEnd.emit(event);\n\n    // reset global state\n    endDrag();\n\n    this.isDragStarted = false;\n\n    this.renderer.removeClass(this.dragImage, this.dndDraggingClass);\n\n    // IE9 special hammering\n    window.setTimeout(() => {\n      this.renderer.removeClass(\n        this.elementRef.nativeElement,\n        this.dndDraggingSourceClass\n      );\n    }, 0);\n\n    event.stopPropagation();\n  }\n\n  registerDragHandle(handle: DndHandleDirective | undefined) {\n    this.dndHandle = handle;\n  }\n\n  registerDragImage(elementRef: ElementRef | undefined) {\n    this.dndDragImageElementRef = elementRef;\n  }\n\n  private readonly dragEventHandler: (event: DragEvent) => void = (\n    event: DragEvent\n  ) => this.onDrag(event);\n\n  private determineDragImage(): Element {\n    // evaluate custom drag image existence\n    if (typeof this.dndDragImageElementRef !== 'undefined') {\n      return this.dndDragImageElementRef.nativeElement as Element;\n    } else {\n      return this.elementRef.nativeElement;\n    }\n  }\n}\n","import {\n  AfterViewInit,\n  ContentChild,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n} from '@angular/core';\nimport {\n  getDndType,\n  getDropEffect,\n  isExternalDrag,\n  setDropEffect,\n} from './dnd-state';\nimport { DropEffect, EffectAllowed } from './dnd-types';\nimport {\n  DndEvent,\n  DragDropData,\n  getDirectChildElement,\n  getDropData,\n  shouldPositionPlaceholderBeforeElement,\n} from './dnd-utils';\n\nexport interface DndDropEvent {\n  event: DragEvent;\n  dropEffect: DropEffect;\n  isExternal: boolean;\n  data?: any;\n  index?: number;\n  type?: any;\n}\n\n@Directive({ selector: '[dndPlaceholderRef]', standalone: true })\nexport class DndPlaceholderRefDirective implements OnInit {\n  constructor(public readonly elementRef: ElementRef<HTMLElement>) {}\n\n  ngOnInit() {\n    // placeholder has to be \"invisible\" to the cursor, or it would interfere with the dragover detection for the same dropzone\n    this.elementRef.nativeElement.style.pointerEvents = 'none';\n  }\n}\n\n@Directive({ selector: '[dndDropzone]', standalone: true })\nexport class DndDropzoneDirective implements AfterViewInit, OnDestroy {\n  @Input() dndDropzone?: string[] | '' = '';\n\n  @Input() dndEffectAllowed: EffectAllowed = 'uninitialized';\n\n  @Input() dndAllowExternal: boolean = false;\n\n  @Input() dndHorizontal: boolean = false;\n\n  @Input() dndDragoverClass: string = 'dndDragover';\n\n  @Input() dndDropzoneDisabledClass = 'dndDropzoneDisabled';\n\n  @Output() readonly dndDragover: EventEmitter<DragEvent> =\n    new EventEmitter<DragEvent>();\n\n  @Output() readonly dndDrop: EventEmitter<DndDropEvent> =\n    new EventEmitter<DndDropEvent>();\n\n  @ContentChild(DndPlaceholderRefDirective)\n  private readonly dndPlaceholderRef?: DndPlaceholderRefDirective;\n\n  private placeholder: Element | null = null;\n\n  private disabled: boolean = false;\n\n  constructor(\n    private ngZone: NgZone,\n    private elementRef: ElementRef,\n    private renderer: Renderer2\n  ) {}\n\n  @Input() set dndDisableIf(value: boolean) {\n    this.disabled = value;\n\n    if (this.disabled) {\n      this.renderer.addClass(\n        this.elementRef.nativeElement,\n        this.dndDropzoneDisabledClass\n      );\n    } else {\n      this.renderer.removeClass(\n        this.elementRef.nativeElement,\n        this.dndDropzoneDisabledClass\n      );\n    }\n  }\n\n  @Input() set dndDisableDropIf(value: boolean) {\n    this.dndDisableIf = value;\n  }\n\n  ngAfterViewInit(): void {\n    this.placeholder = this.tryGetPlaceholder();\n\n    this.removePlaceholderFromDOM();\n\n    this.ngZone.runOutsideAngular(() => {\n      this.elementRef.nativeElement.addEventListener(\n        'dragenter',\n        this.dragEnterEventHandler\n      );\n      this.elementRef.nativeElement.addEventListener(\n        'dragover',\n        this.dragOverEventHandler\n      );\n      this.elementRef.nativeElement.addEventListener(\n        'dragleave',\n        this.dragLeaveEventHandler\n      );\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.elementRef.nativeElement.removeEventListener(\n      'dragenter',\n      this.dragEnterEventHandler\n    );\n    this.elementRef.nativeElement.removeEventListener(\n      'dragover',\n      this.dragOverEventHandler\n    );\n    this.elementRef.nativeElement.removeEventListener(\n      'dragleave',\n      this.dragLeaveEventHandler\n    );\n  }\n\n  onDragEnter(event: DndEvent) {\n    // check if another dropzone is activated\n    if (event._dndDropzoneActive === true) {\n      this.cleanupDragoverState();\n      return;\n    }\n\n    // set as active if the target element is inside this dropzone\n    if (event._dndDropzoneActive == null) {\n      const newTarget = document.elementFromPoint(event.clientX, event.clientY);\n\n      if (this.elementRef.nativeElement.contains(newTarget)) {\n        event._dndDropzoneActive = true;\n      }\n    }\n\n    // check if this drag event is allowed to drop on this dropzone\n    const type = getDndType(event);\n    if (!this.isDropAllowed(type)) {\n      return;\n    }\n\n    // allow the dragenter\n    event.preventDefault();\n  }\n\n  onDragOver(event: DragEvent) {\n    // With nested dropzones, we want to ignore this event if a child dropzone\n    // has already handled a dragover.  Historically, event.stopPropagation() was\n    // used to prevent this bubbling, but that prevents any dragovers outside the\n    // ngx-drag-drop component, and stops other use cases such as scrolling on drag.\n    // Instead, we can check if the event was already prevented by a child and bail early.\n    if (event.defaultPrevented) {\n      return;\n    }\n\n    // check if this drag event is allowed to drop on this dropzone\n    const type = getDndType(event);\n    if (!this.isDropAllowed(type)) {\n      return;\n    }\n\n    this.checkAndUpdatePlaceholderPosition(event);\n\n    const dropEffect = getDropEffect(event, this.dndEffectAllowed);\n\n    if (dropEffect === 'none') {\n      this.cleanupDragoverState();\n      return;\n    }\n\n    // allow the dragover\n    event.preventDefault();\n\n    // set the drop effect\n    setDropEffect(event, dropEffect);\n\n    this.dndDragover.emit(event);\n\n    this.renderer.addClass(\n      this.elementRef.nativeElement,\n      this.dndDragoverClass\n    );\n  }\n\n  @HostListener('drop', ['$event']) onDrop(event: DragEvent) {\n    try {\n      // check if this drag event is allowed to drop on this dropzone\n      const type = getDndType(event);\n      if (!this.isDropAllowed(type)) {\n        return;\n      }\n\n      const data: DragDropData = getDropData(event, isExternalDrag());\n\n      if (!this.isDropAllowed(data.type)) {\n        return;\n      }\n\n      // signal custom drop handling\n      event.preventDefault();\n\n      const dropEffect = getDropEffect(event);\n\n      setDropEffect(event, dropEffect);\n\n      if (dropEffect === 'none') {\n        return;\n      }\n\n      const dropIndex = this.getPlaceholderIndex();\n\n      // if for whatever reason the placeholder is not present in the DOM but it should be there\n      // we don't allow/emit the drop event since it breaks the contract\n      // seems to only happen if drag and drop is executed faster than the DOM updates\n      if (dropIndex === -1) {\n        return;\n      }\n\n      this.dndDrop.emit({\n        event: event,\n        dropEffect: dropEffect,\n        isExternal: isExternalDrag(),\n        data: data.data,\n        index: dropIndex,\n        type: type,\n      });\n\n      event.stopPropagation();\n    } finally {\n      this.cleanupDragoverState();\n    }\n  }\n\n  onDragLeave(event: DndEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    // check if still inside this dropzone and not yet handled by another dropzone\n    if (event._dndDropzoneActive == null) {\n      if (this.elementRef.nativeElement.contains(event.relatedTarget)) {\n        event._dndDropzoneActive = true;\n        return;\n      }\n    }\n\n    this.cleanupDragoverState();\n\n    // cleanup drop effect when leaving dropzone\n    setDropEffect(event, 'none');\n  }\n\n  private readonly dragEnterEventHandler: (event: DragEvent) => void = (\n    event: DragEvent\n  ) => this.onDragEnter(event);\n\n  private readonly dragOverEventHandler: (event: DragEvent) => void = (\n    event: DragEvent\n  ) => this.onDragOver(event);\n\n  private readonly dragLeaveEventHandler: (event: DragEvent) => void = (\n    event: DragEvent\n  ) => this.onDragLeave(event);\n\n  private isDropAllowed(type?: string): boolean {\n    // dropzone is disabled -> deny it\n    if (this.disabled) {\n      return false;\n    }\n\n    // if drag did not start from our directive\n    // and external drag sources are not allowed -> deny it\n    if (isExternalDrag() && !this.dndAllowExternal) {\n      return false;\n    }\n\n    // no filtering by types -> allow it\n    if (!this.dndDropzone) {\n      return true;\n    }\n\n    // no type set -> allow it\n    if (!type) {\n      return true;\n    }\n\n    if (!Array.isArray(this.dndDropzone)) {\n      throw new Error(\n        'dndDropzone: bound value to [dndDropzone] must be an array!'\n      );\n    }\n\n    // if dropzone contains type -> allow it\n    return this.dndDropzone.indexOf(type) !== -1;\n  }\n\n  private tryGetPlaceholder(): Element | null {\n    if (typeof this.dndPlaceholderRef !== 'undefined') {\n      return this.dndPlaceholderRef.elementRef.nativeElement as Element;\n    }\n\n    // TODO nasty workaround needed because if ng-container / template is used @ContentChild() or DI will fail because\n    // of wrong context see angular bug https://github.com/angular/angular/issues/13517\n    return this.elementRef.nativeElement.querySelector('[dndPlaceholderRef]');\n  }\n\n  private removePlaceholderFromDOM() {\n    if (this.placeholder !== null && this.placeholder.parentNode !== null) {\n      this.placeholder.parentNode.removeChild(this.placeholder);\n    }\n  }\n\n  private checkAndUpdatePlaceholderPosition(event: DragEvent): void {\n    if (this.placeholder === null) {\n      return;\n    }\n\n    // make sure the placeholder is in the DOM\n    if (this.placeholder.parentNode !== this.elementRef.nativeElement) {\n      this.renderer.appendChild(\n        this.elementRef.nativeElement,\n        this.placeholder\n      );\n    }\n\n    // update the position if the event originates from a child element of the dropzone\n    const directChild = getDirectChildElement(\n      this.elementRef.nativeElement,\n      event.target as Element\n    );\n\n    // early exit if no direct child or direct child is placeholder\n    if (directChild === null || directChild === this.placeholder) {\n      return;\n    }\n\n    const positionPlaceholderBeforeDirectChild =\n      shouldPositionPlaceholderBeforeElement(\n        event,\n        directChild,\n        this.dndHorizontal\n      );\n\n    if (positionPlaceholderBeforeDirectChild) {\n      // do insert before only if necessary\n      if (directChild.previousSibling !== this.placeholder) {\n        this.renderer.insertBefore(\n          this.elementRef.nativeElement,\n          this.placeholder,\n          directChild\n        );\n      }\n    } else {\n      // do insert after only if necessary\n      if (directChild.nextSibling !== this.placeholder) {\n        this.renderer.insertBefore(\n          this.elementRef.nativeElement,\n          this.placeholder,\n          directChild.nextSibling\n        );\n      }\n    }\n  }\n\n  private getPlaceholderIndex(): number | undefined {\n    if (this.placeholder === null) {\n      return undefined;\n    }\n\n    const element = this.elementRef.nativeElement as HTMLElement;\n\n    return Array.prototype.indexOf.call(element.children, this.placeholder);\n  }\n\n  private cleanupDragoverState() {\n    this.renderer.removeClass(\n      this.elementRef.nativeElement,\n      this.dndDragoverClass\n    );\n\n    this.removePlaceholderFromDOM();\n  }\n}\n","import {\n  Directive,\n  HostBinding,\n  HostListener,\n  inject,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport { DndDraggableDirective } from './dnd-draggable.directive';\nimport { DndEvent } from './dnd-utils';\n\n@Directive({ selector: '[dndHandle]', standalone: true })\nexport class DndHandleDirective implements OnInit, OnDestroy {\n  @HostBinding('attr.draggable') draggable = true;\n\n  dndDraggableDirective = inject(DndDraggableDirective);\n\n  ngOnInit() {\n    this.dndDraggableDirective.registerDragHandle(this);\n  }\n\n  ngOnDestroy(): void {\n    this.dndDraggableDirective.registerDragHandle(undefined);\n  }\n\n  @HostListener('dragstart', ['$event'])\n  @HostListener('dragend', ['$event'])\n  onDragEvent(event: DndEvent) {\n    event._dndUsingHandle = true;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport {\n  DndDraggableDirective,\n  DndDragImageRefDirective,\n} from './dnd-draggable.directive';\nimport {\n  DndDropzoneDirective,\n  DndPlaceholderRefDirective,\n} from './dnd-dropzone.directive';\nimport { DndHandleDirective } from './dnd-handle.directive';\n\n@NgModule({\n  exports: [\n    DndDraggableDirective,\n    DndDropzoneDirective,\n    DndHandleDirective,\n    DndPlaceholderRefDirective,\n    DndDragImageRefDirective,\n  ],\n  imports: [\n    DndDragImageRefDirective,\n    DndDropzoneDirective,\n    DndHandleDirective,\n    DndPlaceholderRefDirective,\n    DndDraggableDirective,\n  ],\n})\nexport class DndModule {}\n","/*\n * Public API Surface of dnd\n */\n\nexport * from './lib/dnd-draggable.directive';\nexport * from './lib/dnd-dropzone.directive';\nexport * from './lib/dnd-handle.directive';\nexport * from './lib/dnd-types';\nexport { DndDragImageOffsetFunction } from './lib/dnd-utils';\nexport * from './lib/dnd.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}