{"version":3,"file":"tym-table-editor.mjs","sources":["../../../projects/tym-table-editor/src/lib/tym-table-editor.component.ts","../../../projects/tym-table-editor/src/lib/tym-table-input.component.ts","../../../projects/tym-table-editor/src/lib/tym-table-editor.module.ts","../../../projects/tym-table-editor/src/public-api.ts","../../../projects/tym-table-editor/src/tym-table-editor.ts"],"sourcesContent":["/*!\r\n * tym-table-editor.js\r\n * Copyright (c) 2022 shinichi tayama\r\n * Released under the MIT license.\r\n * see https://opensource.org/licenses/MIT\r\n */\r\n\r\nimport { Component, AfterViewInit, ElementRef, Renderer2, Input, HostBinding } from '@angular/core';\r\n\r\nconst AUTO = 'auto';\r\nconst SCROLL = 'scroll';\r\n\r\nconst num2 = (n: number) => ('00' + n).slice(-2);\r\nconst FIRST_ELEMENT_CHILD = (elm: HTMLElement) => elm?.firstElementChild as HTMLElement;\r\ntype HIST = { r: number, c: number, b: string, a: string, d?: TYM_EDITOR_DEF };\r\ntype HISTS = HIST[];\r\ntype RANGE = { r1: number, c1: number, r2: number, c2: number };\r\n/** カラム定義 */\r\nexport type TYM_EDITOR_DEF = {\r\n  /** 対象列番号(1～) */\r\n  col: number;\r\n  /** 対象列タイプ */\r\n  type?: string;\r\n  /** 対象列揃え指定 {'left' | 'center' | 'right'}, 規定値: 'left' */\r\n  align?: 'left' | 'center' | 'right';\r\n  /** 表示モードだけにする, 規定値: false */\r\n  readonly?: boolean;\r\n  /** 値を表示文字に変換する関数, 規定値: なし */\r\n  viewfnc?: (val: string, type?: string, col?: number) => string;\r\n  /** 値を編集する関数, 規定値: なし */\r\n  editfnc?: (elm: HTMLElement, val: string, type?: string, col?: number) => Promise<string | null>;\r\n}\r\n/** オプション定義 */\r\nexport type TYM_EDITOR_OPTS = {\r\n  /** 選択, カレントセルを折り返ししない */\r\n  whiteSpaceNoWrap?: boolean;\r\n  /** 編集モードの解除時に列のリサイズを実行する */\r\n  editModeAutoResize?: boolean;\r\n  /** フラットデザインにする */\r\n  flatDesign?: boolean;\r\n  /** 垂直方向のリサイズを無しにする */\r\n  noVerticalResize?: boolean;\r\n}\r\n\r\n@Component({\r\n  selector: 'ngx-tym-table-editor',\r\n  template: '<table><tbody></tbody></table>',\r\n  styleUrls: ['./tym-table-editor.component.scss']\r\n})\r\nexport class TymTableEditorComponent implements AfterViewInit {\r\n\r\n  private static idnum = 0;\r\n  private _thisElm: HTMLElement; // this table element\r\n\r\n  @Input() row: number = 30;\r\n  @Input() col: number = 20;\r\n  @Input() defs: TYM_EDITOR_DEF[] = [];\r\n  @Input() data: any[][] = [['']];\r\n  @Input() menu = (event: MouseEvent, row1: number, col1: number, row2: number, col2: number) => false;\r\n  private _opts: TYM_EDITOR_OPTS = {}\r\n  @Input() set opts(opts: TYM_EDITOR_OPTS) {\r\n    this._opts = opts;\r\n    this._setopt();\r\n  }\r\n  private _setopt() {\r\n    const tableElm = FIRST_ELEMENT_CHILD(this._thisElm);\r\n    const tbodyElm = FIRST_ELEMENT_CHILD(tableElm);\r\n    setTimeout(() => {\r\n      if (tbodyElm) {\r\n        const [cl, opts] = [tbodyElm.classList, this._opts];\r\n        if (opts.whiteSpaceNoWrap) { cl.add('nowrap'); } else { cl.remove('nowrap'); }\r\n        if (opts.noVerticalResize) { cl.add('novrsz'); } else { cl.remove('novrsz'); }\r\n      }\r\n    });\r\n    [this.thFont, this.thWidth, this.thBgColor, this.thBorder, this.thWidth1, this.thWidth2, this.tdShadow]\r\n      = (this._opts.flatDesign)\r\n        ? ['700 9pt/12pt system-ui', '1.40em', '#eee', 'solid 1px #666', '1px 1px 1px 0', '0 1px 1px 1px', 'none']\r\n        : ['700 8pt/10pt system-ui', '1.25em', '#ccc', 'outset 2px #eee', '2px', '2px', '.5px .5px 0px #000 inset'];\r\n  }\r\n\r\n  /** Host Binding style */\r\n  @HostBinding('style.--th-fo') protected thFont!: string; //700 8pt/10pt system-ui / 700 9pt/12pt system-ui\r\n  @HostBinding('style.--th-wd') protected thWidth!: string; //1.25em / 1.40em\r\n  @HostBinding('style.--th-bc') protected thBgColor!: string; //#ccc / #eee\r\n  @HostBinding('style.--th-bo') protected thBorder!: string; //outset 2px #eee / solid 1px #666\r\n  @HostBinding('style.--th-w1') protected thWidth1!: string; //2px / 0 1px 1px 0\r\n  @HostBinding('style.--th-w2') protected thWidth2!: string; //2px / 0 1px 1px 0\r\n  @HostBinding('style.--td-bs') protected tdShadow!: string; //.5px .5px 0px #000 inset / none\r\n\r\n  /**\r\n   * コンストラクタ\r\n   *\r\n   * @memberof TymTreeViewComponent\r\n   */\r\n  constructor(\r\n    private _elmRef: ElementRef,\r\n    private _renderer: Renderer2\r\n  ) {\r\n    this._thisElm = this._elmRef.nativeElement as HTMLElement;\r\n  };\r\n\r\n  /**\r\n   * ビューを初期化した後の処理\r\n   */\r\n  public ngAfterViewInit(): void {\r\n    //---------------------------------------------------------------\r\n    // ..\r\n    const thisElm = this._thisElm;\r\n    const tableElm = FIRST_ELEMENT_CHILD(thisElm);\r\n    const tbodyElm = FIRST_ELEMENT_CHILD(tableElm);\r\n    const contentName = '_tymtableeditor-' + TymTableEditorComponent.idnum++;\r\n    tableElm.setAttribute(contentName,'');\r\n    //---------------------------------------------------------------\r\n    // ..\r\n    const maxrow = this.row;\r\n    const maxcol = this.col;\r\n    const nosels = { r1: -1, c1: -1, r2: -1, c2: -1 };\r\n    const editordefs = new Map<number, TYM_EDITOR_DEF>();\r\n    /**  0:not move, 1:cell, 2:col, 3:row */\r\n    let mousemv: number = 0;\r\n    let selects: RANGE = { ...nosels };\r\n    let cpysels: RANGE = { ...nosels };\r\n    //---------------------------------------------------------------\r\n    // ..\r\n    let editElm: HTMLTableCellElement | null = null; // edited td cell\r\n    let crntElm: HTMLTableCellElement | null = null; // current td cell  \r\n    //---------------------------------------------------------------\r\n    // ..\r\n    const { overflowX, overflowY } = window.getComputedStyle(thisElm);\r\n    const scrollElm = (!(overflowX == AUTO || overflowX == SCROLL || overflowY == AUTO || overflowY == SCROLL))\r\n      ? thisElm.parentElement as HTMLElement : thisElm;\r\n    //---------------------------------------------------------------\r\n    // ..\r\n    const cell = (r: number, c: number) => tbodyElm.children[r]?.children[c] as HTMLTableCellElement;\r\n    const crntRange = () => {\r\n      const [r, c] = cellRowCol(crntElm);\r\n      return { r1: r, c1: c, r2: r, c2: c };\r\n    }\r\n    const cellRowCol = (td: HTMLTableCellElement | null) =>\r\n      (td) ? [(td.parentElement as HTMLTableRowElement).rowIndex, td.cellIndex] : [1, 1];\r\n    //---------------------------------------------------------------\r\n    // create element\r\n    const createElm = (name: string) => this._renderer.createElement(name) as HTMLElement;\r\n    //---------------------------------------------------------------\r\n    // create th element\r\n    const createTh = (tx: string) => {\r\n      const th = createElm('th') as HTMLTableCellElement;\r\n      th.innerText = tx;\r\n      return th;\r\n    }\r\n    //---------------------------------------------------------------\r\n    // create td element\r\n    const createTd = () => {\r\n      const td = createElm('td') as HTMLTableCellElement;\r\n      td.tabIndex = -1;\r\n      return td;\r\n    }\r\n    //---------------------------------------------------------------\r\n    // get TYM_EDITOR_DEF\r\n    const _getEditorDef = (th: HTMLTableCellElement) =>\r\n      th.onprogress!(new ProgressEvent('')) as TYM_EDITOR_DEF | undefined;\r\n    const getEditorDef = (td: HTMLTableCellElement) =>\r\n      _getEditorDef(headTrElm.children[td.cellIndex] as HTMLTableCellElement);\r\n    //---------------------------------------------------------------\r\n    // get editFunc\r\n    const getEditFunc = (td: HTMLTableCellElement) => {\r\n      const def = getEditorDef(td);\r\n      return (def?.editfnc)\r\n        ? (td: HTMLTableCellElement, val: string) => def.editfnc!(td, val, def.type)\r\n        : undefined;\r\n    }\r\n    //---------------------------------------------------------------\r\n    // get viewFunc\r\n    const getViewFunc = (td: HTMLTableCellElement) => {\r\n      const def = getEditorDef(td);\r\n      return (def?.viewfnc) ? (val: string) => def.viewfnc!(val, def.type) : undefined;\r\n    }\r\n    //---------------------------------------------------------------\r\n    // get align / background style\r\n    const getDynamicStyle = (td: HTMLTableCellElement) => {\r\n      const def = getEditorDef(td);\r\n      const style = ''\r\n        + ((def?.align) ? `text-align:${def?.align};` : '')\r\n        + ((def?.readonly) ? 'background-color:#f8f8f8;' : '');\r\n      return (style == '') ? '' : `table[${contentName}] td:nth-child(${td.cellIndex + 1}){${style}}`;\r\n    }\r\n    //---------------------------------------------------------------\r\n    // get style texts\r\n    const getStyleText = () =>\r\n      Array.from(headTrElm.children).map(th => getDynamicStyle(th as HTMLTableCellElement)).join('');\r\n    //---------------------------------------------------------------\r\n    // create header th element\r\n    const createRowTh = (col: number, def?: TYM_EDITOR_DEF) => {\r\n      const tx = num2(col);\r\n      const th = createTh(tx);\r\n      th.onprogress = (e: Event) => {\r\n        const _editordef = { ...def }\r\n        return _editordef;\r\n      };\r\n      return th;\r\n    }\r\n\r\n    //---------------------------------------------------------------\r\n    // ..\r\n    const classlist = (elm: HTMLElement) => elm.classList;\r\n    const classrm = (elm: HTMLElement, cls: string) => classlist(elm).remove(cls);\r\n    const classadd = (elm: HTMLElement, cls: string) => classlist(elm).add(cls);\r\n    /****************************************************************\r\n     * set current element (crntElm, style)\r\n     * @param elm 対象エレメント\r\n     */\r\n    const setCurrent = (elm: HTMLTableCellElement) => {\r\n      const crn = 'crn';\r\n      if (crntElm) classrm(crntElm, crn);\r\n      classadd(elm, crn);\r\n      crntElm = elm;\r\n    }\r\n    /****************************************************************\r\n     * get select range\r\n     * @param _selects target RANGE\r\n     * @returns { r1: number, c1: number, r2: number, c2: number }\r\n     */\r\n    const range = (_selects: RANGE = selects) => {\r\n      let { r1, c1, r2, c2 } = (_selects.c2 < 0) ? (crntElm) ? crntRange() : nosels : _selects;\r\n      [r1, r2] = r2 > r1 ? [r1, r2] : [r2, r1];\r\n      [c1, c2] = c2 > c1 ? [c1, c2] : [c2, c1];\r\n      return { r1: r1, c1: c1, r2: r2, c2: c2 };\r\n    }\r\n    /****************************************************************\r\n     * exec range function\r\n     * @param fnc call back function\r\n     * @param _selects target RANGE\r\n     */\r\n    const execRange = (fnc: (elm: HTMLTableCellElement, eol?: boolean) => void, _selects: RANGE = selects) => {\r\n      const { r1, c1, r2, c2 } = range(_selects);\r\n      if (c2 < 0) return;\r\n      for (let _row = r1; _row <= r2; _row++) {\r\n        for (let _col = c1; _col <= c2; _col++) {\r\n          fnc(cell(_row, _col), _col == c2);\r\n        }\r\n      }\r\n    }\r\n    //---------------------------------------------------------------\r\n    // set selection range functions\r\n    const checkset = (max: number, n: number) => (-1 > n) ? -1 : (n > max) ? max : n;\r\n    const setSelRange1stRowCol = (r1: number, c1: number) =>\r\n      [selects.r1, selects.c1] = [checkset(maxrow, r1), checkset(maxcol, c1)];\r\n    const setSelRangeLstRowCol = (r2: number, c2: number) =>\r\n      [selects.r2, selects.c2] = [checkset(maxrow, r2), checkset(maxcol, c2)];\r\n    const setSelRange1st = (td: HTMLTableCellElement) => [selects.r1, selects.c1] = cellRowCol(td);\r\n    const setSelRangeLst = (td: HTMLTableCellElement) => [selects.r2, selects.c2] = cellRowCol(td);\r\n    /****************************************************************\r\n     * clear selection range style\r\n     * @param clear true:clear \"selects\"\r\n     */\r\n    const clearSelRangeStyle = (clear?: boolean) => {\r\n      execRange(elm => classrm(elm, 'msel'));\r\n      if (clear) selects = { ...nosels };\r\n    }\r\n    /****************************************************************\r\n     * set selection range style\r\n     */\r\n    const drawSelRangeStyle = () => execRange(elm => classadd(elm, 'msel'));\r\n    /****************************************************************\r\n     * set converted text to cell (if converted, save to dataset-val)\r\n     * @param elm 対象エレメント\r\n     * @param val 値\r\n     */\r\n    const setText = (elm: HTMLTableCellElement, val: string) => {\r\n      const viewfnc = getViewFunc(elm);\r\n      elm.innerText = (viewfnc) ? viewfnc(elm.dataset.val = val) : val;\r\n    }\r\n    /****************************************************************\r\n     * get real text (if converted, restore from dataset-val)\r\n     * @param elm 対象エレメント\r\n     * @returns 値\r\n     */\r\n    const text = (elm: HTMLTableCellElement): string => elm.dataset.val || elm.innerText;\r\n    /****************************************************************\r\n     * set data to table\r\n     * @param data データ\r\n     */\r\n    const setData2Table = (data: any[][]) => {\r\n      const maxcol = data.reduce((a, b) => a.length > b.length ? a : b);\r\n      setSelRange1stRowCol(1, 1);\r\n      setSelRangeLstRowCol(data.length, maxcol.length);\r\n      let r = 0, c = 0;\r\n      execRange((elm, eol) => {\r\n        const v = data[r][c] || '';\r\n        setText(elm, v);\r\n        if (eol) c = 0, r++; else c++\r\n      });\r\n    };\r\n    /****************************************************************\r\n     * set data to range\r\n     * @param data データ\r\n     * @param row 行番号\r\n     * @param col 列番号\r\n     */\r\n    const setData2Range = (data: any[][], row: number, col: number) => {\r\n      const maxcol = data.reduce((a, b) => a.length > b.length ? a : b);\r\n      clearSelRangeStyle();\r\n      setSelRange1stRowCol(row, col);\r\n      setSelRangeLstRowCol(row + data.length - 1, col + maxcol.length - 1);\r\n      let hists: any = [];\r\n      let r = 0, c = 0;\r\n      execRange((elm, eol) => {\r\n        const v = data[r][c] || '';\r\n        hists.push({ r: row + r, c: col + c, b: text(elm), a: v });\r\n        setText(elm, v);\r\n        classadd(elm, 'msel');\r\n        if (eol) c = 0, r++; else c++\r\n      });\r\n      // 編集履歴に追加\r\n      addhists(hists);\r\n    }\r\n    /****************************************************************\r\n     * set public function (setData)\r\n     */\r\n    this.setData = (data: any[][], row1?: number, col1?: number) => {\r\n      if (row1 && col1) {\r\n        setData2Range(data, row1, col1);\r\n      } else {\r\n        clearAllData();\r\n        setData2Table(data);\r\n      }\r\n    }\r\n    /****************************************************************\r\n     * set public function (getData)\r\n     */\r\n    this.getData = (rownum: number, colnum: number, row?: number, col?: number): any[][] => {\r\n      const [r1, c1, r2, c2] = (row && col) ? [rownum, colnum, row, col] : [1, 1, rownum, colnum];\r\n      let cols: any[] = [];\r\n      let data: any[][] = [];\r\n      for (let _row = r1; _row <= r2; _row++) {\r\n        for (let _col = c1; _col <= c2; _col++) {\r\n          const td = cell(_row, _col);\r\n          cols.push((td) ? td.dataset.val || td.innerText : '');\r\n        }\r\n        data.push(cols);\r\n        cols = [];\r\n      }\r\n      return data;\r\n    }\r\n    //---------------------------------------------------------------\r\n    // renumber row header\r\n    const renumberRow = () => {\r\n      for (let index = 1; index <= maxrow; index++) {\r\n        const tr = tbodyElm.childNodes[index] as HTMLTableRowElement;\r\n        const th = FIRST_ELEMENT_CHILD(tr);\r\n        th.innerText = num2(index);\r\n      }\r\n    }\r\n    //---------------------------------------------------------------\r\n    // renumber col header\r\n    const renumberCol = () => {\r\n      for (let index = 1; index <= maxcol; index++) {\r\n        const th = headTrElm.childNodes[index] as HTMLTableCellElement;\r\n        th.innerText = num2(index);\r\n      }\r\n    }\r\n    //---------------------------------------------------------------\r\n    // create row\r\n    const createrow = (row: number) => {\r\n      const tr = createElm('tr');\r\n      tr.appendChild(createTh(num2(row)));\r\n      for (let index = 1; index <= maxcol; index++) {\r\n        tr.appendChild(createTd())\r\n      }\r\n      return tr;\r\n    }\r\n    //---------------------------------------------------------------\r\n    // view insert / remove row\r\n    const viewInsertRemoveRow = (insRowNum: number, rmRowNum: number) => {\r\n      clearSelRangeStyle(true);\r\n      clearCpyRangeStyle();\r\n      const [insRow, rmRow] = [tbodyElm.childNodes[insRowNum], tbodyElm.childNodes[rmRowNum]];\r\n      tbodyElm.insertBefore(createrow(insRowNum), insRow);\r\n      tbodyElm.removeChild(rmRow!);\r\n      if (crntElm && !crntElm?.isConnected) {\r\n        crntElm = null;\r\n      }\r\n      renumberRow();\r\n    }\r\n    //---------------------------------------------------------------\r\n    // history insert / remove row\r\n    const histInsertRemoveRow = (row: number, rmRowNum: number, ir: string) => {\r\n      const trElm = tbodyElm.childNodes[rmRowNum];\r\n      let hists: any = [{ r: row, c: 0, b: '', a: ir }]; // c:0,a:i/r => insert/remove row\r\n      for (let index = 1; index <= maxcol; index++) {\r\n        const v = text(trElm.childNodes[index] as HTMLTableCellElement);\r\n        if (v != '') hists.push({ r: rmRowNum, c: index, b: v, a: '' });\r\n      }\r\n      addhists(hists);\r\n    }\r\n    //---------------------------------------------------------------\r\n    // insert row\r\n    const insertRow = (row: number) => viewInsertRemoveRow(row, maxrow);\r\n    /****************************************************************\r\n     * set public function (insertRow)\r\n     */\r\n    this.insertRow = (row: number) => {\r\n      histInsertRemoveRow(row, maxrow, 'i');\r\n      insertRow(row);\r\n    }\r\n    //---------------------------------------------------------------\r\n    // remove row\r\n    const removeRow = (row: number) => viewInsertRemoveRow(maxrow + 1, row);\r\n    /****************************************************************\r\n     * set public function (removeRow)\r\n     */\r\n    this.removeRow = (row: number) => {\r\n      histInsertRemoveRow(row, row, 'r');\r\n      removeRow(row);\r\n    }\r\n    //---------------------------------------------------------------\r\n    // view insert / remove col\r\n    const viewInsertRemoveCol = (insColNum: number, rmColNum: number, def?: TYM_EDITOR_DEF) => {\r\n      clearSelRangeStyle(true);\r\n      clearCpyRangeStyle();\r\n      const [insHeadCol, rmHeadCol] = [headTrElm.childNodes[insColNum], headTrElm.childNodes[rmColNum]];\r\n      headTrElm.insertBefore(createRowTh(insColNum, def), insHeadCol);\r\n      headTrElm.removeChild(rmHeadCol!);\r\n      for (let index = 1; index <= maxrow; index++) {\r\n        const tr = tbodyElm.childNodes[index] as HTMLTableRowElement;\r\n        const [insCol, rmCol] = [tr.childNodes[insColNum], tr.childNodes[rmColNum]];\r\n        tr.insertBefore(createTd(), insCol);\r\n        tr.removeChild(rmCol!);\r\n      }\r\n      if (crntElm && !crntElm?.isConnected) {\r\n        crntElm = null;\r\n      }\r\n      styleElement.innerText = getStyleText();\r\n      renumberCol();\r\n    }\r\n    //---------------------------------------------------------------\r\n    // history insert col\r\n    const histInsertRemoveCol = (col: number, rmColNum: number, ir: string) => {\r\n      const th = headTrElm.children[col] as HTMLTableCellElement;\r\n      const def = _getEditorDef(th);\r\n      let hists: any = [{ r: 0, c: col, b: '', a: ir, d: def }]; // r:0,a:i/r => insert/remove col\r\n      for (let index = 1; index <= maxrow; index++) {\r\n        const tr = tbodyElm.childNodes[index] as HTMLTableRowElement;\r\n        const v = text(tr.childNodes[rmColNum] as HTMLTableCellElement);\r\n        if (v != '') hists.push({ r: index, c: rmColNum, b: v, a: '' });\r\n      }\r\n      addhists(hists);\r\n    }\r\n    //---------------------------------------------------------------\r\n    // insert col\r\n    const insertCol = (col: number, def?: TYM_EDITOR_DEF) => viewInsertRemoveCol(col, maxcol, def);\r\n    //---------------------------------------------------------------\r\n    // remove col\r\n    const removeCol = (col: number) => viewInsertRemoveCol(maxcol + 1, col);\r\n    /****************************************************************\r\n     * set public function (insertCol)\r\n     */\r\n    this.insertCol = (col: number, def?: TYM_EDITOR_DEF) => {\r\n      histInsertRemoveCol(col, maxcol, 'i');\r\n      insertCol(col, def);\r\n    }\r\n    /****************************************************************\r\n     * set public function (removeCol)\r\n     */\r\n    this.removeCol = (col: number) => {\r\n      histInsertRemoveCol(col, col, 'r');\r\n      removeCol(col);\r\n    }\r\n    /****************************************************************\r\n     * set public function (copy)\r\n     */\r\n    this.copy = () => elm2clipboard();\r\n    /****************************************************************\r\n     * set public function (paste)\r\n     */\r\n    this.paste = () => clipboard2elm();\r\n    /****************************************************************\r\n     * set public function (delete)\r\n     */\r\n    this.delete = () => deleteTexts();\r\n    /****************************************************************\r\n     * set public function (undo)\r\n     */\r\n    this.undo = () => {\r\n      undoredo(false);\r\n    }\r\n    /****************************************************************\r\n     * set public function (redo)\r\n     */\r\n    this.redo = () => {\r\n      undoredo(true);\r\n    }\r\n\r\n    /****************************************************************\r\n     * clear all data in table (history, select range/style, copy range/style)\r\n     */\r\n    const clearAllData = () => {\r\n      tbodyElm.childNodes.forEach(tr => {\r\n        const _tr = tr as HTMLTableRowElement;\r\n        if (_tr.rowIndex > 0) tr.childNodes.forEach(cell => {\r\n          const td = cell as HTMLTableCellElement;\r\n          if (td.cellIndex > 0) setText(td, '');\r\n        });\r\n      });\r\n      clearSelRangeStyle(true);\r\n      clearCpyRangeStyle();\r\n      clearHistory();\r\n    }\r\n    //---------------------------------------------------------------\r\n    // clipboard data\r\n    const clipboard = navigator.clipboard;\r\n    let clipdata: string;\r\n    let copydat: any[][] = [];\r\n    /****************************************************************\r\n     * clear copy range / style\r\n     */\r\n    const clearCpyRangeStyle = () => {\r\n      execRange(elm => classrm(elm, 'cpy'), cpysels);\r\n      cpysels = { ...nosels };\r\n    }\r\n    /****************************************************************\r\n     * set copy range / style\r\n     * @param range \r\n     */\r\n    const setCpyRangeStyle = (range: RANGE) => {\r\n      cpysels = range;\r\n      execRange(elm => classadd(elm, 'cpy'), cpysels);\r\n    }\r\n    /****************************************************************\r\n     * clear copy data (clear clipboard data)\r\n     */\r\n    const clearCpyData = async () => {\r\n      copydat = [];\r\n      try {\r\n        await clipboard.writeText('');\r\n      } catch (err) {\r\n        console.error('failed to writeText: ', err);\r\n      }\r\n    }\r\n    /****************************************************************\r\n     * クリップボードからの(\\r\\n,/\\t区切りテキストの)貼り付け (use copydat)\r\n     */\r\n    const clipboard2elm = async () => {\r\n      if (!crntElm) return;\r\n      let data: any[][] = [];\r\n      try {\r\n        const text = await clipboard.readText();\r\n        if (clipdata != text) {\r\n          clearCpyRangeStyle();\r\n        }\r\n        const rows = text.split('\\r\\n');\r\n        rows.forEach(row => data.push(row.split('\\t')));\r\n      } catch (err) {\r\n        console.error('failed to readText: ', err);\r\n        data = copydat;\r\n      }\r\n      const [r, c] = cellRowCol(crntElm);\r\n      setData2Range(data, r, c);\r\n    }\r\n    /****************************************************************\r\n     * クリップボードへの(\\r\\n,/\\t区切りテキストの)設定 (set copydat)\r\n     */\r\n    const elm2clipboard = async () => {\r\n      clearCpyRangeStyle();\r\n      let cols: any[] = [];\r\n      copydat = [];\r\n      execRange((elm, eol) => {\r\n        cols.push(text(elm));\r\n        if (eol) {\r\n          copydat.push(cols);\r\n          cols = [];\r\n        }\r\n      });\r\n      let rows: any[] = [];\r\n      copydat.forEach(cols => rows.push(cols.join('\\t')));\r\n      setCpyRangeStyle((selects.c2 >= 0) ? { ...selects } : crntRange());\r\n      try {\r\n        clipdata = rows.join('\\r\\n');\r\n        await clipboard.writeText(rows.join('\\r\\n'));\r\n      } catch (err) {\r\n        console.error('failed to writeText: ', err);\r\n      }\r\n    }\r\n    /****************************************************************\r\n     * 選択範囲を消す\r\n     */\r\n    const deleteTexts = (): void => {\r\n      let hists: any = [];\r\n      execRange(elm => {\r\n        const [r, c] = cellRowCol(elm);\r\n        hists.push({ r: r, c: c, b: text(elm), a: '' });\r\n        setText(elm, '');\r\n      });\r\n      // 編集履歴に追加\r\n      addhists(hists);\r\n    }\r\n\r\n    //---------------------------------------------------------------\r\n    // prepare def(TYM_EDITOR_DEF) data\r\n    this.defs.forEach(def => editordefs.set(def.col, def));\r\n\r\n    //---------------------------------------------------------------\r\n    // create : table - tbody - [1st tr:header - th]\r\n    const headTrElm = tbodyElm.appendChild(createElm('tr'));\r\n    {\r\n      headTrElm.appendChild(createTh('')); // top&left\r\n      (headTrElm.lastElementChild as HTMLElement).onprogress = () => { };\r\n      for (let index = 1; index <= maxcol; index++) {\r\n        headTrElm.appendChild(createRowTh(index, editordefs.get(index))); // top\r\n      }\r\n    }\r\n\r\n    //---------------------------------------------------------------\r\n    // create : table - tbody - [tr - td]\r\n    {\r\n      for (let index = 1; index <= maxrow; index++) {\r\n        tbodyElm.appendChild(createrow(index));\r\n      }\r\n    }\r\n\r\n    //---------------------------------------------------------------\r\n    // create : style\r\n    const styleElement = createElm('style');\r\n    thisElm.append(styleElement);\r\n    styleElement.innerText = styleElement.innerText = getStyleText();\r\n\r\n    //---------------------------------------------------------------\r\n    // set cell data\r\n    setData2Table(this.data || [['']]);\r\n\r\n    //---------------------------------------------------------------\r\n    // set width\r\n    headTrElm.childNodes.forEach(node => {\r\n      const elm = node as HTMLElement;\r\n      if (elm.tagName == 'TH') { // #comment 除去\r\n        const realStyle = window.getComputedStyle(elm);\r\n        elm.style.width = (elm.clientWidth > 200) ? '200px' : realStyle.width;\r\n      }\r\n    });\r\n    tableElm.style.width = 'fit-content';\r\n\r\n    //---------------------------------------------------------------\r\n    // set 1st cell\r\n    clearSelRangeStyle();\r\n    setCurrent(cell(1, 1));\r\n\r\n    /****************************************************************\r\n     * mouse down event\r\n     * @param e MouseEvent\r\n     */\r\n    const event_mousedown = (e: MouseEvent) => {\r\n      let td = e.target as HTMLTableCellElement;\r\n      if (e.button == 2) {\r\n        const { r1, c1, r2, c2 } = range();\r\n        const [r, c] = cellRowCol(td);\r\n        if (r1 <= r && r <= r2 && c1 <= c && c <= c2) return;\r\n      }\r\n      if (e.detail == 1) {\r\n        clearSelRangeStyle();\r\n        if (td.tagName == 'TH') {\r\n          // 1st click header:th or row top:th element\r\n          const [thRowIx, thColIx] = cellRowCol(td);\r\n          const [crRowIx, crColIx] = (e.shiftKey)\r\n            ? ((crntElm) ? cellRowCol(crntElm) : [1, 1])\r\n            : [thRowIx, thColIx];\r\n          const isHead = (thRowIx == 0);\r\n          selects = (isHead)\r\n            ? { r1: 1, c1: crColIx, r2: maxrow, c2: thColIx }\r\n            : { r1: crRowIx, c1: 1, r2: thRowIx, c2: maxcol };\r\n          if (e.shiftKey) {\r\n            mousemv = 0;\r\n            drawSelRangeStyle();\r\n          } else {\r\n            mousemv = (isHead) ? 2 : 3;\r\n            setCurrent(cell(selects.r1, selects.c1));\r\n          }\r\n        } else {\r\n          // 1st click => change current\r\n          if (e.shiftKey) {\r\n            const [r, c] = cellRowCol(crntElm);\r\n            setSelRange1stRowCol(r, c)\r\n            setSelRangeLst(td);\r\n            drawSelRangeStyle();\r\n            mousemv = 0;\r\n          } else {\r\n            setCurrent(td);\r\n            setSelRange1st(td);\r\n            mousemv = 1;\r\n          }\r\n        }\r\n      } if (e.detail == 2) {\r\n        if (td.tagName == 'TH') {\r\n          // duble click => widen cell\r\n          clearSelRangeStyle();\r\n          widen(td);\r\n          drawSelRangeStyle();\r\n        } else {\r\n          // duble click => change edit mode\r\n          toEdit(td);\r\n          e.preventDefault();\r\n        }\r\n      }\r\n    }\r\n    tableElm.addEventListener('mousedown', event_mousedown);\r\n    /****************************************************************\r\n     * mouse move event\r\n     * @param e MouseEvent\r\n     */\r\n    const event_mousemove = (e: MouseEvent) => {\r\n      if (mousemv == 0) return;\r\n      const td = e.target as HTMLTableCellElement;\r\n      let [r, c] = cellRowCol(td);\r\n      if (mousemv == 1 && selects.r2 == r && selects.c2 == c) return;\r\n      if (mousemv == 2) r = selects.r2;\r\n      if (mousemv == 3) c = selects.c2;\r\n      clearSelRangeStyle();\r\n      [selects.r2, selects.c2] = [r, c];\r\n      drawSelRangeStyle();\r\n    }\r\n    tableElm.addEventListener('mousemove', event_mousemove);\r\n    /****************************************************************\r\n     * mouse leave event\r\n     * @param e MouseEvent\r\n     */\r\n    const event_mouseleave = (e: MouseEvent) => {\r\n      if (mousemv == 0) return;\r\n      clearSelRangeStyle(true);\r\n      mousemv = 0;\r\n    }\r\n    tableElm.addEventListener('mouseleave', event_mouseleave);\r\n    /****************************************************************\r\n     * mouse up event\r\n     * @param e MouseEvent\r\n     */\r\n    const event_mouseup = (e: MouseEvent) => {\r\n      const td = e.target as HTMLTableCellElement;\r\n      const [r, c] = cellRowCol(td);\r\n      if (mousemv == 1 && selects.r1 == r && selects.c1 == c) {\r\n        clearSelRangeStyle(true);\r\n      }\r\n      if (mousemv == 2 && selects.c1 == c) drawSelRangeStyle();\r\n      if (mousemv == 3 && selects.r1 == r) drawSelRangeStyle();\r\n      mousemv = 0;\r\n      crntElm?.focus({ preventScroll: true });\r\n    }\r\n    tableElm.addEventListener('mouseup', event_mouseup);\r\n    /****************************************************************\r\n     * contextmenu event\r\n     * @param e MouseEvent\r\n     */\r\n    const event_contextmenu = (e: MouseEvent) => {\r\n      const { r1, c1, r2, c2 } = range();\r\n      const ret = this.menu(e, r1, c1, r2, c2);\r\n      if (ret) {\r\n        e.preventDefault();\r\n      }\r\n      return ret;\r\n    }\r\n    tableElm.addEventListener('contextmenu', event_contextmenu);\r\n\r\n    /****************************************************************\r\n     * keypress event\r\n     * @param e KeyboardEvent\r\n     */\r\n    const event_keypress = (e: KeyboardEvent) => {\r\n      const td = e.target as HTMLTableCellElement;\r\n      if (!editElm) {\r\n        toEdit(td, e.key);\r\n      }\r\n    }\r\n    tableElm.addEventListener('keypress', event_keypress);\r\n    let escapecnt = 0;\r\n    const { offsetWidth: zzWidth, offsetHeight: zzHeight } = cell(0, 0);\r\n    /****************************************************************\r\n     * key down event\r\n     * @param e KeyboardEvent\r\n     */\r\n    const event_keydown = (e: KeyboardEvent) => {\r\n      const thisCell = e.target as HTMLTableCellElement;\r\n      const [thisRowIx, thisColIx] = cellRowCol(thisCell);\r\n      const rangeAll = { r1: 1, c1: 1, r2: maxrow, c2: maxcol };\r\n      //-------------------------------------------------------------\r\n      /** 矢印によるフォーカスの移動                                 */\r\n      const arrow = (opt: ScrollToOptions, rowix: number, colix: number): HTMLTableCellElement => {\r\n        const td = cell(rowix, colix);\r\n        {\r\n          const ofLeft = td.offsetLeft - zzWidth;\r\n          if (ofLeft < scrollElm.scrollLeft) scrollElm.scroll({ left: ofLeft } as ScrollToOptions);\r\n        }\r\n        {\r\n          const ofLeft = td.offsetLeft + td.clientWidth + scrollElm.clientLeft - scrollElm.clientWidth;\r\n          if (ofLeft > scrollElm.scrollLeft) scrollElm.scroll({ left: ofLeft } as ScrollToOptions);\r\n        }\r\n        {\r\n          const ofTop = td.offsetTop - zzHeight;\r\n          if (ofTop < scrollElm.scrollTop) scrollElm.scroll({ top: ofTop } as ScrollToOptions)\r\n        }\r\n        td.blur();\r\n        td.focus();\r\n        setCurrent(td);\r\n        e.preventDefault();\r\n        return td;\r\n      }\r\n      //-------------------------------------------------------------\r\n      /** 上下左右端用のスクロール指示情報取得                       */\r\n      const getScroll = (row: number, col: number) => {\r\n        let scroll: { left?: number, top?: number } = {}\r\n        const { r1, c1, r2, c2 } = rangeAll;\r\n        if (col == c1) scroll.left = 0;\r\n        if (col == c2) scroll.left = 9999;\r\n        if (row == r1) scroll.top = 0;\r\n        if (row == r2) scroll.top = 9999;\r\n        return scroll;\r\n      }\r\n      //-------------------------------------------------------------\r\n      /** 矢印によるフォーカスの上下左右移動                         */\r\n      const updownleftright = (isUpDown: boolean, isUpOrLeft: boolean, range: boolean = false): HTMLTableCellElement => {\r\n        const b = (range && selects.c2 >= 0);\r\n        const { r1, c1, r2, c2 } = b ? selects : rangeAll;\r\n        let [rowIx, colIx] = [thisRowIx, thisColIx];\r\n        const [A, B, C, D, E] = (isUpDown)\r\n          ? (isUpOrLeft)\r\n            ? [(rowIx > r1), -1, 0, r2, (colIx > c1) ? colIx - 1 : c2]\r\n            : [(rowIx < r2), +1, 0, r1, (colIx < c2) ? colIx + 1 : c1]\r\n          : (isUpOrLeft)\r\n            ? [(colIx > c1), 0, -1, (rowIx > r1) ? rowIx - 1 : r2, c2]\r\n            : [(colIx < c2), 0, +1, (rowIx < r2) ? rowIx + 1 : r1, c1];\r\n        [rowIx, colIx] = A ? [rowIx + B, colIx + C] : ((b) ? [D, E] : [rowIx, colIx]);\r\n        return arrow(getScroll(rowIx, colIx), rowIx, colIx);\r\n      }\r\n      //-------------------------------------------------------------\r\n      /** 矢印によるフォーカスの移動                                 */\r\n      const arrowmove = (isUpDown: boolean, isShift: boolean, dir: boolean) => {\r\n        if (isShift) {\r\n          clearSelRangeStyle();\r\n          if (selects.c1 < 0) {\r\n            setSelRange1st(thisCell);\r\n          }\r\n          const _td = updownleftright(isUpDown, dir);\r\n          setSelRangeLst(_td);\r\n          drawSelRangeStyle();\r\n        } else {\r\n          clearSelRangeStyle(true);\r\n          updownleftright(isUpDown, dir);\r\n        }\r\n      }\r\n      //-------------------------------------------------------------\r\n      // 編集モード時のキー処理\r\n      if (editElm) {\r\n        switch (e.key) {\r\n          case 'Tab':\r\n            updownleftright(false, e.shiftKey, true);\r\n            break;\r\n          case 'Enter':\r\n            updownleftright(true, e.shiftKey, true);\r\n            break;\r\n          case 'Escape':\r\n            thisCell.innerText = beforeValue!;\r\n            thisCell.blur();\r\n            thisCell.focus();\r\n            e.preventDefault();\r\n            break;\r\n          default:\r\n            break;\r\n        }\r\n      }\r\n      //-------------------------------------------------------------\r\n      // 表示モード時のキー処理\r\n      else {\r\n        escapecnt--;\r\n        switch (e.key) {\r\n          case 'ArrowDown':\r\n            arrowmove(true, e.shiftKey, false);\r\n            break;\r\n          case 'ArrowUp':\r\n            arrowmove(true, e.shiftKey, true);\r\n            break;\r\n          case 'ArrowRight':\r\n            arrowmove(false, e.shiftKey, false);\r\n            break;\r\n          case 'ArrowLeft':\r\n            arrowmove(false, e.shiftKey, true);\r\n            break;\r\n          case 'Home':\r\n            if (e.ctrlKey) {\r\n              arrow(getScroll(1, 1), 1, 1);\r\n            } else {\r\n              arrow(getScroll(thisRowIx, 1), thisRowIx, 1);\r\n            }\r\n            break;\r\n          case 'End':\r\n            if (e.ctrlKey) {\r\n              arrow(getScroll(maxrow, maxcol), maxrow, maxcol);\r\n            } else {\r\n              arrow(getScroll(thisRowIx, maxcol), thisRowIx, maxcol);\r\n            }\r\n            break;\r\n          case 'Tab':\r\n            updownleftright(false, e.shiftKey, true);\r\n            break;\r\n          case 'Enter':\r\n            updownleftright(true, e.shiftKey, true);\r\n            break;\r\n          case 'F2':\r\n            toEdit(thisCell);\r\n            e.preventDefault();\r\n            break;\r\n          case 'Backspace':\r\n            const newtd = toEdit(thisCell, '');\r\n            if (newtd) setText(newtd, '');\r\n            e.preventDefault();\r\n            break;\r\n          case 'Delete':\r\n            if (e.shiftKey) {\r\n              // cut\r\n              elm2clipboard();\r\n            }\r\n            deleteTexts();\r\n            e.preventDefault();\r\n            break;\r\n          case 'x':\r\n            if (e.ctrlKey) {\r\n              // cut\r\n              elm2clipboard();\r\n              deleteTexts();\r\n              e.preventDefault();\r\n            }\r\n            break;\r\n          case 'c':\r\n            if (e.ctrlKey) {\r\n              // copy\r\n              elm2clipboard();\r\n              e.preventDefault();\r\n            }\r\n            break;\r\n          case 'v':\r\n            if (e.ctrlKey) {\r\n              // paste\r\n              clipboard2elm();\r\n              e.preventDefault();\r\n            }\r\n            break;\r\n          case 'Insert':\r\n            if (e.ctrlKey) {\r\n              // copy\r\n              elm2clipboard();\r\n              e.preventDefault();\r\n            }\r\n            if (e.shiftKey) {\r\n              // paste\r\n              clipboard2elm();\r\n              e.preventDefault();\r\n            }\r\n            break;\r\n          case 'z':\r\n          case 'Z':\r\n            if (e.ctrlKey) {\r\n              // true(redo: Ctrl+Shift+z), false(undo: Ctrl+z)\r\n              undoredo(e.shiftKey);\r\n              e.preventDefault();\r\n            }\r\n            break;\r\n          case 'y':\r\n            if (e.ctrlKey) {\r\n              // redo: Ctrl+y\r\n              undoredo(true);\r\n              e.preventDefault();\r\n            }\r\n            break;\r\n          case 'Escape':\r\n            if (escapecnt < 0) {\r\n              escapecnt = 1;\r\n            } else if (escapecnt >= 0) {\r\n              clearCpyRangeStyle();\r\n              clearCpyData();\r\n            }\r\n            break;\r\n        }\r\n      }\r\n    }\r\n    tableElm.addEventListener('keydown', event_keydown);\r\n    /****************************************************************\r\n     * Escapeキー戻値用\r\n     */\r\n    let beforeValue: string | null;\r\n\r\n    /****************************************************************\r\n     * フォーカスアウトイベント処理，表示モードにする\r\n     */\r\n    const editBlue = () => {\r\n      if (editElm) {\r\n        const thisValue = editElm.innerText;\r\n        editElm.scrollLeft = 0\r\n        editElm.removeEventListener('blur', editBlue);\r\n        editElm.removeAttribute('contentEditable');\r\n        const [r, c] = cellRowCol(editElm);\r\n        setText(editElm, thisValue);\r\n        if (thisValue != beforeValue && beforeValue != null) {\r\n          const hist = { r: r, c: c, b: beforeValue, a: thisValue };\r\n          addhists([hist]);\r\n        }\r\n        if (this._opts.editModeAutoResize) {\r\n          widen(headTrElm.children[editElm.cellIndex] as HTMLTableCellElement);\r\n        }\r\n      }\r\n      beforeValue = null;\r\n      editElm = null;\r\n    }\r\n\r\n    /****************************************************************\r\n     * 対象セルを編集モードにする\r\n     * @param td 対象エレメント\r\n     * @param val キーイベントによる値\r\n     * @returns 対象セルエレメント または 作り直したセルエレメント\r\n     */\r\n    const toEdit = (td: HTMLTableCellElement, val?: string) => {\r\n      const realStyle = window.getComputedStyle(td);\r\n      if (realStyle.backgroundColor == 'rgb(248, 248, 248)') return null;\r\n      clearCpyRangeStyle();\r\n      const [r, c] = cellRowCol(td);\r\n      const editfnc = getEditFunc(td);\r\n      beforeValue = text(td);\r\n      if (editfnc) {\r\n        // 編集機能あり\r\n        editfnc(td, val || beforeValue).then(v => {\r\n          if (v != null) {\r\n            setText(td, v);\r\n            addhists([{ r: r, c: c, b: beforeValue!, a: v }]);\r\n          }\r\n        });\r\n        return td;\r\n      } else {\r\n        // 編集機能なし\r\n        td.innerText = beforeValue;\r\n        td.contentEditable = 'true';\r\n        const newtd = td.parentElement?.insertBefore(td.cloneNode(true), td) as HTMLTableCellElement;\r\n        setCurrent(newtd);\r\n        newtd.addEventListener('blur', editBlue);\r\n        const [sel, rng] = [window.getSelection(), document.createRange()];\r\n        rng.selectNodeContents(newtd);\r\n        sel?.removeAllRanges();\r\n        sel?.addRange(rng)\r\n        td.remove();\r\n        editElm = newtd;\r\n        return newtd;\r\n      }\r\n    }\r\n\r\n    //---------------------------------------------------------------\r\n    // ..\r\n    let history: HISTS[] = [];\r\n    let history_pos: number = -1;\r\n    let history_dwn: boolean = false;\r\n    /****************************************************************\r\n     * 編集履歴：履歴クリア\r\n     */\r\n    const clearHistory = () => {\r\n      history.length = 0;\r\n      history_pos = -1;\r\n      history_dwn = false;\r\n    }\r\n    /****************************************************************\r\n     * 編集履歴：履歴追加\r\n     * @param hists 履歴情報\r\n     */\r\n    const addhists = (hists: HISTS) => {\r\n      if ((history.length - 1 == history_pos && history_dwn) || history_pos == -1) {\r\n        history.push(hists);\r\n        history_pos++;\r\n      } else {\r\n        if (history_dwn) history_pos++;\r\n        history.splice(history_pos, 99999, hists);\r\n      }\r\n      history_dwn = true;\r\n    }\r\n    //---------------------------------------------------------------\r\n    // ..\r\n    const undoredoRange = (r1: number, c1: number, r2: number, c2: number) => {\r\n      if (r1 != r2 || c1 != c2) {\r\n        setSelRange1stRowCol(r1, c1);\r\n        setSelRangeLstRowCol(r2, c2);\r\n        drawSelRangeStyle();\r\n      }\r\n      const td = cell(r1, c1);\r\n      td.focus();\r\n      setCurrent(td);\r\n    }\r\n    /****************************************************************\r\n     * 編集履歴：アンドゥ＆リドゥ処理\r\n     * @param redo true:リドゥ, false:アンドゥ\r\n     */\r\n    const undoredo = (redo: boolean) => {\r\n      let pos = history_pos;\r\n      if (\r\n        (pos < 0) ||\r\n        (!redo && pos <= 0 && !history_dwn) ||\r\n        (redo && history.length - 1 == pos && history_dwn)) return;\r\n      if (redo != history_dwn) {\r\n        history_dwn = redo;\r\n      } else {\r\n        pos += (redo ? history.length - 1 > pos : pos > 0) ? (redo ? 1 : -1) : 0;\r\n      }\r\n      const hist = history[pos];\r\n      history_pos = pos;\r\n      const [v1, v2] = [hist[0], hist[hist.length - 1]];\r\n      let index;\r\n      clearCpyRangeStyle();\r\n      clearSelRangeStyle();\r\n      if (v1.c == 0) {\r\n        // c:0,a:r => remove row / c:0,a:i => insert row\r\n        const { a, r } = v1;\r\n        if (a == 'i') {\r\n          if (redo) { insertRow(r); } else { removeRow(r); }\r\n        } else if (a == 'r') {\r\n          if (redo) { removeRow(r); } else { insertRow(r); }\r\n        }\r\n        index = (redo) ? hist.length : 1;\r\n        undoredoRange(r, 1, r, maxcol);\r\n      } else if (v1.r == 0) {\r\n        // r:0,a:r => remove col / r:0,a:i => insert col\r\n        const { a, c, d } = v1;\r\n        if (a == 'i') {\r\n          if (redo) { insertCol(c, d); } else { removeCol(c); }\r\n        } else if (a == 'r') {\r\n          if (redo) { removeCol(c); } else { insertCol(c, d); }\r\n        }\r\n        index = (redo) ? hist.length : 1;\r\n        undoredoRange(1, c, maxrow, c);\r\n      } else {\r\n        index = 0;\r\n        undoredoRange(v1.r, v1.c, v2.r, v2.c);\r\n      }\r\n      for (; index < hist.length; index++) {\r\n        const { r, c, a, b } = hist[index];\r\n        setText(cell(r, c), (redo) ? a : b);\r\n      }\r\n    }\r\n\r\n    /****************************************************************\r\n     * カラムリサイズ\r\n     * @param thElm 対象エレメント\r\n     */\r\n    const widen = (thElm: HTMLTableCellElement) => {\r\n      const scrollLeft = scrollElm.scrollLeft; // スクロール状態を保持\r\n      const cntnrRect = FIRST_ELEMENT_CHILD(scrollElm)!.getBoundingClientRect();\r\n      const cellElms = tableElm.querySelectorAll(`tbody tr td:nth-child(${thElm.cellIndex + 1})`);\r\n      if (cellElms.length <= 0) return;\r\n      // padding, margin サイズを求める\r\n      const realStyle = window.getComputedStyle(cellElms.item(0));\r\n      const padSize = ''\r\n        + `${realStyle.paddingLeft} + ${realStyle.paddingRight} + `\r\n        + `${realStyle.marginLeft} + ${realStyle.marginRight}`;\r\n      thElm.style.width = '4em';// 一時的にセルのサイズを縮める\r\n      tbodyElm.classList.add('widen');\r\n      // 全ての行をチェックし最大widthを求める (tbody > tr > td)\r\n      let maxWidth = Array.from(cellElms).reduce((a, b) => a.scrollWidth > b.scrollWidth ? a : b).scrollWidth;\r\n      thElm.style.width = `calc(${Math.min(maxWidth, (cntnrRect.width * .7))}px + ${padSize})`;\r\n      tbodyElm.classList.remove('widen');\r\n      scrollElm.scrollLeft = scrollLeft; // スクロール状態を回復\r\n    }\r\n  }\r\n\r\n  //-----------------------------------------------------------------\r\n  // 公開関数\r\n  //-----------------------------------------------------------------\r\n\r\n  /******************************************************************\r\n   * セルの文字列を取得する\r\n   * @param rownum 取得する行数\r\n   * @param colnum 取得する列数\r\n   * @param fnc 取得用コールバック関数\r\n   */\r\n  public getCells(rownum: number, colnum: number, fnc: (row: number, col: number, val: string, eol: boolean) => void) {\r\n    const tableElm = FIRST_ELEMENT_CHILD(this._thisElm);\r\n    const tbodyElm = FIRST_ELEMENT_CHILD(tableElm);\r\n    for (let _row = 1; _row <= rownum; _row++) {\r\n      for (let _col = 1; _col <= colnum; _col++) {\r\n        const td = tbodyElm.children[_row].children[_col] as HTMLTableCellElement;\r\n        fnc(_row, _col, td.innerText, colnum == _col);\r\n      }\r\n    }\r\n  }\r\n\r\n  /******************************************************************\r\n   * テーブルにデータを設定する\r\n   * @param data 設定するデータ\r\n   */\r\n  public setData(data: any[][]): void;\r\n\r\n  /******************************************************************\r\n   * テーブルにデータを設定する\r\n   * @param data 設定するデータ\r\n   * @param row1 設定する開始行番号\r\n   * @param col1 設定する開始列番号\r\n   */\r\n  public setData(data: any[][], row1: number, col1: number): void;\r\n\r\n  /******************************************************************\r\n   * テーブルにデータを設定する\r\n   * @param data 設定するデータ\r\n   * @param row1 設定する開始行番号\r\n   * @param col1 設定する開始列番号\r\n   */\r\n  public setData(data: any[][], row1?: number, col1?: number): void { }\r\n\r\n  /******************************************************************\r\n   * テーブルからデータを取得する\r\n   * @param rownum 取得する行数\r\n   * @param colnum 取得する列数\r\n   * @returns data: any[][]\r\n   */\r\n  public getData(rownum: number, colnum: number): any[][];\r\n\r\n  /******************************************************************\r\n   * テーブルからデータを取得する\r\n   * @param row1 取得する開始行番号\r\n   * @param col1 取得する開始列番号\r\n   * @param row2 取得する終了行番号\r\n   * @param col2 取得する終了列番号\r\n   * @returns data: any[][]\r\n   */\r\n  public getData(row1: number, col1: number, row2: number, col2: number): any[][];\r\n\r\n  /******************************************************************\r\n   * テーブルからデータを取得する\r\n   * @param rownum 取得する行数 or 取得する開始行番号\r\n   * @param colnum 取得する列数 or 取得する開始列番号\r\n   * @param row 取得する終了行番号\r\n   * @param col 取得する終了列番号\r\n   * @returns data: any[][]\r\n   */\r\n  public getData(rownum: number, colnum: number, row?: number, col?: number): any[][] { return [] }\r\n\r\n  /******************************************************************\r\n   * テーブルに行の挿入する\r\n   * @param row 挿入する位置の行番号\r\n   */\r\n  public insertRow(row: number): void { }\r\n\r\n  /******************************************************************\r\n   * テーブルから行を削除する\r\n   * @param row 削除する位置の行番号\r\n   */\r\n  public removeRow(row: number): void { }\r\n\r\n  /******************************************************************\r\n   * テーブルに列の挿入する\r\n   * @param col 挿入する位置の列番号\r\n   * @param def 定義\r\n   */\r\n  public insertCol(col: number, def?: TYM_EDITOR_DEF): void { }\r\n\r\n  /******************************************************************\r\n   * テーブルから列を削除する\r\n   * @param col 削除する位置の列番号\r\n   */\r\n  public removeCol(col: number): void { }\r\n\r\n  /******************************************************************\r\n   * 選択範囲のセルをコピーする\r\n   */\r\n  public copy(): void { }\r\n\r\n  /******************************************************************\r\n   * カレントセルから貼り付ける\r\n   */\r\n  public paste(): void { }\r\n\r\n  /******************************************************************\r\n   * 選択範囲のテキストを消去する\r\n   */\r\n  public delete(): void { }\r\n\r\n  /******************************************************************\r\n   * 編集を元に戻す\r\n   */\r\n  public undo(): void { }\r\n\r\n  /******************************************************************\r\n   * 編集をやり直す\r\n   */\r\n  public redo(): void { }\r\n\r\n}","/*!\r\n * tym-table-editor.js\r\n * Copyright (c) 2022 shinichi tayama\r\n * Released under the MIT license.\r\n * see https://opensource.org/licenses/MIT\r\n */\r\n\r\nimport { Inject, InjectionToken, StaticProvider } from '@angular/core';\r\nimport { Component, AfterViewInit, OnDestroy, ElementRef } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'ngx-tym-table-input',\r\n  template: '<input [type]=\"vals.type\" [value]=\"vals.val\">'\r\n})\r\nexport class TymTableInputComponent implements AfterViewInit, OnDestroy {\r\n\r\n  /**\r\n   * ダイアログ用トークン\r\n   */\r\n  private static _TYM_TABLE_INPUT_TOKEN = new InjectionToken<any>('TymTableInput');\r\n\r\n  /**\r\n   * 画面用値\r\n   */\r\n  public vals: any;\r\n  /**\r\n   * this native element\r\n   */\r\n  private _thisElm: HTMLElement;\r\n\r\n  /**\r\n   * コンストラクター\r\n   * @param vals_ StaticProviderのuseValue値\r\n   */\r\n  constructor(\r\n    @Inject(TymTableInputComponent._TYM_TABLE_INPUT_TOKEN) vals_: any,\r\n    private _elmRef: ElementRef\r\n  ) {\r\n    this.vals = vals_;\r\n    this._thisElm = this._elmRef.nativeElement as HTMLElement;\r\n  }\r\n\r\n  /**\r\n   * ビューを初期化した後の処理\r\n   */\r\n  ngAfterViewInit() {\r\n    const [thisElm, vals] = [this._thisElm, this.vals];\r\n    const inputElm = thisElm.firstElementChild as HTMLInputElement;\r\n    const divElm = thisElm.parentElement as HTMLDivElement; // 全画面\r\n\r\n    Object.assign(thisElm.style, {\r\n      top: `${vals.top}px`,\r\n      left: `${vals.left}px`,\r\n      position: 'absolute',\r\n    } as CSSStyleDeclaration);\r\n\r\n    Object.assign(inputElm.style, {\r\n      fontSize: '150%',\r\n    } as CSSStyleDeclaration);\r\n\r\n    inputElm.addEventListener('keydown', event => {\r\n      if (event.key == 'Escape') {\r\n        vals.isEscape = true;\r\n      }\r\n      if (event.key == 'Enter') {\r\n        divElm.dispatchEvent(new Event('click'));\r\n        event.preventDefault();\r\n      }\r\n      if (event.key == 'Tab') {\r\n        event.preventDefault();\r\n      }\r\n    });\r\n\r\n    const resize = () => {\r\n      const { height: div_h, width: div_w } = divElm.getBoundingClientRect();\r\n      const { height, width, top, left } = thisElm.getBoundingClientRect();\r\n      const thisStyle = thisElm.style;\r\n      if ((top + height) > div_h) {\r\n        thisStyle.top = `${div_h - height}px`;\r\n      }\r\n      if ((left + width) > div_w) {\r\n        thisStyle.left = `${left - width}px`;\r\n      }\r\n      inputElm.focus();\r\n    }\r\n\r\n    // コンテキストメニューが画面外に見切れた場合に移動させる\r\n    setTimeout(resize);\r\n    new MutationObserver(resize)\r\n      .observe(thisElm, { subtree: true, attributes: true, attributeFilter: ['class'] });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    const thisElm = this._thisElm;\r\n    const inputElm = thisElm.firstElementChild as HTMLInputElement;\r\n    this.vals.ret = inputElm.value;\r\n  }\r\n\r\n  /**\r\n   * StaticProviderのuseValue値の生成\r\n   * @param type input type\r\n   * @param val 値\r\n   * @param elm ターゲットエレメント\r\n   * @returns ダイアログ画面用StaticProvider\r\n   */\r\n  public static provider(\r\n    type: string,\r\n    val: string,\r\n    elm: HTMLElement\r\n  ): StaticProvider {\r\n    const { top, left } = elm.getBoundingClientRect();\r\n    return {\r\n      provide: TymTableInputComponent._TYM_TABLE_INPUT_TOKEN,\r\n      useValue: {\r\n        type: type,\r\n        val: val,\r\n        top: top,\r\n        left: left,\r\n      }\r\n    }\r\n  }\r\n}","/*!\r\n * tym-table-editor.js\r\n * Copyright (c) 2022 shinichi tayama\r\n * Released under the MIT license.\r\n * see https://opensource.org/licenses/MIT\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { TymTableEditorComponent } from './tym-table-editor.component';\r\nimport { TymTableInputComponent } from \"./tym-table-input.component\";\r\n\r\n@NgModule({\r\n  declarations: [\r\n    TymTableEditorComponent, TymTableInputComponent\r\n  ],\r\n  imports: [\r\n  ],\r\n  exports: [\r\n    TymTableEditorComponent, TymTableInputComponent\r\n  ]\r\n})\r\nexport class TymTableEditorModule { }\r\n","/*\r\n * Public API Surface of tym-table-editor\r\n */\r\n\r\nexport * from './lib/tym-table-editor.component';\r\nexport * from './lib/tym-table-input.component';\r\nexport * from './lib/tym-table-editor.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}