{"version":3,"file":"nxt-sortablejs.mjs","sources":["../../../projects/nxt-sortablejs/src/lib/globals.ts","../../../projects/nxt-sortablejs/src/lib/sortablejs-binding.ts","../../../projects/nxt-sortablejs/src/lib/sortablejs-bindings.ts","../../../projects/nxt-sortablejs/src/lib/sortablejs.service.ts","../../../projects/nxt-sortablejs/src/lib/sortablejs.directive.ts","../../../projects/nxt-sortablejs/src/lib/sortablejs.module.ts","../../../projects/nxt-sortablejs/src/nxt-sortablejs.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\nimport {Options} from 'sortablejs';\n\nexport const GLOBALS: InjectionToken<Options> = new InjectionToken('Global config for sortablejs');\n","import {SortableData} from './sortablejs.directive';\n\nexport class SortablejsBinding {\n\n  constructor(private target: SortableData) {\n  }\n\n  insert(index: number, item: any) {\n    if (this.isFormArray) {\n      this.target.insert(index, item);\n    } else {\n      this.target.splice(index, 0, item);\n    }\n  }\n\n  get(index: number) {\n    return this.isFormArray ? this.target.at(index) : this.target[index];\n  }\n\n  remove(index: number) {\n    let item;\n\n    if (this.isFormArray) {\n      item = this.target.at(index);\n      this.target.removeAt(index);\n    } else {\n      item = this.target.splice(index, 1)[0];\n    }\n\n    return item;\n  }\n\n  // we need this to identify that the target is a FormArray\n  // we don't want to have a dependency on @angular/forms just for that\n  private get isFormArray() {\n    // just checking for random FormArray methods not available on a standard array\n    return !!this.target.at && !!this.target.insert && !!this.target.reset;\n  }\n\n}\n","import { SortablejsBinding } from './sortablejs-binding';\nimport {SortableData} from './sortablejs.directive';\n\nexport class SortablejsBindings {\n\n  bindings: SortablejsBinding[];\n\n  constructor(bindingTargets: SortableData[]) {\n    this.bindings = bindingTargets.map(target => new SortablejsBinding(target));\n  }\n\n  injectIntoEvery(index: number, items: any[]) {\n    this.bindings.forEach((b, i) => b.insert(index, items[i]));\n  }\n\n  getFromEvery(index: number) {\n    return this.bindings.map(b => b.get(index));\n  }\n\n  extractFromEvery(index: number) {\n    return this.bindings.map(b => b.remove(index));\n  }\n\n  get provided() {\n    return !!this.bindings.length;\n  }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SortablejsService {\n\n  // original library calls the events in unnatural order\n  // first the item is added, then removed from the previous array\n  // this is a temporary event to work this around\n  // as long as only one sortable takes place at a certain time\n  // this is enough to have a single `global` event\n  transfer: (items: any[]) => void;\n\n}\n","import {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n  Renderer2,\n  SimpleChange,\n} from \"@angular/core\";\nimport Sortable, { Options } from \"sortablejs\";\nimport { GLOBALS } from \"./globals\";\nimport { SortablejsBindings } from \"./sortablejs-bindings\";\nimport { SortablejsService } from \"./sortablejs.service\";\n\nexport type SortableData = any | any[];\n\nconst getIndexesFromEvent = (event: SortableEvent) => {\n  if (\n    event.hasOwnProperty(\"newDraggableIndex\") &&\n    event.hasOwnProperty(\"oldDraggableIndex\")\n  ) {\n    return {\n      new: event.newDraggableIndex,\n      old: event.oldDraggableIndex,\n    };\n  } else {\n    return {\n      new: event.newIndex,\n      old: event.oldIndex,\n    };\n  }\n};\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: \"[sortablejs]\",\n})\nexport class SortablejsDirective implements OnInit, OnChanges, OnDestroy {\n  @Input()\n  sortablejs: SortableData; // array or a FormArray\n\n  @Input()\n  sortablejsContainer: string;\n\n  @Input()\n  sortablejsOptions: Options;\n\n  @Input()\n  sortablejsCloneFunction: (item: any) => any;\n\n  @Output() sortablejsInit = new EventEmitter();\n\n  private sortableInstance: any;\n\n  constructor(\n    @Optional() @Inject(GLOBALS) private globalConfig: Options,\n    private service: SortablejsService,\n    private element: ElementRef,\n    private zone: NgZone,\n    private renderer: Renderer2\n  ) {}\n\n  ngOnInit() {\n    if (Sortable && Sortable.create) {\n      // Sortable does not exist in angular universal (SSR)\n      this.zone.runOutsideAngular(() => {\n        this.create();\n      });\n    }\n  }\n\n  ngOnChanges(changes: { [prop in keyof SortablejsDirective]: SimpleChange }) {\n    const optionsChange: SimpleChange = changes.sortablejsOptions;\n\n    if (optionsChange && !optionsChange.isFirstChange()) {\n      const previousOptions: Options = optionsChange.previousValue;\n      const currentOptions: Options = optionsChange.currentValue;\n\n      Object.keys(currentOptions).forEach((optionName) => {\n        if (currentOptions[optionName] !== previousOptions[optionName]) {\n          // use low-level option setter\n          this.sortableInstance.option(optionName, this.options[optionName]);\n        }\n      });\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.sortableInstance) {\n      this.sortableInstance.destroy();\n    }\n  }\n\n  private create() {\n    const container = this.sortablejsContainer\n      ? this.element.nativeElement.querySelector(this.sortablejsContainer)\n      : this.element.nativeElement;\n\n    setTimeout(() => {\n      this.sortableInstance = Sortable.create(container, this.options);\n      this.sortablejsInit.emit(this.sortableInstance);\n    }, 0);\n  }\n\n  private getBindings(): SortablejsBindings {\n    if (!this.sortablejs) {\n      return new SortablejsBindings([]);\n    } else if (this.sortablejs instanceof SortablejsBindings) {\n      return this.sortablejs;\n    } else {\n      return new SortablejsBindings([this.sortablejs]);\n    }\n  }\n\n  private get options() {\n    return { ...this.optionsWithoutEvents, ...this.overridenOptions };\n  }\n\n  private get optionsWithoutEvents() {\n    return { ...(this.globalConfig || {}), ...(this.sortablejsOptions || {}) };\n  }\n\n  private proxyEvent(eventName: string, ...params: any[]) {\n    this.zone.run(() => {\n      // re-entering zone, see https://github.com/SortableJS/angular-sortablejs/issues/110#issuecomment-408874600\n      if (this.optionsWithoutEvents && this.optionsWithoutEvents[eventName]) {\n        this.optionsWithoutEvents[eventName](...params);\n      }\n    });\n  }\n\n  private get isCloning() {\n    return (\n      this.sortableInstance.options.group.checkPull(\n        this.sortableInstance,\n        this.sortableInstance\n      ) === \"clone\"\n    );\n  }\n\n  private clone<T>(item: T): T {\n    // by default pass the item through, no cloning performed\n    return (this.sortablejsCloneFunction || ((subitem) => subitem))(item);\n  }\n\n  private get overridenOptions(): Options {\n    // always intercept standard events but act only in case items are set (bindingEnabled)\n    // allows to forget about tracking this.items changes\n    return {\n      onAdd: (event: SortableEvent) => {\n        this.service.transfer = (items: any[]) => {\n          this.getBindings().injectIntoEvery(event.newIndex, items);\n          this.proxyEvent(\"onAdd\", event);\n        };\n\n        this.proxyEvent(\"onAddOriginal\", event);\n      },\n      onRemove: (event: SortableEvent) => {\n        const bindings = this.getBindings();\n\n        if (bindings.provided) {\n          if (this.isCloning) {\n            this.service.transfer(\n              bindings\n                .getFromEvery(event.oldIndex)\n                .map((item) => this.clone(item))\n            );\n\n            // great thanks to https://github.com/tauu\n            // event.item is the original item from the source list which is moved to the target list\n            // event.clone is a clone of the original item and will be added to source list\n            // If bindings are provided, adding the item dom element to the target list causes artifacts\n            // as it interferes with the rendering performed by the angular template.\n            // Therefore we remove it immediately and also move the original item back to the source list.\n            // (event handler may be attached to the original item and not its clone, therefore keeping\n            // the original dom node, circumvents side effects )\n            this.renderer.removeChild(event.item.parentNode, event.item);\n            this.renderer.insertBefore(\n              event.clone.parentNode,\n              event.item,\n              event.clone\n            );\n            this.renderer.removeChild(event.clone.parentNode, event.clone);\n          } else {\n            this.service.transfer(bindings.extractFromEvery(event.oldIndex));\n          }\n\n          this.service.transfer = null;\n        }\n\n        this.proxyEvent(\"onRemove\", event);\n      },\n      onUpdate: (event: SortableEvent) => {\n        const bindings = this.getBindings();\n        const indexes = getIndexesFromEvent(event);\n\n        bindings.injectIntoEvery(\n          indexes.new,\n          bindings.extractFromEvery(indexes.old)\n        );\n        this.proxyEvent(\"onUpdate\", event);\n      },\n    };\n  }\n}\n\ninterface SortableEvent {\n  oldIndex: number;\n  newIndex: number;\n  oldDraggableIndex?: number;\n  newDraggableIndex?: number;\n  item: HTMLElement;\n  clone: HTMLElement;\n}\n","import {ModuleWithProviders, NgModule} from '@angular/core';\nimport {GLOBALS} from './globals';\nimport {SortablejsDirective} from './sortablejs.directive';\nimport {Options} from 'sortablejs';\n\n@NgModule({\n  declarations: [SortablejsDirective],\n  exports: [SortablejsDirective],\n})\nexport class SortablejsModule {\n\n  public static forRoot(globalOptions: Options): ModuleWithProviders<SortablejsModule> {\n    return {\n      ngModule: SortablejsModule,\n      providers: [\n        {provide: GLOBALS, useValue: globalOptions},\n      ],\n    };\n  }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}