{"version":3,"file":"helveg-ngx-spreadsheet.mjs","sources":["../../../projects/ngx-spreadsheet/src/lib/model/cell.ts","../../../projects/ngx-spreadsheet/src/lib/header-index-generator.ts","../../../projects/ngx-spreadsheet/src/lib/id-generator.ts","../../../projects/ngx-spreadsheet/src/lib/providers.ts","../../../projects/ngx-spreadsheet/src/lib/model/table.ts","../../../projects/ngx-spreadsheet/src/lib/ngx-context-menu-item.component.ts","../../../projects/ngx-spreadsheet/src/lib/ngx-context-menu.component.ts","../../../projects/ngx-spreadsheet/src/lib/ngx-context-menu.component.html","../../../projects/ngx-spreadsheet/src/lib/csv-converter.ts","../../../projects/ngx-spreadsheet/src/lib/model/anchor.ts","../../../projects/ngx-spreadsheet/src/lib/model/range.ts","../../../projects/ngx-spreadsheet/src/lib/content-editable.directive.ts","../../../projects/ngx-spreadsheet/src/lib/ngx-spreadsheet.component.ts","../../../projects/ngx-spreadsheet/src/lib/ngx-spreadsheet.component.html","../../../projects/ngx-spreadsheet/src/public-api.ts","../../../projects/ngx-spreadsheet/src/helveg-ngx-spreadsheet.ts"],"sourcesContent":["export class Cell {\n  public id: string;\n  constructor(\n    public tableId: string,\n    public row: number,\n    public col: number,\n    public value: string,\n    public editable: boolean = false,\n  ) {\n    this.id = `${tableId}-${row}-${col}`;\n  }\n\n  public withRow(index: number): Cell {\n    return new Cell(this.tableId, index, this.col, this.value, this.editable);\n  }\n\n  public withCol(index: number): Cell {\n    return new Cell(this.tableId, this.row, index, this.value, this.editable);\n  }\n}\n","const CHARS = [\n  'A',\n  'B',\n  'C',\n  'D',\n  'E',\n  'F',\n  'G',\n  'H',\n  'I',\n  'J',\n  'K',\n  'L',\n  'M',\n  'N',\n  'O',\n  'P',\n  'Q',\n  'R',\n  'S',\n  'T',\n  'U',\n  'V',\n  'W',\n  'X',\n  'Y',\n  'Z',\n];\nconst LENGTH = CHARS.length;\n\nexport const generateHeader = (index: number): string => {\n  index -= 1;\n  const remain = Math.floor(index / LENGTH);\n  return remain > 0\n    ? generateHeader(remain) + CHARS[index % LENGTH]\n    : CHARS[index % LENGTH];\n};\n","const CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\nconst LENGTH = CHARS.length;\n\nexport const generateId = (): string =>\n  new Array(8)\n    .fill(null)\n    .map(() => CHARS.charAt(Math.floor(Math.random() * LENGTH)))\n    .join('');\n","import { InjectionToken } from '@angular/core';\n\nexport const NSS_DEFAULT_ROWS = new InjectionToken<number>(\n  'NgxSpreadSheetDefaultRows',\n);\nexport const NSS_DEFAULT_COLS = new InjectionToken<number>(\n  'NgxSpreadSheetDefaultRows',\n);\n\nexport interface SpreadsheetIntl {\n  INSERT_COLUMN_LEFT: string;\n  INSERT_COLUMN_RIGHT: string;\n  DELETE_COLUMN: string;\n  DELETE_ROW: string;\n  INSERT_ROW_BELOW: string;\n  INSERT_ROW_ABOVE: string;\n}\n\nexport const NSS_I18N = new InjectionToken<SpreadsheetIntl>(\n  'NgxSpreadSheetInternationalization',\n);\n","import { Cell } from './cell';\nimport { generateHeader } from '../header-index-generator';\nimport { generateId } from '../id-generator';\nimport { inject, InjectionToken } from '@angular/core';\nimport { NSS_DEFAULT_COLS, NSS_DEFAULT_ROWS } from '../providers';\nimport type { DeepMergeLeafURI } from 'deepmerge-ts';\nimport { deepmergeCustom } from 'deepmerge-ts';\n\nconst noArrayDeepMerge = deepmergeCustom<{\n  DeepMergeArraysURI: DeepMergeLeafURI;\n}>({\n  mergeArrays: false,\n});\n\nexport interface ColumnOptions {\n  header?: string;\n  width?: number;\n}\n\nexport interface TableOptions {\n  rows?: number;\n  cols?: number;\n  data?: any[][];\n  columns?: ColumnOptions[];\n  canInsertRows?: boolean;\n  canInsertCols?: boolean;\n}\n\nexport type SettableTableOptions = keyof Table & keyof TableOptions;\n\nfunction getDefault<\n  T extends InjectionToken<unknown>,\n  K = T extends InjectionToken<infer K> ? K : never,\n>(token: T, defaultValue: K): K {\n  try {\n    return inject<K>(token, { optional: true }) ?? defaultValue;\n  } catch (err) {\n    console.warn(\n      `You are creating a spreadsheet table outside of any injection context. ` +\n        `Any configuration you have provided for ${token} can't be retrieved and ` +\n        `the default value '${defaultValue}' will be used.`,\n    );\n  }\n  return defaultValue;\n}\n\nexport class Table {\n  private constructor(\n    public readonly id: string,\n    public head: string[],\n    public body: Cell[][],\n    public canInsertRows: boolean,\n    public canInsertCols: boolean,\n    protected options: TableOptions,\n  ) {}\n\n  public get data(): any[][] {\n    return this.body.map((row) => row.map((cell) => cell.value));\n  }\n\n  public get editing(): boolean {\n    return this.body.some((r) => r.some((c) => c.editable));\n  }\n\n  public recreate(options: TableOptions) {\n    return Table.create(noArrayDeepMerge({}, this.options, options));\n  }\n\n  public static create(options: TableOptions) {\n    options = noArrayDeepMerge({}, options);\n    const tableId = generateId();\n    const rows =\n      options.data?.length ?? options.rows ?? getDefault(NSS_DEFAULT_ROWS, 10);\n    const cols =\n      options.data?.[0]?.length ??\n      options.cols ??\n      options.columns?.length ??\n      getDefault(NSS_DEFAULT_COLS, 5);\n    const emptyRow = Array(cols).fill(undefined);\n    const head = emptyRow.map(\n      (v, c) => options.columns?.[c]?.header ?? generateHeader(c + 1),\n    );\n    const body = Array(rows)\n      .fill(undefined)\n      .map((v, r) =>\n        emptyRow.map(\n          (v, c) => new Cell(tableId, r, c, options.data?.[r]?.[c] ?? ''),\n        ),\n      );\n    return new Table(\n      tableId,\n      head,\n      body,\n      options.canInsertRows ?? true,\n      options.canInsertCols ?? true,\n      options,\n    );\n  }\n\n  public findCell(row: number, col: number): Cell | null {\n    for (const record of this.body) {\n      for (const field of record) {\n        if (field.row === row && field.col === col) {\n          return field;\n        }\n      }\n    }\n    return null;\n  }\n\n  public findOrCreateCell(row: number, col: number): Cell | null {\n    for (const record of this.body) {\n      for (const field of record) {\n        if (field.row === row && field.col === col) {\n          return field;\n        }\n      }\n    }\n    const resize: { rows?: number; cols?: number } = {};\n    if (this.rowCount <= row) {\n      if (!this.canInsertRows) return null;\n      resize.rows = row + 1;\n    }\n    if (this.colCount <= col) {\n      if (!this.canInsertCols) return null;\n      resize.cols = col + 1;\n    }\n    this.resize(resize);\n    const cell = this.findCell(row, col);\n    if (!cell) {\n      throw new Error(\n        `Unknown table error, could not find or create (${row}, ${col})`,\n      );\n    }\n    return cell;\n  }\n\n  public insertColumn(colIndex: number): void {\n    {\n      const remains = this.head.slice(0, colIndex);\n      const updates = Array(this.head.length - colIndex + 1)\n        .fill('')\n        .map((v, c) => generateHeader(c + 1 + colIndex));\n      this.head = [...remains, ...updates];\n    }\n    {\n      const body = [];\n      for (let r = 0; r < this.body.length; r++) {\n        const row = this.body[r];\n        const above = row.slice(0, colIndex);\n        const present = new Cell(this.id, r, colIndex, '');\n        const below = row\n          .slice(colIndex)\n          .map((cell) => cell.withCol(cell.col + 1));\n        const newRow = [...above, present, ...below];\n        body.push(newRow);\n      }\n      this.body = body;\n    }\n  }\n\n  public deleteColumn(colIndex: number): void {\n    {\n      const remains = this.head.slice(0, colIndex);\n      const updates = this.head\n        .slice(colIndex + 1)\n        .map((v, c) => generateHeader(c + 1 + colIndex));\n      this.head = [...remains, ...updates];\n    }\n    {\n      const body = [];\n      for (let r = 0; r < this.body.length; r++) {\n        const row = this.body[r];\n        const above = row.slice(0, colIndex);\n        const below = row\n          .slice(colIndex + 1)\n          .map((cell) => cell.withCol(cell.col + 1));\n        const newRow = [...above, ...below];\n        body.push(newRow);\n      }\n      this.body = body;\n    }\n  }\n\n  public insertRow(rowIndex: number): void {\n    const above = this.body.slice(0, rowIndex);\n    const present = Array(this.colCount)\n      .fill('')\n      .map((v, c) => new Cell(this.id, rowIndex, c, ''));\n    const below = this.body\n      .slice(rowIndex)\n      .map((row) => row.map((cell) => cell.withRow(cell.row + 1)));\n    this.body = [...above, present, ...below];\n  }\n\n  public deleteRow(rowIndex: number): void {\n    const above = this.body.slice(0, rowIndex);\n    const below = this.body\n      .slice(rowIndex + 1)\n      .map((row) => row.map((cell) => cell.withRow(cell.row + 1)));\n    this.body = [...above, ...below];\n  }\n\n  public get rowCount(): number {\n    return this.body.length;\n  }\n\n  public get colCount(): number {\n    return this.head.length;\n  }\n\n  resize({ rows, cols }: { rows?: number; cols?: number }) {\n    if (rows !== undefined) {\n      while (this.rowCount < rows) {\n        this.insertRow(this.rowCount);\n      }\n    }\n    if (cols !== undefined) {\n      while (this.colCount < cols) {\n        this.insertColumn(this.colCount);\n      }\n    }\n  }\n\n  setOption<K extends keyof this & keyof TableOptions>(\n    attr: K,\n    value: this[K],\n  ) {\n    this.options[attr] = value;\n    this[attr] = value;\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'ngx-context-menu-item',\n  template: ''\n})\nexport class NgxContextMenuItemComponent {\n  @Input()\n  label?: string;\n  @Input()\n  disabled?: boolean;\n  @Input()\n  divider?: boolean;\n  @Output()\n  click = new EventEmitter<number>();\n\n  clicked(index: number) {\n    if (!this.disabled) {\n      this.click.emit(index);\n    }\n  }\n}\n","import {\n  Component, contentChildren,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Output,\n  viewChild,\n} from '@angular/core';\nimport {NgxContextMenuItemComponent} from './ngx-context-menu-item.component';\n\n@Component({\n  selector: 'ngx-context-menu',\n  templateUrl: './ngx-context-menu.component.html',\n  styleUrls: ['./ngx-context-menu.component.scss'],\n})\nexport class NgxContextMenuComponent {\n  menuElementRef = viewChild.required('menu', {read: ElementRef});\n\n  itemTemplates = contentChildren(NgxContextMenuItemComponent);\n\n  @Output()\n  closed = new EventEmitter();\n\n  target: number = -1;\n\n  public show(ev: MouseEvent, index: number): void {\n    this.target = index;\n    this.menuElement.style.display = 'flex';\n\n    const menuTop =\n      ev.clientY + this.menuHeight > this.documentHeight\n        ? ev.pageY - this.menuHeight\n        : ev.pageY;\n    const menuLeft =\n      ev.clientX + this.menuWidth > this.documentWidth\n        ? ev.pageX - this.menuWidth\n        : ev.pageX;\n    this.menuElement.style.top = `${menuTop}px`;\n    this.menuElement.style.left = `${menuLeft}px`;\n  }\n\n  @HostListener('document:click', ['$event'])\n  click(): void {\n    this.menuElement.style.display = 'none';\n    this.closed.emit();\n  }\n\n  private get menuElement(): HTMLElement {\n    return this.menuElementRef().nativeElement;\n  }\n\n  private get menuStyle(): CSSStyleDeclaration {\n    return getComputedStyle(this.menuElement);\n  }\n\n  private get menuWidth(): number {\n    return (\n      this.menuElement.offsetWidth +\n      parseInt(this.menuStyle.marginLeft) +\n      parseInt(this.menuStyle.marginRight) +\n      parseInt(this.menuStyle.paddingLeft) +\n      parseInt(this.menuStyle.paddingRight)\n    );\n  }\n\n  private get menuHeight(): number {\n    return (\n      this.menuElement.offsetHeight +\n      parseInt(this.menuStyle.marginTop) +\n      parseInt(this.menuStyle.marginBottom) +\n      parseInt(this.menuStyle.paddingTop) +\n      parseInt(this.menuStyle.paddingBottom)\n    );\n  }\n\n  private get documentWidth(): number {\n    return document.documentElement.clientWidth;\n  }\n\n  private get documentHeight(): number {\n    return document.documentElement.clientHeight;\n  }\n}\n","<div #menu class=\"menu\">\n  @for (item of itemTemplates(); track $index) {\n    @if (!item.divider) {\n      <div (click)=\"item.clicked(target)\"\n           [class.disabled]=\"item.disabled\">\n        {{ item.label }}\n      </div>\n    } @else {\n      <div class=\"divider\"></div>\n    }\n  }\n</div>\n","const DELIMITER = '\\t';\nconst PARSE_PATTERN = new RegExp(\n  '(\\\\' +\n    DELIMITER +\n    '|\\\\r?\\\\n|\\\\r|^)' +\n    '(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|' +\n    '([^\"\\\\' +\n    DELIMITER +\n    '\\\\r\\\\n]*))',\n  'gi',\n);\n\nexport const csvToArray = (strData: string): string[][] => {\n  if (strData.endsWith('\\r\\n')) {\n    strData = strData.slice(0, strData.length - 2);\n  }\n  const arrData: string[][] = [[]];\n  let arrMatches = null;\n  while ((arrMatches = PARSE_PATTERN.exec(strData))) {\n    const strMatchedDelimiter = arrMatches[1];\n    if (strMatchedDelimiter.length && strMatchedDelimiter != DELIMITER) {\n      arrData.push([]);\n    }\n\n    const strMatchedValue = arrMatches[2]\n      ? arrMatches[2].replace(new RegExp('\"\"', 'g'), '\"')\n      : arrMatches[3];\n\n    arrData[arrData.length - 1].push(strMatchedValue);\n  }\n  return arrData;\n};\n","export class Anchor {\n  constructor(\n    public r: number,\n    public c: number,\n  ) {}\n}\n","import { Anchor } from './anchor';\n\nexport class Range {\n  constructor(\n    public r1: number,\n    public c1: number,\n    public r2: number,\n    public c2: number,\n  ) {}\n\n  public calc(row: number, col: number): void {\n    if (row < this.r1) {\n      this.r1 = row;\n    }\n    if (row > this.r2) {\n      this.r2 = row;\n    }\n    if (col < this.c1) {\n      this.c1 = col;\n    }\n    if (col > this.c2) {\n      this.c2 = col;\n    }\n  }\n\n  public includes(row: number, col: number): boolean {\n    return row >= this.r1 && row <= this.r2 && col >= this.c1 && col <= this.c2;\n  }\n\n  public equals(range: Range) {\n    return (\n      this.r1 === range.r1 &&\n      this.c1 === range.c1 &&\n      this.r2 === range.r2 &&\n      this.c2 === range.c2\n    );\n  }\n\n  public static of(\n    row: number,\n    col: number,\n    row2: number = row,\n    col2: number = col,\n  ): Range {\n    return new Range(row, col, row2, col2);\n  }\n\n  public static marge(a1: Anchor, a2: Anchor): Range {\n    const r1 = a1.r < a2.r ? a1.r : a2.r;\n    const r2 = a1.r > a2.r ? a1.r : a2.r;\n    const c1 = a1.c < a2.c ? a1.c : a2.c;\n    const c2 = a1.c > a2.c ? a1.c : a2.c;\n    return new Range(r1, c1, r2, c2);\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  Output,\n} from '@angular/core';\n\n@Directive({\n  selector: '[nssContentEditable]',\n})\nexport class ContentEditableDirective {\n  @Input()\n  set content(value: string) {\n    this.element.innerText = value || '';\n  }\n  @Output()\n  contentChange = new EventEmitter<string>();\n\n  constructor(private elementRef: ElementRef<HTMLElement>) {\n    this.element.tabIndex = 0;\n  }\n\n  @HostListener('blur', ['$event.target.value'])\n  blur() {\n    this.contentChange.emit(this.element.innerText);\n  }\n\n  get element(): HTMLElement {\n    return this.elementRef.nativeElement as HTMLElement;\n  }\n}\n","import {\n  Component,\n  EventEmitter,\n  HostListener,\n  inject,\n  Injector, input, model,\n  output,\n  Output,\n  runInInjectionContext, viewChild,\n} from '@angular/core';\nimport {NgxContextMenuComponent} from './ngx-context-menu.component';\nimport {merge, Observable} from 'rxjs';\nimport {distinctUntilChanged, map, scan} from 'rxjs/operators';\nimport {csvToArray} from './csv-converter';\nimport {Anchor, Cell, Range, Table} from './model';\nimport {ColumnOptions, SettableTableOptions} from './model/table';\nimport {NSS_I18N} from './providers';\nimport {deepmerge} from 'deepmerge-ts';\nimport {toObservable} from \"@angular/core/rxjs-interop\";\nimport {LetDirective} from \"@ngrx/component\";\nimport {ContentEditableDirective} from \"./content-editable.directive\";\nimport {NgxContextMenuItemComponent} from \"./ngx-context-menu-item.component\";\n\nfunction setPipe<K extends SettableTableOptions>(\n  obs$: Observable<Table[K]>,\n  attr: K,\n) {\n  return obs$.pipe(\n    map((value: Table[K]) => (table: Table) => {\n      table.setOption(attr, value);\n      return table;\n    }),\n  );\n}\n\n@Component({\n  selector: 'ngx-spreadsheet',\n  templateUrl: './ngx-spreadsheet.component.html',\n  styleUrls: ['./ngx-spreadsheet.component.scss'],\n  imports: [\n    LetDirective,\n    ContentEditableDirective,\n    NgxContextMenuComponent,\n    NgxContextMenuItemComponent\n  ]\n})\nexport class NgxSpreadsheetComponent {\n  private readonly injector = inject(Injector);\n  public readonly i18n = deepmerge(\n    {\n      INSERT_COLUMN_LEFT: 'Insert column left',\n      INSERT_COLUMN_RIGHT: 'Insert column right',\n      DELETE_COLUMN: 'Delete column',\n      DELETE_ROW: 'Delete row',\n      INSERT_ROW_BELOW: 'Insert row below',\n      INSERT_ROW_ABOVE: 'Insert row above',\n    },\n    inject(NSS_I18N, {optional: true}) ?? {},\n  );\n  theadContextMenu = viewChild<NgxContextMenuComponent>('theadMenu');\n  tbodyContextMenu = viewChild<NgxContextMenuComponent>('tbodyMenu');\n\n  data = model<any[][]>();\n  dataChanged = output<any[][]>();\n  rows = model<number>();\n  cols = model<number >();\n  columns = model<ColumnOptions[] >();\n  canInsertCols = model(false);\n  canInsertRows = model(false);\n  data$ = toObservable(this.data);\n  rows$ = toObservable(this.rows);\n  cols$ = toObservable(this.cols);\n  columns$ = toObservable(this.columns);\n  canInsertRows$ = toObservable(this.canInsertRows);\n  canInsertCols$ = toObservable(this.canInsertCols);\n  /**\n   * The table observable integrates all the reactive pipes into a higher order scan that\n   * can mutate or replace the table reference.\n   */\n  table$ = merge(\n    setPipe(this.canInsertCols$, 'canInsertCols'),\n    setPipe(this.canInsertRows$, 'canInsertRows'),\n    // Data object reference changed, create new table based on data\n    this.data$.pipe(map((data) => (table: Table) => table.recreate({data}))),\n    // Row input changed, resize table\n    this.rows$.pipe(map((rows) => (table: Table) => table.resize({rows}))),\n    // Col input changed, resize table\n    this.cols$.pipe(map((cols) => (table: Table) => table.resize({cols}))),\n    // Columns changed, recreate table\n    this.columns$.pipe(\n      map((columns) => (table: Table) => table.recreate({columns})),\n    ),\n  ).pipe(\n    scan(\n      (table, modifier: (table: Table) => Table | void) =>\n        (this.table =\n          runInInjectionContext(this.injector, () => modifier(table)) ?? table),\n      Table.create({}),\n    ),\n    distinctUntilChanged(),\n  );\n\n  @Output() copied = new EventEmitter<string>();\n\n  table: Table | null = null;\n  activatedCell: Cell | null = null;\n  range: Range | null = null;\n  anchor: Anchor | null = null;\n\n  activeTheadIndex: number = -1;\n  activeTbodyIndex: number = -1;\n\n  @HostListener('mousedown', ['$event'])\n  private onMouseDown(ev: MouseEvent): void {\n    const {row, col, valid} = this.getPositionFromId(ev.target);\n    if (!valid) {\n      return;\n    }\n    this.range = Range.of(row, col);\n    if (!ev.shiftKey || !this.anchor) {\n      this.anchor = new Anchor(row, col);\n    }\n  }\n\n  @HostListener('document:mousemove', ['$event'])\n  private onMouseMove(ev: MouseEvent): void {\n    if (!this.range || !this.anchor) {\n      return;\n    }\n    const self = this.getPositionFromId(ev.target);\n    if (self.valid) {\n      const range = Range.marge({r: self.row, c: self.col}, this.anchor);\n      if (!this.range?.equals(range)) {\n        this.range = range;\n      }\n    }\n  }\n\n  @HostListener('document:mouseup', ['$event'])\n  private onMouseUp(ev: MouseEvent): void {\n    if (ev.shiftKey && this.anchor) {\n      const self = this.getPositionFromId(ev.target);\n      if (self.valid) {\n        const range = Range.marge({r: self.row, c: self.col}, this.anchor);\n        if (!this.range?.equals(range)) {\n          this.range = range;\n        }\n      }\n    }\n    this.anchor = null;\n  }\n\n  @HostListener('document:keydown', ['$event'])\n  private onKeyDown(ev: KeyboardEvent): void {\n    const key = ev.key.toLowerCase();\n    const isCtrl = (ev.ctrlKey && !ev.metaKey) || (!ev.ctrlKey && ev.metaKey);\n    if (!this.table) {\n      return;\n    }\n\n    if (!this.anchor && ev.shiftKey && this.activatedCell) {\n      const {row, col} = this.activatedCell;\n      this.anchor = new Anchor(row, col);\n    }\n\n    if (key === 'enter' && this.activatedCell) {\n      const {row, col, editable} = this.activatedCell;\n      ev.preventDefault();\n      this.moveTo(row + 1, col, false);\n    } else if (key === 'tab' && this.activatedCell) {\n      ev.preventDefault();\n      const {rowCount, colCount} = this.table;\n      const {row, col, editable} = this.activatedCell;\n      const next = ev.shiftKey ? col - 1 : col + 1;\n      if (next < 0 && row > 0) {\n        this.moveTo(row - 1, colCount - 1, false);\n      } else if (next >= colCount && row < rowCount) {\n        this.moveTo(row + 1, 0, false);\n      } else {\n        this.moveTo(row, next, false);\n      }\n    } else if (key === 'f2') {\n      this.setEditable(ev, true);\n    } else if (key === 'escape') {\n      this.setEditable(ev, false);\n    } else if (key === 'a' && isCtrl) {\n      this.selectAll(ev);\n    } else if (key === 'c' && isCtrl) {\n      this.copy();\n    } else if (key === 'v' && isCtrl) {\n      this.paste();\n    } else if (key === 'delete') {\n      this.delete();\n    } else if (\n      this.activatedCell &&\n      !this.activatedCell.editable &&\n      /^.$/u.test(key)\n    ) {\n      this.activatedCell.value = '';\n      this.setEditable(ev, true);\n      this.forceFocus(ev.target as HTMLElement);\n    }\n    this.blockArrowKeys(ev);\n  }\n\n  private blockArrowKeys(ev: KeyboardEvent) {\n    if (ev.key.toLowerCase().startsWith('arrow')) {\n      ev.stopPropagation();\n      ev.preventDefault();\n    }\n  }\n\n  @HostListener('document:keyup', ['$event'])\n  private onKeyUp(ev: KeyboardEvent): void {\n    if (!this.activatedCell || this.activatedCell.editable) {\n      return;\n    }\n    if (!ev.shiftKey) {\n      this.anchor = null;\n    }\n    const {row, col} = this.activatedCell;\n    switch (ev.key.toLowerCase()) {\n      case 'arrowup':\n        this.moveTo(row - 1, col, ev.shiftKey);\n        break;\n      case 'arrowdown':\n        this.moveTo(row + 1, col, ev.shiftKey);\n        break;\n      case 'arrowleft':\n        this.moveTo(row, col - 1, ev.shiftKey);\n        break;\n      case 'arrowright':\n        this.moveTo(row, col + 1, ev.shiftKey);\n        break;\n    }\n    this.blockArrowKeys(ev);\n  }\n\n  trackByCell(index: number, value: Cell): string | null {\n    return value ? value.id : null;\n  }\n\n  clickHeader(colIndex: number): void {\n    const rowLength = this.table?.body.length || 0;\n    if (rowLength > 0) {\n      this.range = Range.of(0, colIndex, rowLength, colIndex);\n    }\n  }\n\n  clickRow(rowIndex: number): void {\n    if (!this.table) {\n      return;\n    }\n    if (rowIndex >= 0 && rowIndex < this.table.body.length) {\n      const cols = this.table.body[rowIndex];\n      this.range = Range.of(rowIndex, 0, rowIndex, cols.length);\n    }\n  }\n\n  focus(ev: FocusEvent): void {\n    const found = this.findCellByEventTarget(ev.target);\n    this.activatedCell = found;\n  }\n\n  blur(ev: FocusEvent): void {\n    const found = this.findCellByEventTarget(ev.target);\n    if (found) {\n      found.editable = false;\n    }\n  }\n\n  cellMouseUp(ev: Event, target: Cell): void {\n    const td = ev.target as HTMLTableCellElement;\n    if (target === this.activatedCell) {\n      target.editable = true;\n    }\n  }\n\n  setValue(ev: Event, target: Cell): void {\n    const value = (ev.target as HTMLTableCellElement).innerText || '';\n    target.value = value;\n  }\n\n  setEditable(ev: Event, editable: boolean): void {\n    ev.stopPropagation();\n    const found = this.findCellByEventTarget(ev.target);\n    if (found) {\n      found.editable = editable;\n    }\n  }\n\n  showTheadMenu(ev: MouseEvent, index: number) {\n    ev.stopPropagation();\n    this.theadContextMenu()?.show(ev, index);\n    // Return false to prevent the browser from opening its own context menu on top\n    return false;\n  }\n\n  showTbodyMenu(ev: MouseEvent, index: number) {\n    ev.stopPropagation();\n    this.tbodyContextMenu()?.show(ev, index);\n    // Return false to prevent the browser from opening its own context menu on top\n    return false;\n  }\n\n  private moveTo(row: number, col: number, shiftKey: boolean): void {\n    if (!this.table) {\n      return;\n    }\n    const {rowCount, colCount} = this.table;\n    const resize: { rows?: number; cols?: number } = {};\n    if (rowCount <= row && this.table.canInsertRows) {\n      resize.rows = row + 1;\n    }\n    if (colCount <= col && this.table.canInsertCols) {\n      resize.cols = col + 1;\n    }\n    this.table.resize(resize);\n    const {body} = this.table;\n    if (row >= 0 && row < body.length) {\n      const cols = body[row];\n      if (col >= 0 && col < cols.length) {\n        const cell = cols[col];\n        setTimeout(() => {\n          const e = document.getElementById(cell.id);\n          if (e) {\n            this.forceFocus(e);\n          }\n        });\n        if (shiftKey && this.range && this.anchor) {\n          this.range = Range.marge(this.anchor, {r: row, c: col});\n        } else {\n          this.range = Range.of(cell.row, cell.col);\n        }\n      }\n    }\n  }\n\n  private forceFocus(el: HTMLElement) {\n    el.focus();\n    const s = window.getSelection();\n    const r = document.createRange();\n    r.setStart(el, el.childElementCount);\n    r.setEnd(el, el.childElementCount);\n    s?.removeAllRanges();\n    s?.addRange(r);\n  }\n\n  private findCellByEventTarget(target: EventTarget | null): Cell | null {\n    const {row, col, valid} = this.getPositionFromId(target);\n    return valid ? this.table?.findCell(row, col) || null : null;\n  }\n\n  private getPositionFromId(target: EventTarget | null): {\n    row: number;\n    col: number;\n    valid: boolean;\n  } {\n    const element = target as HTMLTableCellElement;\n    if (!this.table || !element?.id?.match(/(\\w+)-(\\d+)-(\\d+)/)) {\n      return {row: NaN, col: NaN, valid: false};\n    }\n    const valid = RegExp.$1 === this.table.id;\n    const row = parseInt(RegExp.$2 || '', 10);\n    const col = parseInt(RegExp.$3 || '', 10);\n    return {row, col, valid};\n  }\n\n  private copy(): void {\n    if (!this.table || !this.range) {\n      return;\n    }\n    const lines = [];\n    for (let r = this.range.r1; r <= this.range.r2; r++) {\n      const line = [];\n      for (let c = this.range.c1; c <= this.range.c2; c++) {\n        const cell = this.table.findCell(r, c);\n        if (cell) {\n          const value = cell.value.match(/[\\t\\n\\r　 \"]+/)\n            ? '\"' + cell.value.split('\"').join('\"\"') + '\"'\n            : cell.value;\n          line.push(value);\n        }\n      }\n      lines.push(line.join('\\t'));\n    }\n    const text = lines.join('\\n');\n    if (text) {\n      navigator.clipboard.writeText(text).then(() => this.copied.emit(text));\n    }\n  }\n\n  private paste(): void {\n    if (!this.table || !this.range) {\n      return;\n    }\n    const {r1, c1, r2, c2} = this.range;\n    navigator.clipboard.readText().then((data) => {\n      const ar = csvToArray(data);\n      if (!ar.length) {\n        return;\n      }\n      if (ar.length === 1 && ar[0].length === 1) {\n        // There is only 1 pasted value, paste it everywhere\n        const clipboardText = ar[0][0];\n        for (let r = r1; r <= r2; r++) {\n          for (let c = c1; c <= c2; c++) {\n            const cell = this.table!.findCell(r, c);\n            if (cell) {\n              cell.value = clipboardText;\n            }\n          }\n        }\n      } else {\n        let mr: number = 0,\n          mc: number = 0;\n        for (let r = 0, tableRow = r1; r < ar.length; r++, tableRow++) {\n          const row = ar[r];\n          for (let c = 0, tableCol = c1; c < row.length; c++, tableCol++) {\n            const col = row[c];\n            const cell = this.table!.findOrCreateCell(tableRow, tableCol);\n            if (cell) {\n              cell.value = col;\n              mr = Math.max(cell.row, mr);\n              mc = Math.max(cell.col, mc);\n            }\n          }\n        }\n        this.range = Range.of(r1, c1, mr, mc);\n      }\n    });\n    this.dataChanged.emit(this.table.data);\n  }\n\n  private delete(): void {\n    if (!this.table || !this.range) {\n      return;\n    }\n    const {r1, c1, r2, c2} = this.range;\n    for (let r = r1; r <= r2; r++) {\n      for (let c = c1; c <= c2; c++) {\n        const cell = this.table.findCell(r, c);\n        if (cell) {\n          cell.value = '';\n        }\n      }\n    }\n    this.dataChanged.emit(this.table.data);\n  }\n\n  updateValue(table: Table, cell: any, $event: string) {\n    if (cell.value != $event) {\n      cell.value = $event;\n      this.dataChanged.emit(table.data);\n    }\n  }\n\n  selectAll(event$?: Event) {\n    if (!this.table || this.table.editing) {\n      return;\n    }\n    this.range = Range.of(0, 0, this.table.rowCount, this.table.colCount);\n    if (event$) {\n      event$.stopPropagation();\n      event$.preventDefault();\n    }\n  }\n\n  newRow(col: number) {\n    if (!this.table) return;\n    this.table.resize({rows: this.table.rowCount + 1});\n    this.activatedCell = this.table.findCell(this.table.rowCount - 1, col);\n    this.range = new Range(\n      this.table.rowCount - 1,\n      col,\n      this.table.rowCount - 1,\n      col,\n    );\n    setTimeout(() => {\n      if (this.activatedCell) {\n        const el = document.getElementById(this.activatedCell.id);\n        if (el) {\n          this.forceFocus(el);\n        }\n      }\n    });\n  }\n}\n","<ng-container *ngrxLet=\"table$ as table\">\n  <div class=\"container\">\n    <table>\n      <!--Table header-->\n      <thead>\n      <tr>\n        <!--Empty top left header cell-->\n        <th></th>\n        <!--Column header cells-->\n        @for (col of table.head; track col; let c = $index) {\n          <th\n            (click)=\"clickHeader(c)\"\n            (contextmenu)=\"showTheadMenu($event, c)\"\n            (mouseenter)=\"activeTheadIndex = c\"\n            (mouseleave)=\"activeTheadIndex = -1\"\n          >\n            {{ col }}\n          </th>\n        }\n      </tr>\n      </thead>\n      <!--Table body-->\n      <tbody style=\"overflow-y: auto\">\n      <!--Table rows-->\n        @for (row of table.body; track row; let r = $index) {\n          <tr>\n            <!--Row header cell-->\n            <th\n              (click)=\"clickRow(r)\"\n              (contextmenu)=\"showTbodyMenu($event, r)\"\n              (mouseenter)=\"activeTbodyIndex = r\"\n              (mouseleave)=\"activeTbodyIndex = -1\"\n            >\n              {{ r + 1 }}\n            </th>\n            <!--Table data cell-->\n            @for (cell of row; track cell.id; let c = $index) {\n              <td\n                [id]=\"cell.id\"\n                [class.focus]=\"cell === activatedCell\"\n                [class.sel]=\"range?.includes(cell.row, cell.col)\"\n                nssContentEditable\n                [content]=\"cell.value\"\n                (contentChange)=\"updateValue(table, cell, $event)\"\n                (focus)=\"focus($event)\"\n                (blur)=\"blur($event)\"\n                (mousedown)=\"cellMouseUp($event, cell)\"\n                [attr.contenteditable]=\"cell.editable\"\n              ></td>\n            }\n          </tr>\n        }\n        <!--New data row, click to increase row size-->\n        @if (table.canInsertRows) {\n          <tr>\n            <th>*</th>\n            @for (_ of [].constructor(table.colCount); track $index; let i = $index) {\n              <td\n                (click)=\"newRow(i)\"\n              ></td>\n            }\n          </tr>\n        }\n      </tbody>\n    </table>\n  </div>\n  <!--Column header context menu-->\n  <ngx-context-menu #theadMenu (closed)=\"activeTheadIndex = -1\">\n    <ngx-context-menu-item\n      [label]=\"i18n.INSERT_COLUMN_LEFT\"\n      (click)=\"table.insertColumn($event)\"\n    >\n    </ngx-context-menu-item>\n    <ngx-context-menu-item\n      [label]=\"i18n.INSERT_COLUMN_RIGHT\"\n      (click)=\"table.insertColumn($event + 1)\"\n    >\n    </ngx-context-menu-item>\n    <ngx-context-menu-item [divider]=\"true\"></ngx-context-menu-item>\n    <ngx-context-menu-item\n      [label]=\"i18n.DELETE_COLUMN\"\n      [disabled]=\"table.colCount <= 1\"\n      (click)=\"table.deleteColumn($event)\"\n    >\n    </ngx-context-menu-item>\n  </ngx-context-menu>\n\n  <!--Row header context menu-->\n  <ngx-context-menu #tbodyMenu (closed)=\"activeTbodyIndex = -1\">\n    <ngx-context-menu-item\n      [label]=\"i18n.INSERT_ROW_ABOVE\"\n      (click)=\"table.insertRow($event)\"\n    >\n    </ngx-context-menu-item>\n    <ngx-context-menu-item\n      [label]=\"i18n.INSERT_ROW_BELOW\"\n      (click)=\"table.insertRow($event + 1)\"\n    >\n    </ngx-context-menu-item>\n    <ngx-context-menu-item [divider]=\"true\"></ngx-context-menu-item>\n    <ngx-context-menu-item\n      [label]=\"i18n.DELETE_ROW\"\n      [disabled]=\"table.rowCount <= 1\"\n      (click)=\"table.deleteRow($event)\"\n    >\n    </ngx-context-menu-item>\n  </ngx-context-menu>\n</ng-container>\n","/*\n * Public API Surface of ngx-spreadsheet\n */\n\nexport * from './lib/model/table';\nexport * from './lib/ngx-spreadsheet.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["CHARS","LENGTH"],"mappings":"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"}