{"version":3,"file":"pebula-ngrid-drag.mjs","sources":["../../../../libs/ngrid/drag/src/lib/drag-and-drop/core/drop-list-ref.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/core/drag-ref.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/core/drag-drop.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/core/drop-list.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/core/drag.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/core/drag-handle.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/row/row-drop-list-ref.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/row/row-reorder-plugin.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/row/row-drag.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/column/column-drop-list-ref.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/column/column-drag-container.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/column/column-drag.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/column/column-drop-container.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/column/column-reorder-plugin.ts","../../../../libs/ngrid/drag/src/lib/column-resize/cdk-encapsulated-code.ts","../../../../libs/ngrid/drag/src/lib/column-resize/column-resize.component.ts","../../../../libs/ngrid/drag/src/lib/column-resize/column-resize.component.html","../../../../libs/ngrid/drag/src/lib/drag-and-drop/column/extend-grid.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/column/aggregation-column.ts","../../../../libs/ngrid/drag/src/lib/drag-and-drop/column/cell-dragger-ref.ts","../../../../libs/ngrid/drag/src/lib/column-resize/cell-resizer-ref.ts","../../../../libs/ngrid/drag/src/lib/column-resize/extend-grid.ts","../../../../libs/ngrid/drag/src/lib/default-settings.component.ts","../../../../libs/ngrid/drag/src/lib/table-drag.module.ts","../../../../libs/ngrid/drag/src/pebula-ngrid-drag.ts"],"sourcesContent":["import { Subject } from 'rxjs';\nimport { ElementRef } from '@angular/core';\nimport { DropListRef } from '@angular/cdk/drag-drop';\nimport { coerceElement } from '@angular/cdk/coercion';\n\nexport class PblDropListRef<T = any> extends DropListRef<T> {\n  /** Emits right before dragging has started. */\n  beforeExit = new Subject<{ item: import('./drag-ref').PblDragRef<T> }>();\n\n  withElement(element: ElementRef<HTMLElement> | HTMLElement): this {\n    // TODO: Workaround, see if we can push this through https://github.com/angular/material2/issues/15086\n    this.element = coerceElement(element);\n    this.withScrollableParents([this.element]);\n    return this;\n  }\n\n  dispose(): void {\n    this.beforeExit.complete();\n    super.dispose();\n  }\n}\n","import { ElementRef, EventEmitter } from '@angular/core';\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { DragRef } from '@angular/cdk/drag-drop';\n\nimport { PblDropListRef } from './drop-list-ref';\n\nexport class PblDragRef<T = any> extends DragRef<T> {\n\n  /**\n   * Fires when the root element changes\n   *\n   * > Does not emit on the initial setup.\n   */\n  rootElementChanged = new EventEmitter<{ prev: HTMLElement; curr: HTMLElement; }>();\n\n  constructor(...args: ConstructorParameters<typeof DragRef>) {\n    super(...args);\n    this.exited.subscribe( e => {\n      const { container } = e;\n      if (container instanceof PblDropListRef) {\n        container.beforeExit.next({ item: this });\n      }\n    });\n  }\n\n  /**\n   * Sets an alternate drag root element. The root element is the element that will be moved as\n   * the user is dragging. Passing an alternate root element is useful when trying to enable\n   * dragging on an element that you might not have access to.\n   */\n  withRootElement(rootElement: ElementRef<HTMLElement> | HTMLElement): this {\n    // the first call to `withRootElement` comes from the base class, before we construct the emitter.\n    // We don't need it anyway...\n    if (this.rootElementChanged) {\n      const element = coerceElement(rootElement);\n      if (this.getRootElement() !== element) {\n        this.rootElementChanged.next({ prev: this.getRootElement(), curr: element })\n      }\n    }\n    return super.withRootElement(rootElement);\n  }\n\n  dispose(): void {\n    this.rootElementChanged.complete();\n    super.dispose();\n  }\n}\n","import { Injectable, Inject, NgZone, ElementRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ViewportRuler} from '@angular/cdk/scrolling';\nimport { DragRef, DragRefConfig, DropListRef, DragDropRegistry } from '@angular/cdk/drag-drop';\n\nimport { PblDragRef } from './drag-ref'\nimport { PblDropListRef } from './drop-list-ref';\n\n/** Default configuration to be used when creating a `DragRef`. */\nconst DEFAULT_CONFIG = {\n  dragStartThreshold: 5,\n  pointerDirectionChangeThreshold: 5\n};\n\n/**\n * Service that allows for drag-and-drop functionality to be attached to DOM elements.\n */\n@Injectable({providedIn: 'root'})\nexport class PblDragDrop {\n  constructor(@Inject(DOCUMENT) protected _document: any,\n              protected _ngZone: NgZone,\n              protected _viewportRuler: ViewportRuler,\n              protected _dragDropRegistry: DragDropRegistry<DragRef, DropListRef>) {}\n\n  /**\n   * Turns an element into a draggable item.\n   * @param element Element to which to attach the dragging functionality.\n   * @param config Object used to configure the dragging behavior.\n   */\n  createDrag<T = any>(element: ElementRef<HTMLElement> | HTMLElement,\n                      config: DragRefConfig = DEFAULT_CONFIG): PblDragRef<T> {\n    return new PblDragRef<T>(element, config, this._document, this._ngZone, this._viewportRuler, this._dragDropRegistry);\n  }\n\n  /**\n   * Turns an element into a drop list.\n   * @param element Element to which to attach the drop list functionality.\n   */\n  createDropList<T = any>(element: ElementRef<HTMLElement> | HTMLElement): PblDropListRef<T> {\n    return new PblDropListRef<T>(element, this._dragDropRegistry, this._document, this._ngZone, this._viewportRuler);\n  }\n}\n","import {\n  Input,\n  Directive,\n  ElementRef,\n  Optional,\n  OnInit,\n  Inject,\n  SkipSelf,\n  ChangeDetectorRef\n} from '@angular/core';\nimport { Direction, Directionality } from '@angular/cdk/bidi';\nimport { ScrollDispatcher } from '@angular/cdk/scrolling';\nimport {\n  DragDrop,\n  CdkDropListGroup,\n  CdkDropList,\n  CdkDrag,\n  CDK_DROP_LIST,\n  CDK_DROP_LIST_GROUP,\n  CDK_DRAG_CONFIG,\n  DragDropConfig,\n} from '@angular/cdk/drag-drop';\nimport { PblNgridComponent, PblNgridExtensionApi, PblNgridPluginController } from '@pebula/ngrid';\n\nimport { PblDropListRef } from './drop-list-ref';\nimport { PblDragDrop } from './drag-drop';\n\n@Directive({\n  selector: '[cdkLazyDropList]', // tslint:disable-line: directive-selector\n  exportAs: 'cdkLazyDropList',\n  providers: [\n    { provide: DragDrop, useExisting: PblDragDrop },\n    { provide: CDK_DROP_LIST, useClass: CdkLazyDropList },\n  ],\n  host: { // tslint:disable-line:no-host-metadata-property\n    'class': 'cdk-drop-list',\n    '[id]': 'id',\n    '[class.cdk-drop-list-dragging]': '_dropListRef.isDragging()',\n    '[class.cdk-drop-list-receiving]': '_dropListRef.isReceiving()',\n  }\n})\nexport class CdkLazyDropList<T = any, DRef = any> extends CdkDropList<T> implements OnInit {\n\n  get pblDropListRef(): PblDropListRef<DRef> { return this._dropListRef as any; }\n\n  get grid(): PblNgridComponent<T> { return this._gridApi?.grid; }\n  set grid(value: PblNgridComponent<T>) { this.updateGrid(value); }\n\n  get dir(): Direction | null { return this._gridApi?.getDirection(); }\n\n  /**\n   * Selector that will be used to determine the direct container element, starting from\n   * the `cdkDropList` element and going down the DOM. Passing an alternate direct container element\n   * is useful when the `cdkDropList` is not the direct parent (i.e. ancestor but not father)\n   * of the draggable elements.\n   */\n  // tslint:disable-next-line:no-input-rename\n  @Input('cdkDropListDirectContainerElement') directContainerElement: string;\n\n  protected get gridApi(): PblNgridExtensionApi<T> { return this._gridApi; }\n  protected readonly originalElement: ElementRef<HTMLElement>;\n  private _gridApi: PblNgridExtensionApi<T>;\n\n  constructor(@Optional() grid: PblNgridComponent<T>,\n              element: ElementRef<HTMLElement>,\n              dragDrop: DragDrop,\n              changeDetectorRef: ChangeDetectorRef,\n              _scrollDispatcher?: ScrollDispatcher,\n              @Optional() dir?: Directionality,\n              @Optional() @Inject(CDK_DROP_LIST_GROUP) @SkipSelf() group?: CdkDropListGroup<CdkDropList>,\n              @Optional() @Inject(CDK_DRAG_CONFIG) config?: DragDropConfig) {\n    super(element, dragDrop, changeDetectorRef, _scrollDispatcher, dir, group, config);\n\n    if (!(this.pblDropListRef instanceof PblDropListRef)) {\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        throw new Error('Invalid `DropListRef` injection, the ref is not an instance of PblDropListRef')\n      }\n      return;\n    }\n\n    // This is a workaround for https://github.com/angular/material2/pull/14153\n    // Working around the missing capability for selecting a container element that is not the drop container host.\n    this.originalElement = element;\n\n    if (grid) {\n      this.updateGrid(grid);\n    }\n\n    this.initDropListRef();\n  }\n\n  ngOnInit(): void {\n    this._dropListRef.beforeStarted.subscribe( () => this.beforeStarted() );\n  }\n\n  addDrag(drag: CdkDrag): void {\n    this.addItem(drag);\n  }\n\n  removeDrag(drag: CdkDrag): void {\n    this.removeItem(drag);\n  }\n\n  /**\n   * A chance for inheriting implementations to change/modify the drop list ref instance\n   *\n   * We can't do this via a DragDrop service replacement as we might have multiple drop-lists on the same\n   * element which mean they must share the same DragDrop factory...\n   */\n  protected initDropListRef(): void { }\n\n  protected beforeStarted(): void {\n    if (this.directContainerElement) {\n      const element = this.originalElement.nativeElement.querySelector(this.directContainerElement) as HTMLElement;\n      this.element = new ElementRef<HTMLElement>(element);\n    } else {\n      this.element = this.originalElement;\n    }\n    this.pblDropListRef.withElement(this.element);\n    if (this.dir) {\n      this.pblDropListRef.withDirection(this.dir);\n    }\n  }\n\n  protected gridChanged(prev?: PblNgridExtensionApi<T>) { }\n\n  private updateGrid(grid: PblNgridComponent<T>) {\n    if (grid !== this.grid) {\n      const prev = this._gridApi;\n      this._gridApi = grid ? PblNgridPluginController.find(grid).extApi : undefined;\n      this.gridChanged(prev);\n    }\n  }\n}\n","import { take } from 'rxjs/operators';\nimport { Input, Directive, OnDestroy, AfterViewInit, OnInit } from '@angular/core';\nimport { DragDrop, CdkDrag } from '@angular/cdk/drag-drop';\n\nimport { PblDragRef } from './drag-ref';\nimport { PblDragDrop } from './drag-drop';\nimport { CdkLazyDropList } from './drop-list';\n\n@Directive({\n  selector: '[cdkLazyDrag]', // tslint:disable-line: directive-selector\n  exportAs: 'cdkLazyDrag',\n  host: { // tslint:disable-line:no-host-metadata-property\n    'class': 'cdk-drag',\n    '[class.cdk-drag-dragging]': '_dragRef.isDragging()',\n  },\n  providers: [\n    { provide: DragDrop, useExisting: PblDragDrop },\n  ],\n})\nexport class CdkLazyDrag<T = any, Z extends CdkLazyDropList<T> = CdkLazyDropList<T>, DRef = any> extends CdkDrag<T> implements OnInit, AfterViewInit, OnDestroy {\n\n  /**\n   * A class to set when the root element is not the host element. (i.e. when `cdkDragRootElement` is used).\n   */\n  @Input('cdkDragRootElementClass') set rootElementSelectorClass(value: string) { // tslint:disable-line:no-input-rename\n    if (value !== this._rootClass && this._hostNotRoot) {\n      if (this._rootClass) {\n        this.getRootElement().classList.remove(...this._rootClass.split(' '));\n      }\n      if (value) {\n        this.getRootElement().classList.add(...value.split(' '));\n      }\n    }\n    this._rootClass = value;\n  }\n\n  get pblDragRef(): PblDragRef<DRef> { return this._dragRef as any; }\n\n  @Input() get cdkDropList(): Z { return this.dropContainer as Z; }\n  set cdkDropList(dropList: Z) {\n    // TO SUPPORT `cdkDropList` via string input (ID) we need a reactive registry...\n    const prev = this.cdkDropList;\n    if (dropList !== prev) {\n      if (prev) {\n        prev.removeDrag(this);\n      }\n      this.dropContainer = dropList;\n      if (dropList) {\n        this._dragRef._withDropContainer(dropList.pblDropListRef);\n        this._dragRef.beforeStarted.subscribe(() => {\n          if (dropList.dir) {\n            this._dragRef.withDirection(dropList.dir);\n          }\n        });\n        dropList.addDrag(this);\n      }\n      this.dropContainerChanged(prev);\n    }\n  }\n\n  private _rootClass: string;\n  private _hostNotRoot = false;\n\n  ngOnInit(): void {\n    if (!(this.pblDragRef instanceof PblDragRef)) {\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        throw new Error('Invalid `DragRef` injection, the ref is not an instance of PblDragRef')\n      }\n      return;\n    }\n    this.pblDragRef.rootElementChanged.subscribe( event => {\n      const rootElementSelectorClass = this._rootClass;\n      const hostNotRoot = this.element.nativeElement !== event.curr;\n\n      if (rootElementSelectorClass) {\n        if (this._hostNotRoot) {\n          event.prev.classList.remove(...rootElementSelectorClass.split(' '));\n        }\n        if (hostNotRoot) {\n          event.curr.classList.add(...rootElementSelectorClass.split(' '));\n        }\n      }\n      this._hostNotRoot = hostNotRoot;\n    });\n  }\n\n  // This is a workaround for https://github.com/angular/material2/pull/14158\n  // Working around the issue of drop container is not the direct parent (father) of a drag item.\n  // The entire ngAfterViewInit() overriding method can be removed if PR accepted.\n  ngAfterViewInit(): void {\n    this.started.subscribe( startedEvent => {\n      if (this.dropContainer) {\n        const element = this.getRootElement();\n        const initialRootElementParent = element.parentNode as HTMLElement;\n        if (!element.nextSibling && initialRootElementParent !== this.dropContainer.element.nativeElement) {\n          this.ended.pipe(take(1)).subscribe( endedEvent => initialRootElementParent.appendChild(element) );\n        }\n      }\n    });\n    super.ngAfterViewInit();\n  }\n\n  ngOnDestroy(): void {\n    this.cdkDropList?.removeDrag(this);\n    super.ngOnDestroy();\n  }\n\n  protected dropContainerChanged(prev: Z) { }\n}\n","import {\n  Directive,\n  ElementRef,\n  Optional,\n  Inject,\n  SkipSelf,\n} from '@angular/core';\nimport { CDK_DRAG_HANDLE, CdkDragHandle, CDK_DRAG_PARENT } from '@angular/cdk/drag-drop';\n\n/** Handle that can be used to drag and CdkDrag instance. */\n@Directive({\n  selector: '[pblDragHandle]',\n  host: { // tslint:disable-line:use-host-property-decorator\n    'class': 'cdk-drag-handle'\n  },\n  providers: [\n    {\n      provide: CDK_DRAG_HANDLE,\n      useExisting: PblDragHandle\n    }\n  ]\n})\nexport class PblDragHandle extends CdkDragHandle {\n  constructor(public element: ElementRef<HTMLElement>,\n              @Inject(CDK_DRAG_PARENT) @Optional() @SkipSelf() parentDrag?: any) { super(element, parentDrag); }\n}\n","import { PblNgridExtensionApi } from '@pebula/ngrid';\nimport { PblDropListRef } from '../core/drop-list-ref';\nimport { PblNgridRowReorderPluginDirective } from './row-reorder-plugin';\nimport { takeUntil } from 'rxjs/operators';\nimport { Type } from '@angular/core';\n\nexport type _PblDropListRef = Omit<PblDropListRef<PblNgridRowReorderPluginDirective<any>>, '_getItemIndexFromPointerPosition' | 'start'> & {\n  start(): void;\n  _getItemIndexFromPointerPosition(item: PblRowDropListRef, pointerX: number, pointerY: number, delta?: {x: number, y: number}): number\n};\n\nexport const _PblDropListRef = () => { return PblDropListRef as any as Type<_PblDropListRef>; };\n\nexport class PblRowDropListRef<T = any> extends _PblDropListRef() {\n\n  gridApi: PblNgridExtensionApi<T>;\n\n  private scrollDif = 0;\n\n  _getItemIndexFromPointerPosition(item: PblRowDropListRef, pointerX: number, pointerY: number, delta?: {x: number, y: number}): number {\n    return super._getItemIndexFromPointerPosition(item, pointerX, pointerY - this.scrollDif, delta);\n  }\n\n  start(): void {\n    super.start();\n    this.scrollDif = 0;\n    if (this.gridApi.grid.viewport.enabled) {\n      const initialTop = this.gridApi.grid.viewport.measureScrollOffset();\n      this.gridApi.grid.viewport.elementScrolled()\n        .pipe(takeUntil(this.dropped))\n        .subscribe(() => {\n          this.scrollDif = this.gridApi.grid.viewport.measureScrollOffset() - initialTop;\n        });\n    }\n  }\n\n}\n\nexport function patchDropListRef<T = any>(dropListRef: PblDropListRef<PblNgridRowReorderPluginDirective<T>>, gridApi: PblNgridExtensionApi<T>) {\n  try {\n    Object.setPrototypeOf(dropListRef, PblRowDropListRef.prototype);\n  } catch (err) {\n    (dropListRef as any)._getItemIndexFromPointerPosition = PblRowDropListRef.prototype._getItemIndexFromPointerPosition;\n    dropListRef.start = PblRowDropListRef.prototype.start;\n  }\n\n  (dropListRef as unknown as PblRowDropListRef).gridApi = gridApi;\n}\n","import { Directive, Input, OnDestroy } from '@angular/core';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n  DragDrop,\n  CdkDropListGroup,\n  CDK_DROP_LIST,\n  CdkDragDrop,\n} from '@angular/cdk/drag-drop';\n\nimport { PblNgridComponent } from '@pebula/ngrid';\nimport { PblDragDrop, CdkLazyDropList } from '../core/index';\nimport { PblNgridRowDragDirective } from './row-drag';\nimport { patchDropListRef } from './row-drop-list-ref';\n\ndeclare module '@pebula/ngrid/lib/ext/types' {\n  interface PblNgridPluginExtension {\n    rowReorder?: PblNgridRowReorderPluginDirective;\n  }\n}\n\nexport const ROW_REORDER_PLUGIN_KEY: 'rowReorder' = 'rowReorder';\n\nlet _uniqueIdCounter = 0;\n\n@Directive({\n  selector: 'pbl-ngrid[rowReorder]', // tslint:disable-line: directive-selector\n  exportAs: 'pblNgridRowReorder',\n  host: { // tslint:disable-line:no-host-metadata-property\n    'class': 'cdk-drop-list',\n    '[id]': 'id',\n    '[class.cdk-drop-list-dragging]': '_dropListRef.isDragging()',\n    '[class.cdk-drop-list-receiving]': '_dropListRef.isReceiving()',\n    '[class.pbl-row-reorder]': 'rowReorder && !this.grid.ds?.sort.sort?.order && !this.grid.ds?.filter?.filter',\n  },\n  providers: [\n    { provide: DragDrop, useExisting: PblDragDrop },\n    { provide: CdkDropListGroup, useValue: undefined },\n    { provide: CDK_DROP_LIST, useExisting: PblNgridRowReorderPluginDirective },\n  ],\n})\nexport class PblNgridRowReorderPluginDirective<T = any> extends CdkLazyDropList<T, PblNgridRowReorderPluginDirective<T>> implements OnDestroy {\n\n  id = `pbl-ngrid-row-reorder-list-${_uniqueIdCounter++}`;\n\n  @Input() get rowReorder(): boolean { return this._rowReorder; };\n  set rowReorder(value: boolean) {\n    value = coerceBooleanProperty(value);\n    this._rowReorder = value;\n  }\n\n  private _rowReorder = false;\n  private _removePlugin: (grid: PblNgridComponent<any>) => void;\n\n  ngOnDestroy(): void {\n    super.ngOnDestroy();\n    this._removePlugin(this.grid);\n  }\n\n  getSortedItems() {\n    const { rowsApi } = this.gridApi;\n    // The CdkTable has a view repeater that cache view's for performance (only when virtual scroll enabled)\n    // A cached view is not showing but still \"living\" so it's CdkDrag element is still up in the air\n    // We need to filter them out\n    // An alternative will be to catch the events of the rows attached/detached and add/remove them from the drop list.\n    return (super.getSortedItems() as PblNgridRowDragDirective[]).filter( item => {\n      return rowsApi.findRowByElement(item.getRootElement())?.attached;\n    });\n  }\n\n  protected initDropListRef(): void {\n    patchDropListRef(this.pblDropListRef as any, this.gridApi);\n  }\n\n  protected gridChanged() {\n    this._removePlugin = this.gridApi.pluginCtrl.setPlugin(ROW_REORDER_PLUGIN_KEY, this);\n    this.directContainerElement = '.pbl-ngrid-scroll-container';\n\n    this.dropped.subscribe( (event: CdkDragDrop<T>) => {\n      const item = event.item as PblNgridRowDragDirective<T>;\n\n      const previousIndex = this.grid.ds.source.indexOf(item.draggedContext.row);\n      const currentIndex = event.currentIndex + this.grid.ds.renderStart;\n      this.grid.ds.moveItem(previousIndex, currentIndex, true);\n      this.grid.rowsApi.syncRows('data');\n    });\n  }\n\n  static ngAcceptInputType_rowReorder: BooleanInput;\n}\n","import { Directive, Input, OnInit } from '@angular/core';\nimport { DragDrop, CdkDragStart, CDK_DRAG_PARENT } from '@angular/cdk/drag-drop';\n\nimport { PblNgridPluginController, PblNgridCellContext } from '@pebula/ngrid';\nimport { PblDragDrop, CdkLazyDrag } from '../core/index';\nimport { PblNgridRowReorderPluginDirective, ROW_REORDER_PLUGIN_KEY } from './row-reorder-plugin';\n\n@Directive({\n  selector: '[pblNgridRowDrag]',\n  exportAs: 'pblNgridRowDrag',\n  host: { // tslint:disable-line:no-host-metadata-property\n    'class': 'cdk-drag',\n    '[class.cdk-drag-dragging]': '_dragRef.isDragging()',\n  },\n  providers: [\n    { provide: DragDrop, useExisting: PblDragDrop },\n    { provide: CDK_DRAG_PARENT, useExisting: PblNgridRowDragDirective },\n  ]\n})\nexport class PblNgridRowDragDirective<T = any> extends CdkLazyDrag<T, PblNgridRowReorderPluginDirective<T>> implements OnInit {\n  rootElementSelector = 'pbl-ngrid-row';\n\n  get context(): PblNgridCellContext<T> {\n    return this._context;\n  }\n\n  @Input('pblNgridRowDrag') set context(value: PblNgridCellContext<T>) {\n    this._context = value;\n\n    const pluginCtrl = this.pluginCtrl = value && PblNgridPluginController.find(value.grid);\n    const plugin = pluginCtrl?.getPlugin(ROW_REORDER_PLUGIN_KEY);\n    this.cdkDropList = plugin || undefined;\n  }\n\n  /**\n   * Reference to the last dragged context.\n   *\n   * This context is not similar to the `context` property.\n   * The `context` property holds the current context which is shared and updated on scroll so if a user start a drag and then scrolled\n   * the context will point to the row in view and not the original cell.\n   */\n  get draggedContext(): Pick<PblNgridCellContext<T>, 'col' | 'grid'> & Partial<Pick<PblNgridCellContext<T>, 'row' | 'value'>> {\n    return this._draggedContext;\n  }\n\n  private _context: PblNgridCellContext<T>;\n  private _draggedContext: Pick<PblNgridCellContext<T>, 'col' | 'grid'> & Partial<Pick<PblNgridCellContext<T>, 'row' | 'value'>>;\n\n  private pluginCtrl: PblNgridPluginController;\n\n  ngOnInit(): void {\n    this.started.subscribe( (event: CdkDragStart) => {\n      const { col, row, grid, value }  = this._context;\n      this._draggedContext = { col, row, grid, value };\n    });\n    super.ngOnInit();\n  }\n}\n","import { PblDropListRef } from '../core/drop-list-ref';\nimport { PblDragRef } from '../core/drag-ref';\nimport { PblNgridColumnReorderPluginDirective } from './column-reorder-plugin';\nimport { PblNgridColumnDragDirective } from './column-drag';\n\nexport class PblColumnDropListRef<T = any> extends PblDropListRef<PblNgridColumnReorderPluginDirective<T>> {\n\n  private lastSwap: PblDragRef<PblNgridColumnDragDirective<T>>;\n\n  _sortPredicate(newIndex: number, drag: PblDragRef<PblNgridColumnDragDirective<T>>, drop: PblColumnDropListRef<T>) {\n    const siblings: PblDragRef<PblNgridColumnDragDirective<T>>[] = this.data.getSortedItems().map( c => c._dragRef) as any;\n\n    const dragAtNewPosition = siblings[newIndex];\n    if (dragAtNewPosition.data.column.wontBudge) {\n      return false;\n    }\n\n    // we now need to find if between current and new position there are items with `wontBudge`\n    const itemAtOriginalPosition = this.lastSwap ? this.lastSwap : drag;\n    const currentIndex = siblings.findIndex( currentItem => currentItem === itemAtOriginalPosition );\n    const start = Math.min(newIndex, currentIndex)\n    const itemsDraggedOver = siblings.slice(start, Math.abs(newIndex - currentIndex) + start);\n    for (const dragItem of itemsDraggedOver) {\n      if (dragItem.data.column.wontBudge && dragItem !== drag) {\n        return false;\n      }\n    }\n\n    if (!drag.data.column.checkGroupLockConstraint(dragAtNewPosition.data.column)) {\n      return false;\n    }\n\n    this.lastSwap = dragAtNewPosition;\n    return true;\n  }\n\n  _sortItem(item: PblDragRef, pointerX: number, pointerY: number, pointerDelta: {x: number, y: number}) {\n    const lastSwap = this.lastSwap;\n    this.sortPredicate = (index, drag) => this._sortPredicate(index, drag as any, this);\n    super._sortItem(item, pointerX, pointerY, pointerDelta);\n\n    if (this.lastSwap && this.lastSwap !== lastSwap && this.data.orientation === 'horizontal') {\n      const siblings: PblDragRef<PblNgridColumnDragDirective<T>>[] = this.data.getSortedItems().map( c => c._dragRef) as any;\n      siblings.forEach((sibling, index) => {\n        // Don't do anything if the position hasn't changed.\n        // if (oldOrder[index] === sibling) {\n        //   return;\n        // }\n        const transform = sibling.getVisibleElement().style.transform\n        for (const c of sibling.data.getCells()) {\n          c.style.transform = transform;\n        }\n      });\n    }\n  }\n}\n\nexport function patchDropListRef<T = any>(dropListRef: PblDropListRef<PblNgridColumnReorderPluginDirective<T>>) {\n  try {\n    Object.setPrototypeOf(dropListRef, PblColumnDropListRef.prototype);\n  } catch (err) {\n    (dropListRef as any)._sortPredicate = PblColumnDropListRef.prototype._sortPredicate;\n    dropListRef._sortItem = PblColumnDropListRef.prototype._sortItem;\n  }\n}\n","// tslint:disable:no-output-rename\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { Directive, Input, Output } from '@angular/core';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { DragDrop, CDK_DROP_LIST, CdkDropList } from '@angular/cdk/drag-drop';\n\nimport { COLUMN, PblNgridComponent } from '@pebula/ngrid';\nimport { CdkLazyDropList, PblDragDrop } from '../core/index';\nimport { patchDropListRef } from './column-drop-list-ref';\n\ndeclare module '@pebula/ngrid/lib/ext/types' {\n  interface PblNgridPluginExtension {\n    columnDrag?: PblNgridColumnDragContainerDirective;\n  }\n}\n\nexport const COL_DRAG_CONTAINER_PLUGIN_KEY: 'columnDrag' = 'columnDrag';\n\nlet _uniqueIdCounter = 0;\n\n@Directive({\n  selector: 'pbl-ngrid[columnDrag]:not([columnReorder])',\n  exportAs: 'pblNgridColumnDragContainer',\n  host: { // tslint:disable-line:use-host-property-decorator\n    'class': 'cdk-drop-list',\n    '[id]': 'id',\n    '[class.cdk-drop-list-dragging]': '_dropListRef.isDragging()',\n    '[class.cdk-drop-list-receiving]': '_dropListRef.isReceiving()',\n  },\n  providers: [\n    { provide: DragDrop, useExisting: PblDragDrop },\n    { provide: CDK_DROP_LIST, useExisting: PblNgridColumnDragContainerDirective },\n  ],\n})\nexport class PblNgridColumnDragContainerDirective<T = any> extends CdkLazyDropList<T, PblNgridColumnDragContainerDirective<T>> {\n  id = `pbl-ngrid-column-drag-container-list-${_uniqueIdCounter++}`;\n  orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n  @Input() get columnDrag(): boolean { return this._columnDrag; };\n  set columnDrag(value: boolean) {\n    this._columnDrag = coerceBooleanProperty(value);\n  }\n\n  @Output('cdkDropDragging') dragging: BehaviorSubject<boolean>;\n\n  @Output('cdkDropConnectionsChanged') connectionsChanged: Subject<void>;\n\n\n  private _columnDrag = false;\n  private _removePlugin: (table: PblNgridComponent<any>) => void;\n\n  private connections = new Set<CdkDropList>();\n\n  hasConnections() {\n    return this.connections.size > 0;\n  }\n\n  canDrag(column: COLUMN): boolean {\n    return this.connections.size > 0;\n  }\n\n  connectTo(dropList: CdkDropList) {\n    if (!this.connections.has(dropList)) {\n      this.connections.add(dropList);\n      this.connectedTo = Array.from(this.connections);\n      this.connectionsChanged.next();\n    }\n  }\n\n  disconnectFrom(dropList: CdkDropList) {\n    if (this.connections.delete(dropList)) {\n      this.connectedTo = Array.from(this.connections);\n      this.connectionsChanged.next();\n    }\n  }\n\n  ngOnDestroy(): void {\n    super.ngOnDestroy();\n    this.connectionsChanged.complete();\n    this.dragging.complete();\n    this._removePlugin(this.grid);\n  }\n\n  protected initDropListRef(): void {\n    patchDropListRef(this.pblDropListRef as any);\n  }\n\n  protected beforeStarted(): void {\n    super.beforeStarted();\n    this.dragging.next(true);\n  }\n\n  protected gridChanged() {\n    this.dragging = new BehaviorSubject<boolean>(false);\n    this.connectionsChanged = new Subject<void>();\n\n    this._removePlugin = this.gridApi.pluginCtrl.setPlugin(COL_DRAG_CONTAINER_PLUGIN_KEY, this);\n\n    this.directContainerElement = '.pbl-ngrid-header-row-main';\n\n    this.dragging.subscribe( isDragging => {\n      const el = this.originalElement.nativeElement;\n      if (isDragging) {\n        el.classList.add('pbl-ngrid-column-list-dragging');\n      } else {\n        el.classList.remove('pbl-ngrid-column-list-dragging');\n      }\n    });\n\n    this.sortingDisabled = true;\n  }\n\n  static ngAcceptInputType_columnDrag: BooleanInput;\n}\n","import { Directive, Input } from '@angular/core';\nimport { DragDrop, CDK_DRAG_PARENT } from '@angular/cdk/drag-drop';\n\nimport { unrx } from '@pebula/ngrid/core';\nimport { PblColumn, PblNgridPluginController } from '@pebula/ngrid';\nimport { PblDragDrop, CdkLazyDrag } from '../core/index';\nimport { COL_DRAG_CONTAINER_PLUGIN_KEY, PblNgridColumnDragContainerDirective } from './column-drag-container';\n\n@Directive({\n  selector: '[pblNgridColumnDrag]',\n  exportAs: 'pblNgridColumnDrag',\n  host: { // tslint:disable-line:no-host-metadata-property\n    'class': 'cdk-drag',\n    '[class.cdk-drag-dragging]': '_dragRef.isDragging()',\n  },\n  providers: [\n    { provide: DragDrop, useExisting: PblDragDrop },\n    { provide: CDK_DRAG_PARENT, useExisting: PblNgridColumnDragDirective }\n  ]\n})\nexport class PblNgridColumnDragDirective<T = any> extends CdkLazyDrag<T, PblNgridColumnDragContainerDirective<T>, PblNgridColumnDragDirective<T>> {\n  rootElementSelector = 'pbl-ngrid-header-cell';\n\n  @Input('pblNgridColumnDrag') get column(): PblColumn { return this._column; }\n  set column(value: PblColumn) {\n    if (value !== this._column) {\n      this._column = value;\n      this.updateDisabledState();\n    }\n  }\n\n  private _column: PblColumn;\n  private cache: HTMLElement[];\n\n  ngAfterViewInit(): void {\n    if (!this.cdkDropList) {\n      this.cdkDropList = PblNgridPluginController.findPlugin(this.column.columnDef.grid, COL_DRAG_CONTAINER_PLUGIN_KEY);\n    }\n\n    super.ngAfterViewInit();\n\n    this._dragRef.beforeStarted.subscribe( () => {\n      const { cdkDropList } = this;\n      if (cdkDropList?.canDrag(this.column)) {\n        // we don't allow a new dragging session before the previous ends.\n        // this sound impossible, but due to animation transitions its actually is.\n        // if the `transitionend` is long enough, a new drag can start...\n        //\n        // the `disabled` state is checked by pointerDown AFTER calling before start so we can cancel the start...\n        if (cdkDropList._dropListRef.isDragging()) {\n          return this.disabled = true;\n        }\n      }\n    });\n\n    this.started.subscribe( () => {\n      if (this._column.columnDef) {\n        this.column.columnDef.isDragging = true;\n      }\n    });\n    this.ended.subscribe( () => {\n      if (this._column.columnDef) {\n        this.column.columnDef.isDragging = false;\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    unrx.kill(this);\n    super.ngOnDestroy();\n  }\n\n  getCells(): HTMLElement[] {\n    if (!this.cache) {\n      this.cache = this.column.columnDef.queryCellElements('table');\n    }\n    return this.cache;\n  }\n\n  reset(): void {\n    super.reset();\n    if (this.cache) {\n      for (const el of this.cache) {\n        el.style.transform = ``;\n      }\n      this.cache = undefined;\n    }\n  }\n\n  protected dropContainerChanged(prev: PblNgridColumnDragContainerDirective<T>) {\n    if (prev) {\n      unrx.kill(this, prev);\n    }\n\n    this.updateDisabledState();\n\n    this.updateBoundaryElement();\n    if (this.cdkDropList) {\n      this.cdkDropList.connectionsChanged\n        .pipe(unrx(this, this.cdkDropList))\n        .subscribe(() => this.updateBoundaryElement());\n    }\n  }\n\n  private updateDisabledState() {\n    this.disabled = this.column && this.cdkDropList ? !this.cdkDropList.canDrag(this.column) : true;\n  }\n\n  private updateBoundaryElement() {\n    if (this.cdkDropList?.hasConnections()) {\n      this.boundaryElement = undefined;\n    } else {\n      this.boundaryElement = this.cdkDropList.directContainerElement;\n    }\n  }\n}\n","// tslint:disable:no-output-rename\nimport { Directive, EventEmitter, Output } from '@angular/core';\nimport { DragDrop, CDK_DROP_LIST, CDK_DROP_LIST_GROUP } from '@angular/cdk/drag-drop';\nimport { COLUMN } from '@pebula/ngrid';\nimport { CdkLazyDropList, PblDragDrop } from '../core/index';\nimport { COL_DRAG_CONTAINER_PLUGIN_KEY, PblNgridColumnDragContainerDirective } from './column-drag-container';\nimport { PblColumnDragDropContainerDrop, PblColumnDragDropContainerEnter, PblColumnDragDropContainerExit } from './column-drop-container.events';\n\nlet _uniqueIdCounter = 0;\n\n@Directive({\n  selector: '[pblColumnDropContainer]',\n  exportAs: 'pblColumnDropContainer',\n  inputs: ['grid: pblColumnDropContainer'],\n  host: { // tslint:disable-line:use-host-property-decorator\n    'class': 'cdk-drop-list',\n    '[id]': 'id',\n  },\n  providers: [\n    { provide: DragDrop, useExisting: PblDragDrop },\n    { provide: CDK_DROP_LIST_GROUP, useValue: undefined },\n    { provide: CDK_DROP_LIST, useExisting: PblNgridColumnDropContainerDirective },\n  ],\n})\nexport class PblNgridColumnDropContainerDirective<T = any> extends CdkLazyDropList<T> {\n  id = `pbl-ngrid-column-drop-container-${_uniqueIdCounter++}`;\n  orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n  @Output() columnEntered: EventEmitter<PblColumnDragDropContainerEnter<T>> = this.entered as any;\n  @Output() columnExited: EventEmitter<PblColumnDragDropContainerExit<T>> = this.exited as any;\n  @Output() columnDropped: EventEmitter<PblColumnDragDropContainerDrop<T>> = this.dropped as any;\n\n  get columnContainer(): PblNgridColumnDragContainerDirective { return this._columnContainer; }\n  private _columnContainer: PblNgridColumnDragContainerDirective;\n\n  canDrag(column: COLUMN): boolean {\n    return true;\n  }\n\n  ngOnDestroy() {\n    super.ngOnDestroy();\n    if (this._columnContainer) {\n      this._columnContainer.disconnectFrom(this);\n    }\n  }\n\n  protected gridChanged() {\n    const columnContainer = this.gridApi?.pluginCtrl.getPlugin(COL_DRAG_CONTAINER_PLUGIN_KEY)\n    if (columnContainer !== this._columnContainer) {\n      if (this._columnContainer) {\n        this._columnContainer.disconnectFrom(this);\n      }\n      this._columnContainer = columnContainer;\n      if (columnContainer) {\n        columnContainer.connectTo(this);\n      }\n    }\n  }\n\n}\n","// tslint:disable:no-output-rename\nimport { Directive, Input, OnInit } from '@angular/core';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { DragDrop, CdkDragDrop, CDK_DROP_LIST } from '@angular/cdk/drag-drop';\n\nimport { PblColumn, COLUMN } from '@pebula/ngrid';\nimport { PblDragDrop, PblDragRef } from '../core/index';\nimport { PblNgridColumnDragDirective } from './column-drag';\nimport { PblNgridColumnDragContainerDirective } from './column-drag-container';\n\ndeclare module '@pebula/ngrid/lib/ext/types' {\n  interface PblNgridPluginExtension {\n    columnReorder?: PblNgridColumnReorderPluginDirective;\n  }\n}\n\nexport const COL_REORDER_PLUGIN_KEY: 'columnReorder' = 'columnReorder';\n\n@Directive({\n  selector: 'pbl-ngrid[columnReorder]', // tslint:disable-line: directive-selector\n  exportAs: 'pblNgridColumnReorder',\n  host: { // tslint:disable-line:no-host-metadata-property\n    'class': 'cdk-drop-list',\n    '[id]': 'id',\n    '[class.cdk-drop-list-dragging]': '_dropListRef.isDragging()',\n    '[class.cdk-drop-list-receiving]': '_dropListRef.isReceiving()',\n  },\n  providers: [\n    { provide: DragDrop, useExisting: PblDragDrop },\n    { provide: CDK_DROP_LIST, useExisting: PblNgridColumnReorderPluginDirective },\n  ],\n})\nexport class PblNgridColumnReorderPluginDirective<T = any> extends PblNgridColumnDragContainerDirective<T> implements OnInit {\n\n  @Input() get columnReorder(): boolean { return this._columnReorder; };\n  set columnReorder(value: boolean) {\n    this._columnReorder = coerceBooleanProperty(value);\n    this.sortingDisabled = !this._columnReorder;\n  }\n\n  /**\n   * When true, will not move the column on drop.\n   * Instead you need to handle the dropped event.\n   */\n  @Input() get manualOverride(): boolean { return this._manualOverride; };\n  set manualOverride(value: boolean) { this._manualOverride = coerceBooleanProperty(value); }\n\n  private _columnReorder = false;\n  private _manualOverride = false;\n\n  canDrag(column: COLUMN): boolean {\n    return (this._columnReorder && (column as PblColumn).reorder) || super.canDrag(column);\n  }\n\n  ngOnInit(): void {\n    super.ngOnInit();\n    this.dropped.subscribe( e => this._pblReset() );\n    this.pblDropListRef.beforeExit.subscribe( e => this._pblReset() );\n  }\n\n  protected gridChanged() {\n    super.gridChanged();\n    this.dropped.subscribe( (event: CdkDragDrop<T, any>) => {\n      if (!this.manualOverride && this._columnReorder) {\n        this.grid.columnApi.moveColumn((event.item as PblNgridColumnDragDirective<T>).column, event.currentIndex);\n      }\n    });\n  }\n\n  private _pblReset(): void {\n    this.dragging.next(false);\n    const siblings: PblDragRef<PblNgridColumnDragDirective<T>>[] = this.getSortedItems().map( c => c._dragRef) as any;\n    siblings.forEach((sibling, index) => {\n      for (const c of sibling.data.getCells()) {\n        c.style.transform = ``;\n      }\n    });\n  }\n\n  static ngAcceptInputType_columnReorder: BooleanInput;\n  static ngAcceptInputType_manualOverride: BooleanInput;\n\n}\n","\n/**\n * Code from angular/material2 repository\n * File: https://github.com/angular/material2/blob/master/src/cdk/drag-drop/drag-styling.ts\n * Commit: https://github.com/angular/material2/blob/9cd3132607b4d5ae242291df41fb02dc7a453da8/src/cdk/drag-drop/drag-styling.ts\n *\n * This code is not public but required for the drag so duplicated here.\n **/\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\n// Helper type that ignores `readonly` properties. This is used in\n// `extendStyles` to ignore the readonly properties on CSSStyleDeclaration\n// since we won't be touching those anyway.\ntype Writeable<T> = { -readonly [P in keyof T]-?: T[P] };\n\n/**\n * Extended CSSStyleDeclaration that includes a couple of drag-related\n * properties that aren't in the built-in TS typings.\n */\nexport interface DragCSSStyleDeclaration extends CSSStyleDeclaration {\n  webkitUserDrag: string;\n  MozUserSelect: string; // For some reason the Firefox property is in PascalCase.\n  msScrollSnapType: string;\n  scrollSnapType: string;\n  msUserSelect: string;\n  webkitTapHighlightColor: string;\n}\n\n/**\n * Shallow-extends a stylesheet object with another stylesheet object.\n * @docs-private\n */\nexport function extendStyles(dest: Writeable<CSSStyleDeclaration>, source: Partial<DragCSSStyleDeclaration>) {\n  for (let key in source) {\n    if (source.hasOwnProperty(key)) {\n      dest[key] = source[key];\n    }\n  }\n  return dest;\n}\n\n\n/**\n * Toggles whether the native drag interactions should be enabled for an element.\n * @param element Element on which to toggle the drag interactions.\n * @param enable Whether the drag interactions should be enabled.\n * @docs-private\n */\nexport function toggleNativeDragInteractions(element: HTMLElement, enable: boolean) {\n  const userSelect = enable ? '' : 'none';\n\n  extendStyles(element.style, {\n    touchAction: enable ? '' : 'none',\n    webkitUserDrag: enable ? '' : 'none',\n    webkitTapHighlightColor: enable ? '' : 'transparent',\n    userSelect: userSelect,\n    msUserSelect: userSelect,\n    webkitUserSelect: userSelect,\n    MozUserSelect: userSelect\n  });\n}\n","import { animationFrameScheduler, Subscription } from 'rxjs';\nimport { auditTime, take } from 'rxjs/operators';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  HostListener,\n  Inject,\n  Input,\n  Optional,\n  OnDestroy,\n  NgZone,\n  ViewEncapsulation\n} from '@angular/core';\n\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { DragDropConfig, DragDropRegistry, CDK_DRAG_CONFIG } from '@angular/cdk/drag-drop';\n\nimport { PblNgridComponent, PblColumn, PblNgridMetaCellContext, isPblColumn, PblNgridPluginController, PblNgridExtensionApi } from '@pebula/ngrid';\nimport { toggleNativeDragInteractions } from './cdk-encapsulated-code';\n\ndeclare module '@pebula/ngrid/lib/ext/types' {\n  interface PblNgridPluginExtension {\n    columnResize?: PblNgridDragResizeComponent;\n  }\n}\n\nexport const COL_RESIZE_PLUGIN_KEY: 'columnResize' = 'columnResize';\n\n/** Options that can be used to bind a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({passive: true});\n\n/** Options that can be used to bind an active event listener. */\nconst activeEventListenerOptions = normalizePassiveListenerOptions({passive: false});\n\n@Component({\n  selector: 'pbl-ngrid-drag-resize', // tslint:disable-line:component-selector\n  host: { // tslint:disable-line:use-host-property-decorator\n    'class': 'pbl-ngrid-column-resizer',\n    '[style.width.px]': 'grabAreaWidth',\n  },\n  templateUrl: './column-resize.component.html',\n  styleUrls: [ './column-resize.component.scss' ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class PblNgridDragResizeComponent implements AfterViewInit, OnDestroy {\n\n  // tslint:disable-next-line:no-input-rename\n  @Input() set context(value: PblNgridMetaCellContext<any>) {\n    if (value) {\n      const { col, grid } = value;\n      if (isPblColumn(col)) {\n        this.column = col;\n        this.grid = grid;\n        this._extApi = PblNgridPluginController.find(grid).extApi;\n        return;\n      }\n    }\n    this.column = this._extApi = this.grid = undefined;\n  }\n\n  /**\n   * The area (in pixels) in which the handle can be grabbed and resize the cell.\n   * Default: 6\n   */\n  @Input() grabAreaWidth = 6;\n\n  column: PblColumn;\n  grid: PblNgridComponent<any>;\n\n  _hasStartedDragging: boolean;\n  private _hasMoved: boolean;\n  private _rootElement: HTMLElement;\n  private _pointerMoveSubscription = Subscription.EMPTY;\n  private _pointerUpSubscription = Subscription.EMPTY;\n  private _scrollPosition: {top: number, left: number};\n  private _pickupPositionOnPage: Point;\n  private _initialWidth: number;\n  private _lastWidth: number;\n  private _extApi: PblNgridExtensionApi;\n  private _rootElementInitSubscription = Subscription.EMPTY;\n\n  constructor(public element: ElementRef<HTMLElement>,\n              private _ngZone: NgZone,\n              private _viewportRuler: ViewportRuler,\n              private _dragDropRegistry: DragDropRegistry<PblNgridDragResizeComponent, any>,\n              @Optional() @Inject(CDK_DRAG_CONFIG) private _config: DragDropConfig) {\n    this._config = {\n      dragStartThreshold: _config && _config.dragStartThreshold != null ? _config.dragStartThreshold : 5,\n      pointerDirectionChangeThreshold: _config && _config.pointerDirectionChangeThreshold != null ? _config.pointerDirectionChangeThreshold : 5,\n      zIndex: _config?.zIndex\n    };\n    _dragDropRegistry.registerDragItem(this);\n  }\n\n  ngAfterViewInit(): void {\n    // We need to wait for the zone to stabilize, in order for the reference\n    // element to be in the proper place in the DOM. This is mostly relevant\n    // for draggable elements inside portals since they get stamped out in\n    // their original DOM position and then they get transferred to the portal.\n    this._rootElementInitSubscription = this._ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n      const rootElement = this._rootElement = this._getRootElement();\n      const cell = rootElement.parentElement;\n      cell.classList.add('pbl-ngrid-column-resize');\n      rootElement.addEventListener('mousedown', this._pointerDown, activeEventListenerOptions);\n      rootElement.addEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);\n      toggleNativeDragInteractions(rootElement , false);\n    });\n  }\n\n  ngOnDestroy(): void {\n    if (this._rootElement) {\n      this._rootElement.removeEventListener('mousedown', this._pointerDown, activeEventListenerOptions);\n      this._rootElement.removeEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);\n    }\n    this._rootElementInitSubscription.unsubscribe();\n    this._dragDropRegistry.removeDragItem(this);\n    this._removeSubscriptions();\n  }\n\n  @HostListener('dblclick', ['$event'])\n  onDoubleClick(event: MouseEvent): void {\n    this.grid.columnApi.autoSizeColumn(this.column);\n  }\n\n  _pointerDown = (event: MouseEvent | TouchEvent) => {\n    this._initializeDragSequence(this._rootElement, event);\n  }\n\n    /**\n   * Sets up the different variables and subscriptions\n   * that will be necessary for the dragging sequence.\n   * @param referenceElement Element that started the drag sequence.\n   * @param event Browser event object that started the sequence.\n   */\n  private _initializeDragSequence(referenceElement: HTMLElement, event: MouseEvent | TouchEvent) {\n    // Always stop propagation for the event that initializes\n    // the dragging sequence, in order to prevent it from potentially\n    // starting another sequence for a draggable parent somewhere up the DOM tree.\n    event.stopPropagation();\n\n    // Abort if the user is already dragging or is using a mouse button other than the primary one.\n    if (this.isDragging() || (!this._isTouchEvent(event) && event.button !== 0)) {\n      return;\n    }\n\n    this._hasStartedDragging = this._hasMoved = false;\n    this._pointerMoveSubscription = this._dragDropRegistry.pointerMove\n      .pipe(auditTime(0, animationFrameScheduler))\n      .subscribe(this._pointerMove);\n    this._pointerUpSubscription = this._dragDropRegistry.pointerUp.subscribe(this._pointerUp);\n    this._scrollPosition = this._viewportRuler.getViewportScrollPosition();\n\n    this._pickupPositionOnPage = this._getPointerPositionOnPage(event);\n    this._dragDropRegistry.startDragging(this, event);\n  }\n\n  /** Handler that is invoked when the user moves their pointer after they've initiated a drag. */\n  private _pointerMove = (event: MouseEvent | TouchEvent) => {\n    const pointerPosition = this._getPointerPositionOnPage(event);\n    const distanceX = pointerPosition.x - this._pickupPositionOnPage.x;\n    const distanceY = pointerPosition.y - this._pickupPositionOnPage.y;\n\n    if (!this._hasStartedDragging) {\n      // Only start dragging after the user has moved more than the minimum distance in either\n      // direction. Note that this is preferable over doing something like `skip(minimumDistance)`\n      // in the `pointerMove` subscription, because we're not guaranteed to have one move event\n      // per pixel of movement (e.g. if the user moves their pointer quickly).\n      if (Math.abs(distanceX) + Math.abs(distanceY) >= this._config.dragStartThreshold) {\n        this._hasStartedDragging = true;\n\n        // It will be a good thing if we turned of the header's resize observer to boost performance\n        // However, because we relay on the total grid minimum width updates to relatively even out the columns it will not work.\n        // Group cells will not cover all of the children, when we enlarge the width of a child in the group.\n        // This is because the max-width of the group is set proportional to the total min-width of the inner grid.\n        // For it to work we need to directly update the width of ALL OF THE GROUPS.\n        // this.column.columnDef.isDragging = true;\n\n        this.column.sizeInfo.updateSize();\n        this._lastWidth = this._initialWidth = this.column.columnDef.netWidth;\n      }\n      return;\n    }\n\n    this._hasMoved = true;\n    event.preventDefault();\n    event.stopPropagation();\n\n    const dir = this._extApi.getDirection() === 'rtl' ? -1 : 1;\n    let newWidth = Math.max(0, this._initialWidth + (distanceX * dir));\n\n    if (newWidth > this.column.maxWidth) {\n      newWidth = this.column.maxWidth;\n    } else if (distanceX < 0 && newWidth < this.column.minWidth) {\n      newWidth = this.column.minWidth;\n    }\n\n    if (this._lastWidth !== newWidth) {\n      this._lastWidth = newWidth;\n      this.column.updateWidth(`${newWidth}px`);\n      this._extApi.widthCalc.resetColumnsWidth();\n      // `this.column.updateWidth` will update the grid width cell only, which will trigger a resize that will update all other cells\n      // `this.grid.resetColumnsWidth()` will re-adjust all other grid width cells, and if their size changes they will trigger the resize event...\n    }\n  }\n\n  /** Handler that is invoked when the user lifts their pointer up, after initiating a drag. */\n  private _pointerUp = () => {\n    if (!this.isDragging()) {\n      return;\n    }\n\n    this._removeSubscriptions();\n    this._dragDropRegistry.stopDragging(this);\n\n    if (!this._hasStartedDragging) {\n      return;\n    }\n\n    // this.column.columnDef.isDragging = false;\n    this.grid.columnApi.resizeColumn(this.column, this._lastWidth + 'px');\n  }\n\n  private _getPointerPositionOnPage(event: MouseEvent | TouchEvent): Point {\n    const point = this._isTouchEvent(event) ? event.touches[0] : event;\n\n    return {\n      x: point.pageX - this._scrollPosition.left,\n      y: point.pageY - this._scrollPosition.top\n    };\n  }\n\n  private _isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n    return event.type.startsWith('touch');\n  }\n\n  /**\n   *\n   * @deprecated Will be removed in v5, use `isDragging()` instead\n   */\n  _isDragging() {\n    return this.isDragging()\n  }\n\n  isDragging() {\n    return this._dragDropRegistry.isDragging(this);\n  }\n\n  private _getRootElement(): HTMLElement {\n    return this.element.nativeElement;\n  }\n  private _removeSubscriptions() {\n    this._pointerMoveSubscription.unsubscribe();\n    this._pointerUpSubscription.unsubscribe();\n  }\n}\n\ninterface Point {\n  x: number;\n  y: number;\n}\n","<ng-content></ng-content>\n","import { PblColumn, PblColumnGroup } from '@pebula/ngrid';\n\ndeclare module '@pebula/ngrid/lib/grid/column/model/column' {\n  interface PblColumn {\n\n    reorder: boolean;\n    /**\n     * When true, the item can be reordered based on the `reorder` property but\n     * will not move (budge) when other items are reordered.\n     */\n    wontBudge: boolean;\n\n    /**\n     * Checks if the by switching between this column and the provided column the `lockColumns` constraint is triggered.\n     * The lockColumns constraint is set on a group and restrict splitting of groups.\n     * A Column with a locked group will not be allowed to leave the group nor new items are allowed that split the group.\n     *\n     * The process will check both scenarios.\n     */\n    checkGroupLockConstraint(column: PblColumn): boolean;\n  }\n}\n\ndeclare module '@pebula/ngrid/lib/grid/column/model/group-column' {\n  interface PblColumnGroup {\n    /**\n     * Lock column in the group, preventing the group from splitting.\n     * Splitting is block actively (column from the group dragged outside) and passively (column outside of the group dragging into the group).\n     */\n    lockColumns?: boolean;\n  }\n}\n\ndeclare module '@pebula/ngrid/core/lib/models/column' {\n  interface PblColumnDefinition {\n    reorder?: boolean;\n    /**\n     * When true, the item can be reordered based on the `reorder` property but\n     * will not move (budge) when other items are reordered.\n     */\n    wontBudge?: boolean;\n  }\n  interface PblColumnGroupDefinition {\n    /**\n     * Lock column in the group, preventing the group from splitting.\n     * Splitting is block actively (column from the group dragged outside) and passively (column outside of the group dragging into the group).\n     */\n    lockColumns?: boolean;\n  }\n}\n\nfunction checkGroupLockConstraint(this: PblColumn, column: PblColumn): boolean {\n  for (const id of this.groups) {\n    const g = this.groupStore.find(id);\n    if (g && g.lockColumns && !column.isInGroup(g)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function colReorderExtendGrid(): void {\n  PblColumn.extendProperty('reorder');\n  PblColumn.extendProperty('wontBudge');\n  PblColumnGroup.extendProperty('lockColumns');\n\n  PblColumn.prototype.checkGroupLockConstraint = function (this: PblColumn, column: PblColumn): boolean {\n    return checkGroupLockConstraint.call(this, column) && checkGroupLockConstraint.call(column, this);\n  };\n}\n\n","// tslint:disable:no-output-rename\nimport { Directive, OnInit } from '@angular/core';\nimport { DragDrop, CDK_DROP_LIST, CDK_DROP_LIST_GROUP } from '@angular/cdk/drag-drop';\n\nimport { PblColumn } from '@pebula/ngrid';\nimport { CdkLazyDropList, PblDragRef, PblDragDrop } from '../core/index';\nimport { PblNgridColumnReorderPluginDirective } from './column-reorder-plugin';\nimport { PblNgridColumnDragDirective } from './column-drag';\n\nlet _uniqueIdCounter = 0;\n\n@Directive({\n  selector: '[pblAggregationContainer]',\n  exportAs: 'pblAggregationContainer',\n  host: { // tslint:disable-line:no-host-metadata-property\n    'class': 'cdk-drop-list',\n    '[id]': 'id',\n  },\n  providers: [\n    { provide: DragDrop, useExisting: PblDragDrop },\n    { provide: CDK_DROP_LIST_GROUP, useValue: undefined },\n    { provide: CDK_DROP_LIST, useExisting: PblNgridAggregationContainerDirective },\n  ],\n})\nexport class PblNgridAggregationContainerDirective<T = any> extends CdkLazyDropList<T> implements OnInit {\n  id = `pbl-ngrid-column-aggregation-container-${_uniqueIdCounter++}`;\n  orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n  pending: PblColumn;\n\n  columnContainer: PblNgridColumnReorderPluginDirective;\n\n  ngOnInit(): void {\n    super.ngOnInit();\n    this.pblDropListRef.dropped\n      .subscribe( event => {\n        const item = event.item as PblDragRef<PblNgridColumnDragDirective<any>>;\n        this.pending = undefined;\n        this.grid.columnApi.addGroupBy(item.data.column);\n      });\n\n    this.pblDropListRef.entered\n      .subscribe( event => {\n        const item = event.item as PblDragRef<PblNgridColumnDragDirective<any>>;\n        this.pending = item.data.column;\n        item.getPlaceholderElement().style.display = 'none';\n        for (const c of item.data.getCells()) {\n          c.style.display = 'none';\n        }\n      });\n\n    this.pblDropListRef.exited\n      .subscribe( event => {\n        const item = event.item as PblDragRef<PblNgridColumnDragDirective<any>>;\n        this.pending = undefined;\n        item.getPlaceholderElement().style.display = '';\n        for (const c of item.data.getCells()) {\n          c.style.display = '';\n        }\n      });\n  }\n\n  ngOnDestroy() {\n    super.ngOnDestroy();\n    this.columnContainer.disconnectFrom(this);\n  }\n\n  protected gridChanged() {\n    this.columnContainer = this.gridApi.pluginCtrl.getPlugin('columnReorder');\n    this.columnContainer.connectTo(this);\n  }\n}\n","import { Directive, TemplateRef } from '@angular/core';\nimport {\n  PblNgridRegistryService,\n  PblNgridMultiTemplateRegistry,\n  PblNgridDataHeaderExtensionRef,\n  PblNgridDataHeaderExtensionContext,\n  PblNgridPluginController\n} from '@pebula/ngrid';\n\nimport { COL_DRAG_CONTAINER_PLUGIN_KEY } from './column-drag-container';\n\n/**\n * Marks the element as the resizer template for cells.\n */\n@Directive({ selector: '[pblNgridCellDraggerRef]' })\nexport class PblNgridCellDraggerRefDirective extends PblNgridMultiTemplateRegistry<PblNgridDataHeaderExtensionContext, 'dataHeaderExtensions'> implements PblNgridDataHeaderExtensionRef {\n  readonly name: 'cellDragger' = 'cellDragger';\n  readonly kind: 'dataHeaderExtensions' = 'dataHeaderExtensions';\n  constructor(tRef: TemplateRef<PblNgridDataHeaderExtensionContext>, registry: PblNgridRegistryService) { super(tRef, registry); }\n\n  shouldRender(context: PblNgridDataHeaderExtensionContext): boolean {\n    // We dont check for `context.col.reorder` because even if a specific column does not \"reorder\" we still need to render the cdk-drag\n    // so the cdk-drop-list will be aware of this item, so if another item does reorder it will be able to move while taking this element into consideration.\n    // I.E: It doesn't reorder but it's part of the playground.\n    //\n    // However, when the plugin does not exists for this table we don't need to render...\n\n    const pluginCtrl = PblNgridPluginController.find(context.grid);\n    return pluginCtrl.hasPlugin(COL_DRAG_CONTAINER_PLUGIN_KEY);\n  }\n}\n","import { Directive, TemplateRef } from '@angular/core';\nimport { PblNgridRegistryService, PblNgridMultiTemplateRegistry, PblNgridDataHeaderExtensionRef, PblNgridDataHeaderExtensionContext } from '@pebula/ngrid';\n\n/**\n * Marks the element as the resizer template for cells.\n */\n@Directive({ selector: '[pblNgridCellResizerRef]' })\nexport class PblNgridCellResizerRefDirective extends PblNgridMultiTemplateRegistry<PblNgridDataHeaderExtensionContext, 'dataHeaderExtensions'> implements PblNgridDataHeaderExtensionRef {\n  readonly name: 'cellResizer' = 'cellResizer';\n  readonly kind: 'dataHeaderExtensions' = 'dataHeaderExtensions';\n\n  constructor(tRef: TemplateRef<PblNgridDataHeaderExtensionContext>, registry: PblNgridRegistryService) { super(tRef, registry); }\n\n  shouldRender(context: PblNgridDataHeaderExtensionContext): boolean {\n    return !!context.col.resize;\n  }\n}\n","import { PblColumn } from '@pebula/ngrid';\n\ndeclare module '@pebula/ngrid/lib/grid/column/model/column' {\n  interface PblColumn {\n    resize: boolean;\n  }\n}\n\n\ndeclare module '@pebula/ngrid/core/lib/models/column' {\n  interface PblColumnDefinition {\n    resize?: boolean;\n  }\n}\n\nexport function colResizeExtendGrid(): void {\n  PblColumn.extendProperty('resize');\n}\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'pbl-drag-plugin-default-templates',\n  template:\n`<pbl-ngrid-drag-resize *pblNgridCellResizerRef=\"let ctx\" [context]=\"ctx\"></pbl-ngrid-drag-resize>\n<span *pblNgridCellDraggerRef=\"let ctx\" [pblNgridColumnDrag]=\"ctx.col\" cdkDragRootElementClass=\"cdk-drag\"></span>`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class DragPluginDefaultTemplatesComponent {}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\nimport { PblNgridModule, provideCommon, ngridPlugin } from '@pebula/ngrid';\n\nimport './drag-and-drop/column/extend-grid'; // to make sure d.ts stay in published lib and so agumentation kicks in\nimport { colReorderExtendGrid } from './drag-and-drop/column/extend-grid'\nimport { PblNgridAggregationContainerDirective } from './drag-and-drop/column/aggregation-column'\nimport { PblNgridCellDraggerRefDirective } from './drag-and-drop/column/cell-dragger-ref'\nimport { PblNgridColumnDragDirective } from './drag-and-drop/column/column-drag'\nimport { PblNgridColumnDropContainerDirective } from './drag-and-drop/column/column-drop-container'\nimport { PblNgridColumnDragContainerDirective, COL_DRAG_CONTAINER_PLUGIN_KEY } from './drag-and-drop/column/column-drag-container'\nimport { PblNgridColumnReorderPluginDirective, COL_REORDER_PLUGIN_KEY } from './drag-and-drop/column/column-reorder-plugin'\n\nimport { CdkLazyDropList } from './drag-and-drop/core/drop-list';\nimport { CdkLazyDrag } from './drag-and-drop/core/drag';\nimport { PblDragHandle } from './drag-and-drop/core/drag-handle';\n\nimport { PblNgridRowReorderPluginDirective, ROW_REORDER_PLUGIN_KEY } from './drag-and-drop/row/row-reorder-plugin';\nimport { PblNgridRowDragDirective } from './drag-and-drop/row/row-drag';\n\nimport { PblNgridDragResizeComponent, COL_RESIZE_PLUGIN_KEY } from './column-resize/column-resize.component';\nimport { PblNgridCellResizerRefDirective } from './column-resize/cell-resizer-ref';\nimport './column-resize/extend-grid'; // to make sure d.ts stay in published lib and so agumentation kicks in\nimport { colResizeExtendGrid } from './column-resize/extend-grid';\n\n\nimport { DragPluginDefaultTemplatesComponent } from './default-settings.component';\n\nexport function ngridPlugins() {\n  return [\n    ngridPlugin({ id: ROW_REORDER_PLUGIN_KEY }, PblNgridRowReorderPluginDirective),\n    ngridPlugin({ id: COL_DRAG_CONTAINER_PLUGIN_KEY }, PblNgridColumnDragContainerDirective),\n    ngridPlugin({ id: COL_REORDER_PLUGIN_KEY, runOnce: colReorderExtendGrid }, PblNgridColumnReorderPluginDirective),\n    ngridPlugin({ id: COL_RESIZE_PLUGIN_KEY, runOnce: colResizeExtendGrid }, PblNgridDragResizeComponent),\n  ]\n}\n\n@NgModule({\n    imports: [\n        CommonModule,\n        PblNgridModule,\n        DragDropModule\n    ],\n    declarations: [\n        DragPluginDefaultTemplatesComponent,\n        CdkLazyDropList, CdkLazyDrag, PblDragHandle,\n        PblNgridRowReorderPluginDirective, PblNgridRowDragDirective,\n        PblNgridColumnDragContainerDirective,\n        PblNgridColumnDropContainerDirective, PblNgridColumnReorderPluginDirective, PblNgridColumnDragDirective, PblNgridCellDraggerRefDirective,\n        PblNgridAggregationContainerDirective,\n        PblNgridDragResizeComponent, PblNgridCellResizerRefDirective,\n    ],\n    exports: [\n        DragDropModule,\n        CdkLazyDropList, CdkLazyDrag, PblDragHandle,\n        PblNgridRowReorderPluginDirective, PblNgridRowDragDirective,\n        PblNgridColumnDragContainerDirective,\n        PblNgridColumnDropContainerDirective, PblNgridColumnReorderPluginDirective, PblNgridColumnDragDirective, PblNgridCellDraggerRefDirective,\n        PblNgridAggregationContainerDirective,\n        PblNgridDragResizeComponent, PblNgridCellResizerRefDirective,\n    ]\n})\nexport class PblNgridDragModule {\n\n  static readonly NGRID_PLUGIN = ngridPlugins();\n\n  static withDefaultTemplates(): ModuleWithProviders<PblNgridDragModule> {\n    return {\n      ngModule: PblNgridDragModule,\n      providers: provideCommon( [ { component: DragPluginDefaultTemplatesComponent } ]),\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","patchDropListRef","_uniqueIdCounter","i1.PblNgridColumnDragDirective","i2.PblNgridCellDraggerRefDirective","i3.PblNgridDragResizeComponent","i4.PblNgridCellResizerRefDirective"],"mappings":"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"}