{"version":3,"file":"ngx-smart-spreadsheet.mjs","sources":["../../../projects/ngx-smart-spreadsheet/src/lib/deep-marge.ts","../../../projects/ngx-smart-spreadsheet/src/lib/spreadsheet-settings.ts","../../../projects/ngx-smart-spreadsheet/src/lib/csv-converter.ts","../../../projects/ngx-smart-spreadsheet/src/lib/model/anchor.ts","../../../projects/ngx-smart-spreadsheet/src/lib/model/range.ts","../../../projects/ngx-smart-spreadsheet/src/lib/header-index-generator.ts","../../../projects/ngx-smart-spreadsheet/src/lib/id-generator.ts","../../../projects/ngx-smart-spreadsheet/src/lib/model/cell.ts","../../../projects/ngx-smart-spreadsheet/src/lib/model/table.ts","../../../projects/ngx-smart-spreadsheet/src/lib/ngx-context-menu-item.component.ts","../../../projects/ngx-smart-spreadsheet/src/lib/ngx-context-menu.component.ts","../../../projects/ngx-smart-spreadsheet/src/lib/ngx-context-menu.component.html","../../../projects/ngx-smart-spreadsheet/src/lib/content-editable.directive.ts","../../../projects/ngx-smart-spreadsheet/src/lib/ngx-smart-spreadsheet.component.ts","../../../projects/ngx-smart-spreadsheet/src/lib/ngx-smart-spreadsheet.component.html","../../../projects/ngx-smart-spreadsheet/src/lib/ngx-smart-spreadsheet.module.ts","../../../projects/ngx-smart-spreadsheet/src/public-api.ts","../../../projects/ngx-smart-spreadsheet/src/ngx-smart-spreadsheet.ts"],"sourcesContent":["function isObject(item: any): any {\n    return (item && typeof item === 'object' && !Array.isArray(item));\n}\n\nexport function mergeDeep(target: any, ...sources: any): any {\n    if (!sources.length) return target;\n    const source = sources.shift();\n\n    if (isObject(target) && isObject(source)) {\n        for (const key in source) {\n            if (isObject(source[key])) {\n                if (!target[key]) Object.assign(target, { [key]: {} });\n                mergeDeep(target[key], source[key]);\n            } else {\n                Object.assign(target, { [key]: source[key] });\n            }\n        }\n    }\n    return mergeDeep(target, ...sources);\n}\n","import { mergeDeep } from \"./deep-marge\";\nimport { SpreadsheetSettingOptions } from \"./spreadsheet-settings-options\";\n\nconst defaultOptions: SpreadsheetSettingOptions = {\n    contextMenuRowLabel: {\n        INSERT_ROW_ABOVE: 'Insert 1 row above',\n        INSERT_ROW_BELOW: 'Insert 1 row below',\n        DELETE_ROW: 'Delete row',\n    },\n    contextMenuColLabel: {\n        INSERT_COLUMN_LEFT: 'Insert 1 column left',\n        INSERT_COLUMN_RIGHT: 'Insert 1 column right',\n        DELETE_COLUMN: 'Delete column',\n    }\n};\n\nexport class SpreadsheetSettings {\n    constructor(\n        public rows: number | null,\n        public cols: number | null,\n        public data: string[][] | null,\n        public options?: SpreadsheetSettingOptions\n    ) {\n        this.options = mergeDeep(defaultOptions, options || {});\n    }\n\n    public static empty(rows: number, cols: number, options?: SpreadsheetSettingOptions): SpreadsheetSettings {\n        return new SpreadsheetSettings(rows, cols, null, options);\n    }\n\n    public static load(data: string[][], options?: SpreadsheetSettingOptions): SpreadsheetSettings {\n        return new SpreadsheetSettings(null, null, data, options);\n    }\n};\n","const DELIMITER = '\\t';\nconst PARSE_PATTERN = new RegExp(\n    (\n        '(\\\\' + DELIMITER + '|\\\\r?\\\\n|\\\\r|^)' +\n        '(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|' +\n        '([^\"\\\\' + DELIMITER + '\\\\r\\\\n]*))'\n    ),\n    \"gi\"\n);\n\nconst csvToArray = (strData: string): string[][] => {\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'), '\"') : arrMatches[3];\n\n        arrData[arrData.length - 1].push(strMatchedValue);\n    }\n    return arrData;\n};\n\nexport default csvToArray;\n","class Anchor {\n    constructor(\n        public r: number,\n        public c: number,\n    ) { }\n}\n\nexport default Anchor;\n","import Anchor from \"./anchor\";\n\nclass 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)\n            && (col >= this.c1 && col <= this.c2);\n    }\n\n    public equals(range: Range) {\n        return this.r1 === range.r1 && this.c1 === range.c1 && this.r2 === range.r2 && this.c2 === range.c2;\n    }\n\n    public static of(row: number, col: number, row2: number = row, col2: number = col): 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\nexport default Range;\n","const CHARS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',\n    'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];\nconst LENGTH = CHARS.length;\n\nconst generateHeader = (index: number): string => {\n    index -= 1;\n    const remain = Math.floor(index / LENGTH);\n    return (remain > 0) ? generateHeader(remain) + CHARS[index % LENGTH] : CHARS[index % LENGTH];\n};\n\nexport default generateHeader;\n","const CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\nconst LENGTH = CHARS.length;\n\nconst generageId = (): string =>\n    new Array(8).fill(null)\n        .map(() => CHARS.charAt(Math.floor(Math.random() * LENGTH)))\n        .join('');\n\nexport default generageId;\n","\nclass 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\nexport default Cell;\n","import generateHeader from \"../header-index-generator\";\nimport generageId from \"../id-generator\";\nimport Cell from \"./cell\";\n\nclass Table {\n    constructor(\n        public id: string,\n        public head: string[],\n        public body: Cell[][]\n    ) { }\n\n    public static empty(rows: number, cols: number): Table {\n        const tableId = generageId();\n        const row = Array(cols).fill('');\n        const head = row.map((v, c) => generateHeader(c + 1));\n        const body = [];\n        for (let r = 0; r < rows; r++) {\n            body.push(row.map((v, c) => new Cell(tableId, r, c, '')));\n        }\n        return new Table(tableId, head, body);\n    }\n\n    public static load(data: string[][]): Table {\n        if (!data.length) {\n            throw new Error('Error: invalid data structure');\n        }\n        const tableId = generageId();\n        const cols = data.reduce((prev, current) => Math.max(prev, current.length), 0);\n        const head = Array(cols).fill('').map((v, c) => generateHeader(c + 1));\n        const body = [];\n        for (let r = 0; r < data.length; r++) {\n            const row = data[r];\n            const bodyRow: Cell[] = [];\n            for (let c = 0; c < cols; c++) {\n                const value = c < row.length ? row[c] : '';\n                bodyRow.push(new Cell(tableId, r, c, value));\n            }\n            body.push(bodyRow);\n        }\n        return new Table(tableId, head, body);\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 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.slice(colIndex).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.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.slice(colIndex + 1).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).fill('')\n            .map((v, c) => new Cell(this.id, rowIndex, c, ''));\n        const below = this.body.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.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\nexport default Table;\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 { Component, ContentChildren, ElementRef, EventEmitter, HostListener, Output, QueryList, ViewChild } 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  @ViewChild('menu', { static: true })\n  menuElementRef!: ElementRef<HTMLElement>;\n\n  @ContentChildren(NgxContextMenuItemComponent)\n  itemTemplates!: QueryList<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 = ((ev.clientY + this.menuHeight) > this.documentHeight) ?\n      ev.pageY - this.menuHeight : ev.pageY + 15;\n    const menuLeft = ((ev.clientX + this.menuWidth) > this.documentWidth) ?\n      ev.pageX - this.menuWidth : 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 this.menuElement.offsetWidth +\n      parseInt(this.menuStyle.marginLeft) + parseInt(this.menuStyle.marginRight) +\n      parseInt(this.menuStyle.paddingLeft) + parseInt(this.menuStyle.paddingRight);\n  }\n\n  private get menuHeight(): number {\n    return this.menuElement.offsetHeight +\n      parseInt(this.menuStyle.marginTop) + parseInt(this.menuStyle.marginBottom) +\n      parseInt(this.menuStyle.paddingTop) + parseInt(this.menuStyle.paddingBottom);\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}\n","<div #menu class=\"menu\">\n    <ng-container *ngFor=\"let item of itemTemplates\">\n        <div class=\"item\" *ngIf=\"!item.divider; else divider\" (click)=\"item.clicked(target)\"\n            [class.disabled]=\"item.disabled\">\n            {{item.label}}\n        </div>\n        <ng-template #divider>\n            <div class=\"divider\"></div>\n        </ng-template>\n    </ng-container>\n</div>","import { Directive, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core';\n\n@Directive({\n  selector: '[nssContentEditable]'\n})\nexport class ContentEditableDirective {\n  @Input()\n  set model(value: string) {\n    this.element.innerText = value || '';\n  }\n  @Output()\n  modelChange = 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.modelChange.emit(this.element.innerText);\n  }\n\n  get element(): HTMLElement {\n    return this.elementRef.nativeElement as HTMLElement;\n  }\n}\n","import { Component, EventEmitter, HostListener, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport csvToArray from './csv-converter';\nimport Anchor from './model/anchor';\nimport Cell from './model/cell';\nimport Range from './model/range';\nimport Table from './model/table';\nimport { NgxContextMenuComponent } from './ngx-context-menu.component';\nimport { SpreadsheetSettings } from './spreadsheet-settings';\n\n@Component({\n  selector: 'ngx-smart-spreadsheet',\n  templateUrl: './ngx-smart-spreadsheet.component.html',\n  styleUrls: ['./ngx-smart-spreadsheet.component.scss']\n})\nexport class NgxSmartSpreadsheetComponent implements OnInit {\n  @ViewChild('theadMenu')\n  theadContextMenu!: NgxContextMenuComponent;\n  @ViewChild('tbodyMenu')\n  tbodyContextMenu!: NgxContextMenuComponent;\n\n  @Input()\n  settings: SpreadsheetSettings | null = null;\n\n  @Output()\n  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  ngOnInit(): void {\n    if (this.settings?.rows && this.settings?.cols) {\n      this.table = Table.empty(this.settings.rows, this.settings.cols);\n    } else if (this.settings?.data) {\n      this.table = Table.load(this.settings.data);\n    }\n  }\n\n  public get data(): string[][] {\n    if (!this.table) {\n      return [[]];\n    }\n    return this.table.body.map(row => row.map(cell => cell.value));\n  }\n\n  @HostListener('mousedown', ['$event'])\n  private mousedown(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 mousemove(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 mouseup(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      if (editable && ev.shiftKey) {\n        ev.preventDefault();\n        this.moveTo(row + 1, col, false, editable);\n      }\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, editable);\n      } else if (next >= colCount && row < rowCount) {\n        this.moveTo(row + 1, 0, false, editable);\n      } else {\n        this.moveTo(row, next, false, editable);\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 === 'c' && isCtrl) {\n      this.copy();\n    } else if (key === 'v' && isCtrl) {\n      this.paste();\n    } else if (key === 'delete') {\n      this.delete();\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, false);\n        break;\n      case 'arrowdown':\n        this.moveTo(row + 1, col, ev.shiftKey, false);\n        break;\n      case 'arrowleft':\n        this.moveTo(row, col - 1, ev.shiftKey, false);\n        break;\n      case 'arrowright':\n        this.moveTo(row, col + 1, ev.shiftKey, false);\n        break;\n    }\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  dblclick(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  //#region menu event handle\n  showTheadMenu(ev: MouseEvent, index: number): void {\n    ev.stopPropagation();\n    this.theadContextMenu.show(ev, index);\n  }\n\n  showTbodyMenu(ev: MouseEvent, index: number): void {\n    ev.stopPropagation();\n    this.tbodyContextMenu.show(ev, index);\n  }\n  //#endregion\n\n  private moveTo(row: number, col: number, shiftKey: boolean, editable: boolean): void {\n    if (!this.table) {\n      return;\n    }\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        const e = document.getElementById(cell.id);\n        if (e) {\n          e.focus();\n          const s = window.getSelection();\n          const r = document.createRange();\n          r.setStart(e, e.childElementCount);\n          r.setEnd(e, e.childElementCount);\n          s?.removeAllRanges();\n          s?.addRange(r);\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        if (editable) {\n          cell.editable = true;\n        }\n      }\n    }\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): { row: number, col: number, valid: boolean } {\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)\n        .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()\n      .then((data) => {\n        const ar = csvToArray(data);\n        if (!ar.length) {\n          return;\n        }\n        if (ar.length === 1 && ar[0].length === 1) {\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 if ((r2 - r1 + 1) === ar.length && (c2 - c1 + 1) === ar[0].length) {\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 = ar[r][c];\n              }\n            }\n          }\n        } else {\n          let cell = null;\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              cell = this.table!.findCell(tableRow, tableCol);\n              if (cell) {\n                cell.value = col;\n              }\n            }\n          }\n          if (cell) {\n            this.range = Range.of(r1, c1, cell.row, cell.col);\n          }\n        }\n      });\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  }\n\n}\n","<ng-container *ngIf=\"settings && table\">\n    <div class=\"container\">\n        <table>\n            <thead>\n                <tr>\n                    <th></th>\n                    <th *ngFor=\"let col of table.head; let c = index\" (click)=\"clickHeader(c)\"\n                        (mouseenter)=\"activeTheadIndex = c\" (mouseleave)=\"activeTheadIndex = -1\">\n                        <div class=\"head\">\n                            <div class=\"label\">{{col}}</div>\n                            <div class=\"dropdown\" *ngIf=\"activeTheadIndex === c\">\n                                <button class=\"dropbtn\" (click)=\"showTheadMenu($event, c)\">&gt;</button>\n                            </div>\n                        </div>\n                    </th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr *ngFor=\"let row of table.body; let r = index;\">\n                    <th (click)=\"clickRow(r)\" (mouseenter)=\"activeTbodyIndex = r\" (mouseleave)=\"activeTbodyIndex = -1\">\n                        <div class=\"head\">\n                            <div class=\"label\">{{r + 1}}</div>\n                            <div class=\"dropdown\" *ngIf=\"activeTbodyIndex === r\">\n                                <button class=\"dropbtn\" (click)=\"showTbodyMenu($event, r)\">&gt;</button>\n                            </div>\n                        </div>\n                    </th>\n                    <td [id]=\"cell.id\" *ngFor=\"let cell of row; let c = index; trackBy: trackByCell\"\n                        [class.focus]=\"cell === activatedCell\" [class.sel]=\"range?.includes(cell.row, cell.col)\"\n                        nssContentEditable [(model)]=\"cell.value\" (focus)=\"focus($event)\" (blur)=\"blur($event)\"\n                        (dblclick)=\"dblclick($event, cell)\" [attr.contenteditable]=\"cell.editable\">\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </div>\n\n    <ngx-context-menu #theadMenu (closed)=\"activeTheadIndex = -1\">\n        <ngx-context-menu-item [label]=\"settings.options?.contextMenuColLabel?.INSERT_COLUMN_LEFT\"\n            (click)=\"table.insertColumn($event)\">\n        </ngx-context-menu-item>\n        <ngx-context-menu-item [label]=\"settings.options?.contextMenuColLabel?.INSERT_COLUMN_RIGHT\"\n            (click)=\"table.insertColumn($event + 1)\">\n        </ngx-context-menu-item>\n        <ngx-context-menu-item [divider]=\"true\"></ngx-context-menu-item>\n        <ngx-context-menu-item [label]=\"settings.options?.contextMenuColLabel?.DELETE_COLUMN\"\n            [disabled]=\"table.colCount <= 1\" (click)=\"table.deleteColumn($event)\">\n        </ngx-context-menu-item>\n    </ngx-context-menu>\n\n    <ngx-context-menu #tbodyMenu (closed)=\"activeTbodyIndex = -1\">\n        <ngx-context-menu-item [label]=\"settings.options?.contextMenuRowLabel?.INSERT_ROW_ABOVE\"\n            (click)=\"table.insertRow($event)\">\n        </ngx-context-menu-item>\n        <ngx-context-menu-item [label]=\"settings.options?.contextMenuRowLabel?.INSERT_ROW_BELOW\"\n            (click)=\"table.insertRow($event + 1)\">\n        </ngx-context-menu-item>\n        <ngx-context-menu-item [divider]=\"true\"></ngx-context-menu-item>\n        <ngx-context-menu-item [label]=\"settings.options?.contextMenuRowLabel?.DELETE_ROW\"\n            [disabled]=\"table.rowCount <= 1\" (click)=\"table.deleteRow($event)\">\n        </ngx-context-menu-item>\n    </ngx-context-menu>\n</ng-container>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ContentEditableDirective } from './content-editable.directive';\nimport { NgxContextMenuItemComponent } from './ngx-context-menu-item.component';\nimport { NgxContextMenuComponent } from './ngx-context-menu.component';\nimport { NgxSmartSpreadsheetComponent } from './ngx-smart-spreadsheet.component';\n\n\n\n@NgModule({\n  declarations: [\n    NgxSmartSpreadsheetComponent,\n    NgxContextMenuComponent,\n    NgxContextMenuItemComponent,\n    ContentEditableDirective\n  ],\n  imports: [\n    CommonModule\n  ],\n  exports: [\n    NgxSmartSpreadsheetComponent\n  ]\n})\nexport class NgxSmartSpreadsheetModule { }\n","/*\n * Public API Surface of ngx-smart-spreadsheet\n */\n\nexport * from './lib/spreadsheet-settings';\nexport * from './lib/spreadsheet-settings-options';\nexport * from './lib/ngx-smart-spreadsheet.component';\nexport * from './lib/ngx-smart-spreadsheet.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["CHARS","LENGTH"],"mappings":"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"}