text: /**
   * @fileoverview added by tsickle
   * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
   */
  /**
   * @license
   * Copyright Google LLC All Rights Reserved.
   *
   * Use of this source code is governed by an MIT-style license that can be
   * found in the LICENSE file at https://angular.io/license
   */
  import { Injectable, Inject, NgZone } from '@angular/core';
  import { DOCUMENT } from '@angular/common';
  import { ViewportRuler } from '@angular/cdk/scrolling';
  import { DragRef } from './drag-ref';
  import { DropListRef } from './drop-list-ref';
  import { DragDropRegistry } from './drag-drop-registry';
  import * as i0 from "@angular/core";
  import * as i1 from "@angular/common";
  import * as i2 from "@angular/cdk/scrolling";
  import * as i3 from "./drag-drop-registry";
  /**
   * Default configuration to be used when creating a `DragRef`.
   * @type {?}
   */
  const DEFAULT_CONFIG = {
      dragStartThreshold: 5,
      pointerDirectionChangeThreshold: 5
  };
  /**
   * Service that allows for drag-and-drop functionality to be attached to DOM elements.
   */
  export class DragDrop {
      /**
       * @param {?} _document
       * @param {?} _ngZone
       * @param {?} _viewportRuler
       * @param {?} _dragDropRegistry
       */
      constructor(_document, _ngZone, _viewportRuler, _dragDropRegistry) {
          this._document = _document;
          this._ngZone = _ngZone;
          this._viewportRuler = _viewportRuler;
          this._dragDropRegistry = _dragDropRegistry;
      }
      /**
       * Turns an element into a draggable item.
       * @template T
       * @param {?} element Element to which to attach the dragging functionality.
       * @param {?=} config Object used to configure the dragging behavior.
       * @return {?}
       */
      createDrag(element, config = DEFAULT_CONFIG) {
          return new DragRef(element, config, this._document, this._ngZone, this._viewportRuler, this._dragDropRegistry);
      }
      /**
       * Turns an element into a drop list.
       * @template T
       * @param {?} element Element to which to attach the drop list functionality.
       * @return {?}
       */
      createDropList(element) {
          return new DropListRef(element, this._dragDropRegistry, this._document, this._ngZone, this._viewportRuler);
      }
  }
  DragDrop.decorators = [
      { type: Injectable, args: [{ providedIn: 'root' },] },
  ];
  /** @nocollapse */
  DragDrop.ctorParameters = () => [
      { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
      { type: NgZone },
      { type: ViewportRuler },
      { type: DragDropRegistry }
  ];
  /** @nocollapse */ DragDrop.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function DragDrop_Factory() { return new DragDrop(i0.ɵɵinject(i1.DOCUMENT), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i2.ViewportRuler), i0.ɵɵinject(i3.DragDropRegistry)); }, token: DragDrop, providedIn: "root" });
  if (false) {
      /**
       * @type {?}
       * @private
       */
      DragDrop.prototype._document;
      /**
       * @type {?}
       * @private
       */
      DragDrop.prototype._ngZone;
      /**
       * @type {?}
       * @private
       */
      DragDrop.prototype._viewportRuler;
      /**
       * @type {?}
       * @private
       */
      DragDrop.prototype._dragDropRegistry;
  }
  //# sourceMappingURL=drag-drop.js.map