{"version":3,"file":"ngx-spread-table.mjs","sources":["../../../projects/ng-spread-table/src/lib/models/cell.model.ts","../../../projects/ng-spread-table/src/lib/components/default-renderer/default-renderer.component.ts","../../../projects/ng-spread-table/src/lib/components/default-renderer/default-renderer.component.html","../../../projects/ng-spread-table/src/lib/components/renderer/renderer.component.ts","../../../projects/ng-spread-table/src/lib/components/renderer/renderer.component.html","../../../projects/ng-spread-table/src/lib/components/default-editor/default-editor.component.ts","../../../projects/ng-spread-table/src/lib/components/default-editor/default-editor.component.html","../../../projects/ng-spread-table/src/lib/components/editor/editor.component.ts","../../../projects/ng-spread-table/src/lib/components/editor/editor.component.html","../../../projects/ng-spread-table/src/lib/services/sanitizer.pipe.ts","../../../projects/ng-spread-table/src/lib/components/context-menu/context-menu.component.ts","../../../projects/ng-spread-table/src/lib/components/context-menu/context-menu.component.html","../../../projects/ng-spread-table/src/lib/services/undo-redo.service.ts","../../../projects/ng-spread-table/src/lib/spread-table.component.ts","../../../projects/ng-spread-table/src/lib/spread-table.component.html","../../../projects/ng-spread-table/src/lib/models/context-menu.model.ts","../../../projects/ng-spread-table/src/lib/models/spread-table.models.ts","../../../projects/ng-spread-table/src/public-api.ts","../../../projects/ng-spread-table/src/ngx-spread-table.ts"],"sourcesContent":["export class Cell {\r\n  public columnName = '';\r\n  public value?: any;\r\n  public originalValue?: any;\r\n  public selected? = false;\r\n  public disabled? = false;\r\n  public rowIndex = 0;\r\n  //public columnIndex = 0;\r\n  public errors?: string = '';\r\n\r\n  constructor(obj?: Cell) {\r\n    Object.assign(this, obj);\r\n  }\r\n}\r\n\r\nexport class Row {\r\n  public cells: Cell[] = [];\r\n  public rowIndex = 0;\r\n  public selected? = false;\r\n  public disabled? = false;\r\n  public hasErrors? = false;\r\n\r\n  constructor(obj?: Row) {\r\n    Object.assign(this, obj);\r\n  }\r\n}\r\n\r\nexport class Column {\r\n  public name = '';\r\n  public displayName? = 'N/A';\r\n  public minWidth?: number = 0;\r\n  public editable? = true;\r\n  public resizable? = true;\r\n  public validators?: any[] = [];\r\n  public editorComponent?: any;\r\n  public editorParams?: any;\r\n  public rendererComponent?: any;\r\n  public rendererParams?: any;\r\n\r\n  constructor(obj?: Column) {\r\n    Object.assign(this, obj);\r\n    if (!obj?.displayName) {\r\n      this.displayName = obj?.name;\r\n    }\r\n  }\r\n}\r\n\r\n","import { Component } from '@angular/core';\r\nimport { IRendererComponent, IRendererParams } from '../../models/renderer.models';\r\n\r\n@Component({\r\n  selector: 'app-default-renderer',\r\n  templateUrl: './default-renderer.component.html',\r\n  styleUrls: ['./default-renderer.component.scss'],\r\n  standalone: true\r\n})\r\nexport class DefaultRendererComponent implements IRendererComponent {\r\n\r\n  constructor() { }\r\n\r\n  params: IRendererParams | undefined;\r\n\r\n  stInit(params: IRendererParams) {\r\n    this.params = params;\r\n  }\r\n}\r\n","<div class=\"spread-cell-value hideextra\">{{params?.value}}</div>","import { Component, Input, OnChanges, SimpleChanges, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { IRenderer, IRendererComponent, IRendererParams } from '../../models/renderer.models';\r\nimport { DefaultRendererComponent } from '../default-renderer/default-renderer.component';\r\n\r\n\r\n@Component({\r\n  selector: 'app-renderer',\r\n  templateUrl: './renderer.component.html',\r\n  styleUrls: ['./renderer.component.scss'],\r\n  standalone: true\r\n})\r\nexport class RendererComponent implements IRenderer, OnChanges {\r\n\r\n  @Input() rendererParams: IRendererParams | undefined;\r\n\r\n  defaultRenderer = DefaultRendererComponent;\r\n\r\n  constructor() { }\r\n\r\n  @ViewChild('renderer', { static: true, read: ViewContainerRef }) rendererContainer!: ViewContainerRef;\r\n  // @ViewChild(RendererDirective, { static: true }) rendererContainer!: RendererDirective;\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes && this.rendererParams) {\r\n      this.render();\r\n    }\r\n  }\r\n\r\n  private render() {\r\n    const viewContainerRef = this.rendererContainer;\r\n    viewContainerRef.clear();\r\n\r\n    if (this.rendererParams) {\r\n      const componentRef = viewContainerRef.createComponent<IRendererComponent>(this.rendererParams.rendererComponent ? this.rendererParams.rendererComponent : this.defaultRenderer);\r\n      componentRef.instance.stInit(this.rendererParams);\r\n    }\r\n  }\r\n}\r\n","<ng-template #renderer></ng-template>","import { Component, EventEmitter } from '@angular/core';\r\nimport { IEditorComponent, IEditorParams } from '../../models/editor.models';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n  selector: 'app-default-editor',\r\n  templateUrl: './default-editor.component.html',\r\n  styleUrls: ['./default-editor.component.scss'],\r\n  imports: [ReactiveFormsModule],\r\n  standalone: true\r\n})\r\nexport class DefaultEditorComponent implements IEditorComponent {\r\n  setValue: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  constructor() { }\r\n\r\n  params: IEditorParams | undefined;\r\n\r\n  stInit(params: IEditorParams) {\r\n    this.params = params;\r\n  }\r\n\r\n  onKeyDown(e: Event) {\r\n    let event = e as KeyboardEvent;\r\n\r\n    if (event.key === 'Enter' || event.key === 'Escape') {\r\n      this.setValue.emit(this.params?.input.value);\r\n    }\r\n\r\n    e.stopPropagation();\r\n  }\r\n}\r\n","<input class=\"cell-in-edit w-100\"\r\n       (keydown)=\"onKeyDown($event)\"\r\n       (blur)=\"setValue.emit(params?.input.value)\"\r\n       [formControl]=\"params?.input\" />","import { Component, EventEmitter, Input, OnInit, Output, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { IEditor, IEditorComponent, IEditorParams } from '../../models/editor.models';\r\nimport { DefaultEditorComponent } from '../default-editor/default-editor.component';\r\n\r\n@Component({\r\n  selector: 'app-editor',\r\n  templateUrl: './editor.component.html',\r\n  styleUrls: ['./editor.component.scss'],\r\n  standalone: true\r\n})\r\nexport class EditorComponent implements OnInit, IEditor {\r\n\r\n  @Input() editorParams: IEditorParams | undefined;\r\n\r\n  @Output() setValue = new EventEmitter<any>();\r\n\r\n  input = new FormControl('');\r\n  defaultEditor = DefaultEditorComponent;\r\n\r\n  constructor() { }\r\n\r\n  getValue() {\r\n    throw new Error('Method not implemented.');\r\n  }\r\n\r\n\r\n  @ViewChild('editor', { static: true, read: ViewContainerRef }) editorContainer!: ViewContainerRef;\r\n  // @ViewChild(EditorDirective, { static: true }) editorContainer!: EditorDirective;\r\n\r\n  ngOnInit() {\r\n    this.input.setValue(this.editorParams?.value);\r\n    const viewContainerRef = this.editorContainer;\r\n    viewContainerRef.clear();\r\n\r\n    if (this.editorParams) {\r\n      const componentRef = viewContainerRef.createComponent<IEditorComponent>(this.editorParams.editorComponent ? this.editorParams.editorComponent : this.defaultEditor);\r\n      this.editorParams.input = this.input;\r\n      componentRef.instance.stInit(this.editorParams);\r\n      componentRef.instance.setValue = this.setValue;\r\n    }\r\n  }\r\n}\r\n","<ng-template #editor\r\n             (blur)=\"setValue.emit(params?.input.value)\"></ng-template>","import { Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Pipe({ name: 'bypassHtmlSanitizer', standalone: true })\r\nexport class BypassHtmlSanitizerPipe implements PipeTransform {\r\n    sanitizer = inject(DomSanitizer);\r\n\r\n    transform(html: string): SafeHtml {\r\n        return this.sanitizer.bypassSecurityTrustHtml(html);\r\n    }\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ContextMenuModel } from '../../models/context-menu.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BypassHtmlSanitizerPipe } from '../../services/sanitizer.pipe'\r\n\r\n@Component({\r\n  selector: 'app-context-menu',\r\n  templateUrl: './context-menu.component.html',\r\n  styleUrls: ['./context-menu.component.scss'],\r\n  standalone: true,\r\n  imports: [CommonModule, BypassHtmlSanitizerPipe]\r\n})\r\nexport class ContextMenuComponent {\r\n\r\n  @Input() contextMenuItems: ContextMenuModel[] = [];\r\n\r\n  @Output() onContextMenuItemClick: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  onContextMenuClick(event: any, menuItem: ContextMenuModel): any {\r\n    if (!menuItem.disabled) {\r\n      this.onContextMenuItemClick.emit({\r\n        event: event,\r\n        menuEvent: menuItem.menuEvent\r\n      });\r\n    }\r\n  }\r\n\r\n}\r\n","<div class=\"context-menu\">\r\n  @for (menuItem of contextMenuItems;let i=$index; track i) {\r\n  <ng-container>\r\n    @if(menuItem.menuText !== 'separator'){\r\n    <div class=\"menu-link\"\r\n         [ngClass]=\"menuItem.disabled?'disabled':'enabled hover-icon-pop'\"\r\n         (click)=\"onContextMenuClick($event, menuItem)\">\r\n      @if(menuItem.iconHtml){\r\n      <span [innerHtml]=\"menuItem.iconHtml | bypassHtmlSanitizer\"></span>&nbsp;\r\n      }\r\n      {{ menuItem.menuText }}\r\n      @if(menuItem?.shortcut){\r\n      <span class=\"shortcut\">{{menuItem?.shortcut}}</span>\r\n      }\r\n    </div>\r\n    } @else{\r\n    <div class=\"separator\"></div>\r\n    }\r\n  </ng-container>\r\n  }\r\n</div>","import { Injectable } from '@angular/core';\r\n\r\nexport class Change {\r\n  beforeValue: any;\r\n  afterValue: any;\r\n  coordinates = { rowIndex: 0, columnName: '' }\r\n  constructor(pagObj?: Change) {\r\n    Object.assign(this, pagObj);\r\n  }\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class UndoRedoService {\r\n\r\n  public _changesForUndo: Change[][] = [];\r\n  private _changesForRedo: Change[][] = [];\r\n  private _changesCopy: Change[][] = [];\r\n  private stackSize = 20;\r\n\r\n  constructor() { }\r\n\r\n  setStackSize(size: number) {\r\n    this.stackSize = size;\r\n  }\r\n\r\n  setChange(change: Change[]) {\r\n    this._changesForUndo.push(change);\r\n    if (this._changesForUndo.length > this.stackSize) {\r\n      this._changesForUndo.shift();\r\n    }\r\n  }\r\n\r\n  setCopyData(change: Change[]) {\r\n    this._changesCopy = [change];\r\n  }\r\n\r\n  paste() {\r\n    return this._changesCopy[0];\r\n  }\r\n\r\n  undo() {\r\n    let lastChange = this._changesForUndo.pop();\r\n    let redoChange: Change[] = [];\r\n    if (lastChange) {\r\n      lastChange.forEach(change => {\r\n        redoChange.push(new Change({ coordinates: change.coordinates, afterValue: change.beforeValue, beforeValue: change.afterValue }))\r\n      });\r\n      this._changesForRedo.push(redoChange);\r\n      if (this._changesForRedo.length > this.stackSize) {\r\n        this._changesForRedo.shift();\r\n      }\r\n    }\r\n    return lastChange;\r\n  }\r\n\r\n  redo() {\r\n    let lastChange = this._changesForRedo.pop();\r\n    let undoChange: Change[] = [];\r\n    if (lastChange) {\r\n      lastChange.forEach(change => {\r\n        undoChange.push(new Change({ coordinates: change.coordinates, afterValue: change.beforeValue, beforeValue: change.afterValue }))\r\n      });\r\n      this._changesForUndo.push(undoChange);\r\n      if (this._changesForUndo.length > this.stackSize) {\r\n        this._changesForUndo.shift();\r\n      }\r\n    }\r\n    return lastChange;\r\n  }\r\n}\r\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { FormGroup, FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Cell, Column, Row } from './models/cell.model';\r\nimport { SpreadTable } from './models/spread-table.models';\r\nimport { Change, UndoRedoService } from './services/undo-redo.service';\r\nimport { ContextMenuModel } from './models/context-menu.model';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RendererComponent } from './components/renderer/renderer.component';\r\nimport { EditorComponent } from './components/editor/editor.component';\r\nimport { ContextMenuComponent } from './components/context-menu/context-menu.component';\r\n\r\n@Component({\r\n  selector: 'spread-table',\r\n  templateUrl: './spread-table.component.html',\r\n  styleUrls: ['./spread-table.component.scss'],\r\n  standalone: true,\r\n  imports: [RendererComponent, EditorComponent, ContextMenuComponent, ScrollingModule, ReactiveFormsModule, CommonModule]\r\n})\r\nexport class SpreadTableComponent implements OnChanges, SpreadTable {\r\n  table = document.getElementById('spreadTable');\r\n\r\n  @Input() minColumnWidth = 100;\r\n  @Input() rowHeight = 24;\r\n  @Input() indexWidth = 60;\r\n  @Input() undoRedoStackSize = 10;\r\n  @Input() rawData: any = null;\r\n  @Input() headerBgColor = '#634be3';\r\n  @Input() headerColor = '#efefef';\r\n  @Input() columns: Column[] = [];\r\n  @Input() extraContextMenuItems: ContextMenuModel[] = [];\r\n  @Input() extraColumnMenuItems: ContextMenuModel[] = [];\r\n\r\n  @Output() cellValueChange = new EventEmitter<Change[]>();\r\n  @Output() contextMenuEvent = new EventEmitter<ContextMenuModel>();\r\n  @Output() columnMenuEvent = new EventEmitter<ContextMenuModel>();\r\n\r\n  data: Row[] = [];\r\n\r\n  focus = true;\r\n  form = new FormGroup<any>({});\r\n  formControl = new FormControl();\r\n  selectedRowIndex = -1;\r\n\r\n  menuIconSize = '0.8rem';\r\n  isMouseDown = false;\r\n  startRowIndex = 0;\r\n  startCellIndex = 0;\r\n  endRowIndex = 0;\r\n  endCellIndex = 0;\r\n  // selectedCellCoordinates?: { rowIndex: number, columnIndex: number } = undefined;\r\n  selectedCellCoordinates?: { rowIndex: number, columnName: string } = undefined;\r\n  isEditMode = false;\r\n  columnBeingResized: Column | null = null;\r\n  htmlColumnBeingResized?: HTMLElement;\r\n  originalColumnsWidth: any = {};\r\n\r\n  isDisplayContextMenu: boolean = false;\r\n  isDisplayColumnMenu: boolean = false;\r\n\r\n  contextMenuActions = {\r\n    copy: 'copy',\r\n    cut: 'cut',\r\n    paste: 'paste',\r\n    undo: 'undo',\r\n    redo: 'redo',\r\n  };\r\n\r\n  columnMenuActions = {\r\n    resetColumn: 'resetColumn',\r\n    resetAllColumns: 'resetAllColumns'\r\n  };\r\n\r\n  editableContextMenu = false;\r\n\r\n  contextMenuItems: ContextMenuModel[] = [];\r\n  columnMenuItems: ContextMenuModel[] = [];\r\n\r\n  createContextMenuItems(column: Column) {\r\n    let items: ContextMenuModel[] = [{\r\n      iconHtml: `<svg\r\n      width=${this.menuIconSize}\r\n      height=${this.menuIconSize}\r\n      viewBox=\"0 0 1024 1024\"><path fill=\"#b3b3b3\" d=\"M768 832a128 128 0 0 1-128 128H192A128 128 0 0 1 64 832V384a128 128 0 0 1 128-128v64a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64h64z\"/><path fill=\"#b3b3b3\" d=\"M384 128a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V192a64 64 0 0 0-64-64H384zm0-64h448a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H384a128 128 0 0 1-128-128V192A128 128 0 0 1 384 64z\"/></svg>`,\r\n      menuText: 'Copy',\r\n      disabled: true,\r\n      menuEvent: this.contextMenuActions.copy,\r\n      shortcut: 'Ctrl+C',\r\n      column: column\r\n    },\r\n    {\r\n      iconHtml: `<svg xmlns=\"http://www.w3.org/2000/svg\" \r\n      width=${this.menuIconSize}\r\n      height=${this.menuIconSize}\r\n      viewBox=\"0 0 24   24\" fill=\"none\">\r\n      <path d=\"M9 18.5L17 3M9 18.5C9 19.8807 7.88071 21 6.5 21C5.11929 21 4 19.8807 4 18.5C4 17.1193 5.11929 16 6.5 16C7.88071 16 9 17.1193 9 18.5ZM15 18.5L7 3M15 18.5C15 19.8807 16.1193 21 17.5 21C18.8807 21 20 19.8807 20 18.5C20 17.1193 18.8807 16 17.5 16C16.1193 16 15 17.1193 15 18.5Z\" stroke=\"#000000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n      </svg>`,\r\n      menuText: 'Cut',\r\n      menuEvent: this.contextMenuActions.cut,\r\n      shortcut: 'Ctrl+X',\r\n      disabled: !this.editableContextMenu,\r\n      column: column\r\n    },\r\n    {\r\n      iconHtml: `<svg xmlns=\"http://www.w3.org/2000/svg\" \r\n      width=${this.menuIconSize}\r\n      height=${this.menuIconSize}\r\n      viewBox=\"0 0 24 24\" fill=\"none\">\r\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 0C11.2347 0 10.6293 0.125708 10.1567 0.359214C9.9845 0.44429 9.82065 0.544674 9.68861 0.62717L9.59036 0.688808C9.49144 0.751003 9.4082 0.803334 9.32081 0.853848C9.09464 0.984584 9.00895 0.998492 9.00053 0.999859C8.99983 0.999973 9.00019 0.999859 9.00053 0.999859C7.89596 0.999859 7 1.89543 7 3H6C4.34315 3 3 4.34315 3 6V20C3 21.6569 4.34315 23 6 23H18C19.6569 23 21 21.6569 21 20V6C21 4.34315 19.6569 3 18 3H17C17 1.89543 16.1046 1 15 1C15.0003 1 15.0007 1.00011 15 1C14.9916 0.998633 14.9054 0.984584 14.6792 0.853848C14.5918 0.80333 14.5086 0.751004 14.4096 0.688804L14.3114 0.62717C14.1793 0.544674 14.0155 0.44429 13.8433 0.359214C13.3707 0.125708 12.7653 0 12 0ZM16.7324 5C16.3866 5.5978 15.7403 6 15 6H9C8.25972 6 7.61337 5.5978 7.26756 5H6C5.44772 5 5 5.44772 5 6V20C5 20.5523 5.44772 21 6 21H18C18.5523 21 19 20.5523 19 20V6C19 5.44772 18.5523 5 18 5H16.7324ZM11.0426 2.15229C11.1626 2.09301 11.4425 2 12 2C12.5575 2 12.8374 2.09301 12.9574 2.15229C13.0328 2.18953 13.1236 2.24334 13.2516 2.32333L13.3261 2.37008C13.43 2.43542 13.5553 2.51428 13.6783 2.58539C13.9712 2.75469 14.4433 3 15 3V4H9V3C9.55666 3 10.0288 2.75469 10.3217 2.58539C10.4447 2.51428 10.57 2.43543 10.6739 2.37008L10.7484 2.32333C10.8764 2.24334 10.9672 2.18953 11.0426 2.15229Z\" fill=\"#0F0F0F\"/>\r\n</svg>`,\r\n      menuText: 'Paste',\r\n      menuEvent: this.contextMenuActions.paste,\r\n      shortcut: 'Ctrl+V',\r\n      disabled: !this.editableContextMenu,\r\n      column: column\r\n    }, {\r\n      iconHtml: `<svg xmlns=\"http://www.w3.org/2000/svg\" \r\n      width=${this.menuIconSize}\r\n      height=${this.menuIconSize}\r\n      viewBox=\"0 0 24 24\" fill=\"none\">\r\n<g id=\"Edit / Undo\">\r\n<path id=\"Vector\" d=\"M10 8H5V3M5.29102 16.3569C6.22284 17.7918 7.59014 18.8902 9.19218 19.4907C10.7942 20.0913 12.547 20.1624 14.1925 19.6937C15.8379 19.225 17.2893 18.2413 18.3344 16.8867C19.3795 15.5321 19.963 13.878 19.9989 12.1675C20.0347 10.4569 19.5211 8.78001 18.5337 7.38281C17.5462 5.98561 16.1366 4.942 14.5122 4.40479C12.8878 3.86757 11.1341 3.86499 9.5083 4.39795C7.88252 4.93091 6.47059 5.97095 5.47949 7.36556\" stroke=\"#000000\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</g>\r\n</svg>`,\r\n      menuText: 'Undo',\r\n      menuEvent: this.contextMenuActions.undo,\r\n      shortcut: 'Ctrl+Z',\r\n      disabled: !this.editableContextMenu,\r\n      column: column\r\n    }, {\r\n      iconHtml: `<svg xmlns=\"http://www.w3.org/2000/svg\"\r\n       width=${this.menuIconSize}\r\n      height=${this.menuIconSize}\r\n       viewBox=\"0 0 24 24\" fill=\"none\">\r\n<g id=\"Edit / Redo\">\r\n<path id=\"Vector\" d=\"M13.9998 8H18.9998V3M18.7091 16.3569C17.7772 17.7918 16.4099 18.8902 14.8079 19.4907C13.2059 20.0913 11.4534 20.1624 9.80791 19.6937C8.16246 19.225 6.71091 18.2413 5.66582 16.8867C4.62073 15.5321 4.03759 13.878 4.00176 12.1675C3.96593 10.4569 4.47903 8.78001 5.46648 7.38281C6.45392 5.98561 7.86334 4.942 9.48772 4.40479C11.1121 3.86757 12.8661 3.86499 14.4919 4.39795C16.1177 4.93091 17.5298 5.97095 18.5209 7.36556\" stroke=\"#000000\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</g>\r\n</svg>`,\r\n      menuText: 'Redo',\r\n      menuEvent: this.contextMenuActions.redo,\r\n      shortcut: 'Ctrl+Y',\r\n      disabled: !this.editableContextMenu,\r\n      column: column\r\n    }];\r\n\r\n    if (this.extraContextMenuItems?.length) {\r\n      items.push(...this.extraContextMenuItems.map(extraContextMenuItem => {\r\n        extraContextMenuItem.column = column;\r\n        return extraContextMenuItem;\r\n      }));\r\n    }\r\n\r\n    this.contextMenuItems = items;\r\n  }\r\n\r\n  createColumnMenuItems(column: Column) {\r\n    let items: ContextMenuModel[] = [{\r\n      iconHtml: `<svg fill=\"#000000\" \r\n      width=${this.menuIconSize}\r\n      height=${this.menuIconSize}\r\n      viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\" class=\"icon\">\r\n  <path d=\"M180 176h-60c-4.4 0-8 3.6-8 8v656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V184c0-4.4-3.6-8-8-8zm724 0h-60c-4.4 0-8 3.6-8 8v656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V184c0-4.4-3.6-8-8-8zM785.3 504.3L657.7 403.6a7.23 7.23 0 0 0-11.7 5.7V476H378v-62.8c0-6-7-9.4-11.7-5.7L238.7 508.3a7.14 7.14 0 0 0 0 11.3l127.5 100.8c4.7 3.7 11.7.4 11.7-5.7V548h268v62.8c0 6 7 9.4 11.7 5.7l127.5-100.8c3.8-2.9 3.8-8.5.2-11.4z\"/>\r\n</svg>`,\r\n      menuText: 'Reset Column',\r\n      menuEvent: this.columnMenuActions.resetColumn,\r\n      column: column\r\n    },\r\n    {\r\n      iconHtml: `<svg fill=\"#000000\" \r\n      width=${this.menuIconSize}\r\n      height=${this.menuIconSize}\r\n      viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\" class=\"icon\">\r\n  <path d=\"M180 176h-60c-4.4 0-8 3.6-8 8v656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V184c0-4.4-3.6-8-8-8zm724 0h-60c-4.4 0-8 3.6-8 8v656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V184c0-4.4-3.6-8-8-8zM785.3 504.3L657.7 403.6a7.23 7.23 0 0 0-11.7 5.7V476H378v-62.8c0-6-7-9.4-11.7-5.7L238.7 508.3a7.14 7.14 0 0 0 0 11.3l127.5 100.8c4.7 3.7 11.7.4 11.7-5.7V548h268v62.8c0 6 7 9.4 11.7 5.7l127.5-100.8c3.8-2.9 3.8-8.5.2-11.4z\"/>\r\n</svg>`,\r\n      menuText: 'Reset All Columns',\r\n      menuEvent: this.columnMenuActions.resetAllColumns,\r\n      column: column\r\n    }];\r\n\r\n    if (this.extraColumnMenuItems?.length) {\r\n      items.push(...this.extraColumnMenuItems.map(extraColumnMenuItem => {\r\n        extraColumnMenuItem.column = column;\r\n        return extraColumnMenuItem;\r\n      }));\r\n    }\r\n\r\n    this.columnMenuItems = items;\r\n  }\r\n\r\n  contextMenuPosition: { x: number, y: number } | any;\r\n\r\n  @ViewChild('contextMenu', { read: ElementRef }) set contextMenu(element: ElementRef) {\r\n    if (element) {\r\n      const wrapper = this.table?.parentElement?.parentElement?.parentElement;\r\n      element.nativeElement.setAttribute('style', `position: fixed;left: 0px;top: 0px;z-index:100;`);\r\n      let wrapperWidth = 9999999;\r\n      let wrapperHeight = 9999999;\r\n\r\n      if (wrapper) {\r\n        wrapperWidth = wrapper.clientWidth + wrapper.offsetLeft;\r\n        wrapperHeight = wrapper.clientHeight + wrapper.offsetTop;\r\n      }\r\n      const contextMenuWidth = element?.nativeElement.clientWidth;\r\n      const contextMenuHeight = element?.nativeElement.clientHeight;\r\n\r\n      this.contextMenuPosition.x = this.contextMenuPosition.x + contextMenuWidth > wrapperWidth ? this.contextMenuPosition.x - contextMenuWidth : this.contextMenuPosition.x;\r\n      this.contextMenuPosition.y = this.contextMenuPosition.y + contextMenuHeight > wrapperHeight ? this.contextMenuPosition.y - contextMenuHeight : this.contextMenuPosition.y;\r\n\r\n      element.nativeElement.setAttribute('style', `position: fixed;left: ${this.contextMenuPosition.x}px;top: ${this.contextMenuPosition.y}px;z-index:100;`);\r\n    } else {\r\n      this.contextMenuPosition = {};\r\n    }\r\n  }\r\n\r\n  columnMenuPosition: { x: number, y: number } | any;\r\n  @ViewChild('columnMenu', { read: ElementRef }) set columnMenu(element: ElementRef) {\r\n    if (element) {\r\n      const wrapper = this.table?.parentElement?.parentElement?.parentElement;\r\n      element.nativeElement.setAttribute('style', `position: fixed;left: 0px;top: 0px;z-index:100;`);\r\n      let wrapperWidth = 9999999;\r\n      let wrapperHeight = 9999999;\r\n\r\n      if (wrapper) {\r\n        wrapperWidth = wrapper.clientWidth + wrapper.offsetLeft;\r\n        wrapperHeight = wrapper.clientHeight + wrapper.offsetTop;\r\n      }\r\n      const columnMenuWidth = element?.nativeElement.clientWidth;\r\n      const columnMenuHeight = element?.nativeElement.clientHeight;\r\n\r\n      this.columnMenuPosition.x = this.columnMenuPosition.x + columnMenuWidth > wrapperWidth ? this.columnMenuPosition.x - columnMenuWidth : this.columnMenuPosition.x;\r\n      this.columnMenuPosition.y = this.columnMenuPosition.y + columnMenuHeight > wrapperHeight ? this.columnMenuPosition.y - columnMenuHeight : this.columnMenuPosition.y;\r\n\r\n      element.nativeElement.setAttribute('style', `position: fixed;left: ${this.columnMenuPosition.x}px;top: ${this.columnMenuPosition.y}px;z-index:100;`);\r\n    } else {\r\n      this.columnMenuPosition = {};\r\n    }\r\n  }\r\n\r\n  constructor(public undoRedoService: UndoRedoService) { }\r\n\r\n  public getSelectedCells(): Cell[] {\r\n    let selectedCells: Cell[] = [];\r\n    this.data.forEach(r => selectedCells = selectedCells.concat(r.cells.filter(d => d.selected)));\r\n    return selectedCells;\r\n  }\r\n\r\n  public getData() {\r\n    return this.data.map(row => {\r\n      let dataRow: any = {};\r\n      row.cells.map(cell => {\r\n        dataRow[cell.columnName] = cell.value\r\n      });\r\n      return dataRow;\r\n    });\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes?.['undoRedoStackSize']?.currentValue) {\r\n      this.undoRedoService.setStackSize(this.undoRedoStackSize);\r\n    }\r\n    let data: Row[] = [];\r\n    if (this.rawData?.length && this.columns?.length) {\r\n      for (let i = 0; i < this.rawData.length; i++) {\r\n        let row = new Row({ rowIndex: i, cells: [] });\r\n\r\n        for (let j = 0; j < this.columns.length; j++) {\r\n          row.cells.push({ columnName: this.columns[j].name, value: this.rawData[i][this.columns[j].name], originalValue: this.rawData[i][this.columns[j].name], rowIndex: i });\r\n        }\r\n        data.push(row);\r\n      }\r\n\r\n      this.data = [...data];\r\n\r\n\r\n      setTimeout(() => {\r\n        (document.querySelector('#widthReference') as any)!['style']['min-width'] = (this.indexWidth + this.columns.map(c => c.minWidth || this.minColumnWidth).reduce((a, b) => a + b, 0) + 10) + 'px';\r\n        this.setupTableEvents();\r\n      }, 0);\r\n\r\n    }\r\n\r\n    if (this.columns?.length > 0) {\r\n      this.columns.map(c => {\r\n        c.minWidth = c.minWidth || this.minColumnWidth;\r\n        this.originalColumnsWidth[c.name] = c.minWidth;\r\n      });\r\n    }\r\n  }\r\n\r\n  addColumn(column: Column) {\r\n    this.data.forEach(row => {\r\n      row.cells.splice(this.columns.indexOf(column), 0, new Cell({ columnName: column.name, value: '', originalValue: '', rowIndex: row.rowIndex }));\r\n    });\r\n    this.setColumnsWidth();\r\n  }\r\n\r\n  getCellValue(row: Row, columnName: string) {\r\n    return row.cells.find(c => c.columnName === columnName)?.value;\r\n  }\r\n\r\n  setupTableEvents() {\r\n    this.table = document.getElementById('spreadTable');\r\n\r\n    this.setColumnsWidth();\r\n\r\n    if ((this.table as any)![\"eventListeners\"]()!.length) {\r\n      return;\r\n    }\r\n\r\n    document.addEventListener('scroll', (e) => { this.isDisplayContextMenu = false; this.isDisplayColumnMenu = false; }, true);\r\n\r\n    this.table?.addEventListener(\"selectstart\", () => {\r\n      return false;\r\n    });\r\n\r\n    this.table?.addEventListener(\"mouseup\", () => {\r\n      this.isMouseDown = false;\r\n    });\r\n\r\n    this.table?.addEventListener(\"keydown\", (e) => { this.keyDownCall(e) });\r\n\r\n    window.addEventListener('resize', this.setColumnsWidth);\r\n\r\n    const target = document.getElementById('spreadTable');\r\n\r\n    target!.addEventListener('paste', (event) => {\r\n      let paste = (event['clipboardData'] || (window as any)['clipboardData']).getData('text');\r\n\r\n      this.handlePaste(paste);\r\n\r\n      if (!this.isEditMode) {\r\n        event.preventDefault();\r\n      }\r\n    });\r\n  }\r\n\r\n  setColumnsWidth = () => {\r\n    const headerWidth = document.querySelector('#widthReference')!.clientWidth - 0.1;\r\n    const columnsWidthSum = this.columns.map(c => { return c.minWidth || this.minColumnWidth }).reduce((a, b) => a + b, 0) + this.indexWidth + 10;\r\n    (document.querySelector('cdk-virtual-scroll-viewport') as any)!['style'].width = Math.max(columnsWidthSum, headerWidth) + 'px';\r\n    document.getElementById('spread-table-header')!['style'].width = Math.max(columnsWidthSum, headerWidth) + 'px';\r\n    if (headerWidth > columnsWidthSum) {\r\n      this.columns.map(c => {\r\n        const percentage = (c.minWidth ?? this.minColumnWidth) * 100 / (columnsWidthSum - this.indexWidth - 10);\r\n        c.minWidth = c.minWidth ?? this.minColumnWidth + ((headerWidth - columnsWidthSum) * percentage / 100);\r\n      });\r\n    }\r\n  }\r\n\r\n  mouseUp() {\r\n    this.isMouseDown = false;\r\n  }\r\n\r\n  mouseOverCall(cell: Cell) {\r\n    if (!this.isMouseDown || this.isInEditMode(cell)) return;\r\n\r\n    this.clearSelection();\r\n\r\n    this.selectTo(cell.rowIndex, cell.columnName);\r\n  }\r\n\r\n  getDataCell(rowIndex: number, columnName: string): Cell {\r\n    return this.data.find(d => d.rowIndex === rowIndex)?.cells.find(c => c.columnName === columnName) || new Cell;\r\n  }\r\n\r\n  doubleClick(cell: Cell) {\r\n    if (this.selectedCellCoordinates?.rowIndex === cell.rowIndex && this.selectedCellCoordinates.columnName === cell.columnName && this.isEditMode) return;\r\n    this.clearSelection();\r\n    this.isDisplayColumnMenu = false;\r\n    this.isDisplayContextMenu = false;\r\n    this.isMouseDown = false;\r\n    this.isEditMode = true;\r\n    this.focus = true;\r\n    this.selectedCellCoordinates = { rowIndex: cell.rowIndex, columnName: cell.columnName };\r\n\r\n    this.form = new FormGroup({});\r\n\r\n    this.columns.forEach((column) => {\r\n      this.form.addControl(column.name, new FormControl(this.getCellValue(this.data[cell.rowIndex], column.name), column.validators));\r\n    });\r\n\r\n    this.startCellIndex = this.columns.indexOf(this.columns.find(c => c.name === cell.columnName)!);\r\n    this.startRowIndex = cell.rowIndex;\r\n\r\n    if (this.focus) {\r\n      this.focus = false;\r\n      setTimeout(() => { // this will make the execution after the above boolean has changed\r\n        const cell = document.getElementsByClassName('cell-in-edit')[0] as any;\r\n        if (cell) {\r\n          cell.focus();\r\n        }\r\n      }, 0);\r\n    }\r\n  }\r\n\r\n  isInEditMode(cell: Cell) {\r\n    if (!this.selectedCellCoordinates) return false;\r\n    const cellColumnName = this.selectedCellCoordinates.columnName;\r\n    const rowIndex2 = this.selectedCellCoordinates.rowIndex;\r\n\r\n    return cell.rowIndex === rowIndex2 && cell.columnName === cellColumnName && this.isEditMode;\r\n  }\r\n\r\n\r\n  keyDownCall(e: Event) {\r\n\r\n    let event = e as KeyboardEvent;\r\n\r\n    if (event.ctrlKey && event.key === 'x') {\r\n      this.cutSelectedCellsValues();\r\n      e.stopPropagation();\r\n      e.preventDefault();\r\n    }\r\n\r\n    if (!this.isEditMode) {\r\n      switch (event.key) {\r\n        case 'Delete':\r\n        case 'Backspace':\r\n          this.isEditMode = true;\r\n          this.focus = true;\r\n\r\n          this.form = new FormGroup({});\r\n\r\n          this.columns.forEach((column) => {\r\n            this.form.addControl(column.name, new FormControl(this.getCellValue(this.data[this.selectedCellCoordinates?.rowIndex || 0], column.name), column.validators));\r\n          });\r\n\r\n          this.deleteSelectedCellsValues();\r\n\r\n          this.isEditMode = false;\r\n\r\n          e.stopPropagation();\r\n          e.preventDefault();\r\n          break;\r\n        case 'ArrowLeft':\r\n          if (this.selectedCellCoordinates) {\r\n            let currentCell = this.getDataCell(this.selectedCellCoordinates.rowIndex, this.selectedCellCoordinates.columnName);\r\n            let nextCell: Cell | null = null;\r\n            const columnIndex = this.columns.indexOf(this.columns.find(c => c.name === this.selectedCellCoordinates!.columnName)!);\r\n            if (columnIndex - 1 >= 0) {\r\n              if (currentCell) currentCell.selected = false;\r\n              nextCell = this.getDataCell(this.selectedCellCoordinates.rowIndex, this.columns[columnIndex - 1].name);\r\n            }\r\n            if (nextCell) {\r\n              nextCell.selected = true;\r\n              this.selectedCellCoordinates = { rowIndex: nextCell.rowIndex, columnName: nextCell.columnName };\r\n            }\r\n          }\r\n          break;\r\n        case 'ArrowRight':\r\n          if (this.selectedCellCoordinates) {\r\n            let currentCell = this.getDataCell(this.selectedCellCoordinates.rowIndex, this.selectedCellCoordinates.columnName);\r\n            let nextCell: Cell | null = null;\r\n            const columnIndex = this.columns.indexOf(this.columns.find(c => c.name === this.selectedCellCoordinates!.columnName)!);\r\n            if (columnIndex + 1 < this.columns.length) {\r\n              if (currentCell) currentCell.selected = false;\r\n              nextCell = this.getDataCell(this.selectedCellCoordinates.rowIndex, this.columns[columnIndex + 1].name);\r\n            }\r\n            if (nextCell) {\r\n              nextCell.selected = true;\r\n              this.selectedCellCoordinates = { rowIndex: nextCell.rowIndex, columnName: nextCell.columnName };\r\n            }\r\n          }\r\n          break;\r\n        case 'ArrowUp':\r\n          if (this.selectedCellCoordinates) {\r\n            let currentCell = this.getDataCell(this.selectedCellCoordinates.rowIndex, this.selectedCellCoordinates.columnName);\r\n            let nextCell: Cell | null = null;\r\n            const columnIndex = this.columns.indexOf(this.columns.find(c => c.name === this.selectedCellCoordinates!.columnName)!);\r\n            if (this.selectedCellCoordinates.rowIndex > 0) {\r\n              if (currentCell) currentCell.selected = false;\r\n              nextCell = this.getDataCell(this.selectedCellCoordinates.rowIndex - 1, this.columns[columnIndex].name);\r\n            }\r\n            if (nextCell) {\r\n              nextCell.selected = true;\r\n              this.selectedCellCoordinates = { rowIndex: nextCell.rowIndex, columnName: nextCell.columnName };\r\n            }\r\n          }\r\n          break;\r\n        case 'ArrowDown':\r\n          if (this.selectedCellCoordinates) {\r\n            let currentCell = this.getDataCell(this.selectedCellCoordinates.rowIndex, this.selectedCellCoordinates.columnName);\r\n            let nextCell: Cell | null = null;\r\n            if (this.selectedCellCoordinates.rowIndex + 1 < this.data.length) {\r\n              if (currentCell) currentCell.selected = false;\r\n              nextCell = this.getDataCell(this.selectedCellCoordinates.rowIndex + 1, this.selectedCellCoordinates.columnName);\r\n            }\r\n            if (nextCell) {\r\n              nextCell.selected = true;\r\n              this.selectedCellCoordinates = { rowIndex: nextCell.rowIndex, columnName: nextCell.columnName };\r\n            }\r\n          }\r\n          break;\r\n        case 'Escape':\r\n        case 'Shift':\r\n          break;\r\n        case 'Enter':\r\n          if (this.selectedCellCoordinates) {\r\n            let selectedCell = this.getDataCell(this.selectedCellCoordinates.rowIndex, this.selectedCellCoordinates.columnName);\r\n            this.doubleClick(selectedCell);\r\n            event.stopPropagation();\r\n          }\r\n          break;\r\n        default:\r\n          if (event.ctrlKey) {\r\n\r\n            switch (event.key) {\r\n              case 'v':\r\n                if (navigator.clipboard && navigator.clipboard.readText!) {\r\n                  this.handlePaste();\r\n                }\r\n                break;\r\n              case 'c':\r\n                this.handleCopy();\r\n                break;\r\n              case 'z':\r\n                this.undo();\r\n                break;\r\n              case 'y':\r\n                this.redo();\r\n                break;\r\n              default:\r\n                break;\r\n            }\r\n          }\r\n          break;\r\n      }\r\n    } else {\r\n\r\n      if (event.key === 'Enter' || event.key === 'Escape') {\r\n        this.table?.focus();\r\n        event.stopPropagation();\r\n      }\r\n    }\r\n  }\r\n\r\n  undo() {\r\n    const lastChange = this.undoRedoService.undo();\r\n    let changes: Change[] = [];\r\n    if (lastChange) {\r\n      this.clearSelection();\r\n      lastChange.forEach(change => {\r\n        let cellData = this.getDataCell(change.coordinates.rowIndex, change.coordinates.columnName);\r\n        if (cellData) {\r\n          this.setCellValueAndValidate(cellData, change.beforeValue);\r\n          cellData.selected = true;\r\n        }\r\n\r\n        changes.push({\r\n          coordinates:\r\n            { rowIndex: change.coordinates.rowIndex, columnName: change.coordinates.columnName },\r\n          beforeValue: change.afterValue,\r\n          afterValue: change.beforeValue\r\n        });\r\n      });\r\n      this.cellValueChange.emit(changes);\r\n    }\r\n  }\r\n\r\n  redo() {\r\n    const lastChange = this.undoRedoService.redo();\r\n    let changes: Change[] = [];\r\n    if (lastChange) {\r\n      this.clearSelection();\r\n      lastChange.forEach(change => {\r\n        let cellData = this.getDataCell(change.coordinates.rowIndex, change.coordinates.columnName);\r\n        if (cellData) {\r\n          this.setCellValueAndValidate(cellData, change.beforeValue);\r\n          cellData.selected = true;\r\n        }\r\n\r\n        changes.push({\r\n          coordinates:\r\n            { rowIndex: change.coordinates.rowIndex, columnName: change.coordinates.columnName },\r\n          beforeValue: change.afterValue,\r\n          afterValue: change.beforeValue\r\n        });\r\n      });\r\n      this.cellValueChange.emit(changes);\r\n    }\r\n  }\r\n\r\n  deleteSelectedCellsValues() {\r\n    let selectedCells: Cell[] = [];\r\n    this.data.forEach(r => selectedCells = selectedCells.concat(r.cells.filter(d => d.selected)));\r\n\r\n    let changes: Change[] = [];\r\n\r\n    selectedCells.forEach(cell => {\r\n      changes.push({\r\n        coordinates:\r\n          { rowIndex: cell.rowIndex, columnName: cell.columnName },\r\n        beforeValue: cell.value,\r\n        afterValue: ''\r\n      });\r\n      this.setCellValueAndValidate(cell, '');\r\n    });\r\n\r\n    if (changes.length > 0) {\r\n      this.undoRedoService.setChange(changes);\r\n      this.cellValueChange.emit(changes);\r\n    }\r\n  }\r\n\r\n  async cutSelectedCellsValues() {\r\n    let selectedCells: Cell[] = [];\r\n    this.data.forEach(r => selectedCells = selectedCells.concat(r.cells.filter(d => d.selected)));\r\n\r\n    let changes: Change[] = [];\r\n    this.handleCopy();\r\n\r\n    selectedCells.forEach(cell => {\r\n      changes.push({\r\n        coordinates:\r\n          { rowIndex: cell.rowIndex, columnName: cell.columnName },\r\n        beforeValue: cell.value,\r\n        afterValue: ''\r\n      });\r\n      this.setCellValueAndValidate(cell, '');\r\n    });\r\n\r\n    if (changes.length > 0) {\r\n      this.undoRedoService.setChange(changes);\r\n      this.cellValueChange.emit(changes);\r\n    }\r\n\r\n  }\r\n\r\n  handleCopy = async () => {\r\n    if (this.isEditMode) return;\r\n    let selectedCells: Cell[] = [];\r\n    this.data.forEach(r => selectedCells = selectedCells.concat(r.cells.filter(d => d.selected)));\r\n    this.clearSelection();\r\n    const data = this.groupBy<Cell, number>(selectedCells, c => c.rowIndex);\r\n    let copyString = '';\r\n\r\n    data.forEach(valuesRow => {\r\n      valuesRow.map((c: Cell) => {\r\n        copyString += `${c.value}\\t`;\r\n        setTimeout(() => {\r\n          c.selected = true;\r\n        }, 200);\r\n      });\r\n      if (copyString.trim().length > 0) {\r\n        copyString = copyString.trimEnd();\r\n      } else {\r\n        copyString = copyString.slice(0, -1);\r\n      }\r\n      if (valuesRow !== data.get([...data][data.size - 1][0])) {\r\n        copyString += '\\n';\r\n      }\r\n    });\r\n\r\n    if (navigator.clipboard) {\r\n      await navigator.clipboard.writeText(copyString);\r\n    }\r\n  }\r\n\r\n  handlePaste = async (pasteText = '') => {\r\n    if (this.isEditMode) return;\r\n    let pastedData;\r\n\r\n    if (navigator?.clipboard?.readText) {\r\n\r\n      pastedData = await navigator.clipboard.readText();\r\n\r\n    } else {\r\n      pastedData = pasteText;\r\n    }\r\n\r\n    if (!pastedData && pastedData !== '') return;\r\n\r\n    let dataRows = pastedData.split('\\n');\r\n\r\n    let copyData: any[] = [];\r\n\r\n    dataRows.forEach(dataRow => {\r\n      if (dataRow || dataRow === '') {\r\n        let columns = dataRow.split('\\t');\r\n        copyData.push(columns);\r\n      }\r\n    });\r\n\r\n    let selectedCells: Cell[] = [];\r\n    this.data.forEach(r => selectedCells = selectedCells.concat(r.cells.filter(d => d.selected)));\r\n\r\n    if (selectedCells.length === 0) return;\r\n\r\n    const rowIndexDifference = selectedCells[0].rowIndex;\r\n    const columnIndexDifference = this.columns.indexOf(this.columns.find(c => c.name === selectedCells[0].columnName)!);\r\n    this.clearSelection();\r\n    let changes: Change[] = [];\r\n\r\n    for (let i = 0; i < copyData.length; i++) {\r\n      const selectedRow = this.data.find(r => r.rowIndex == i + rowIndexDifference);\r\n      if (selectedCells.length > 1) {\r\n        if ((selectedRow?.rowIndex || 0) - rowIndexDifference > copyData.length - 1) break;\r\n\r\n      }\r\n      for (let j = 0; j < copyData[i].length; j++) {\r\n        const selectedCell = selectedCells.find(c => c.rowIndex === i + rowIndexDifference && this.columns.indexOf(this.columns.find(col => col.name === c.columnName)!) === j + columnIndexDifference);\r\n\r\n        const cell = selectedRow?.cells.find(c => this.columns.indexOf(this.columns.find(col => col.name === c.columnName)!) === j + columnIndexDifference);\r\n        if (!cell || !this.columns.find(col => col.name === cell.columnName)!.editable) continue;\r\n        cell.selected = false;\r\n\r\n        const cellRowIndex = cell.rowIndex;\r\n        const cellColumnIndex = this.columns.indexOf(this.columns.find(col => col.name === cell.columnName)!);\r\n\r\n        if (selectedCells.length > 1) {\r\n          if (!selectedCell) continue;\r\n          if (cellColumnIndex - columnIndexDifference > copyData[cellRowIndex - rowIndexDifference].length - 1) continue;\r\n        }\r\n\r\n        const value = copyData ? copyData[cellRowIndex - rowIndexDifference][cellColumnIndex - columnIndexDifference] || '' : '';\r\n\r\n        changes.push({\r\n          coordinates:\r\n            { rowIndex: cell.rowIndex, columnName: cell.columnName },\r\n          beforeValue: cell.value,\r\n          afterValue: value\r\n        });\r\n\r\n        this.setCellValueAndValidate(cell, value);\r\n\r\n        cell.selected = true;\r\n      }\r\n    }\r\n\r\n    if (changes.length > 0) {\r\n      this.undoRedoService.setChange(changes);\r\n      this.cellValueChange.emit(changes);\r\n    }\r\n  }\r\n\r\n  setCellValue(row: Row, column: Column, value = null) {\r\n    if (value !== null) {\r\n      this.form.get(column.name)?.setValue(value);\r\n    }\r\n\r\n    const cell = row.cells.find(c => c.columnName === column.name)!;\r\n\r\n    if (cell.value !== this.form.value[column.name]) {\r\n      const changes = [{\r\n        coordinates:\r\n          { rowIndex: row.rowIndex, columnName: cell.columnName },\r\n        beforeValue: cell.value,\r\n        afterValue: this.form.value[column.name]\r\n      }];\r\n      this.undoRedoService.setChange(changes);\r\n      this.cellValueChange.emit(changes);\r\n      cell.value = this.form.value[column.name];\r\n\r\n      this.setCellValueAndValidate(cell, this.form.value[column.name]);\r\n\r\n    }\r\n\r\n    this.isEditMode = false;\r\n    this.table?.focus();\r\n\r\n    if (this.selectedCellCoordinates?.rowIndex === cell.rowIndex &&\r\n      this.selectedCellCoordinates?.columnName === cell.columnName) {\r\n      cell.selected = true;\r\n    }\r\n  }\r\n\r\n  clearSelection() {\r\n    this.selectedRowIndex = -1;\r\n    this.isEditMode = false;\r\n    this.selectedCellCoordinates = undefined;\r\n\r\n    let selectedCells: Cell[] = this.data.filter(r => r.cells.filter(d => d.selected).length > 0).flatMap(r => r.cells.filter(c => c.selected));\r\n\r\n    selectedCells.forEach(dataCell => {\r\n      dataCell.selected = false;\r\n    });\r\n  }\r\n\r\n  cellClick(e: Event, cell: Cell) {\r\n    let event = e as MouseEvent;\r\n    if (event.button === 2 && cell.selected) {\r\n      this.isDisplayContextMenu = false;\r\n      this.isDisplayColumnMenu = false;\r\n      return false;\r\n    }\r\n\r\n    if (cell.columnName === this.selectedCellCoordinates?.columnName &&\r\n      cell.rowIndex === this.selectedCellCoordinates.rowIndex) {\r\n      return true;\r\n    }\r\n    this.isDisplayContextMenu = false;\r\n    this.isDisplayColumnMenu = false;\r\n    if (!event.ctrlKey) {\r\n      this.clearSelection();\r\n    }\r\n\r\n    this.table?.focus();\r\n    this.isMouseDown = true;\r\n    this.isEditMode = false;\r\n    this.selectedCellCoordinates = { rowIndex: cell.rowIndex, columnName: cell.columnName };\r\n\r\n    if (event.shiftKey) {\r\n      this.selectTo(cell.rowIndex, cell.columnName);\r\n    } else {\r\n      cell.selected = true;\r\n\r\n      this.startCellIndex = this.columns.indexOf(this.columns.find(c => c.name === cell.columnName)!);\r\n      this.startRowIndex = cell.rowIndex;\r\n    }\r\n\r\n    return false; // prevent text selection\r\n  }\r\n\r\n  selectTo(rowIndex: number, columnName: string) {\r\n    let rowStart, rowEnd, cellStart, cellEnd;\r\n\r\n    const columnIndex = this.columns.indexOf(this.columns.find(c => c.name === columnName)!);\r\n\r\n    if (rowIndex < this.startRowIndex) {\r\n      rowStart = rowIndex;\r\n      rowEnd = this.startRowIndex;\r\n    } else {\r\n      rowStart = this.startRowIndex;\r\n      rowEnd = rowIndex;\r\n    }\r\n\r\n    if (columnIndex < this.startCellIndex) {\r\n      cellStart = columnIndex;\r\n      cellEnd = this.startCellIndex;\r\n    } else {\r\n      cellStart = this.startCellIndex;\r\n      cellEnd = columnIndex;\r\n    }\r\n\r\n    this.endCellIndex = cellEnd;\r\n    this.endRowIndex = rowEnd;\r\n\r\n    for (var i = rowStart; i <= rowEnd; i++) {\r\n\r\n      for (var j = cellStart; j <= cellEnd; j++) {\r\n        let cellData = this.getDataCell(i, this.columns[j].name);\r\n        if (cellData) cellData.selected = true;\r\n      }\r\n    }\r\n  }\r\n\r\n  // context menu\r\n  async openContextMenu(e: Event, cell: Cell) {\r\n    const event = e as MouseEvent;\r\n\r\n    this.isMouseDown = false;\r\n\r\n    if (event.ctrlKey) {\r\n      return true;\r\n    }\r\n\r\n    // To prevent browser's default contextmenu\r\n    e.preventDefault();\r\n    e.stopPropagation();\r\n\r\n    if (this.isEditMode) {\r\n      return false;\r\n    }\r\n\r\n    this.editableContextMenu = this.columns.find(col => col.name === cell.columnName)!.editable || false;\r\n    this.isDisplayContextMenu = true;\r\n    this.isDisplayColumnMenu = false;\r\n\r\n    this.createContextMenuItems(this.columns.find(col => col.name === cell.columnName)!);\r\n\r\n    this.contextMenuPosition = { x: event.clientX, y: event.clientY };\r\n    return true;\r\n  }\r\n\r\n  // columnmneu\r\n  async openColumnMenu(e: Event, column: Column) {\r\n    this.isDisplayColumnMenu = false;\r\n    e.preventDefault();\r\n    e.stopPropagation();\r\n    setTimeout(() => {\r\n      const event = e as MouseEvent;\r\n\r\n      this.isMouseDown = false;\r\n\r\n      //this.editableColumnMenu = true;\r\n      this.isDisplayColumnMenu = true;\r\n      this.isDisplayContextMenu = false;\r\n\r\n      this.createColumnMenuItems(column);\r\n\r\n      this.columnMenuPosition = { x: event.clientX, y: event.clientY, column: column };\r\n      return true;\r\n\r\n    }, 50);\r\n  }\r\n\r\n  handleMenuItemClick(event: any) {\r\n    this.isDisplayContextMenu = false;\r\n    switch (event.menuEvent) {\r\n      case this.contextMenuActions.cut: {\r\n        this.cutSelectedCellsValues();\r\n        this.table?.focus();\r\n        break;\r\n      }\r\n      case this.contextMenuActions.paste: {\r\n        if (navigator?.clipboard) {\r\n          this.handlePaste();\r\n          this.table?.focus();\r\n        }\r\n        break\r\n      }\r\n      case this.contextMenuActions.undo: {\r\n        this.undo();\r\n        this.table?.focus();\r\n        break\r\n      }\r\n      case this.contextMenuActions.redo: {\r\n        this.redo();\r\n        this.table?.focus();\r\n        break\r\n      }\r\n      default:\r\n        break;\r\n    }\r\n    this.contextMenuEvent.emit(this.contextMenuItems.find(item => item.menuEvent === event.menuEvent));\r\n  }\r\n\r\n  handleColumnMenuItemClick(event: any) {\r\n    this.isDisplayColumnMenu = false;\r\n    switch (event.menuEvent) {\r\n      case this.columnMenuActions.resetColumn: {\r\n\r\n        this.columnMenuPosition.column.minWidth = this.originalColumnsWidth[this.columnMenuPosition.column.name];\r\n        this.setColumnsWidth();\r\n        this.table?.focus();\r\n        break;\r\n      }\r\n      case this.columnMenuActions.resetAllColumns: {\r\n        this.resetColumnWidths();\r\n        this.table?.focus();\r\n        break;\r\n      }\r\n      default:\r\n        break;\r\n    }\r\n    this.columnMenuEvent.emit(this.columnMenuItems.find(item => item.menuEvent === event.menuEvent));\r\n  }\r\n\r\n  showTooltip(column: Column) {\r\n    const columnElement = document.getElementById(column.name)!;\r\n    if ((columnElement.offsetWidth < columnElement.scrollWidth) && !columnElement.getAttribute('title')) {\r\n      columnElement?.setAttribute('title', column.displayName!);\r\n    } else {\r\n      columnElement?.removeAttribute('title');\r\n    }\r\n  }\r\n\r\n  private setCellValueAndValidate(cell: Cell, value: any) {\r\n    cell.value = value;\r\n    cell.selected = true;\r\n    this.formControl = new FormControl(value, this.columns.find(col => col.name === cell.columnName)!.validators);\r\n    const controlErrors = this.formControl.errors;\r\n    let cellErrors: string[] = [];\r\n    if (controlErrors) {\r\n      Object.keys(controlErrors).forEach(key => {\r\n        if (controlErrors[key])\r\n          cellErrors.push(`<i class=\"fas fa-exclamation-triangle\"></i>${controlErrors[key]}`);\r\n      });\r\n    }\r\n\r\n    cell.errors = cellErrors.join('<br>');\r\n  }\r\n\r\n\r\n  private groupBy<T, K>(list: T[], keyGetter: (item: T) => K) {\r\n    const map = new Map();\r\n    list.forEach((item) => {\r\n      const key = keyGetter(item);\r\n      const collection = map.get(key);\r\n      if (!collection) {\r\n        map.set(key, [item]);\r\n      } else {\r\n        collection.push(item);\r\n      }\r\n    });\r\n    return map;\r\n  }\r\n\r\n  clickResizer(event: MouseEvent, column: Column) {\r\n    event.preventDefault();\r\n    this.columnBeingResized = column;\r\n    this.htmlColumnBeingResized = (event.target as HTMLElement).closest(\".columnHeader\")!;\r\n    document.addEventListener('mousemove', this.resize);\r\n    document.addEventListener('mouseup', this.stopResize);\r\n  }\r\n\r\n  resize = (event: MouseEvent) => {\r\n    if (this.columnBeingResized && this.htmlColumnBeingResized) {\r\n      const { left } = this.htmlColumnBeingResized.getBoundingClientRect() || 0;\r\n      this.columnBeingResized.minWidth = Math.max(event.pageX - left, this.minColumnWidth);\r\n      const headerWidth = document.querySelector('#widthReference')!.clientWidth - 0.1;\r\n      const columnsWidthSum = this.columns.map(c => { return c.minWidth || this.minColumnWidth }).reduce((a, b) => a + b, 0) + this.indexWidth + 10;\r\n      (document.querySelector('cdk-virtual-scroll-viewport')! as any)['style'].width = Math.max(columnsWidthSum, headerWidth) + 'px';\r\n      document.getElementById('spread-table-header')!['style'].width = Math.max(columnsWidthSum, headerWidth) + 'px';\r\n    }\r\n  }\r\n\r\n  stopResize = () => {\r\n    this.columnBeingResized = null;\r\n    document.removeEventListener('mousemove', this.resize);\r\n    document.removeEventListener('mouseup', this.stopResize);\r\n  }\r\n\r\n  resetColumnWidths() {\r\n    this.columns.map(c => {\r\n      c.minWidth = this.originalColumnsWidth[c.name];\r\n    });\r\n    this.setColumnsWidth();\r\n  }\r\n\r\n  selectRow(row: Row) {\r\n    this.clearSelection();\r\n    row.cells.forEach(cell => {\r\n      cell.selected = true;\r\n    });\r\n    this.selectedRowIndex = row.rowIndex;\r\n  }\r\n}\r\n","<div #spreadWrapper\r\n     class=\"wrapper\"\r\n     [formGroup]=\"form\">\r\n     <div id=\"widthReference\"></div>\r\n\r\n     <div id=\"spread-table-header\"\r\n          tabindex=\"-1\"\r\n          class=\"\">\r\n          <div class=\"spread-thead w-100\"\r\n               [style.background]=\"headerBgColor\"\r\n               [style.color]=\"headerColor\"\r\n               (mousedown)=\"isDisplayContextMenu = false;isDisplayColumnMenu = false;\">\r\n               <div class=\"columnHeader\"\r\n                    [style.flex-grow]=\"0\"\r\n                    [style.width]=\"indexWidth + 'px'\">\r\n                    <div class=\"\"\r\n                         style=\"color:inherit\">Index</div>\r\n               </div>\r\n               @for (column of columns; track $index) {\r\n               <ng-container>\r\n                    <div class=\"columnHeader\"\r\n                         [style.width]=\"(column.minWidth || minColumnWidth) + 'px'\">\r\n                         <div [id]=\"column.name\"\r\n                              class=\"column-name hideextra\"\r\n                              (mouseenter)=\"showTooltip(column)\">{{column.displayName}}</div>\r\n                         <div class=\"column-menu\"\r\n                              (mousedown)=\"openColumnMenu($event, column)\"\r\n                              (contextmenu)=\"$event.stopPropagation();$event.preventDefault();\">\r\n                              <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n                                   [attr.width]=\"menuIconSize\"\r\n                                   [attr.height]=\"menuIconSize\"\r\n                                   viewBox=\"0 0 24 24\"\r\n                                   fill=\"none\">\r\n                                   <path d=\"M4 18L20 18\"\r\n                                         [attr.stroke]=headerColor\r\n                                         stroke-width=\"2\"\r\n                                         stroke-linecap=\"round\" />\r\n                                   <path d=\"M4 12L20 12\"\r\n                                         [attr.stroke]=headerColor\r\n                                         stroke-width=\"2\"\r\n                                         stroke-linecap=\"round\" />\r\n                                   <path d=\"M4 6L20 6\"\r\n                                         [attr.stroke]=headerColor\r\n                                         stroke-width=\"2\"\r\n                                         stroke-linecap=\"round\" />\r\n                              </svg>\r\n                         </div>\r\n                         @if(column.resizable){\r\n                         <div class=\"column-sizer\"\r\n                              [style.border-right]=\"'2px solid ' + headerColor\"\r\n                              [style.background:hover]=\"'headerColor'\"\r\n                              (mousedown)=\"clickResizer($event, column)\"\r\n                              (dblclick)=\"resetColumnWidths();\"></div>\r\n                         }\r\n                    </div>\r\n               </ng-container>\r\n               }\r\n               <div class=\"columnHeader\">\r\n               </div>\r\n          </div>\r\n     </div>\r\n\r\n     <cdk-virtual-scroll-viewport [itemSize]=\"rowHeight\">\r\n\r\n          @if(data.length){\r\n          <div #spreadTable\r\n               tabindex=\"-1\"\r\n               class=\"spread-table\"\r\n               contenteditable=\"true\"\r\n               id=\"spreadTable\">\r\n               <div contenteditable=\"false\"\r\n                    class=\"spread-tbody\">\r\n                    <div class=\"spread-row\"\r\n                         *cdkVirtualFor=\"let row of data;let i = index\">\r\n                         <div class=\"spread-cell not-editable\"\r\n                              [style.height]=\"rowHeight+'px'\"\r\n                              [style.width]=\"indexWidth + 'px'\"\r\n                              [style.flex-grow]=\"0\"\r\n                              [ngClass]=\"selectedRowIndex === row.rowIndex  ? 'selected' : ''\"\r\n                              (click)=\"selectRow(row)\"><span>{{row.rowIndex}}</span></div>\r\n\r\n\r\n                         @for (column of columns;let j = $index; track j) {\r\n                         <div #spreadCell\r\n                              class=\"spread-cell\"\r\n                              [style.height]=\"rowHeight+'px'\"\r\n                              [style.width]=\"column.minWidth + 'px'\"\r\n                              (contextmenu)=\"openContextMenu($event,row.cells[j]);\"\r\n                              (dblclick)=\"column.editable ? doubleClick(row.cells[j]) : ''\"\r\n                              (mousedown)=\"cellClick($event,row.cells[j])\"\r\n                              (mouseover)=\"mouseOverCall(row.cells[j])\"\r\n                              [ngClass]=\"[isInEditMode(row.cells[j]) ? 'no-padding':'',\r\n                           row.cells[j]?.selected  ? 'selected' : '',\r\n                           row.cells[j]?.errors  ? 'has-errors' : '',\r\n                           row.cells[j]?.value !==  row.cells[j]?.originalValue ? 'hasChanges' : '',\r\n                           column.editable ? '' : 'not-editable']\">\r\n                              <div style=\"height: 100%;\"\r\n                                   class=\"error spread-table-tooltip\">\r\n                                   @if(!isInEditMode(row.cells[j])){\r\n                                   <app-renderer style=\"height: 100%\"\r\n                                                 [style.width]=\"column.minWidth! - 16 + 'px'\"\r\n                                                 [rendererParams]=\"{rendererComponent:column.rendererComponent ,value: getCellValue(row,column.name), column:column }\">\r\n                                   </app-renderer>\r\n                                   } @else {\r\n                                   <app-editor style=\"height: 100%\"\r\n                                               [editorParams]=\"{editorComponent:column.editorComponent ,value: this.form.value[column.name], column:column}\"\r\n                                               (setValue)=\"setCellValue(row,columns[j],$event)\">\r\n                                   </app-editor>\r\n                                   }\r\n\r\n                                   @if(row.cells[j]?.errors){\r\n                                   <span class=\"validation-errors spread-table-tooltiptext spread-table-tooltip-bottom\"\r\n                                         [innerHtml]=\"row.cells[j]?.errors\"></span>\r\n                                   }\r\n                              </div>\r\n                         </div>\r\n                         }\r\n                    </div>\r\n               </div>\r\n          </div>\r\n          }\r\n     </cdk-virtual-scroll-viewport>\r\n</div>\r\n@if(contextMenuItems.length > 0 && isDisplayContextMenu){\r\n<app-context-menu #contextMenu\r\n                  [contextMenuItems]=\"contextMenuItems\"\r\n                  (onContextMenuItemClick)=\"handleMenuItemClick($event)\"></app-context-menu>\r\n}\r\n@if(columnMenuItems.length > 0 && isDisplayColumnMenu){\r\n<app-context-menu #columnMenu\r\n                  [contextMenuItems]=\"columnMenuItems\"\r\n                  (onContextMenuItemClick)=\"handleColumnMenuItemClick($event)\"></app-context-menu>\r\n}","import { Column } from \"./cell.model\";\r\n\r\nexport class ContextMenuModel {\r\n  iconHtml?: string = '';\r\n  menuText?: string = '';\r\n  menuEvent?: string = '';\r\n  shortcut?: string = '';\r\n  disabled?: boolean = false;\r\n  column?: Column | null | undefined;\r\n}\r\n","import { EventEmitter } from \"@angular/core\";\r\nimport { Change } from \"../services/undo-redo.service\";\r\nimport { Cell, Column } from \"./cell.model\";\r\nimport { ContextMenuModel } from \"./context-menu.model\";\r\n\r\nexport class SpreadTable {\r\n  // inputs\r\n  minColumnWidth: number = 100;\r\n  rowHeight: number = 24;\r\n  indexWidth: number = 60;\r\n  rawData: any;\r\n  headerBgColor: string = '#634be3';\r\n  headerColor: string = '#efefef';\r\n  columns: Column[] = [];\r\n\r\n  columnMenuItems: ContextMenuModel[] = [];\r\n  contextMenuItems: ContextMenuModel[] = [];\r\n  extraContextMenuItems: ContextMenuModel[] = [];\r\n\r\n  //outputs\r\n  cellValueChange: EventEmitter<Change[]> = new EventEmitter<Change[]>();\r\n  contextMenuEvent: EventEmitter<ContextMenuModel> = new EventEmitter<ContextMenuModel>();\r\n\r\n  public getSelectedCells(): Cell[] { return []; }\r\n  public getData() { }\r\n  resetColumnWidths() { }\r\n}\r\n","/*\r\n * Public API Surface of ngx-spread-table\r\n */\r\n\r\nexport * from './lib/spread-table.component';\r\nexport * from './lib/services/undo-redo.service';\r\nexport * from './lib/services/sanitizer.pipe';\r\nexport * from './lib/models/cell.model';\r\nexport * from './lib/models/context-menu.model';\r\nexport * from './lib/models/spread-table.models';\r\nexport * from './lib/components/context-menu/context-menu.component';\r\nexport * from './lib/models/editor.models';\r\nexport * from './lib/models/renderer.models';\r\nexport * from './lib/components/editor/editor.component'\r\nexport * from './lib/components/default-editor/default-editor.component'\r\nexport * from './lib/components/renderer/renderer.component'\r\nexport * from './lib/components/default-renderer/default-renderer.component'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UndoRedoService","i4"],"mappings":"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"}