{"version":3,"file":"angular-draggable.mjs","sources":["../../src/drag-drop.service.ts","../../src/draggable.directive.ts","../../src/droppable.directive.ts","../../src/draggable.module.ts","../../src/angular-draggable.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport interface DropEvent<T = unknown> {\n  data: T;\n  sourceElement: HTMLElement;\n  targetElement: HTMLElement;\n  x: number;\n  y: number;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class DragDropService {\n  private readonly _drop$      = new Subject<DropEvent>();\n  private readonly _dragEnter$ = new Subject<HTMLElement>();\n  private readonly _dragLeave$ = new Subject<HTMLElement>();\n\n  readonly drop$      = this._drop$.asObservable();\n  readonly dragEnter$ = this._dragEnter$.asObservable();\n  readonly dragLeave$ = this._dragLeave$.asObservable();\n\n  private readonly droppableEls   = new Set<HTMLElement>();\n  private activeDroppableEl: HTMLElement | null = null;\n  private sourceEl:          HTMLElement | null = null;\n\n  registerDroppable(el: HTMLElement): void   { this.droppableEls.add(el); }\n  unregisterDroppable(el: HTMLElement): void { this.droppableEls.delete(el); }\n\n  startDrag(sourceEl: HTMLElement): void {\n    this.sourceEl = sourceEl;\n  }\n\n  /** Called on every mousemove — detects enter/leave transitions. */\n  updateDragPosition(x: number, y: number): void {\n    const target = this.findDroppableAt(x, y);\n    if (target !== this.activeDroppableEl) {\n      if (this.activeDroppableEl) this._dragLeave$.next(this.activeDroppableEl);\n      this.activeDroppableEl = target;\n      if (this.activeDroppableEl) this._dragEnter$.next(this.activeDroppableEl);\n    }\n  }\n\n  /** Called on mouseup — emits the drop event and resets state. */\n  endDrag(x: number, y: number, data: unknown): void {\n    const target = this.findDroppableAt(x, y);\n    if (target && this.sourceEl) {\n      this._drop$.next({ data, sourceElement: this.sourceEl, targetElement: target, x, y });\n    }\n    if (this.activeDroppableEl) {\n      this._dragLeave$.next(this.activeDroppableEl);\n      this.activeDroppableEl = null;\n    }\n    this.sourceEl = null;\n  }\n\n  /**\n   * Uses elementsFromPoint to find the topmost registered droppable at (x, y),\n   * skipping the element being dragged itself.\n   */\n  private findDroppableAt(x: number, y: number): HTMLElement | null {\n    for (const el of document.elementsFromPoint(x, y)) {\n      if (el === this.sourceEl) continue;\n      if (this.droppableEls.has(el as HTMLElement)) return el as HTMLElement;\n    }\n    return null;\n  }\n}\n","import { Directive, ElementRef, Renderer2, OnDestroy, AfterViewInit, Input } from '@angular/core';\nimport { DragDropService } from './drag-drop.service';\n\n@Directive({\n  selector: '[draggable]',\n  standalone: true,\n  host: {\n    '(mousedown)': 'onMouseDown($event)'\n  }\n})\nexport class DraggableDirective implements OnDestroy, AfterViewInit {\n  /** Enable or disable dragging. Accepts boolean or 'true'/'false' string. */\n  @Input('draggable') set draggable(val: boolean | string) {\n    if (val === undefined || val === null || val === '') return;\n    this.canDrag = val === true || val === 'true';\n    this.renderer.setStyle(this.el.nativeElement, 'cursor', this.canDrag ? 'grab' : 'default');\n  }\n\n  /** Arbitrary data passed to the drop target via DropEvent.data. */\n  @Input() dragData: unknown;\n\n  private canDrag = true;\n  private deltaX = 0;\n  private deltaY = 0;\n  private moveUnlisten?: () => void;\n  private upUnlisten?: () => void;\n\n  private readonly mustBePosition = ['absolute', 'fixed', 'relative'];\n\n  constructor(\n    private readonly el: ElementRef<HTMLElement>,\n    private readonly renderer: Renderer2,\n    private readonly dragDropService: DragDropService,\n  ) {\n    this.renderer.setStyle(this.el.nativeElement, 'cursor', 'grab');\n  }\n\n  ngAfterViewInit(): void {\n    try {\n      const position = window.getComputedStyle(this.el.nativeElement).position;\n      if (!this.mustBePosition.includes(position)) {\n        console.warn(this.el.nativeElement, 'Must have position set to ' + this.mustBePosition.join('|'));\n      }\n    } catch (ex) {\n      console.error(ex);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.removeDocumentListeners();\n  }\n\n  onMouseDown(event: MouseEvent): void {\n    if (!this.canDrag) return;\n    event.preventDefault();\n\n    this.deltaX = event.clientX - this.el.nativeElement.offsetLeft;\n    this.deltaY = event.clientY - this.el.nativeElement.offsetTop;\n\n    this.renderer.setStyle(this.el.nativeElement, 'cursor', 'grabbing');\n    this.renderer.setStyle(document.body, 'user-select', 'none');\n\n    this.dragDropService.startDrag(this.el.nativeElement);\n\n    this.moveUnlisten = this.renderer.listen('document', 'mousemove', (e: MouseEvent) => {\n      this.renderer.setStyle(this.el.nativeElement, 'top',  (e.clientY - this.deltaY) + 'px');\n      this.renderer.setStyle(this.el.nativeElement, 'left', (e.clientX - this.deltaX) + 'px');\n      this.dragDropService.updateDragPosition(e.clientX, e.clientY);\n    });\n\n    this.upUnlisten = this.renderer.listen('document', 'mouseup', (e: MouseEvent) => {\n      this.dragDropService.endDrag(e.clientX, e.clientY, this.dragData);\n      this.removeDocumentListeners();\n      this.renderer.setStyle(this.el.nativeElement, 'cursor', 'grab');\n      this.renderer.removeStyle(document.body, 'user-select');\n    });\n  }\n\n  private removeDocumentListeners(): void {\n    this.moveUnlisten?.();\n    this.upUnlisten?.();\n    this.moveUnlisten = undefined;\n    this.upUnlisten  = undefined;\n  }\n}\n","import {\n  Directive, ElementRef, EventEmitter, Input,\n  OnDestroy, OnInit, Output,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { DragDropService, DropEvent } from './drag-drop.service';\n\n@Directive({\n  selector: '[droppable]',\n  standalone: true,\n})\nexport class DroppableDirective implements OnInit, OnDestroy {\n  /** Set to false / 'false' to temporarily disable this drop zone. */\n  @Input() set droppable(val: boolean | string) {\n    this.enabled = val !== false && val !== 'false';\n  }\n\n  /** Emits when a draggable element is released over this zone. */\n  @Output() itemDropped = new EventEmitter<DropEvent>();\n\n  /** Emits when a drag enters the zone — use for visual feedback. */\n  @Output() dragEnter = new EventEmitter<void>();\n\n  /** Emits when a drag leaves the zone — use to reset visual feedback. */\n  @Output() dragLeave = new EventEmitter<void>();\n\n  private enabled = true;\n  private readonly destroy$ = new Subject<void>();\n\n  constructor(\n    private readonly el: ElementRef<HTMLElement>,\n    private readonly service: DragDropService,\n  ) {}\n\n  ngOnInit(): void {\n    this.service.registerDroppable(this.el.nativeElement);\n\n    this.service.drop$.pipe(\n      filter(e => e.targetElement === this.el.nativeElement && this.enabled),\n      takeUntil(this.destroy$),\n    ).subscribe(e => this.itemDropped.emit(e));\n\n    this.service.dragEnter$.pipe(\n      filter(el => el === this.el.nativeElement && this.enabled),\n      takeUntil(this.destroy$),\n    ).subscribe(() => this.dragEnter.emit());\n\n    this.service.dragLeave$.pipe(\n      filter(el => el === this.el.nativeElement),\n      takeUntil(this.destroy$),\n    ).subscribe(() => this.dragLeave.emit());\n  }\n\n  ngOnDestroy(): void {\n    this.service.unregisterDroppable(this.el.nativeElement);\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { DraggableDirective } from './draggable.directive';\nimport { DroppableDirective } from './droppable.directive';\n\n@NgModule({\n  imports: [DraggableDirective, DroppableDirective],\n  exports: [DraggableDirective, DroppableDirective],\n})\nexport class NgDraggableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DragDropService"],"mappings":"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"}