{"version":3,"file":"foblex-ng-drag-grid.mjs","sources":["../../../projects/ng-drag-grid/src/lib/f-body/f-body-cell/f-body-cell-base.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/f-draggable.state.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/domain/f-body-cell/get-cell-under-pointer/get-cell-under-pointer.handler.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/domain/f-body-cell/get-cell-under-pointer/get-cell-under-pointer-request.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/domain/f-cell-item/create-placeholder/create-item-placeholder.handler.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/domain/f-cell-item/create-placeholder/create-item-placeholder-request.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/domain/f-cell-item/get-drag-result/get-drag-result.handler.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/domain/f-cell-item/move-item/move-item.handler.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/domain/f-cell-item/move-item/move-item-request.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/domain/f-cell-item/remove-placeholder/remove-item-placeholder.handler.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/domain/f-cell-item/remove-placeholder/remove-item-placeholder-request.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/f-drag-handle/f-drag-handle.directive.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/f-drag-handle/is-drag-handle.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/domain/f-cell-item/f-cell-item.drag-move.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/domain/f-cell-item/f-cell-item.drag-start.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/domain/f-move-event.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/f-draggable-base.ts","../../../projects/ng-drag-grid/src/lib/f-draggable/f-draggable.directive.ts","../../../projects/ng-drag-grid/src/lib/f-body/f-body-cell/f-body-cell.component.ts","../../../projects/ng-drag-grid/src/lib/f-body/f-body-cell/f-body-cell.component.html","../../../projects/ng-drag-grid/src/lib/f-body/f-body.component.ts","../../../projects/ng-drag-grid/src/lib/f-body/f-body.component.html","../../../projects/ng-drag-grid/src/lib/f-body/f-body-row/f-body-row.component.ts","../../../projects/ng-drag-grid/src/lib/f-body/f-body-row/f-body-row.component.html","../../../projects/ng-drag-grid/src/lib/f-drag-table/f-drag-grid.component.ts","../../../projects/ng-drag-grid/src/lib/f-drag-table/f-drag-grid.component.html","../../../projects/ng-drag-grid/src/lib/f-cell-item/f-cell-item-base.ts","../../../projects/ng-drag-grid/src/lib/f-cell-item/f-cell-item.component.ts","../../../projects/ng-drag-grid/src/lib/f-cell-item/f-cell-item.component.html","../../../projects/ng-drag-grid/src/lib/f-header/f-header-cell/f-header-cell.component.ts","../../../projects/ng-drag-grid/src/lib/f-header/f-header-cell/f-header-cell.component.html","../../../projects/ng-drag-grid/src/lib/f-header/f-header.component.ts","../../../projects/ng-drag-grid/src/lib/f-header/f-header.component.html","../../../projects/ng-drag-grid/src/lib/f-header/f-header-row/f-header-row.component.ts","../../../projects/ng-drag-grid/src/lib/f-header/f-header-row/f-header-row.component.html","../../../projects/ng-drag-grid/src/foblex-ng-drag-grid.ts"],"sourcesContent":["import { IHasHostElement } from '@foblex/core';\nimport { InjectionToken } from '@angular/core';\n\nexport const F_BODY_CELL = new InjectionToken<FBodyCellBase>('F_BODY_CELL');\n\nexport abstract class FBodyCellBase implements IHasHostElement {\n\n  public abstract uid: string;\n\n  public abstract id: string;\n\n  public abstract hostElement: HTMLElement;\n\n  public abstract disabled: boolean;\n\n  public highlight(): void {\n    this.hostElement.classList.add('f-drag-over');\n  }\n\n  public clearHighlight(): void {\n    this.hostElement.classList.remove('f-drag-over');\n  }\n}\n","import { Injectable, InjectionToken } from '@angular/core';\nimport { IFDraggedHandler } from './domain';\nimport { ITransformModel, Point, TransformModelExtensions } from '@foblex/core';\nimport { FBodyCellBase } from '../f-body';\nimport { FCellItemBase } from '../f-cell-item';\n\nexport const F_DRAGGABLE_STATE = new InjectionToken<FDraggableState>('F_DRAGGABLE_STATE');\n\n@Injectable()\nexport class FDraggableState {\n\n  public transform: ITransformModel = TransformModelExtensions.default();\n\n  public containerHost: HTMLElement | undefined;\n\n  private items: FCellItemBase[] = [];\n\n  private cells: FBodyCellBase[] = [];\n\n  public draggedItems: IFDraggedHandler[] = [];\n\n  public onPointerDownScale: number = 1;\n\n  public onPointerDownPosition: Point = new Point(0, 0);\n\n  public setContainerHost(element: HTMLElement): void {\n    this.containerHost = element;\n  }\n\n  public findItem(element: HTMLElement): FCellItemBase | undefined {\n    return this.items.find((x) => x.hostElement.contains(element));\n  }\n\n  public addItem(item: FCellItemBase): void {\n    this.items.push(item);\n  }\n\n  public removeItem(item: FCellItemBase): void {\n    this.items = this.items.filter((x) => x.uid !== item.uid);\n  }\n\n  public findCell(element: HTMLElement): FBodyCellBase | undefined {\n    return this.cells.find((x) => x.hostElement.contains(element));\n  }\n\n  public addCell(cell: FBodyCellBase): void {\n    this.cells.push(cell);\n  }\n\n  public removeCell(cell: FBodyCellBase): void {\n    this.cells = this.cells.filter((x) => x.uid !== cell.uid);\n  }\n\n  public reset(): void {\n    this.draggedItems.forEach((item) => {\n      item.fTimetableItem.clearHighlight();\n    });\n    this.draggedItems = [];\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { IHandler, IPointerEvent } from '@foblex/core';\nimport { FBodyCellBase } from '../../../../f-body';\nimport { F_DRAGGABLE_STATE, FDraggableState } from '../../../f-draggable.state';\nimport { GetCellUnderPointerRequest } from './get-cell-under-pointer-request';\n\n@Injectable()\nexport class GetCellUnderPointerHandler\n  implements IHandler<GetCellUnderPointerRequest, FBodyCellBase | undefined> {\n\n  constructor(\n    @Inject(F_DRAGGABLE_STATE) private fDraggableState: FDraggableState,\n  ) {\n  }\n\n  public handle(request: GetCellUnderPointerRequest): FBodyCellBase | undefined {\n    let result = this.getBodyCell(request.event);\n    if (result && result.disabled) {\n      result = undefined;\n    }\n    return result;\n  }\n\n  private getBodyCell(event: IPointerEvent): FBodyCellBase | undefined {\n    let result: FBodyCellBase | undefined;\n    const fCellElement = this.getCellElementsUnderPointer(event);\n\n    if (fCellElement) {\n      result = this.getCellComponentByElement(fCellElement);\n    }\n\n    return result;\n  }\n\n  private getCellElementsUnderPointer(event: IPointerEvent): HTMLElement | undefined {\n    const elements = document.elementsFromPoint(event.getPosition().x, event.getPosition().y);\n\n    const result = elements.find((x) => x.tagName.toLowerCase() === 'f-body-cell') as HTMLElement | undefined;\n    return result;\n  }\n\n  private getCellComponentByElement(element: HTMLElement): FBodyCellBase | undefined {\n    const result = this.fDraggableState.findCell(element);\n    return result;\n  }\n}\n","import { IPointerEvent } from '@foblex/core';\n\nexport class GetCellUnderPointerRequest {\n\n  constructor(\n    public event: IPointerEvent\n  ) {\n  }\n}\n","import { DomElementExtensions, IHandler } from '@foblex/core';\nimport { CreateItemPlaceholderRequest } from './create-item-placeholder-request';\n\nexport class CreateItemPlaceholderHandler\n  implements IHandler<CreateItemPlaceholderRequest, HTMLElement> {\n\n  public handle(request: CreateItemPlaceholderRequest): HTMLElement {\n    const element = request.targetElement;\n\n    const fBodyCellContainer = element.parentElement;\n    if (!fBodyCellContainer) {\n      throw new Error('Element must be a child of f-body-cell');\n    }\n\n    const placeholder = this.createPlaceholder(request);\n\n    fBodyCellContainer.replaceChild(placeholder, element);\n\n    return placeholder;\n  }\n\n  private createPlaceholder(request: CreateItemPlaceholderRequest): HTMLElement {\n    const result = DomElementExtensions.deepCloneNode(request.targetElement);\n\n    result.innerHTML = '';\n    result.style.width = `${ request.initialRect.width }px`;\n    result.style.height = `${ request.initialRect.height }px`;\n\n    return result;\n  }\n}\n","import { IRect } from '@foblex/core';\n\nexport class CreateItemPlaceholderRequest {\n\n  constructor(\n    public targetElement: HTMLElement,\n    public initialRect: IRect\n  ) {\n  }\n}\n","import { IHandler } from '@foblex/core';\nimport { F_DRAGGABLE_STATE, FDraggableState } from '../../../f-draggable.state';\nimport { Inject, Injectable } from '@angular/core';\nimport { IDragResult } from './i-drag-result';\n\n@Injectable()\nexport class GetDragResultHandler implements IHandler<void, IDragResult[]> {\n\n  constructor(\n    @Inject(F_DRAGGABLE_STATE) private fDraggableState: FDraggableState,\n  ) {\n  }\n\n  public handle(): IDragResult[] {\n    let result: IDragResult[] = [];\n\n    const items = this.fDraggableState.draggedItems || [];\n\n    for (let i = 0; i < items.length; i++) {\n      items[ i ].end();\n      const cellId = items[ i ].fTimetableItem.parentId;\n      const itemId = items[ i ].fTimetableItem.hostElement.id;\n\n      result.push({\n        currentCellId: cellId,\n        itemId: itemId\n      });\n    }\n\n    return result;\n  }\n}\n","import { IHandler, IPoint, ISize } from '@foblex/core';\nimport { MoveItemRequest } from './move-item-request';\n\nexport class MoveItemHandler\n  implements IHandler<MoveItemRequest, void> {\n\n  public handle(request: MoveItemRequest): void {\n    this.changeStyles(request.targetElement, request.size, request.position);\n  }\n\n  private changeStyles(element: HTMLElement, size: ISize, position: IPoint): void {\n    element.style.position = 'absolute';\n    element.style.zIndex = '1000';\n    element.style.width = `${ size.width }px`;\n    element.style.height = `${ size.height }px`;\n    element.style.left = `${ 0 }px`;\n    element.style.top = `${ 0 }px`;\n    element.style.transform = 'translate(' + position.x + 'px,' + position.y + 'px)';\n  }\n}\n","import { IPoint, ISize } from '@foblex/core';\n\nexport class MoveItemRequest {\n\n  constructor(\n    public targetElement: HTMLElement,\n    public size: ISize,\n    public position: IPoint\n  ) {\n  }\n}\n","import { IHandler } from '@foblex/core';\nimport { RemoveItemPlaceholderRequest } from './remove-item-placeholder-request';\n\nexport class RemoveItemPlaceholderHandler\n  implements IHandler<RemoveItemPlaceholderRequest, void> {\n\n  public handle(request: RemoveItemPlaceholderRequest): void {\n\n    const fBodyCellContainer = request.placeholder.parentElement;\n    if (!fBodyCellContainer) {\n      throw new Error('Element must be a child of f-body-cell');\n    }\n\n    request.targetElement.removeAttribute('style');\n    fBodyCellContainer.replaceChild(request.targetElement, request.placeholder);\n    request.placeholder.remove();\n  }\n}\n","export class RemoveItemPlaceholderRequest {\n\n  constructor(\n    public placeholder: HTMLElement,\n    public targetElement: HTMLElement,\n  ) {\n  }\n}\n","import {\n  Directive, ElementRef, InjectionToken, Input, OnDestroy\n} from \"@angular/core\";\nimport { Subject } from 'rxjs';\nimport { BooleanExtensions, IHasHostElement } from '@foblex/core';\n\nexport const F_DRAG_HANDLE: InjectionToken<FDragHandleDirective> = new InjectionToken<FDragHandleDirective>('F_DRAG_HANDLE');\n\n@Directive({\n  selector: \"[fDragHandle]\",\n  standalone: true,\n  host: {\n    class: \"f-drag-handle f-component\",\n    '[class.f-drag-handle-disabled]': 'disabled'\n  },\n  providers: [ { provide: F_DRAG_HANDLE, useExisting: FDragHandleDirective } ],\n})\nexport class FDragHandleDirective implements IHasHostElement, OnDestroy {\n\n  public readonly stateChanges: Subject<void> = new Subject<void>();\n\n  @Input('fDragHandleDisabled')\n  public get disabled(): boolean {\n    return this.isDisabled;\n  }\n\n  public set disabled(isDisabled: boolean | undefined | string) {\n    const value = BooleanExtensions.castToBoolean(isDisabled);\n    if (value !== this.isDisabled) {\n      this.isDisabled = value;\n      this.stateChanges.next();\n    }\n  }\n\n  private isDisabled: boolean = false;\n\n  public get hostElement(): HTMLElement {\n    return this.elementReference.nativeElement;\n  }\n\n  constructor(\n    private elementReference: ElementRef<HTMLElement>\n  ) {\n  }\n\n  public ngOnDestroy(): void {\n    this.stateChanges.complete();\n  }\n}\n","export function isDragHandle(element: HTMLElement | SVGElement): boolean {\n  const dragHandle = getClosestDragHandle(element);\n  return !!dragHandle && !isElementOrParentExcluded(element);\n}\n\nfunction isElementOrParentExcluded(element: HTMLElement | SVGElement): boolean {\n  const isContains = isElementContainsClass(element);\n  const parentElement = (element.parentElement as HTMLElement);\n  const dragHandle = getClosestDragHandle(parentElement);\n  if (!isContains && !!dragHandle) {\n    return isElementOrParentExcluded(parentElement);\n  }\n  return isContains;\n}\n\nfunction getClosestDragHandle(element: HTMLElement | SVGElement): HTMLElement {\n  return element.closest('.f-drag-handle') as HTMLElement;\n}\n\nfunction isElementContainsClass(element: HTMLElement | SVGElement): boolean {\n  return element.classList.contains('f-drag-handle-disabled');\n}\n","import { IPoint, IRect, Point, PointExtensions, RectExtensions } from '@foblex/core';\nimport { FDraggableState } from '../../f-draggable.state';\nimport { IFDraggedHandler } from '../i-f-dragged-handler';\nimport { MoveItemHandler, MoveItemRequest } from './move-item';\nimport { CreateItemPlaceholderHandler, CreateItemPlaceholderRequest } from './create-placeholder';\nimport { RemoveItemPlaceholderHandler, RemoveItemPlaceholderRequest } from './remove-placeholder';\nimport { FCellItemBase } from '../../../f-cell-item';\n\nexport class FCellItemDragMove implements IFDraggedHandler {\n\n  private onPointerDownPosition: IPoint = PointExtensions.initialize();\n  private placeholder: HTMLElement | undefined;\n\n  private parentCell: HTMLElement | undefined;\n  private initialRect: IRect = RectExtensions.initialize();\n\n  private initialScrollTop: number = 0;\n\n  private get draggedElement(): HTMLElement {\n    return this.fTimetableItem.hostElement;\n  }\n\n  private moveHandler: MoveItemHandler = new MoveItemHandler();\n\n  constructor(\n    private fDraggableState: FDraggableState,\n    public fTimetableItem: FCellItemBase\n  ) {\n    this.onPointerDownPosition = new Point();\n  }\n\n  public prepare(): void {\n    this.fTimetableItem.clearHighlight();\n    this.parentCell = this.draggedElement.parentElement as HTMLElement;\n    if (!this.parentCell) {\n      throw new Error('FTimetable item parent element not found');\n    }\n\n    this.initialRect = RectExtensions.fromElement(this.draggedElement);\n    const containerRect = RectExtensions.fromElement(this.fDraggableState.containerHost!);\n    this.initialScrollTop = this.fDraggableState.containerHost!.scrollTop;\n    this.onPointerDownPosition = Point.fromPoint(this.initialRect).sub(containerRect).add({ x: 0, y: this.initialScrollTop });\n\n    this.placeholder = new CreateItemPlaceholderHandler().handle(\n      new CreateItemPlaceholderRequest(this.draggedElement, this.initialRect)\n    );\n\n    this.moveHandler.handle(\n      new MoveItemRequest(this.draggedElement, this.initialRect, this.onPointerDownPosition)\n    );\n    this.fDraggableState.containerHost?.appendChild(this.draggedElement);\n  }\n\n  public move(difference: IPoint): void {\n    const differenceScroll = this.fDraggableState.containerHost!.scrollTop - this.initialScrollTop;\n    const position = Point.fromPoint(this.onPointerDownPosition).add(difference).add({ x: 0, y: differenceScroll });\n    this.moveHandler.handle(\n      new MoveItemRequest(this.draggedElement, this.initialRect, position)\n    );\n  }\n\n  public end(): void {\n    this.fDraggableState.containerHost?.removeChild(this.draggedElement);\n    new RemoveItemPlaceholderHandler().handle(\n      new RemoveItemPlaceholderRequest(this.placeholder!, this.draggedElement)\n    );\n  }\n}\n","import { IHandler, IPointerEvent, ITransformModel, Point } from '@foblex/core';\nimport { Inject, Injectable } from '@angular/core';\nimport { F_DRAGGABLE_STATE, FDraggableState } from '../../f-draggable.state';\nimport { isDragHandle } from '../../f-drag-handle';\nimport { FCellItemDragMove } from './f-cell-item.drag-move';\n\n@Injectable()\nexport class FCellItemDragStart implements IHandler<IPointerEvent, void> {\n\n  private get transform(): ITransformModel {\n    return this.fDraggableState.transform;\n  }\n\n  private get containerHost(): HTMLElement {\n    return this.fDraggableState.containerHost!;\n  }\n\n  constructor(\n    @Inject(F_DRAGGABLE_STATE) private fDraggableState: FDraggableState,\n  ) {\n  }\n\n  public handle(event: IPointerEvent): void {\n    const item = this.fDraggableState.findItem(event.targetElement);\n\n    if (!this.containerHost) {\n      throw new Error('Container host is not defined');\n    }\n\n    const pointerPositionInContainer = Point.fromPoint(event.getPosition()).elementTransform(this.containerHost);\n\n    if (!item || item.disabled || this.fDraggableState.draggedItems.length || !isDragHandle(event.targetElement)) {\n      return;\n    }\n\n    this.fDraggableState.onPointerDownScale = this.transform.scale;\n    this.fDraggableState.onPointerDownPosition = pointerPositionInContainer.div(this.transform.scale);\n    this.fDraggableState.draggedItems = [ new FCellItemDragMove(\n      this.fDraggableState,\n      item\n    ) ];\n  }\n}\n","import { IDragResult } from './f-cell-item';\n\nexport class FMoveEvent {\n\n  constructor(\n    public items: IDragResult[],\n    public toCellId: string,\n  ) {\n  }\n}\n","import {\n  EventExtensions,\n  IMouseEvent,\n  IPoint,\n  IPointerEvent,\n  ITouchDownEvent,\n  ITouchMoveEvent, ITouchUpEvent,\n  PointExtensions\n} from '@foblex/core';\nimport { ICanRunOutsideAngular } from '@foblex/core/drag-and-drop/i-can-run-outside-angular';\n\nconst IGNORE_TIME: number = 400;\n\nexport abstract class FDraggableBase {\n\n  private element!: Document;\n\n  private mouseListeners: Function = EventExtensions.emptyListener();\n  private touchListeners: Function = EventExtensions.emptyListener();\n\n  private startListeners: Function = EventExtensions.emptyListener();\n\n  public isSyntheticEvent(event: MouseEvent): boolean {\n    const result = !!this.lastTouchEventTime &&\n        (this.lastTouchEventTime + IGNORE_TIME > Date.now());\n    return result;\n  }\n\n  private lastTouchEventTime: number = 0;\n\n  public isDragStarted: boolean = false;\n  private dragStartThreshold: number = 5;\n  private dragStartDelay: number = 0;\n\n  private dragStartTime: number = 0;\n  private dragStartPosition: IPoint = PointExtensions.initialize();\n\n  public abstract disabled: boolean;\n\n  private moveHandler: Function = this.checkDragSequenceToStart;\n\n  protected constructor(\n      protected ngZone: ICanRunOutsideAngular\n  ) {\n  }\n\n  private onMouseDown = (event: MouseEvent) => {\n    const isSyntheticEvent = this.isSyntheticEvent(event);\n    const isFakeEvent = isFakeMousedownFromScreenReader(event);\n    const mouseEvent = new IMouseEvent(event);\n\n    if (isSyntheticEvent || isFakeEvent || this.disabled) {\n      return;\n    }\n    let result = this.onPointerDown(mouseEvent);\n    if (result) {\n\n      this.dragStartTime = Date.now();\n      this.dragStartPosition = mouseEvent.getPosition();\n\n      this.ngZone.runOutsideAngular(() => {\n        this.element.addEventListener('selectstart', this.preventDefault, EventExtensions.activeListener());\n        this.element.addEventListener('mousemove', this.onMouseMove);\n        this.element.addEventListener('mouseup', this.onMouseUp);\n      });\n\n      this.mouseListeners = () => {\n        this.element.removeEventListener('selectstart', this.preventDefault, EventExtensions.activeListener());\n        this.element.removeEventListener('mousemove', this.onMouseMove);\n        this.element.removeEventListener('mouseup', this.onMouseUp);\n      };\n    }\n  }\n\n  private onTouchDown = (event: TouchEvent) => {\n    const isFakeEvent = isFakeTouchstartFromScreenReader(event as TouchEvent)\n    const touchEvent = new ITouchDownEvent(event);\n\n    if (isFakeEvent || this.disabled) {\n      return;\n    }\n    let result = this.onPointerDown(new ITouchDownEvent(event));\n    if (result) {\n\n      this.dragStartTime = Date.now();\n      this.dragStartPosition = touchEvent.getPosition();\n\n      this.ngZone.runOutsideAngular(() => {\n        this.element.addEventListener('selectstart', this.preventDefault, EventExtensions.activeListener());\n        this.element.addEventListener('touchmove', this.onTouchMove);\n        this.element.addEventListener('touchend', this.onTouchUp);\n      });\n\n      this.touchListeners = () => {\n        this.element.removeEventListener('selectstart', this.preventDefault, EventExtensions.activeListener());\n        this.element.removeEventListener('touchmove', this.onTouchMove);\n        this.element.removeEventListener('touchend', this.onTouchUp);\n      };\n    }\n  }\n\n  private onMouseMove = (event: MouseEvent) => {\n    this.moveHandler(new IMouseEvent(event));\n  }\n\n  private onTouchMove = (event: TouchEvent) => {\n    this.moveHandler(new ITouchMoveEvent(event));\n  }\n\n  private checkDragSequenceToStart(event: IPointerEvent): void {\n    const pointerPosition = event.getPosition();\n\n    if (!this.isDragStarted) {\n      const distanceX = Math.abs(pointerPosition.x - this.dragStartPosition.x);\n      const distanceY = Math.abs(pointerPosition.y - this.dragStartPosition.y);\n      const isOverThreshold = distanceX + distanceY >= this.dragStartThreshold;\n\n      if (isOverThreshold) {\n        const isDelayElapsed = Date.now() >= this.dragStartTime + this.dragStartDelay;\n\n        if (!isDelayElapsed) {\n          this.endDragSequence();\n          return;\n        }\n\n        event.preventDefault();\n        this.prepareDragSequence(event);\n        this.isDragStarted = true;\n        this.moveHandler = this.onPointerMove;\n        if (isTouchEvent(event.originalEvent)) {\n          this.lastTouchEventTime = Date.now();\n        }\n      }\n    }\n  }\n\n  protected abstract prepareDragSequence(event: IPointerEvent): void;\n\n  private onMouseUp = (event: MouseEvent) => {\n    if (this.isDragStarted) {\n      this.onPointerUp(new IMouseEvent(event));\n    }\n    this.endDragSequence();\n  }\n\n  private onTouchUp = (event: TouchEvent) => {\n    if (this.isDragStarted) {\n      this.onPointerUp(new ITouchUpEvent(event));\n    }\n    this.endDragSequence();\n  }\n\n  private endDragSequence(): void {\n    this.isDragStarted = false;\n    this.moveHandler = this.checkDragSequenceToStart;\n    this.mouseListeners();\n    this.mouseListeners = EventExtensions.emptyListener();\n    this.touchListeners();\n    this.touchListeners = EventExtensions.emptyListener();\n  }\n\n  protected abstract onPointerDown(event: IPointerEvent): boolean;\n\n  protected abstract onPointerMove(event: IPointerEvent): void;\n\n  protected abstract onPointerUp(event: IPointerEvent): void;\n\n  protected subscribe(elementToSubscribe: Document): void {\n    if (this.element) {\n      this.unsubscribe();\n    }\n    this.element = elementToSubscribe;\n\n    this.ngZone.runOutsideAngular(() => {\n      this.element.addEventListener('mousedown', this.onMouseDown, EventExtensions.activeListener());\n      this.element.addEventListener('touchstart', this.onTouchDown, EventExtensions.passiveListener());\n    });\n\n    this.startListeners = () => {\n      this.element.removeEventListener('mousedown', this.onMouseDown, EventExtensions.activeListener());\n      this.element.removeEventListener('touchstart', this.onTouchDown, EventExtensions.passiveListener());\n    };\n  }\n\n  protected unsubscribe(): void {\n\n    this.startListeners();\n    this.startListeners = EventExtensions.emptyListener();\n    this.touchListeners();\n    this.touchListeners = EventExtensions.emptyListener();\n    this.mouseListeners();\n    this.mouseListeners = EventExtensions.emptyListener();\n  }\n\n  protected preventDefault = (event: Event) => {\n      event.preventDefault();\n  };\n}\n\nfunction isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n  return event.type[ 0 ] === 't';\n}\n\nfunction isFakeMousedownFromScreenReader(event: MouseEvent): boolean {\n  return event.buttons === 0 || (event.offsetX === 0 && event.offsetY === 0);\n}\n\nfunction isFakeTouchstartFromScreenReader(event: TouchEvent): boolean {\n  const touch: Touch | undefined =\n      (event.touches && event.touches[ 0 ]) || (event.changedTouches && event.changedTouches[ 0 ]);\n  return (\n      !!touch &&\n      touch.identifier === -1 &&\n      (touch.radiusX == null || touch.radiusX === 1) &&\n      (touch.radiusY == null || touch.radiusY === 1)\n  );\n}\n","import {\n  AfterViewInit, booleanAttribute,\n  Directive,\n  ElementRef, EventEmitter, Inject,\n  Injector,\n  Input,\n  NgZone,\n  OnDestroy,\n  Output\n} from '@angular/core';\nimport { FDraggableBase } from './f-draggable-base';\nimport { of, Subject, Subscription, switchMap } from 'rxjs';\nimport { DOCUMENT } from '@angular/common';\nimport { IPointerEvent, Point } from '@foblex/core';\nimport { isDragHandle } from './f-drag-handle';\nimport { F_DRAGGABLE_STATE, FDraggableState } from './f-draggable.state';\nimport {\n  GetDragResultHandler,\n  FCellItemDragStart, GetCellUnderPointerHandler, GetCellUnderPointerRequest\n} from './domain';\nimport { FMoveEvent } from './domain';\nimport { FBodyCellBase } from '../f-body';\n\n@Directive({\n  selector: \"fDraggable\",\n  standalone: true,\n  providers: [\n    FDraggableState,\n    { provide: F_DRAGGABLE_STATE, useExisting: FDraggableState },\n    GetCellUnderPointerHandler,\n    FCellItemDragStart,\n    GetDragResultHandler\n  ],\n  host: {\n    '[class.f-disabled]': 'disabled'\n  }\n})\nexport class FDraggableDirective extends FDraggableBase implements AfterViewInit, OnDestroy {\n\n  private subscriptions$: Subscription = new Subscription();\n\n  @Input({ transform: booleanAttribute })\n  public override disabled: boolean = false;\n\n  public get hostElement(): HTMLElement {\n    return this.elementReference.nativeElement;\n  }\n\n  @Output()\n  public fMovedTo: EventEmitter<FMoveEvent> = new EventEmitter<FMoveEvent>();\n\n  private readonly document: Document;\n\n  private fBodyCell: FBodyCellBase | undefined;\n\n  constructor(\n    private elementReference: ElementRef<HTMLElement>,\n    ngZone: NgZone,\n    private injector: Injector,\n    @Inject(DOCUMENT) document: any,\n    @Inject(F_DRAGGABLE_STATE) private fDraggableState: FDraggableState\n  ) {\n    super(ngZone);\n    this.document = document as Document;\n  }\n\n  public ngAfterViewInit(): void {\n    super.subscribe(this.document);\n  }\n\n  protected override onPointerDown(event: IPointerEvent): boolean {\n    let result: boolean =\n      event.isMouseLeftButton()\n      && isDragHandle(event.targetElement)\n      && !this.isDragStarted;\n\n    return result;\n  }\n\n  protected override prepareDragSequence(event: IPointerEvent) {\n\n    //TODO: Selection area (for future)\n\n    this.injector.get(FCellItemDragStart).handle(event);\n\n    this.fDraggableState.draggedItems.forEach((item) => {\n      item.prepare?.();\n    });\n\n    this.hostElement.classList.add('f-dragging');\n  }\n\n  protected override onPointerMove(event: IPointerEvent): void {\n    const pointerPositionInCanvas = Point.fromPoint(event.getPosition()).elementTransform(this.hostElement);\n    const difference = pointerPositionInCanvas.div(this.fDraggableState.onPointerDownScale).sub(this.fDraggableState.onPointerDownPosition);\n    this.fDraggableState.draggedItems.forEach((item) => {\n      item.move(difference);\n    });\n    this.fBodyCell?.clearHighlight();\n    this.fBodyCell = this.getFBodyCellUnderPointer(event);\n    this.fBodyCell?.highlight();\n  }\n\n  protected override onPointerUp(event: IPointerEvent): void {\n\n    //TODO: Selection area (for future)\n\n    const dragResult = this.injector.get(GetDragResultHandler).handle();\n\n    if (dragResult.length) {\n      const targetCell = this.getFBodyCellUnderPointer(event);\n      if (targetCell) {\n        this.fMovedTo.emit(new FMoveEvent(dragResult, targetCell.id));\n      }\n    }\n\n    this.hostElement.classList.remove('f-dragging');\n    this.fBodyCell?.clearHighlight();\n    this.fDraggableState.reset();\n  }\n\n  private getFBodyCellUnderPointer(event: IPointerEvent): FBodyCellBase | undefined {\n    return this.injector.get(GetCellUnderPointerHandler).handle(\n      new GetCellUnderPointerRequest(event)\n    );\n  }\n\n  public ngOnDestroy(): void {\n    super.unsubscribe();\n    this.subscriptions$.unsubscribe();\n  }\n}\n\n","import {\r\n  booleanAttribute,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  Inject,\r\n  Input,\r\n  OnDestroy, OnInit\r\n} from '@angular/core';\r\nimport { F_BODY_CELL, FBodyCellBase } from './f-body-cell-base';\r\nimport { F_DRAGGABLE_STATE, FDraggableState } from '../../f-draggable';\r\n\r\nlet uniqueId: number = 0;\r\n\r\n@Component({\r\n  selector: 'f-body-cell',\r\n  templateUrl: './f-body-cell.component.html',\r\n  styleUrl: './f-body-cell.component.scss',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  providers: [{\r\n    provide: F_BODY_CELL,\r\n    useExisting: FBodyCellComponent\r\n  }],\r\n  host: {\r\n    'class': 'f-component f-cell f-body-cell',\r\n    '[attr.id]': 'id',\r\n    '[class.f-disabled]': 'disabled'\r\n  }\r\n})\r\nexport class FBodyCellComponent extends FBodyCellBase implements OnInit, OnDestroy {\r\n\r\n  public uid = `f-body-cell-${ uniqueId++ }`;\r\n\r\n  @Input()\r\n  public override get id(): string {\r\n    return this._id!;\r\n  }\r\n\r\n  public override set id(value: any) {\r\n    this._id = value || this.uid;\r\n  }\r\n\r\n  private _id: string | undefined;\r\n\r\n  public override get hostElement(): HTMLElement {\r\n    return this.elementReference.nativeElement;\r\n  }\r\n\r\n  @Input({ transform: booleanAttribute })\r\n  public override disabled: boolean = false;\r\n\r\n  constructor(\r\n    @Inject(F_DRAGGABLE_STATE) private fDraggableState: FDraggableState,\r\n    private elementReference: ElementRef<HTMLElement>\r\n  ) {\r\n    super();\r\n    this.id = this.id;\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this.fDraggableState.addCell(this);\r\n  }\r\n\r\n  public ngOnDestroy(): void {\r\n    this.fDraggableState.removeCell(this);\r\n  }\r\n}\r\n","<ng-content></ng-content>\r\n\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'f-body',\r\n  templateUrl: './f-body.component.html',\r\n  styleUrl: './f-body.component.scss',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  host: {\r\n    'class': 'f-component f-body'\r\n  }\r\n})\r\nexport class FBodyComponent {\r\n\r\n}\r\n\r\n","<ng-content></ng-content>\r\n\r\n\r\n\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'f-body-row',\r\n  templateUrl: './f-body-row.component.html',\r\n  styleUrl: './f-body-row.component.scss',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  host: {\r\n    'class': 'f-component f-body-row'\r\n  }\r\n})\r\nexport class FBodyRowComponent {\r\n\r\n}\r\n\r\n","<ng-content></ng-content>\r\n\r\n\r\n\r\n\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component, ElementRef,\r\n  Inject,\r\n  OnInit,\r\n} from '@angular/core';\r\nimport { F_DRAGGABLE_STATE, FDraggableDirective, FDraggableState } from '../f-draggable';\r\nimport { IHasHostElement } from '@foblex/core';\r\n\r\n@Component({\r\n  selector: 'f-drag-grid',\r\n  templateUrl: './f-drag-grid.component.html',\r\n  styleUrl: './f-drag-grid.component.scss',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  hostDirectives: [ {\r\n    directive: FDraggableDirective,\r\n    inputs: ['disabled'],\r\n    outputs: ['fMovedTo'],\r\n  } ],\r\n  host: {\r\n    'class': 'f-component f-drag-grid'\r\n  }\r\n})\r\nexport class FDragGridComponent implements OnInit, IHasHostElement {\r\n\r\n  public get hostElement(): HTMLElement {\r\n    return this.elementReference.nativeElement;\r\n  }\r\n\r\n  constructor(\r\n    @Inject(F_DRAGGABLE_STATE) private fDraggableState: FDraggableState,\r\n    private elementReference: ElementRef<HTMLElement>\r\n  ) {\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this.fDraggableState.setContainerHost(this.hostElement);\r\n  }\r\n}\r\n","<ng-content></ng-content>\r\n","import { IHasHostElement } from '@foblex/core';\n\nexport abstract class FCellItemBase implements IHasHostElement {\n\n  public abstract uid: string;\n\n  public abstract id: string;\n\n  public abstract hostElement: HTMLElement;\n\n  public abstract disabled: boolean;\n\n  public abstract parentId: string;\n\n  public highlight(): void {\n    this.hostElement.classList.add('f-dragged');\n  }\n\n  public clearHighlight(): void {\n    this.hostElement.classList.remove('f-dragged');\n  }\n}\n","import {\r\n  booleanAttribute,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit\r\n} from '@angular/core';\r\nimport { FCellItemBase } from './f-cell-item-base';\r\nimport { F_DRAGGABLE_STATE, FDraggableState } from '../f-draggable';\r\nimport { F_BODY_CELL, FBodyCellBase } from '../f-body';\r\n\r\nlet uniqueId: number = 0;\r\n\r\n@Component({\r\n  selector: 'f-cell-item',\r\n  templateUrl: './f-cell-item.component.html',\r\n  styleUrl: './f-cell-item.component.scss',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  host: {\r\n    'class': 'f-component f-cell-item',\r\n    '[attr.id]': 'id',\r\n    '[class.f-disabled]': 'disabled'\r\n  }\r\n})\r\nexport class FCellItemComponent extends FCellItemBase implements OnInit, OnDestroy {\r\n\r\n  public uid = `f-drag-table-item-${ uniqueId++ }`;\r\n\r\n  @Input()\r\n  public override get id(): string {\r\n    return this._id!;\r\n  }\r\n\r\n  public override set id(value: any) {\r\n    this._id = value || this.uid;\r\n  }\r\n\r\n  private _id: string | undefined;\r\n\r\n  public override get hostElement(): HTMLElement {\r\n    return this.elementReference.nativeElement;\r\n  }\r\n\r\n  @Input({ transform: booleanAttribute })\r\n  public override disabled: boolean = false;\r\n\r\n  public override get parentId(): string {\r\n    return this.fBodyCell.id;\r\n  }\r\n\r\n  constructor(\r\n    @Inject(F_DRAGGABLE_STATE) private fDraggableState: FDraggableState,\r\n    @Inject(F_BODY_CELL) private fBodyCell: FBodyCellBase,\r\n    private elementReference: ElementRef<HTMLElement>\r\n  ) {\r\n    super();\r\n    this.id = this.id;\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this.fDraggableState.addItem(this);\r\n  }\r\n\r\n  public ngOnDestroy(): void {\r\n    this.fDraggableState.removeItem(this);\r\n  }\r\n}\r\n","\r\n<ng-content></ng-content>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'f-header-cell',\r\n  templateUrl: './f-header-cell.component.html',\r\n  styleUrl: './f-header-cell.component.scss',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  host: {\r\n    'class': 'f-component f-cell f-header-cell'\r\n  }\r\n})\r\nexport class FHeaderCellComponent {\r\n\r\n}\r\n","<ng-content></ng-content>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'f-header',\r\n  templateUrl: './f-header.component.html',\r\n  styleUrl: './f-header.component.scss',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  host: {\r\n    'class': 'f-component f-header'\r\n  }\r\n})\r\nexport class FHeaderComponent {\r\n\r\n}\r\n\r\n","<ng-content></ng-content>\r\n\r\n\r\n\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'f-header-row',\r\n  templateUrl: './f-header-row.component.html',\r\n  styleUrl: './f-header-row.component.scss',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  host: {\r\n    'class': 'f-component f-header-row'\r\n  }\r\n})\r\nexport class FHeaderRowComponent {\r\n\r\n}\r\n\r\n","<ng-content></ng-content>\r\n\r\n\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uniqueId"],"mappings":"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"}