{"version":3,"file":"angular2-draggable.mjs","sources":["../../../projects/angular2-draggable/src/lib/models/position.ts","../../../projects/angular2-draggable/src/lib/widgets/helper-block.ts","../../../projects/angular2-draggable/src/lib/angular-draggable.directive.ts","../../../projects/angular2-draggable/src/lib/widgets/resize-handle.ts","../../../projects/angular2-draggable/src/lib/models/size.ts","../../../projects/angular2-draggable/src/lib/angular-resizable.directive.ts","../../../projects/angular2-draggable/src/lib/angular-draggable.module.ts","../../../projects/angular2-draggable/src/public-api.ts","../../../projects/angular2-draggable/src/angular2-draggable.ts"],"sourcesContent":["export interface IPosition {\n  x: number;\n  y: number;\n}\n\nexport class Position implements IPosition {\n  constructor(public x: number, public y: number) {}\n\n  static fromEvent(e: MouseEvent | TouchEvent, el: any = null) {\n    /**\n     * Fix issue: Resize doesn't work on Windows10 IE11 (and on some windows 7 IE11)\n     * https://github.com/xieziyu/angular2-draggable/issues/164\n     * e instanceof MouseEvent check returns false on IE11\n     */\n    if (this.isMouseEvent(e)) {\n      return new Position(e.clientX, e.clientY);\n    } else {\n      if (el === null || e.changedTouches.length === 1) {\n        return new Position(e.changedTouches[0].clientX, e.changedTouches[0].clientY);\n      }\n\n      /**\n       * Fix issue: Multiple phone draggables at the same time\n       * https://github.com/xieziyu/angular2-draggable/issues/128\n       */\n      for (let i = 0; i < e.changedTouches.length; i++) {\n        if (e.changedTouches[i].target === el) {\n          return new Position(e.changedTouches[i].clientX, e.changedTouches[i].clientY);\n        }\n      }\n    }\n    return null;\n  }\n\n  static isMouseEvent(e: MouseEvent | TouchEvent): e is MouseEvent {\n    return Object.prototype.toString.apply(e).indexOf('MouseEvent') === 8;\n  }\n\n  static isIPosition(obj): obj is IPosition {\n    return !!obj && 'x' in obj && 'y' in obj;\n  }\n\n  static getCurrent(el: Element) {\n    let pos = new Position(0, 0);\n\n    if (window) {\n      const computed = window.getComputedStyle(el);\n      if (computed) {\n        let x = parseInt(computed.getPropertyValue('left'), 10);\n        let y = parseInt(computed.getPropertyValue('top'), 10);\n        pos.x = isNaN(x) ? 0 : x;\n        pos.y = isNaN(y) ? 0 : y;\n      }\n      return pos;\n    } else {\n      console.error('Not Supported!');\n      return null;\n    }\n  }\n\n  static copy(p: IPosition) {\n    return new Position(0, 0).set(p);\n  }\n\n  get value(): IPosition {\n    return { x: this.x, y: this.y };\n  }\n\n  add(p: IPosition) {\n    this.x += p.x;\n    this.y += p.y;\n    return this;\n  }\n\n  subtract(p: IPosition) {\n    this.x -= p.x;\n    this.y -= p.y;\n    return this;\n  }\n\n  multiply(n: number) {\n    this.x *= n;\n    this.y *= n;\n  }\n\n  divide(n: number) {\n    this.x /= n;\n    this.y /= n;\n  }\n\n  reset() {\n    this.x = 0;\n    this.y = 0;\n    return this;\n  }\n\n  set(p: IPosition) {\n    this.x = p.x;\n    this.y = p.y;\n    return this;\n  }\n}\n","import { Renderer2 } from '@angular/core';\n\nexport class HelperBlock {\n  protected _helper: Element;\n  private _added = false;\n\n  constructor(protected parent: Element, protected renderer: Renderer2) {\n    // generate helper div\n    let helper = renderer.createElement('div');\n    renderer.setStyle(helper, 'position', 'absolute');\n    renderer.setStyle(helper, 'width', '100%');\n    renderer.setStyle(helper, 'height', '100%');\n    renderer.setStyle(helper, 'background-color', 'transparent');\n    renderer.setStyle(helper, 'top', '0');\n    renderer.setStyle(helper, 'left', '0');\n\n    // done\n    this._helper = helper;\n  }\n\n  add() {\n    // append div to parent\n    if (this.parent && !this._added) {\n      this.parent.appendChild(this._helper);\n      this._added = true;\n    }\n  }\n\n  remove() {\n    if (this.parent && this._added) {\n      this.parent.removeChild(this._helper);\n      this._added = false;\n    }\n  }\n\n  dispose() {\n    this._helper = null;\n    this._added = false;\n  }\n\n  get el() {\n    return this._helper;\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  Renderer2,\n  Input,\n  Output,\n  OnInit,\n  HostListener,\n  EventEmitter,\n  OnChanges,\n  SimpleChanges,\n  OnDestroy,\n  AfterViewInit,\n} from '@angular/core';\n\nimport { Subscription, fromEvent } from 'rxjs';\nimport { IPosition, Position } from './models/position';\nimport { HelperBlock } from './widgets/helper-block';\n\n@Directive({\n  selector: '[ngDraggable]',\n  exportAs: 'ngDraggable',\n})\nexport class AngularDraggableDirective implements OnInit, OnDestroy, OnChanges, AfterViewInit {\n  private allowDrag = true;\n  private moving = false;\n  private orignal: Position = null;\n  private oldTrans = new Position(0, 0);\n  private tempTrans = new Position(0, 0);\n  private currTrans = new Position(0, 0);\n  private oldZIndex = '';\n  private _zIndex = '';\n  private needTransform = false;\n\n  private draggingSub: Subscription = null;\n\n  /**\n   * Bugfix: iFrames, and context unrelated elements block all events, and are unusable\n   * https://github.com/xieziyu/angular2-draggable/issues/84\n   */\n  private _helperBlock: HelperBlock = null;\n\n  @Output() started = new EventEmitter<any>();\n  @Output() stopped = new EventEmitter<any>();\n  @Output() edge = new EventEmitter<any>();\n\n  /** Make the handle HTMLElement draggable */\n  @Input() handle: HTMLElement;\n\n  /** Set the bounds HTMLElement */\n  @Input() bounds: HTMLElement;\n\n  /** List of allowed out of bounds edges **/\n  @Input() outOfBounds = {\n    top: false,\n    right: false,\n    bottom: false,\n    left: false,\n  };\n\n  /** Round the position to nearest grid */\n  @Input() gridSize = 1;\n\n  /** Set z-index when dragging */\n  @Input() zIndexMoving: string;\n\n  /** Set z-index when not dragging */\n  @Input() set zIndex(setting: string) {\n    this.renderer.setStyle(this.el.nativeElement, 'z-index', setting);\n    this._zIndex = setting;\n  }\n  /** Whether to limit the element stay in the bounds */\n  @Input() inBounds = false;\n\n  /** Whether the element should use it's previous drag position on a new drag event. */\n  @Input() trackPosition = true;\n\n  /** Input css scale transform of element so translations are correct */\n  @Input() scale = 1;\n\n  /** Whether to prevent default event */\n  @Input() preventDefaultEvent = false;\n\n  /** Set initial position by offsets */\n  @Input() position: IPosition = { x: 0, y: 0 };\n\n  /** Lock axis: 'x' or 'y' */\n  @Input() lockAxis: string = null;\n\n  /** Emit position offsets when moving */\n  @Output() movingOffset = new EventEmitter<IPosition>();\n\n  /** Emit position offsets when put back */\n  @Output() endOffset = new EventEmitter<IPosition>();\n\n  @Input()\n  set ngDraggable(setting: any) {\n    if (setting !== undefined && setting !== null && setting !== '') {\n      this.allowDrag = !!setting;\n\n      let element = this.getDragEl();\n\n      if (this.allowDrag) {\n        this.renderer.addClass(element, 'ng-draggable');\n      } else {\n        this.putBack();\n        this.renderer.removeClass(element, 'ng-draggable');\n      }\n    }\n  }\n\n  constructor(private el: ElementRef, private renderer: Renderer2) {\n    this._helperBlock = new HelperBlock(el.nativeElement, renderer);\n  }\n\n  ngOnInit() {\n    if (this.allowDrag) {\n      let element = this.getDragEl();\n      this.renderer.addClass(element, 'ng-draggable');\n    }\n    this.resetPosition();\n  }\n\n  ngOnDestroy() {\n    this.bounds = null;\n    this.handle = null;\n    this.orignal = null;\n    this.oldTrans = null;\n    this.tempTrans = null;\n    this.currTrans = null;\n    this._helperBlock.dispose();\n    this._helperBlock = null;\n\n    if (this.draggingSub) {\n      this.draggingSub.unsubscribe();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['position'] && !changes['position'].isFirstChange()) {\n      let p = changes['position'].currentValue;\n\n      if (!this.moving) {\n        if (Position.isIPosition(p)) {\n          this.oldTrans.set(p);\n        } else {\n          this.oldTrans.reset();\n        }\n\n        this.transform();\n      } else {\n        this.needTransform = true;\n      }\n    }\n  }\n\n  ngAfterViewInit() {\n    if (this.inBounds) {\n      this.boundsCheck();\n      this.oldTrans.add(this.tempTrans);\n      this.tempTrans.reset();\n    }\n  }\n\n  private getDragEl() {\n    return this.handle ? this.handle : this.el.nativeElement;\n  }\n\n  resetPosition() {\n    if (Position.isIPosition(this.position)) {\n      this.oldTrans.set(this.position);\n    } else {\n      this.oldTrans.reset();\n    }\n    this.tempTrans.reset();\n    this.transform();\n  }\n\n  private moveTo(p: Position) {\n    if (this.orignal) {\n      p.subtract(this.orignal);\n      this.tempTrans.set(p);\n      this.tempTrans.divide(this.scale);\n      this.transform();\n\n      if (this.bounds) {\n        let edgeEv = this.boundsCheck();\n        if (edgeEv) {\n          this.edge.emit(edgeEv);\n        }\n      }\n\n      this.movingOffset.emit(this.currTrans.value);\n    }\n  }\n\n  private transform() {\n    let translateX = this.tempTrans.x + this.oldTrans.x;\n    let translateY = this.tempTrans.y + this.oldTrans.y;\n\n    if (this.lockAxis === 'x') {\n      translateX = this.oldTrans.x;\n      this.tempTrans.x = 0;\n    } else if (this.lockAxis === 'y') {\n      translateY = this.oldTrans.y;\n      this.tempTrans.y = 0;\n    }\n\n    // Snap to grid: by grid size\n    if (this.gridSize > 1) {\n      translateX = Math.round(translateX / this.gridSize) * this.gridSize;\n      translateY = Math.round(translateY / this.gridSize) * this.gridSize;\n    }\n\n    let value = `translate(${Math.round(translateX)}px, ${Math.round(translateY)}px)`;\n\n    this.renderer.setStyle(this.el.nativeElement, 'transform', value);\n    this.renderer.setStyle(this.el.nativeElement, '-webkit-transform', value);\n    this.renderer.setStyle(this.el.nativeElement, '-ms-transform', value);\n    this.renderer.setStyle(this.el.nativeElement, '-moz-transform', value);\n    this.renderer.setStyle(this.el.nativeElement, '-o-transform', value);\n\n    // save current position\n    this.currTrans.x = translateX;\n    this.currTrans.y = translateY;\n  }\n\n  private pickUp() {\n    // get old z-index:\n    this.oldZIndex = this.el.nativeElement.style.zIndex ? this.el.nativeElement.style.zIndex : '';\n\n    if (window) {\n      this.oldZIndex = window\n        .getComputedStyle(this.el.nativeElement, null)\n        .getPropertyValue('z-index');\n    }\n\n    if (this.zIndexMoving) {\n      this.renderer.setStyle(this.el.nativeElement, 'z-index', this.zIndexMoving);\n    }\n\n    if (!this.moving) {\n      this.started.emit(this.el.nativeElement);\n      this.moving = true;\n\n      const element = this.getDragEl();\n      this.renderer.addClass(element, 'ng-dragging');\n\n      /**\n       * Fix performance issue:\n       * https://github.com/xieziyu/angular2-draggable/issues/112\n       */\n      this.subscribeEvents();\n    }\n  }\n\n  private subscribeEvents() {\n    this.draggingSub = fromEvent(document, 'mousemove', { passive: false }).subscribe(event =>\n      this.onMouseMove(event as MouseEvent)\n    );\n    this.draggingSub.add(\n      fromEvent(document, 'touchmove', { passive: false }).subscribe(event =>\n        this.onMouseMove(event as TouchEvent)\n      )\n    );\n    this.draggingSub.add(\n      fromEvent(document, 'mouseup', { passive: false }).subscribe(() => this.putBack())\n    );\n    // checking if browser is IE or Edge - https://github.com/xieziyu/angular2-draggable/issues/153\n    let isIEOrEdge = /msie\\s|trident\\//i.test(window.navigator.userAgent);\n    if (!isIEOrEdge) {\n      this.draggingSub.add(\n        fromEvent(document, 'mouseleave', { passive: false }).subscribe(() => this.putBack())\n      );\n    }\n    this.draggingSub.add(\n      fromEvent(document, 'touchend', { passive: false }).subscribe(() => this.putBack())\n    );\n    this.draggingSub.add(\n      fromEvent(document, 'touchcancel', { passive: false }).subscribe(() => this.putBack())\n    );\n  }\n\n  private unsubscribeEvents() {\n    this.draggingSub.unsubscribe();\n    this.draggingSub = null;\n  }\n\n  boundsCheck() {\n    if (this.bounds) {\n      let boundary = this.bounds.getBoundingClientRect();\n      let elem = this.el.nativeElement.getBoundingClientRect();\n      let result = {\n        top: this.outOfBounds.top ? true : boundary.top < elem.top,\n        right: this.outOfBounds.right ? true : boundary.right > elem.right,\n        bottom: this.outOfBounds.bottom ? true : boundary.bottom > elem.bottom,\n        left: this.outOfBounds.left ? true : boundary.left < elem.left,\n      };\n\n      if (this.inBounds) {\n        if (!result.top) {\n          this.tempTrans.y -= (elem.top - boundary.top) / this.scale;\n        }\n\n        if (!result.bottom) {\n          this.tempTrans.y -= (elem.bottom - boundary.bottom) / this.scale;\n        }\n\n        if (!result.right) {\n          this.tempTrans.x -= (elem.right - boundary.right) / this.scale;\n        }\n\n        if (!result.left) {\n          this.tempTrans.x -= (elem.left - boundary.left) / this.scale;\n        }\n\n        this.transform();\n      }\n\n      return result;\n    }\n    return null;\n  }\n\n  /** Get current offset */\n  getCurrentOffset() {\n    return this.currTrans.value;\n  }\n\n  private putBack() {\n    if (this._zIndex) {\n      this.renderer.setStyle(this.el.nativeElement, 'z-index', this._zIndex);\n    } else if (this.zIndexMoving) {\n      if (this.oldZIndex) {\n        this.renderer.setStyle(this.el.nativeElement, 'z-index', this.oldZIndex);\n      } else {\n        this.el.nativeElement.style.removeProperty('z-index');\n      }\n    }\n\n    if (this.moving) {\n      this.stopped.emit(this.el.nativeElement);\n\n      // Remove the helper div:\n      this._helperBlock.remove();\n\n      if (this.needTransform) {\n        if (Position.isIPosition(this.position)) {\n          this.oldTrans.set(this.position);\n        } else {\n          this.oldTrans.reset();\n        }\n\n        this.transform();\n        this.needTransform = false;\n      }\n\n      if (this.bounds) {\n        let edgeEv = this.boundsCheck();\n        if (edgeEv) {\n          this.edge.emit(edgeEv);\n        }\n      }\n\n      this.moving = false;\n      this.endOffset.emit(this.currTrans.value);\n\n      if (this.trackPosition) {\n        this.oldTrans.add(this.tempTrans);\n      }\n\n      this.tempTrans.reset();\n\n      if (!this.trackPosition) {\n        this.transform();\n      }\n\n      const element = this.getDragEl();\n      this.renderer.removeClass(element, 'ng-dragging');\n\n      /**\n       * Fix performance issue:\n       * https://github.com/xieziyu/angular2-draggable/issues/112\n       */\n      this.unsubscribeEvents();\n    }\n  }\n\n  checkHandleTarget(target: EventTarget, element: Element) {\n    // Checks if the target is the element clicked, then checks each child element of element as well\n    // Ignores button clicks\n\n    // Ignore elements of type button\n    if (element.tagName === 'BUTTON') {\n      return false;\n    }\n\n    // If the target was found, return true (handle was found)\n    if (element === target) {\n      return true;\n    }\n\n    // Recursively iterate this elements children\n    for (let child in element.children) {\n      if (element.children.hasOwnProperty(child)) {\n        if (this.checkHandleTarget(target, element.children[child])) {\n          return true;\n        }\n      }\n    }\n\n    // Handle was not found in this lineage\n    // Note: return false is ignore unless it is the parent element\n    return false;\n  }\n\n  @HostListener('mousedown', ['$event'])\n  @HostListener('touchstart', ['$event'])\n  onMouseDown(event: MouseEvent | TouchEvent) {\n    // 1. skip right click;\n    if (event instanceof MouseEvent && event.button === 2) {\n      return;\n    }\n    // 2. if handle is set, the element can only be moved by handle\n    let target = event.target || event.srcElement;\n    if (this.handle !== undefined && !this.checkHandleTarget(target, this.handle)) {\n      return;\n    }\n\n    // 3. if allow drag is set to false, ignore the mousedown\n    if (this.allowDrag === false) {\n      return;\n    }\n\n    if (this.preventDefaultEvent) {\n      event.stopPropagation();\n      event.preventDefault();\n    }\n\n    this.orignal = Position.fromEvent(event, this.getDragEl());\n    this.pickUp();\n  }\n\n  onMouseMove(event: MouseEvent | TouchEvent) {\n    if (this.moving && this.allowDrag) {\n      if (this.preventDefaultEvent) {\n        event.stopPropagation();\n        event.preventDefault();\n      }\n\n      // Add a transparent helper div:\n      this._helperBlock.add();\n      this.moveTo(Position.fromEvent(event, this.getDragEl()));\n    }\n  }\n}\n","import { Renderer2 } from '@angular/core';\n\nexport class ResizeHandle {\n  protected _handle: Element;\n  private _onResize;\n\n  constructor(\n    protected parent: Element,\n    protected renderer: Renderer2,\n    public type: string,\n    public css: string,\n    private onMouseDown: any,\n    private existHandle?: Element\n  ) {\n    // generate handle div or using exist handle\n    let handle = this.existHandle || renderer.createElement('div');\n    renderer.addClass(handle, 'ng-resizable-handle');\n    renderer.addClass(handle, css);\n\n    // add default diagonal for se handle\n    if (type === 'se') {\n      renderer.addClass(handle, 'ng-resizable-diagonal');\n    }\n\n    // append div to parent\n    if (this.parent && !this.existHandle) {\n      parent.appendChild(handle);\n    }\n\n    // create and register event listener\n    this._onResize = event => {\n      onMouseDown(event, this);\n    };\n    handle.addEventListener('mousedown', this._onResize, { passive: false });\n    handle.addEventListener('touchstart', this._onResize, { passive: false });\n\n    // done\n    this._handle = handle;\n  }\n\n  dispose() {\n    this._handle.removeEventListener('mousedown', this._onResize);\n    this._handle.removeEventListener('touchstart', this._onResize);\n\n    if (this.parent && !this.existHandle) {\n      this.parent.removeChild(this._handle);\n    }\n    this._handle = null;\n    this._onResize = null;\n  }\n\n  get el() {\n    return this._handle;\n  }\n}\n","export interface ISize {\n  width: number;\n  height: number;\n}\n\nexport class Size implements ISize {\n  constructor(public width: number, public height: number) {}\n\n  static getCurrent(el: Element) {\n    let size = new Size(0, 0);\n\n    if (window) {\n      const computed = window.getComputedStyle(el);\n      if (computed) {\n        size.width = parseInt(computed.getPropertyValue('width'), 10);\n        size.height = parseInt(computed.getPropertyValue('height'), 10);\n      }\n      return size;\n    } else {\n      console.error('Not Supported!');\n      return null;\n    }\n  }\n\n  static copy(s: Size) {\n    return new Size(0, 0).set(s);\n  }\n\n  set(s: ISize) {\n    this.width = s.width;\n    this.height = s.height;\n    return this;\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  Renderer2,\n  Input,\n  Output,\n  OnInit,\n  EventEmitter,\n  OnChanges,\n  SimpleChanges,\n  OnDestroy,\n  AfterViewInit,\n} from '@angular/core';\n\nimport { Subscription, fromEvent } from 'rxjs';\nimport { HelperBlock } from './widgets/helper-block';\nimport { ResizeHandle } from './widgets/resize-handle';\nimport { ResizeHandleType } from './models/resize-handle-type';\nimport { Position, IPosition } from './models/position';\nimport { Size } from './models/size';\nimport { IResizeEvent } from './models/resize-event';\n\n@Directive({\n  selector: '[ngResizable]',\n  exportAs: 'ngResizable',\n})\nexport class AngularResizableDirective implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n  private _resizable = true;\n  private _handles: { [key: string]: ResizeHandle } = {};\n  private _handleType: string[] = [];\n  private _handleResizing: ResizeHandle = null;\n  private _direction: { n: boolean; s: boolean; w: boolean; e: boolean } = null;\n  private _directionChanged: { n: boolean; s: boolean; w: boolean; e: boolean } = null;\n  private _aspectRatio = 0;\n  private _containment: HTMLElement = null;\n  private _origMousePos: Position = null;\n\n  /** Original Size and Position */\n  private _origSize: Size = null;\n  private _origPos: Position = null;\n\n  /** Current Size and Position */\n  private _currSize: Size = null;\n  private _currPos: Position = null;\n\n  /** Initial Size and Position */\n  private _initSize: Size = null;\n  private _initPos: Position = null;\n\n  /** Snap to gird */\n  private _gridSize: IPosition = null;\n\n  private _bounding: any = null;\n\n  /**\n   * Bugfix: iFrames, and context unrelated elements block all events, and are unusable\n   * https://github.com/xieziyu/angular2-draggable/issues/84\n   */\n  private _helperBlock: HelperBlock = null;\n\n  private draggingSub: Subscription = null;\n  private _adjusted = false;\n\n  /** Disables the resizable if set to false. */\n  @Input() set ngResizable(v: any) {\n    if (v !== undefined && v !== null && v !== '') {\n      this._resizable = !!v;\n      this.updateResizable();\n    }\n  }\n\n  /**\n   * Which handles can be used for resizing.\n   * @example\n   * [rzHandles] = \"'n,e,s,w,se,ne,sw,nw'\"\n   * equals to: [rzHandles] = \"'all'\"\n   *\n   * */\n  @Input() rzHandles: ResizeHandleType = 'e,s,se';\n\n  /**\n   * Using exist handles for resizing instead of generate them.\n   * @example\n   * [rzHandleDoms] = {\n   *   e: handelE,\n   *   s: handelS,\n   *   se: handelSE\n   * };\n   * */\n  @Input() rzHandleDoms: {\n    se?: ElementRef;\n    sw?: ElementRef;\n    ne?: ElementRef;\n    nw?: ElementRef;\n    n?: ElementRef;\n    e?: ElementRef;\n    s?: ElementRef;\n    w?: ElementRef;\n  } = {};\n\n  /**\n   * Whether the element should be constrained to a specific aspect ratio.\n   *  Multiple types supported:\n   *  boolean: When set to true, the element will maintain its original aspect ratio.\n   *  number: Force the element to maintain a specific aspect ratio during resizing.\n   */\n  @Input() rzAspectRatio: boolean | number = false;\n\n  /**\n   * Constrains resizing to within the bounds of the specified element or region.\n   *  Multiple types supported:\n   *  Selector: The resizable element will be contained to the bounding box of the first element found by the selector.\n   *            If no element is found, no containment will be set.\n   *  Element: The resizable element will be contained to the bounding box of this element.\n   *  String: Possible values: \"parent\".\n   */\n  @Input() rzContainment: string | HTMLElement = null;\n\n  /**\n   * Snaps the resizing element to a grid, every x and y pixels.\n   * A number for both width and height or an array values like [ x, y ]\n   */\n  @Input() rzGrid: number | number[] = null;\n\n  /** The minimum width the resizable should be allowed to resize to. */\n  @Input() rzMinWidth: number = null;\n\n  /** The minimum height the resizable should be allowed to resize to. */\n  @Input() rzMinHeight: number = null;\n\n  /** The maximum width the resizable should be allowed to resize to. */\n  @Input() rzMaxWidth: number = null;\n\n  /** The maximum height the resizable should be allowed to resize to. */\n  @Input() rzMaxHeight: number = null;\n\n  /** Input css scale transform of element so translations are correct */\n  @Input() rzScale = 1;\n\n  /** Whether to prevent default event */\n  @Input() preventDefaultEvent = true;\n\n  /** emitted when start resizing */\n  @Output() rzStart = new EventEmitter<IResizeEvent>();\n\n  /** emitted when start resizing */\n  @Output() rzResizing = new EventEmitter<IResizeEvent>();\n\n  /** emitted when stop resizing */\n  @Output() rzStop = new EventEmitter<IResizeEvent>();\n\n  constructor(private el: ElementRef<HTMLElement>, private renderer: Renderer2) {\n    this._helperBlock = new HelperBlock(el.nativeElement, renderer);\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['rzHandles'] && !changes['rzHandles'].isFirstChange()) {\n      this.updateResizable();\n    }\n\n    if (changes['rzAspectRatio'] && !changes['rzAspectRatio'].isFirstChange()) {\n      this.updateAspectRatio();\n    }\n\n    if (changes['rzContainment'] && !changes['rzContainment'].isFirstChange()) {\n      this.updateContainment();\n    }\n  }\n\n  ngOnInit() {\n    this.updateResizable();\n  }\n\n  ngOnDestroy() {\n    this.removeHandles();\n    this._containment = null;\n    this._helperBlock.dispose();\n    this._helperBlock = null;\n  }\n\n  ngAfterViewInit() {\n    const elm = this.el.nativeElement;\n    this._initSize = Size.getCurrent(elm);\n    this._initPos = Position.getCurrent(elm);\n    this._currSize = Size.copy(this._initSize);\n    this._currPos = Position.copy(this._initPos);\n    this.updateAspectRatio();\n    this.updateContainment();\n  }\n\n  /** A method to reset size */\n  public resetSize() {\n    this._currSize = Size.copy(this._initSize);\n    this._currPos = Position.copy(this._initPos);\n    this.doResize();\n  }\n\n  /** A method to get current status */\n  public getStatus() {\n    if (!this._currPos || !this._currSize) {\n      return null;\n    }\n\n    return {\n      size: {\n        width: this._currSize.width,\n        height: this._currSize.height,\n      },\n      position: {\n        top: this._currPos.y,\n        left: this._currPos.x,\n      },\n    };\n  }\n\n  private updateResizable() {\n    const element = this.el.nativeElement;\n\n    // clear handles:\n    this.renderer.removeClass(element, 'ng-resizable');\n    this.removeHandles();\n\n    // create new ones:\n    if (this._resizable) {\n      this.renderer.addClass(element, 'ng-resizable');\n      this.createHandles();\n    }\n  }\n\n  /** Use it to update aspect */\n  private updateAspectRatio() {\n    if (typeof this.rzAspectRatio === 'boolean') {\n      if (this.rzAspectRatio && this._currSize.height) {\n        this._aspectRatio = this._currSize.width / this._currSize.height;\n      } else {\n        this._aspectRatio = 0;\n      }\n    } else {\n      let r = Number(this.rzAspectRatio);\n      this._aspectRatio = isNaN(r) ? 0 : r;\n    }\n  }\n\n  /** Use it to update containment */\n  private updateContainment() {\n    if (!this.rzContainment) {\n      this._containment = null;\n      return;\n    }\n\n    if (typeof this.rzContainment === 'string') {\n      if (this.rzContainment === 'parent') {\n        this._containment = this.el.nativeElement.parentElement;\n      } else {\n        this._containment = document.querySelector<HTMLElement>(this.rzContainment);\n      }\n    } else {\n      this._containment = this.rzContainment;\n    }\n  }\n\n  /** Use it to create handle divs */\n  private createHandles() {\n    if (!this.rzHandles) {\n      return;\n    }\n\n    let tmpHandleTypes: string[];\n    if (typeof this.rzHandles === 'string') {\n      if (this.rzHandles === 'all') {\n        tmpHandleTypes = ['n', 'e', 's', 'w', 'ne', 'se', 'nw', 'sw'];\n      } else {\n        tmpHandleTypes = this.rzHandles.replace(/ /g, '').toLowerCase().split(',');\n      }\n\n      for (let type of tmpHandleTypes) {\n        // default handle theme: ng-resizable-$type.\n        let handle = this.createHandleByType(type, `ng-resizable-${type}`);\n        if (handle) {\n          this._handleType.push(type);\n          this._handles[type] = handle;\n        }\n      }\n    } else {\n      tmpHandleTypes = Object.keys(this.rzHandles);\n      for (let type of tmpHandleTypes) {\n        // custom handle theme.\n        let handle = this.createHandleByType(type, this.rzHandles[type]);\n        if (handle) {\n          this._handleType.push(type);\n          this._handles[type] = handle;\n        }\n      }\n    }\n  }\n\n  /** Use it to create a handle */\n  private createHandleByType(type: string, css: string): ResizeHandle {\n    const _el = this.el.nativeElement;\n    const _h = this.rzHandleDoms[type] ? this.rzHandleDoms[type].nativeElement : null;\n\n    if (!type.match(/^(se|sw|ne|nw|n|e|s|w)$/)) {\n      console.error('Invalid handle type:', type);\n      return null;\n    }\n\n    return new ResizeHandle(_el, this.renderer, type, css, this.onMouseDown.bind(this), _h);\n  }\n\n  private removeHandles() {\n    for (let type of this._handleType) {\n      this._handles[type].dispose();\n    }\n\n    this._handleType = [];\n    this._handles = {};\n  }\n\n  onMouseDown(event: MouseEvent | TouchEvent, handle: ResizeHandle) {\n    // skip right click;\n    if (event instanceof MouseEvent && event.button === 2) {\n      return;\n    }\n\n    if (this.preventDefaultEvent) {\n      // prevent default events\n      event.stopPropagation();\n      event.preventDefault();\n    }\n\n    if (!this._handleResizing) {\n      this._origMousePos = Position.fromEvent(event);\n      this.startResize(handle);\n\n      this.subscribeEvents();\n    }\n  }\n\n  private subscribeEvents() {\n    this.draggingSub = fromEvent(document, 'mousemove', { passive: false }).subscribe(event =>\n      this.onMouseMove(event as MouseEvent)\n    );\n    this.draggingSub.add(\n      fromEvent(document, 'touchmove', { passive: false }).subscribe(event =>\n        this.onMouseMove(event as TouchEvent)\n      )\n    );\n    this.draggingSub.add(\n      fromEvent(document, 'mouseup', { passive: false }).subscribe(() => this.onMouseLeave())\n    );\n    // fix for issue #164\n    let isIEOrEdge = /msie\\s|trident\\//i.test(window.navigator.userAgent);\n    if (!isIEOrEdge) {\n      this.draggingSub.add(\n        fromEvent(document, 'mouseleave', { passive: false }).subscribe(() => this.onMouseLeave())\n      );\n    }\n    this.draggingSub.add(\n      fromEvent(document, 'touchend', { passive: false }).subscribe(() => this.onMouseLeave())\n    );\n    this.draggingSub.add(\n      fromEvent(document, 'touchcancel', { passive: false }).subscribe(() => this.onMouseLeave())\n    );\n  }\n\n  private unsubscribeEvents() {\n    this.draggingSub.unsubscribe();\n    this.draggingSub = null;\n  }\n\n  onMouseLeave() {\n    if (this._handleResizing) {\n      this.stopResize();\n      this._origMousePos = null;\n      this.unsubscribeEvents();\n    }\n  }\n\n  onMouseMove(event: MouseEvent | TouchEvent) {\n    if (\n      this._handleResizing &&\n      this._resizable &&\n      this._origMousePos &&\n      this._origPos &&\n      this._origSize\n    ) {\n      this.resizeTo(Position.fromEvent(event));\n      this.onResizing();\n    }\n  }\n\n  private startResize(handle: ResizeHandle) {\n    const elm = this.el.nativeElement;\n    this._origSize = Size.getCurrent(elm);\n    this._origPos = Position.getCurrent(elm); // x: left, y: top\n    this._currSize = Size.copy(this._origSize);\n    this._currPos = Position.copy(this._origPos);\n    if (this._containment) {\n      this.getBounding();\n    }\n    this.getGridSize();\n\n    // Add a transparent helper div:\n    this._helperBlock.add();\n    this._handleResizing = handle;\n    this.updateDirection();\n    this.rzStart.emit(this.getResizingEvent());\n  }\n\n  private stopResize() {\n    // Remove the helper div:\n    this._helperBlock.remove();\n    this.rzStop.emit(this.getResizingEvent());\n    this._handleResizing = null;\n    this._direction = null;\n    this._origSize = null;\n    this._origPos = null;\n    if (this._containment) {\n      this.resetBounding();\n    }\n  }\n\n  private onResizing() {\n    this.rzResizing.emit(this.getResizingEvent());\n  }\n\n  private getResizingEvent(): IResizeEvent {\n    return {\n      host: this.el.nativeElement,\n      handle: this._handleResizing ? this._handleResizing.el : null,\n      size: {\n        width: this._currSize.width,\n        height: this._currSize.height,\n      },\n      position: {\n        top: this._currPos.y,\n        left: this._currPos.x,\n      },\n      direction: { ...this._directionChanged },\n    };\n  }\n\n  private updateDirection() {\n    this._direction = {\n      n: !!this._handleResizing.type.match(/n/),\n      s: !!this._handleResizing.type.match(/s/),\n      w: !!this._handleResizing.type.match(/w/),\n      e: !!this._handleResizing.type.match(/e/),\n    };\n\n    this._directionChanged = { ...this._direction };\n\n    // if aspect ration should be preserved:\n    if (this.rzAspectRatio) {\n      // if north then west (unless ne)\n      if (this._directionChanged.n && !this._directionChanged.e) {\n        this._directionChanged.w = true;\n      }\n\n      // if south then east (unless sw)\n      if (this._directionChanged.s && !this._directionChanged.w) {\n        this._directionChanged.e = true;\n      }\n\n      // if east then south (unless ne)\n      if (this._directionChanged.e && !this._directionChanged.n) {\n        this._directionChanged.s = true;\n      }\n\n      // if west then south (unless nw)\n      if (this._directionChanged.w && !this._directionChanged.n) {\n        this._directionChanged.s = true;\n      }\n    }\n  }\n\n  private resizeTo(p: Position) {\n    p.subtract(this._origMousePos).divide(this.rzScale);\n\n    const tmpX = Math.round(p.x / this._gridSize.x) * this._gridSize.x;\n    const tmpY = Math.round(p.y / this._gridSize.y) * this._gridSize.y;\n\n    if (this._direction.n) {\n      // n, ne, nw\n      this._currPos.y = this._origPos.y + tmpY;\n      this._currSize.height = this._origSize.height - tmpY;\n    } else if (this._direction.s) {\n      // s, se, sw\n      this._currSize.height = this._origSize.height + tmpY;\n    }\n\n    if (this._direction.e) {\n      // e, ne, se\n      this._currSize.width = this._origSize.width + tmpX;\n    } else if (this._direction.w) {\n      // w, nw, sw\n      this._currSize.width = this._origSize.width - tmpX;\n      this._currPos.x = this._origPos.x + tmpX;\n    }\n\n    this.checkBounds();\n    this.checkSize();\n    this.adjustByRatio();\n    this.doResize();\n  }\n\n  private doResize() {\n    const container = this.el.nativeElement;\n    if (!this._direction || this._direction.n || this._direction.s || this._aspectRatio) {\n      this.renderer.setStyle(container, 'height', this._currSize.height + 'px');\n    }\n    if (!this._direction || this._direction.w || this._direction.e || this._aspectRatio) {\n      this.renderer.setStyle(container, 'width', this._currSize.width + 'px');\n    }\n    this.renderer.setStyle(container, 'left', this._currPos.x + 'px');\n    this.renderer.setStyle(container, 'top', this._currPos.y + 'px');\n  }\n\n  private adjustByRatio() {\n    if (this._aspectRatio && !this._adjusted) {\n      if (this._direction.e || this._direction.w) {\n        const newHeight = Math.floor(this._currSize.width / this._aspectRatio);\n\n        if (this._direction.n) {\n          this._currPos.y += this._currSize.height - newHeight;\n        }\n\n        this._currSize.height = newHeight;\n      } else {\n        const newWidth = Math.floor(this._aspectRatio * this._currSize.height);\n\n        if (this._direction.n) {\n          this._currPos.x += this._currSize.width - newWidth;\n        }\n\n        this._currSize.width = newWidth;\n      }\n    }\n  }\n\n  private checkBounds() {\n    if (this._containment) {\n      const maxWidth =\n        this._bounding.width -\n        this._bounding.pr -\n        this._bounding.deltaL -\n        this._bounding.translateX -\n        this._currPos.x;\n      const maxHeight =\n        this._bounding.height -\n        this._bounding.pb -\n        this._bounding.deltaT -\n        this._bounding.translateY -\n        this._currPos.y;\n\n      if (this._direction.n && this._currPos.y + this._bounding.translateY < 0) {\n        this._currPos.y = -this._bounding.translateY;\n        this._currSize.height = this._origSize.height + this._origPos.y + this._bounding.translateY;\n      }\n\n      if (this._direction.w && this._currPos.x + this._bounding.translateX < 0) {\n        this._currPos.x = -this._bounding.translateX;\n        this._currSize.width = this._origSize.width + this._origPos.x + this._bounding.translateX;\n      }\n\n      if (this._currSize.width > maxWidth) {\n        this._currSize.width = maxWidth;\n      }\n\n      if (this._currSize.height > maxHeight) {\n        this._currSize.height = maxHeight;\n      }\n\n      /**\n       * Fix Issue: Additional check for aspect ratio\n       * https://github.com/xieziyu/angular2-draggable/issues/132\n       */\n      if (this._aspectRatio) {\n        this._adjusted = false;\n\n        if (\n          (this._direction.w || this._direction.e) &&\n          this._currSize.width / this._aspectRatio >= maxHeight\n        ) {\n          const newWidth = Math.floor(maxHeight * this._aspectRatio);\n\n          if (this._direction.w) {\n            this._currPos.x += this._currSize.width - newWidth;\n          }\n\n          this._currSize.width = newWidth;\n          this._currSize.height = maxHeight;\n          this._adjusted = true;\n        }\n\n        if (\n          (this._direction.n || this._direction.s) &&\n          this._currSize.height * this._aspectRatio >= maxWidth\n        ) {\n          const newHeight = Math.floor(maxWidth / this._aspectRatio);\n\n          if (this._direction.n) {\n            this._currPos.y += this._currSize.height - newHeight;\n          }\n\n          this._currSize.width = maxWidth;\n          this._currSize.height = newHeight;\n          this._adjusted = true;\n        }\n      }\n    }\n  }\n\n  private checkSize() {\n    const minHeight = !this.rzMinHeight ? 1 : this.rzMinHeight;\n    const minWidth = !this.rzMinWidth ? 1 : this.rzMinWidth;\n\n    if (this._currSize.height < minHeight) {\n      this._currSize.height = minHeight;\n\n      if (this._direction.n) {\n        this._currPos.y = this._origPos.y + (this._origSize.height - minHeight);\n      }\n    }\n\n    if (this._currSize.width < minWidth) {\n      this._currSize.width = minWidth;\n\n      if (this._direction.w) {\n        this._currPos.x = this._origPos.x + (this._origSize.width - minWidth);\n      }\n    }\n\n    if (this.rzMaxHeight && this._currSize.height > this.rzMaxHeight) {\n      this._currSize.height = this.rzMaxHeight;\n\n      if (this._direction.n) {\n        this._currPos.y = this._origPos.y + (this._origSize.height - this.rzMaxHeight);\n      }\n    }\n\n    if (this.rzMaxWidth && this._currSize.width > this.rzMaxWidth) {\n      this._currSize.width = this.rzMaxWidth;\n\n      if (this._direction.w) {\n        this._currPos.x = this._origPos.x + (this._origSize.width - this.rzMaxWidth);\n      }\n    }\n  }\n\n  private getBounding() {\n    const el = this._containment;\n    const computed = window.getComputedStyle(el);\n    if (computed) {\n      let p = computed.getPropertyValue('position');\n\n      const nativeEl = window.getComputedStyle(this.el.nativeElement);\n      let transforms = nativeEl\n        .getPropertyValue('transform')\n        .replace(/[^-\\d,]/g, '')\n        .split(',');\n\n      this._bounding = {};\n      this._bounding.width = el.clientWidth;\n      this._bounding.height = el.clientHeight;\n      this._bounding.pr = parseInt(computed.getPropertyValue('padding-right'), 10);\n      this._bounding.pb = parseInt(computed.getPropertyValue('padding-bottom'), 10);\n      this._bounding.deltaL = this.el.nativeElement.offsetLeft - this._currPos.x;\n      this._bounding.deltaT = this.el.nativeElement.offsetTop - this._currPos.y;\n\n      if (transforms.length >= 6) {\n        this._bounding.translateX = parseInt(transforms[4], 10);\n        this._bounding.translateY = parseInt(transforms[5], 10);\n      } else {\n        this._bounding.translateX = 0;\n        this._bounding.translateY = 0;\n      }\n\n      this._bounding.position = computed.getPropertyValue('position');\n\n      if (p === 'static') {\n        this.renderer.setStyle(el, 'position', 'relative');\n      }\n    }\n  }\n\n  private resetBounding() {\n    if (this._bounding && this._bounding.position === 'static') {\n      this.renderer.setStyle(this._containment, 'position', 'relative');\n    }\n    this._bounding = null;\n  }\n\n  private getGridSize() {\n    // set default value:\n    this._gridSize = { x: 1, y: 1 };\n\n    if (this.rzGrid) {\n      if (typeof this.rzGrid === 'number') {\n        this._gridSize = { x: this.rzGrid, y: this.rzGrid };\n      } else if (Array.isArray(this.rzGrid)) {\n        this._gridSize = { x: this.rzGrid[0], y: this.rzGrid[1] };\n      }\n    }\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { AngularDraggableDirective } from './angular-draggable.directive';\nimport { AngularResizableDirective } from './angular-resizable.directive';\n\n@NgModule({\n  imports: [],\n  declarations: [AngularDraggableDirective, AngularResizableDirective],\n  exports: [AngularDraggableDirective, AngularResizableDirective],\n})\nexport class AngularDraggableModule {}\n","/*\n * Public API Surface of angular2-draggable\n */\n\nexport * from './lib/angular-draggable.directive';\nexport * from './lib/angular-resizable.directive';\nexport * from './lib/angular-draggable.module';\nexport * from './lib/models/position';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}