{"version":3,"file":"ng2-dragula.mjs","sources":["../../../libs/ng2-dragula/src/Group.ts","../../../libs/ng2-dragula/src/EventTypes.ts","../../../libs/ng2-dragula/src/DrakeFactory.ts","../../../libs/ng2-dragula/src/components/dragula.service.ts","../../../libs/ng2-dragula/src/components/dragula.directive.ts","../../../libs/ng2-dragula/src/components/dragula.module.ts","../../../libs/ng2-dragula/src/MockDrake.ts","../../../libs/ng2-dragula/src/ng2-dragula.ts"],"sourcesContent":["import { DrakeWithModels } from \"./DrakeWithModels\";\nimport { DragulaOptions } from \"./DragulaOptions\";\n\nexport class Group {\n  public initEvents = false;\n  constructor(\n    public name: string,\n    public drake: DrakeWithModels,\n    public options: DragulaOptions\n  ) {}\n}\n","export enum EventTypes {\n    Cancel = \"cancel\",\n    Cloned = \"cloned\",\n    Drag = \"drag\",\n    DragEnd = \"dragend\",\n    Drop = \"drop\",\n    Out = \"out\",\n    Over = \"over\",\n    Remove = \"remove\",\n    Shadow = \"shadow\",\n    DropModel = \"dropModel\",\n    RemoveModel = \"removeModel\",\n}\n\nexport const AllEvents: EventTypes[] = Object.keys(EventTypes).map(k => EventTypes[k as keyof typeof EventTypes] as EventTypes);","import { DragulaOptions } from './DragulaOptions';\nimport { DrakeWithModels } from './DrakeWithModels';\nimport * as dragulaExpt from 'dragula';\nexport const dragula: (containers?: any, options?: any) => any = (dragulaExpt as any).default || dragulaExpt;\n\nexport type DrakeBuilder = (containers: any[], options: DragulaOptions) => DrakeWithModels;\n\nexport class DrakeFactory {\n  constructor (public build: DrakeBuilder = dragula) {}\n}\n\n","import { Injectable, Optional } from '@angular/core';\nimport { Group } from '../Group';\nimport { DragulaOptions } from '../DragulaOptions';\nimport { Subject, Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { EventTypes, AllEvents } from '../EventTypes';\nimport { DrakeFactory } from '../DrakeFactory';\n\ntype FilterProjector<T extends { name: string }> = (\n  name: string,\n  args: any\n) => T;\ntype Dispatch = { event: EventTypes; name: string; args: any[] };\n\nconst filterEvent =\n  <\n    T extends {\n      name: string;\n      source?: any;\n      target?: any;\n      sourceModel?: any;\n      targetModel?: any;\n    }\n  >(\n    eventType: EventTypes,\n    filterDragType: string | undefined,\n    projector: FilterProjector<T>\n  ) =>\n  (input: Observable<Dispatch>): Observable<T> => {\n    return input.pipe(\n      filter(({ event, name }) => {\n        return (\n          event === eventType &&\n          (filterDragType === undefined || name === filterDragType)\n        );\n      }),\n      map(({ name, args }) => projector(name, args))\n    );\n  };\n\nconst elContainerSourceProjector = (\n  name: string,\n  [el, container, source]: [Element, Element, Element]\n) => ({ name, el, container, source });\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DragulaService {\n  private groups: { [k: string]: Group } = {};\n  private dispatch$ = new Subject<Dispatch>();\n  private elContainerSource = (eventType: EventTypes) => (groupName?: string) =>\n    this.dispatch$.pipe(\n      filterEvent(eventType, groupName, elContainerSourceProjector)\n    );\n  /* https://github.com/bevacqua/dragula#drakeon-events */\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n  public cancel = this.elContainerSource(EventTypes.Cancel);\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n  public remove = this.elContainerSource(EventTypes.Remove);\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n  public shadow = this.elContainerSource(EventTypes.Shadow);\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n  public over = this.elContainerSource(EventTypes.Over);\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n  public out = this.elContainerSource(EventTypes.Out);\n\n  public drag = (groupName?: string) =>\n    this.dispatch$.pipe(\n      filterEvent(\n        EventTypes.Drag,\n        groupName,\n        (name, [el, source]: [Element, Element]) => ({ name, el, source })\n      )\n    );\n\n  public dragend = (groupName?: string) =>\n    this.dispatch$.pipe(\n      filterEvent(EventTypes.DragEnd, groupName, (name, [el]: [Element]) => ({\n        name,\n        el,\n      }))\n    );\n\n  public drop = (groupName?: string) =>\n    this.dispatch$.pipe(\n      filterEvent(\n        EventTypes.Drop,\n        groupName,\n        (\n          name,\n          [el, target, source, sibling]: [Element, Element, Element, Element]\n        ) => {\n          return { name, el, target, source, sibling };\n        }\n      )\n    );\n\n  public cloned = (groupName?: string) =>\n    this.dispatch$.pipe(\n      filterEvent(\n        EventTypes.Cloned,\n        groupName,\n        (\n          name,\n          [clone, original, cloneType]: [Element, Element, 'mirror' | 'copy']\n        ) => {\n          return { name, clone, original, cloneType };\n        }\n      )\n    );\n\n  public dropModel = <T = any>(groupName?: string) =>\n    this.dispatch$.pipe(\n      filterEvent(\n        EventTypes.DropModel,\n        groupName,\n        (\n          name,\n          [\n            el,\n            target,\n            source,\n            sibling,\n            item,\n            sourceModel,\n            targetModel,\n            sourceIndex,\n            targetIndex,\n          ]: [Element, Element, Element, Element, T, T[], T[], number, number]\n        ) => {\n          return {\n            name,\n            el,\n            target,\n            source,\n            sibling,\n            item,\n            sourceModel,\n            targetModel,\n            sourceIndex,\n            targetIndex,\n          };\n        }\n      )\n    );\n\n  public removeModel = <T = any>(groupName?: string) =>\n    this.dispatch$.pipe(\n      filterEvent(\n        EventTypes.RemoveModel,\n        groupName,\n        (\n          name,\n          [el, container, source, item, sourceModel, sourceIndex]: [\n            Element,\n            Element,\n            Element,\n            T,\n            T[],\n            number\n          ]\n        ) => {\n          return {\n            name,\n            el,\n            container,\n            source,\n            item,\n            sourceModel,\n            sourceIndex,\n          };\n        }\n      )\n    );\n\n  constructor(@Optional() private drakeFactory: DrakeFactory) {\n    if (this.drakeFactory === null || this.drakeFactory === undefined) {\n      this.drakeFactory = new DrakeFactory();\n    }\n  }\n\n  /** Public mainly for testing purposes. Prefer `createGroup()`. */\n  public add(group: Group): Group {\n    const existingGroup = this.find(group.name);\n    if (existingGroup) {\n      throw new Error('Group named: \"' + group.name + '\" already exists.');\n    }\n    this.groups[group.name] = group;\n    this.handleModels(group);\n    this.setupEvents(group);\n    return group;\n  }\n\n  public find(name: string): Group {\n    return this.groups[name];\n  }\n\n  public destroy(name: string): void {\n    const group = this.find(name);\n    if (!group) {\n      return;\n    }\n    group.drake && group.drake.destroy();\n    delete this.groups[name];\n  }\n\n  /**\n   * Creates a group with the specified name and options.\n   *\n   * Note: formerly known as `setOptions`\n   */\n  public createGroup<T = any>(name: string, options: DragulaOptions<T>): Group {\n    return this.add(\n      new Group(name, this.drakeFactory.build([], options), options)\n    );\n  }\n\n  private handleModels({ name, drake, options }: Group): void {\n    let dragElm: any;\n    let dragIndex: number;\n    let dropIndex: number;\n    drake.on('remove', (el: any, container: any, source: any) => {\n      if (!drake.models) {\n        return;\n      }\n      let sourceModel = drake.models[drake.containers.indexOf(source)];\n      sourceModel = sourceModel.slice(0); // clone it\n      const item = sourceModel.splice(dragIndex, 1)[0];\n      this.dispatch$.next({\n        event: EventTypes.RemoveModel,\n        name,\n        args: [el, container, source, item, sourceModel, dragIndex],\n      });\n    });\n    drake.on('drag', (el: any, source: any) => {\n      if (!drake.models) {\n        return;\n      }\n      dragElm = el;\n      dragIndex = this.domIndexOf(el, source);\n    });\n    drake.on(\n      'drop',\n      (dropElm: any, target: Element, source: Element, sibling?: Element) => {\n        if (!drake.models || !target) {\n          return;\n        }\n        dropIndex = this.domIndexOf(dropElm, target);\n        let sourceModel = drake.models[drake.containers.indexOf(source)];\n        let targetModel = drake.models[drake.containers.indexOf(target)];\n        let item: any;\n        if (target === source) {\n          sourceModel = sourceModel.slice(0);\n          item = sourceModel.splice(dragIndex, 1)[0];\n          sourceModel.splice(dropIndex, 0, item);\n          // this was true before we cloned and updated sourceModel,\n          // but targetModel still has the old value\n          targetModel = sourceModel;\n        } else {\n          const isCopying = dragElm !== dropElm;\n          item = sourceModel[dragIndex];\n          if (isCopying) {\n            if (!options.copyItem) {\n              throw new Error(\n                'If you have enabled `copy` on a group, you must provide a `copyItem` function.'\n              );\n            }\n            item = options.copyItem(item);\n          }\n\n          if (!isCopying) {\n            sourceModel = sourceModel.slice(0);\n            sourceModel.splice(dragIndex, 1);\n          }\n          targetModel = targetModel.slice(0);\n          targetModel.splice(dropIndex, 0, item);\n          if (isCopying) {\n            try {\n              target.removeChild(dropElm);\n              // eslint-disable-next-line no-empty\n            } catch (e) {}\n          }\n        }\n        this.dispatch$.next({\n          event: EventTypes.DropModel,\n          name,\n          args: [\n            dropElm,\n            target,\n            source,\n            sibling,\n            item,\n            sourceModel,\n            targetModel,\n            dragIndex,\n            dropIndex,\n          ],\n        });\n      }\n    );\n  }\n\n  private setupEvents(group: Group): void {\n    if (group.initEvents) {\n      return;\n    }\n    group.initEvents = true;\n    const name = group.name;\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const that: any = this;\n    const emitter = (event: EventTypes) => {\n      switch (event) {\n        case EventTypes.Drag:\n          group.drake.on(event, (...args: any[]) => {\n            this.dispatch$.next({ event, name, args });\n          });\n          break;\n        case EventTypes.Drop:\n          group.drake.on(event, (...args: any[]) => {\n            this.dispatch$.next({ event, name, args });\n          });\n          break;\n\n        case EventTypes.DragEnd:\n          group.drake.on(event, (...args: any[]) => {\n            this.dispatch$.next({ event, name, args });\n          });\n          break;\n        \n        case EventTypes.Cancel:\n        case EventTypes.Remove:\n        case EventTypes.Shadow:\n        case EventTypes.Over:\n        case EventTypes.Out:\n          group.drake.on(event, (...args: any[]) => {\n            this.dispatch$.next({ event, name, args });\n          });\n          break;\n\n        case EventTypes.Cloned:\n          group.drake.on(event, (...args: any[]) => {\n            this.dispatch$.next({ event, name, args });\n          });\n          break;\n        case EventTypes.DropModel:\n          group.drake.on(event, (...args: any[]) => {\n            this.dispatch$.next({ event, name, args });\n          });\n          break;\n\n        case EventTypes.RemoveModel:\n            group.drake.on(event, (...args: any[]) => {\n              this.dispatch$.next({ event, name, args });\n            });\n            break;\n        default:\n          break;\n      }\n    };\n    AllEvents.forEach(emitter);\n  }\n\n  private domIndexOf(child: any, parent: any): any {\n    if (parent) {\n      return Array.prototype.indexOf.call(parent.children, child);\n    }\n  }\n}\n","import { Directive, Input, Output, ElementRef, OnInit, OnChanges, OnDestroy, SimpleChange, EventEmitter } from '@angular/core';\nimport { DragulaService } from './dragula.service';\nimport { DrakeWithModels } from '../DrakeWithModels';\nimport { Subscription } from 'rxjs';\nimport { Group } from '../Group';\n\n@Directive({selector: '[dragula]'})\nexport class DragulaDirective implements OnChanges, OnDestroy {\n  @Input() public dragula?: string;\n  @Input() public dragulaModel?: any[];\n  @Output() public dragulaModelChange = new EventEmitter<any[]>();\n\n  private subs?: Subscription;\n\n  private get container(): HTMLElement {\n    return this.el && this.el.nativeElement;\n  }\n  private group?: Group;\n\n  public constructor(private el: ElementRef, private dragulaService: DragulaService) {\n  }\n\n  public ngOnChanges(changes: {dragula?: SimpleChange, dragulaModel?: SimpleChange}): void {\n    if (changes && changes.dragula) {\n      const { previousValue: prev, currentValue: current, firstChange } = changes.dragula;\n      const hadPreviousValue = !!prev;\n      const hasNewValue = !!current;\n      // something -> null       =>  teardown only\n      // something -> something  =>  teardown, then setup\n      //      null -> something  =>  setup only\n      //\n      //      null -> null (precluded by fact of change being present)\n      if (hadPreviousValue) {\n        this.teardown(prev);\n      }\n      if (hasNewValue) {\n        this.setup();\n      }\n    } else if (changes && changes.dragulaModel) {\n      // this code only runs when you're not changing the group name\n      // because if you're changing the group name, you'll be doing setup or teardown\n      // it also only runs if there is a group name to attach to.\n      const { previousValue: prev, currentValue: current, firstChange } = changes.dragulaModel;\n      const drake = this.group?.drake;\n      if (this.dragula && drake) {\n        drake.models = drake.models || [];\n        const prevIndex = drake.models.indexOf(prev);\n        if (prevIndex !== -1) {\n          // delete the previous\n          drake.models.splice(prevIndex, 1);\n          // maybe insert a new one at the same spot\n          if (current) {\n            drake.models.splice(prevIndex, 0, current);\n          }\n        } else if (current) {\n          // no previous one to remove; just push this one.\n          drake.models.push(current);\n        }\n      }\n    }\n  }\n\n  // call ngOnInit 'setup' because we want to call it in ngOnChanges\n  // and it would otherwise run twice\n  public setup(): void {\n    const checkModel = (group: Group) => {\n      if (this.dragulaModel) {\n        if (group.drake?.models) {\n          group.drake?.models?.push(this.dragulaModel);\n        } else {\n          if (group.drake) {\n            group.drake.models = [this.dragulaModel];\n          }\n        }\n      }\n    };\n\n    // find or create a group\n    if (!this.dragula) {\n      return;\n    }\n\n    let group = this.dragulaService.find(this.dragula);\n    if (!group) {\n      const options = {};\n      group = this.dragulaService.createGroup(this.dragula, options);\n    }\n\n    // ensure model and container element are pushed\n    checkModel(group);\n    group.drake?.containers.push(this.container);\n    this.subscribe(this.dragula);\n\n    this.group = group;\n  }\n\n  public subscribe(name: string) {\n    this.subs = new Subscription();\n    this.subs.add(\n      this.dragulaService\n      .dropModel(name)\n      .subscribe(({ source, target, sourceModel, targetModel }) => {\n        if (source === this.el.nativeElement) {\n          this.dragulaModelChange.emit(sourceModel);\n        } else if (target === this.el.nativeElement) {\n          this.dragulaModelChange.emit(targetModel);\n        }\n      })\n    );\n    this.subs.add(\n      this.dragulaService\n      .removeModel(name)\n      .subscribe(({ source, sourceModel }) => {\n        if (source === this.el.nativeElement) {\n          this.dragulaModelChange.emit(sourceModel);\n        }\n      })\n    );\n  }\n\n  public teardown(groupName: string): void {\n    if (this.subs) {\n      this.subs.unsubscribe();\n    }\n    const group = this.dragulaService.find(groupName);\n    if (group) {\n      const itemToRemove = group.drake?.containers.indexOf(this.el.nativeElement);\n      if (itemToRemove !== -1) {\n        group.drake?.containers.splice(itemToRemove, 1);\n      }\n      if (this.dragulaModel && group.drake && group.drake.models) {\n        const modelIndex = group.drake.models.indexOf(this.dragulaModel);\n        if (modelIndex !== -1) {\n          group.drake.models.splice(modelIndex, 1);\n        }\n      }\n    }\n  }\n\n  public ngOnDestroy(): void {\n    if (!this.dragula) {\n      return;\n    }\n\n    this.teardown(this.dragula);\n  }\n\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { DragulaDirective } from './dragula.directive';\nimport { DragulaService } from './dragula.service';\n\n@NgModule({\n  exports: [DragulaDirective],\n  declarations: [DragulaDirective],\n  providers: [DragulaService]\n})\nexport class DragulaModule {\n  static forRoot(): ModuleWithProviders<DragulaModule> {\n    return {\n      ngModule: DragulaModule,\n      providers: [DragulaService]\n    };\n  }\n}\n","import { Subject, Subscription } from 'rxjs';\nimport { DrakeWithModels } from './DrakeWithModels';\nimport { filter } from 'rxjs/operators';\nimport { EventTypes } from './EventTypes';\nimport { DragulaOptions } from './DragulaOptions';\nimport { DrakeFactory } from './DrakeFactory';\nimport { Drake } from 'dragula';\n\nexport const MockDrakeFactory = new DrakeFactory((containers, options) => {\n  return new MockDrake(containers, options);\n});\n\n/** You can use MockDrake to simulate Drake events.\n *\n * The three methods that actually do anything are `on(event, listener)`,\n * `destroy()`, and a new method, `emit()`. Use `emit()` to manually emit Drake\n * events, and if you injected MockDrake properly with MockDrakeFactory or\n * mocked the DragulaService.find() method, then you can make ng2-dragula think\n * drags and drops are happening.\n *\n * Caveats:\n *\n * 1. YOU MUST MAKE THE DOM CHANGES YOURSELF.\n * 2. REPEAT: YOU MUST MAKE THE DOM CHANGES YOURSELF.\n *    That means `source.removeChild(el)`, and `target.insertBefore(el)`.\n * 3. None of the other methods do anything.\n *    That's ok, because ng2-dragula doesn't use them.\n */\nexport class MockDrake implements DrakeWithModels {\n  // Basic but fully functional event emitter shim\n  private emitter$ = new Subject<{ eventType: EventTypes, args: any[] }>();\n  private subs = new Subscription();\n\n  /**\n   * @param containers A list of container elements.\n   * @param options These will NOT be used. At all.\n   * @param models Nonstandard, but useful for testing using `new MockDrake()` directly.\n   *               Note, default value is undefined, like a real Drake. Don't change that.\n   */\n  constructor(\n    public containers: Element[] = [],\n    public options: DragulaOptions = {},\n    public models?: any[][]\n  ) {}\n  on(event: 'drag', listener: (el: Element, source: Element) => void): Drake;\n  on(event: 'dragend', listener: (el: Element) => void): Drake;\n  on(event: 'drop', listener: (el: Element, target: Element, source: Element, sibling: Element) => void): Drake;\n  on(event: 'cancel' | 'remove' | 'shadow' | 'over' | 'out', listener: (el: Element, container: Element, source: Element) => void): Drake;\n  on(event: 'cloned', listener: (clone: Element, original: Element, type: 'copy' | 'mirror') => void): Drake;\n  on(event: 'dropModel', listener: ([el, target, source, sibling, item, sourceModel, targetModel, sourceIndex, targetIndex,]: [Element, Element, Element, Element, any, any[], any[], number, number]) => void): Drake;\n  on(event: 'removeModel', listener: ([el, container, source, item, sourceModel, sourceIndex]: [Element, Element, Element, any, any[], number]) => void): Drake;\n  \n  on(event: string, callback: (...args: any)=> any): any {\n    this.subs.add(this.emitter$\n      .pipe(\n        filter(({ eventType }) => eventType === event)\n      )\n      .subscribe(({eventType, args} ) => {\n        if (eventType === EventTypes.Drag) {\n          const argument = Array.from(args);\n          const el = argument[0];\n          const source = argument[1];\n          //@ts-ignore\n          callback(el, source);\n          return;\n        }\n\n        if (eventType === EventTypes.Drop) {\n          const argument = Array.from(args);\n          const el = argument[0];\n          const target = argument[1];\n          const source = argument[2];\n          const sibling = argument[3];\n          //@ts-ignore\n          callback(el, target, source, sibling);\n          return;\n        }\n\n        if (eventType === EventTypes.Remove) {\n          const argument = Array.from(args);\n          const el = argument[0];\n          const container = argument[1];\n          const source = argument[2];\n          //@ts-ignore\n          callback(el, container, source);\n          return;\n        }\n        callback(args);\n      }));\n  }\n\n  /* Doesn't represent anything meaningful. */\n  dragging = false;\n\n  /* Does nothing useful. */\n  start(item: Element): any {\n    this.dragging = true;\n  }\n  /* Does nothing useful. */\n  end(): any {\n    this.dragging = false;\n  }\n  /* Does nothing useful. */\n  cancel(revert: boolean): any;\n  cancel(): any;\n  cancel(revert?: any) {\n    this.dragging = false;\n  }\n\n  /* Does nothing useful. */\n  canMove(item: Element) {\n    return this.options.accepts ? this.options.accepts(item) : false;\n  }\n\n  /* Does nothing useful. */\n  remove(): any {\n    this.dragging = false;\n  }\n\n  destroy(): any {\n    this.subs.unsubscribe();\n  }\n\n  /**\n   * This is the most useful method. You can use it to manually fire events that would normally\n   * be fired by a real drake.\n   *\n   * You're likely most interested in firing `drag`, `remove` and `drop`, the three events\n   * DragulaService uses to implement [dragulaModel].\n   *\n   * See https://github.com/bevacqua/dragula#drakeon-events for what you should emit (and in what order).\n   *\n   * (Note also, firing dropModel and removeModel won't work. You would have to mock DragulaService for that.)\n   */\n  emit(eventType: EventTypes, ...args: any[]) {\n    this.emitter$.next({ eventType, args });\n  }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.DrakeFactory","i1.DragulaService"],"mappings":"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"}