{"version":3,"file":"ng-dnd-multi-backend.mjs","sources":["../../src/preview-renderer.ts","../../src/preview.ts","../../src/module.ts","../../src/HTML5ToTouch.ts","../../public-api.ts","../../ng-dnd-multi-backend.ts"],"sourcesContent":["import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, OnDestroy } from '@angular/core';\nimport { DndService, Offset } from '@ng-dnd/core';\nimport { map } from 'rxjs/operators';\n\n/**\n * This is internal, you probably won't ever need to use it directly.\n *\n * For understanding's sake, it helps to know that this component\n * essentially just renders whatever is placed between its tags, but\n * in a `position: fixed` container that is translated according to\n * the drag in progress and how far it has travelled.\n */\n@Component({\n  selector: 'dnd-preview-renderer',\n  template: `\n    <div [style]=\"style$ | async\">\n      <ng-content />\n    </div>\n  `,\n  styles: `\n    :host {\n      display: block;\n      position: fixed;\n      pointer-events: none;\n      z-index: 100;\n      left: 0;\n      top: 0;\n      width: 100%;\n      height: 100%;\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AsyncPipe],\n})\nexport class DndPreviewRenderer implements OnDestroy {\n  private dnd = inject(DndService);\n\n  /** @ignore */\n  private layer = this.dnd.dragLayer();\n\n  /** @ignore */\n  collect$ = this.layer.listen(monitor => ({\n    initialOffset: monitor.getInitialSourceClientOffset() as Offset,\n    currentOffset: monitor.getSourceClientOffset(),\n  }));\n\n  /** @ignore */\n  style$ = this.collect$.pipe(\n    map(c => {\n      const { initialOffset, currentOffset } = c;\n\n      if (!initialOffset || !currentOffset) {\n        return {\n          display: 'none',\n        };\n      }\n\n      const { x, y } = currentOffset;\n\n      const transform = `translate(${x}px, ${y}px)`;\n      return {\n        transform,\n        WebkitTransform: transform,\n      };\n    })\n  );\n\n  /** @ignore */\n  ngOnDestroy() {\n    this.layer.unsubscribe();\n  }\n}\n","import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  TemplateRef,\n} from '@angular/core';\nimport { DndService, DRAG_DROP_MANAGER } from '@ng-dnd/core';\nimport { Identifier } from 'dnd-core';\nimport { MultiBackendSwitcher, PreviewListener } from 'dnd-multi-backend';\nimport { BehaviorSubject } from 'rxjs';\nimport { DndPreviewRenderer } from './preview-renderer';\n\nexport interface PreviewTemplateContext {\n  /** same as type */\n  $implicit: Identifier;\n  type: Identifier;\n  item: any;\n}\n\n/**\n * If you pass an `<ng-template let-type let-item=\"item\">` to `<dnd-preview>` as a child,\n * then that template will be rendered so as to follow the mouse around while dragging.\n * What you put in that template is up to you, but in most cases this will be:\n *\n * ```html\n * <dnd-preview>\n *   <ng-template let-type let-item=\"item\">\n *     <ng-content [ngSwitch]=\"type\">\n *       <!-- one kind of preview per type, using *ngSwitchCase=\"'TYPE'\" -->\n *       <div *ngSwitchCase=\"'TYPE'\">{{ item | json }}</div>\n *     </ng-content>\n *   </ng-template>\n * </dnd-preview>\n * ```\n */\n@Component({\n  selector: 'dnd-preview',\n  template: `\n    @if (previewEnabled$ | async) {\n      @if (collect$ | async; as c) {\n        <dnd-preview-renderer>\n          @if (c.isDragging) {\n            <ng-container\n              *ngTemplateOutlet=\"\n                content;\n                context: { $implicit: c.itemType, type: c.itemType, item: c.item }\n              \"\n            />\n          }\n        </dnd-preview-renderer>\n      }\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AsyncPipe, NgTemplateOutlet, DndPreviewRenderer],\n})\nexport class DndPreview implements PreviewListener, OnInit, OnDestroy {\n  private dnd = inject(DndService);\n  private manager = inject(DRAG_DROP_MANAGER);\n\n  /** Disables the check for whether the current MultiBackend wants the preview enabled */\n  @Input() allBackends = false;\n\n  /** @ignore */\n  @ContentChild(TemplateRef, { static: false })\n  content!: TemplateRef<PreviewTemplateContext>;\n\n  /** @ignore */\n  private layer = this.dnd.dragLayer();\n\n  /** @ignore */\n  previewEnabled$ = new BehaviorSubject(false);\n\n  // we don't need all the fast-moving props here, so this optimises change detection\n  // on the projected template's inputs (i.e. the context).\n  // the fast-moving stuff is contained in the preview renderer.\n  // also, we include this.isPreviewEnabled() because in this component with OnPush,\n  // a plain getter isn't checked more than once, and this forces it to be called on each event.\n  /** @ignore */\n  collect$ = this.layer.listen(monitor => ({\n    item: monitor.getItem(),\n    itemType: monitor.getItemType(),\n    isDragging: monitor.isDragging(),\n  }));\n\n  /** @ignore */\n  warned = false;\n\n  /** @ignore */\n  constructor() {\n    if (this.manager == null) {\n      this.warn('no drag and drop manager defined, are you sure you imported DndModule?');\n    } else {\n      (this.manager.getBackend() as MultiBackendSwitcher).previewsList()?.register(this);\n    }\n  }\n\n  /** @ignore */\n  ngOnInit() {\n    // Have to do this after allBackends receives its value.\n    this.backendChanged(this.manager.getBackend() as MultiBackendSwitcher);\n  }\n\n  /** @ignore */\n  backendChanged(backend: MultiBackendSwitcher) {\n    this.previewEnabled$.next(this.isPreviewEnabled(backend));\n  }\n\n  /** @ignore */\n  ngOnDestroy() {\n    this.layer.unsubscribe();\n    (this.manager.getBackend() as MultiBackendSwitcher).previewsList()?.unregister(this);\n  }\n\n  /** @ignore */\n  warn(msg: string) {\n    if (!this.warned) {\n      console.warn(msg);\n    }\n    this.warned = true;\n  }\n\n  /** @ignore */\n  isPreviewEnabled(backend: MultiBackendSwitcher) {\n    if (this.allBackends) {\n      return true;\n    }\n    if (backend == null) {\n      this.warn(\n        'no drag and drop backend defined, are you sure you imported DndModule.forRoot(backend)?'\n      );\n      return false;\n    }\n    // for when you are not using dnd-multi-backend\n    if (typeof backend.previewEnabled !== 'function') {\n      return true;\n    }\n    return backend.previewEnabled();\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { DndPreview } from './preview';\nimport { DndPreviewRenderer } from './preview-renderer';\n\n/** @ignore */\nconst EXPORTS = [DndPreview, DndPreviewRenderer];\n\n@NgModule({\n  imports: EXPORTS,\n  exports: EXPORTS,\n})\nexport class DndMultiBackendModule {}\n","import { MultiBackendOptions, PointerTransition, TouchTransition } from 'dnd-multi-backend';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { TouchBackend } from 'react-dnd-touch-backend';\n\nexport const HTML5ToTouch: MultiBackendOptions = {\n  backends: [\n    {\n      id: 'html5',\n      backend: HTML5Backend,\n      transition: PointerTransition,\n    },\n    {\n      id: 'touch',\n      backend: TouchBackend,\n      options: {\n        enableMouseEvents: true,\n      },\n      preview: true,\n      transition: TouchTransition,\n    },\n  ],\n};\n","// TODO: move this to another package, in the `dnd-multi-backend` monorepo.\n\nexport {\n  HTML5DragTransition,\n  MouseTransition,\n  MultiBackend,\n  MultiBackendOptions,\n  PointerTransition,\n  TouchTransition,\n  createTransition,\n} from 'dnd-multi-backend';\nexport { HTML5Backend, HTML5BackendOptions } from 'react-dnd-html5-backend';\nexport { TouchBackend, TouchBackendOptions } from 'react-dnd-touch-backend';\n\nexport * from './src/module';\n\nexport * from './src/HTML5ToTouch';\nexport * from './src/preview';\nexport * from './src/preview-renderer';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}