@omegagrid/grid 0.6.71 → 0.6.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { BaseEditor } from "../editors/baseEditor";
2
- import { CellModel, CellValueType, CellSource } from "@omegagrid/grid-core";
2
+ import { CellModel, CellValueType, CellSource, CellAddress } from "@omegagrid/grid-core";
3
3
  import { Grid } from "./grid";
4
4
  export type DeleteOptions = {
5
5
  index: number;
@@ -55,5 +55,7 @@ export declare class GridEditing {
55
55
  undo(): void;
56
56
  redo(): void;
57
57
  startColumnMoving(_c: number): void;
58
+ merge(range?: CellAddress): void;
59
+ unmerge(range?: CellAddress): void;
58
60
  }
59
61
  //# sourceMappingURL=grid.editing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"grid.editing.d.ts","sourceRoot":"","sources":["../../src/ui/grid.editing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAwB,aAAa,EAA2B,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3H,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAI9B,MAAM,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAA;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAC3C,WAAW,EAAE,MAAM,CAAA;CACnB,CAAC;AAEF,qBAAa,WAAW;IAmBX,QAAQ,CAAC,IAAI,EAAE,IAAI;IAjB/B,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,MAAM,CAAa;IAE3B,YAAY,UAAS;IACrB,SAAS,UAAS;IAElB,IAAI,KAAK,6CAA6B;IACtC,IAAI,SAAS,kDAAiC;IAC9C,IAAI,QAAQ,kCAAgC;IAC5C,IAAI,MAAM,uCAA8B;IACxC,IAAI,KAAK,4BAA6B;IACtC,IAAI,SAAS,YAA2B;IACxC,IAAI,YAAY,eAAyB;IAEzC,OAAO,CAAC,YAAY,CAAS;IAC7B,IAAI,aAAa,YAAiE;gBAE7D,IAAI,EAAE,IAAI;IAE/B,OAAO,CAAC,IAAI,EAAE,SAAS;IAIvB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,GAAG,UAAU,EAAE,aAAa,UAAO,EAAE,WAAW,UAAQ;IAIxG,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,aAAa,GAAG,UAAU,CAAC,EAAE,EAAE,aAAa,UAAO,EAAE,WAAW,UAAQ;IAyDjH,gBAAgB;IAKhB,cAAc,CAAC,KAAK,UAAO;IAQ3B,SAAS,CAAC,YAAY,GAAE,OAAc;IAuBtC,OAAO;IASP,UAAU;IAOV,UAAU,CAAC,OAAO,EAAE,aAAa;IAYjC,aAAa,CAAC,OAAO,EAAE,aAAa;IAYpC,UAAU,CAAC,OAAO,EAAE,aAAa;IAYjC,aAAa,CAAC,OAAO,EAAE,aAAa;IAYpC,QAAQ,CAAC,OAAO,EAAE,aAAa;IAY/B,WAAW,CAAC,OAAO,EAAE,aAAa;IAYlC,cAAc,CAAC,aAAa,UAAO;IAMnC,SAAS,CAAC,IAAI,EAAE,SAAS;IAUzB,gBAAgB;IAUhB,oBAAoB;IAMpB,aAAa;IA0Bb,OAAO,CAAC,WAAW;IAgFnB,OAAO,CAAC,SAAS;IAIX,KAAK;IAoBX,YAAY,CAAC,IAAI,EAAE,SAAS;IAM5B,IAAI;IA6BJ,IAAI;IA6BJ,iBAAiB,CAAC,EAAE,EAAE,MAAM;CAI5B"}
1
+ {"version":3,"file":"grid.editing.d.ts","sourceRoot":"","sources":["../../src/ui/grid.editing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAwB,aAAa,EAA2B,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxI,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAI9B,MAAM,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAA;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAC3C,WAAW,EAAE,MAAM,CAAA;CACnB,CAAC;AAEF,qBAAa,WAAW;IAmBX,QAAQ,CAAC,IAAI,EAAE,IAAI;IAjB/B,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,MAAM,CAAa;IAE3B,YAAY,UAAS;IACrB,SAAS,UAAS;IAElB,IAAI,KAAK,6CAA6B;IACtC,IAAI,SAAS,kDAAiC;IAC9C,IAAI,QAAQ,kCAAgC;IAC5C,IAAI,MAAM,uCAA8B;IACxC,IAAI,KAAK,4BAA6B;IACtC,IAAI,SAAS,YAA2B;IACxC,IAAI,YAAY,eAAyB;IAEzC,OAAO,CAAC,YAAY,CAAS;IAC7B,IAAI,aAAa,YAAiE;gBAE7D,IAAI,EAAE,IAAI;IAE/B,OAAO,CAAC,IAAI,EAAE,SAAS;IAIvB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,GAAG,UAAU,EAAE,aAAa,UAAO,EAAE,WAAW,UAAQ;IAIxG,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,aAAa,GAAG,UAAU,CAAC,EAAE,EAAE,aAAa,UAAO,EAAE,WAAW,UAAQ;IAyDjH,gBAAgB;IAKhB,cAAc,CAAC,KAAK,UAAO;IAQ3B,SAAS,CAAC,YAAY,GAAE,OAAc;IAuBtC,OAAO;IASP,UAAU;IAOV,UAAU,CAAC,OAAO,EAAE,aAAa;IAYjC,aAAa,CAAC,OAAO,EAAE,aAAa;IAYpC,UAAU,CAAC,OAAO,EAAE,aAAa;IAYjC,aAAa,CAAC,OAAO,EAAE,aAAa;IAYpC,QAAQ,CAAC,OAAO,EAAE,aAAa;IAY/B,WAAW,CAAC,OAAO,EAAE,aAAa;IAYlC,cAAc,CAAC,aAAa,UAAO;IAMnC,SAAS,CAAC,IAAI,EAAE,SAAS;IAUzB,gBAAgB;IAUhB,oBAAoB;IAMpB,aAAa;IA0Bb,OAAO,CAAC,WAAW;IAgFnB,OAAO,CAAC,SAAS;IAIX,KAAK;IAoBX,YAAY,CAAC,IAAI,EAAE,SAAS;IAM5B,IAAI;IA6BJ,IAAI;IA6BJ,iBAAiB,CAAC,EAAE,EAAE,MAAM;IAI5B,KAAK,CAAC,KAAK,CAAC,EAAE,WAAW;IASzB,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW;CAW3B"}
@@ -403,5 +403,26 @@ export class GridEditing {
403
403
  startColumnMoving(_c) {
404
404
  this.columnMoving = true;
405
405
  }
406
+ merge(range) {
407
+ const r = range ? CellRange.fromA1(range) : this.selection.range;
408
+ const cell = this.model.rows[r.r1]?.cell(r.c1);
409
+ if (!cell)
410
+ return;
411
+ this.model.merges.add({ r: r.r1, c: r.c1, rs: r.size.rows, cs: r.size.columns });
412
+ this.grid.rendering.renderCells({ vertical: true, horizontal: true });
413
+ this.grid.selecting.select(r);
414
+ }
415
+ unmerge(range) {
416
+ const r = range ? CellRange.fromA1(range) : this.selection.range;
417
+ const cell = this.model.rows[r.r1]?.cell(r.c1);
418
+ if (!cell)
419
+ return;
420
+ const merge = this.model.merges.mergedCells.get(cell.address);
421
+ if (!merge)
422
+ return;
423
+ this.model.merges.remove(cell.address);
424
+ this.grid.rendering.renderCells({ vertical: true, horizontal: true });
425
+ this.grid.selecting.select(new CellRange(merge.c, merge.r, merge.c + merge.cs - 1, merge.r + merge.rs - 1));
426
+ }
406
427
  }
407
428
  //# sourceMappingURL=grid.editing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grid.editing.js","sourceRoot":"","sources":["../../src/ui/grid.editing.ts"],"names":[],"mappings":"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","sourcesContent":["import { csv, Matrix, utils } from \"@omegagrid/core\";\nimport { FormulaEditor, getEditorFactory } from \"../editors\";\nimport { BaseEditor } from \"../editors/baseEditor\";\nimport { CellModel, isFormula, CellRange, CellValueType, decodeColumn, decodeRow, CellSource } from \"@omegagrid/grid-core\";\nimport { Grid } from \"./grid\";\nimport { GridEditEvent, GridEvent } from \"./grid.events\";\nimport constants from \"../constants\";\n\nexport type DeleteOptions = {\n\tindex: number,\n\tcount: number,\n\tdispatchEvent?: boolean,\n\tfromHistory?: boolean\n};\n\nexport type InsertOptions = DeleteOptions & {\n\tafter?: boolean\n};\n\nexport type MovingOptions = DeleteOptions & {\n\ttargetIndex: number\n};\n\nexport class GridEditing {\n\n\tprivate editorMap = new Map<string, BaseEditor>();\n\tprivate editor: BaseEditor;\n\t\n\tcolumnMoving = false;\n\trowMoving = false;\n\n\tget model() { return this.grid.model }\n\tget selection() { return this.grid.selection }\n\tget selector() { return this.grid.selector }\n\tget events() { return this.grid.events }\n\tget table() { return this.grid.table }\n\tget isEditing() { return !!this.editor }\n\tget activeEditor() { return this.editor }\n\n\tprivate _formulaMode = false;\n\tget isFormulaMode() { return this._formulaMode || this.grid.group?.isFormulaMode }\n\n\tconstructor(readonly grid: Grid) { }\n\n\tcanEdit(cell: CellModel) {\n\t\treturn cell.editable || this.grid.designMode;\n\t}\n\n\tupdateCell(cell: CellModel, value: CellValueType | CellSource, dispatchEvent = true, fromHistory = false) {\n\t\tthis.updateCells([cell], [value], dispatchEvent, fromHistory);\n\t}\n\n\tupdateCells(cells: CellModel[], values: (CellValueType | CellSource)[], dispatchEvent = true, fromHistory = false) {\n\t\tlet oldValues: CellValueType[];\n\t\tlet oldPropsArr: CellValueType[];\n\t\tlet newValues: CellValueType[];\n\t\tlet newPropsArr: CellValueType[];\n\t\tlet editedCells: CellModel[];\n\t\tcells.forEach((cell, i) => {\n\t\t\tconst oldValue = cell.value;\n\t\t\tlet newValue: CellValueType;\n\t\t\tlet newProps: CellSource;\n\t\t\t\n\t\t\tif (utils.isObject(values[i])) {\n\t\t\t\tnewProps = values[i] as CellSource;\n\t\t\t\tnewValue = ('v' in newProps) ? newProps.v : undefined;\n\t\t\t} else {\n\t\t\t\tnewValue = values[i] as CellValueType;\n\t\t\t}\n\n\t\t\tlet oldProps: Partial<CellSource>;\n\t\t\tif (newProps) {\n\t\t\t\toldProps = cell.update(newProps);\n\t\t\t} else {\n\t\t\t\tcell.clearFormula();\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\toldProps = {v: oldValue, dv: cell.displayValue};\n\t\t\t\t\tcell.value = newValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (dispatchEvent && oldProps) {\n\t\t\t\toldValues = oldValues || [];\n\t\t\t\toldPropsArr = oldPropsArr || [];\n\t\t\t\tnewValues = newValues || [];\n\t\t\t\tnewPropsArr = newPropsArr || [];\n\t\t\t\teditedCells = editedCells || [];\n\t\t\t\toldValues.push(oldValue);\n\t\t\t\toldPropsArr.push(oldProps);\n\t\t\t\tnewValues.push(newValue);\n\t\t\t\tnewPropsArr.push(newProps);\n\t\t\t\teditedCells.push(cell);\n\t\t\t}\n\t\t});\n\n\t\tif (dispatchEvent && editedCells?.length) {\n\t\t\tthis.grid.dispatchEvent(new GridEditEvent({\n\t\t\t\tgrid: this.grid,\n\t\t\t\tfromHistory: !!fromHistory,\n\t\t\t\tcells: editedCells,\n\t\t\t\teditType: 'value',\n\t\t\t\tnewValues: newValues,\n\t\t\t\tnewProps: newPropsArr,\n\t\t\t\toldValues: oldValues,\n\t\t\t\toldProps: oldPropsArr\n\t\t\t}));\n\t\t}\n\t}\n\n\tstartFormulaMode() {\n\t\tthis._formulaMode = true;\n\t\tif (this.grid.group) this.grid.group.startFormulaMode(this.grid);\n\t}\n\n\tendFormulaMode(group = true) {\n\t\tthis._formulaMode = false;\n\t\tif (group && this.grid.group) this.grid.group.endFormulaMode();\n\t\tthis.grid.selecting.hideFormulaSelector();\n\t\tthis.grid.selecting.removeFormulaHighlight();\n\t\tthis.grid.selecting.showSelector();\n\t}\n\n\tstartEdit(initialValue: unknown = null) {\n\t\tconst cell = this.grid.selecting.activeCell;\n\t\tif (cell && this.canEdit(cell)) {\n\t\t\tthis.grid.logger.info(`start edit ${(new CellRange(cell.c, cell.r)).A1}`);\n\t\t\tlet formula = true;\n\t\t\tif (isFormula(initialValue as string)) {\n\t\t\t\tthis.editor = this.getFormulaEditor().open(this.grid, initialValue);\n\t\t\t} else {\n\t\t\t\tif (initialValue == null && cell.hasOwnFormula) {\n\t\t\t\t\tthis.editor = this.getFormulaEditor().open(this.grid, initialValue);\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tformula = false;\n\t\t\t\t\tthis.editor = this.getEditor(cell).open(this.grid, initialValue);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.grid.dispatchEvent(new GridEvent('startEdit', {grid: this.grid}));\n\t\t\tif (formula) {\n\t\t\t\tthis.startFormulaMode();\n\t\t\t\tthis.grid.dispatchEvent(new GridEvent('startFormulaEdit', {grid: this.grid}));\n\t\t\t}\n\t\t}\n\t}\n\n\tendEdit() {\n\t\tif (!this.editor) return;\n\t\tthis.grid.logger.info('end edit');\n\t\tthis.grid.editing.endFormulaMode();\n\t\tthis.editor?.close();\n\t\tthis.editor = null;\n\t\tthis.grid.dispatchEvent(new GridEvent('endEdit', {grid: this.grid}));\n\t}\n\n\tcommitEdit() {\n\t\tif (this.editor) {\n\t\t\tthis.editor.commit();\n\t\t\tthis.endEdit();\n\t\t}\n\t}\n\n\tinsertRows(options: InsertOptions) {\n\t\tconst newRows = this.model.insertRows(options.index, options.count, options.after);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'insert_row',\n\t\t\tnewValues: newRows\n\t\t}));\n\t\treturn newRows;\n\t}\n\n\tinsertColumns(options: InsertOptions) {\n\t\tconst newColumns = this.model.insertColumns(options.index , options.count, options.after);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'insert_column',\n\t\t\tnewValues: newColumns\n\t\t}));\n\t\treturn newColumns;\n\t}\n\n\tdeleteRows(options: DeleteOptions) {\n\t\tconst deletedRows = this.model.deleteRows(options.index, options.count);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'delete_row',\n\t\t\toldValues: deletedRows\n\t\t}));\n\t\treturn deletedRows;\n\t}\n\n\tdeleteColumns(options: DeleteOptions) {\n\t\tconst deletedColumns = this.model.deleteColumns(options.index, options.count);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'delete_column',\n\t\t\toldValues: deletedColumns\n\t\t}));\n\t\treturn deletedColumns\n\t}\n\n\tmoveRows(options: MovingOptions) {\n\t\tthis.model.moveRows(options.index, options.count, options.targetIndex);\n\t\tthis.grid.rendering.renderAll(false);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: options.fromHistory,\n\t\t\teditType: 'move_row',\n\t\t\toldValues: [new CellRange(0, options.index, Infinity, options.index + options.count - 1)],\n\t\t\tnewValues: [new CellRange(0, options.targetIndex, Infinity, options.targetIndex + options.count - 1)],\n\t\t}));\n\t}\n\n\tmoveColumns(options: MovingOptions) {\n\t\tthis.model.moveColumns(options.index, options.count, options.targetIndex);\n\t\tthis.grid.rendering.renderAll(false);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: options.fromHistory,\n\t\t\teditType: 'move_column',\n\t\t\toldValues: [new CellRange(options.index, options.index + options.count - 1, Infinity)],\n\t\t\tnewValues: [new CellRange(options.targetIndex, 0, options.targetIndex + options.count - 1, Infinity)],\n\t\t}));\n\t}\n\n\tclearSelection(dispatchEvent = true) {\n\t\tconst cells = this.model.getCellArray(this.selection.range).filter(cell => this.canEdit(cell));\n\t\tthis.updateCells(cells, cells.map(() => null), dispatchEvent);\n\t\tthis.grid.rendering.updateCells(cells, true);\n\t}\n\n\tgetEditor(cell: CellModel) {\n\t\tconst type = cell.type;\n\t\tif (!this.editorMap.has(type)) {\n\t\t\tconst editor = getEditorFactory(type).createComponent(this.model.options.editing);\n\t\t\tthis.grid.shadowRoot.appendChild(editor);\n\t\t\tthis.editorMap.set(type, editor);\n\t\t}\n\t\treturn this.editorMap.get(type);\n\t}\n\n\tgetFormulaEditor() {\n\t\tconst type = 'formula';\n\t\tif (!this.editorMap.has(type)) {\n\t\t\tconst editor = new FormulaEditor();\n\t\t\tthis.grid.shadowRoot.appendChild(editor);\n\t\t\tthis.editorMap.set(type, editor);\n\t\t}\n\t\treturn this.editorMap.get(type);\n\t}\n\n\tgetSelectionCellData() {\n\t\treturn this.model.getCellMatrix(this.selection.range).map(\n\t\t\trow => row.map(cell => cell.getSourceData({displayValue: true}))\n\t\t);\n\t}\n\n\tcopySelection() {\n\t\tconst customClipboardSupport = ClipboardItem.supports(constants.CUSTOM_CLIPBOARD_TYPE);\n\t\tconst values = this.model.getValuesInRange(this.selection.range, customClipboardSupport);\n\t\tthis.grid.selecting.hideSelector();\n\t\tthis.grid.selecting.showCopySelector();\n\n\t\tconst clipboardData: Record<string, string|Blob> = {'text/plain': new Blob([\n\t\t\tcsv.arrayToCsv(values, {decimalSeparator: this.model.options.systemDecimalSeparator})\n\t\t], {\n\t\t\ttype: \"text/plain\"\n\t\t})};\n\t\t\n\t\tif (customClipboardSupport) {\n\t\t\tclipboardData[constants.CUSTOM_CLIPBOARD_TYPE] = new Blob([JSON.stringify(this.getSelectionCellData())], {\n\t\t\t\ttype: \"application/json\"\n\t\t\t});\n\t\t} else {\n\t\t\tthis.grid.logger.warn(\"Browser does not support custom clipboard type\");\n\t\t}\n\t\t\n\t\tnavigator.clipboard.write([new ClipboardItem(clipboardData)]).then(\n\t\t\t() => this.grid.logger.info(\"selected content copied\"),\n\t\t\t() => this.grid.logger.error(\"copy rejected\")\n\t\t);\n\t}\n\n\tprivate pasteMatrix(data: Matrix<string | CellSource>) {\n\t\tconst range = this.selection.range;\n\t\tconst cells: CellModel[] = [];\n\t\tconst cellValues: CellValueType[] = [];\n\t\tconst rowPasteMode = this.model.options.clipboard?.rowPasteMode;\n\t\tconst columnPasteMode = this.model.options.clipboard?.columnPasteMode;\n\n\t\tconst pasteProps = (this.model.options.clipboard?.pasteProps ?? 'all') == 'all'\n\t\t\t? null : this.model.options.clipboard.pasteProps as (keyof CellSource)[];\n\n\t\tconst height = data.length;\n\t\tconst width = height > 0 ? data[0].length : 0;\n\n\t\t// insert rows if needed\n\t\tif (rowPasteMode == 'insert') {\n\t\t\tthis.insertRows({index: range.r1, count: height, after: false});\n\t\t} else if (rowPasteMode == 'rewrite_append' && range.r1 + height > this.model.rows.length - 1) {\n\t\t\tthis.insertRows({\n\t\t\t\tindex: this.model.rows.length - 1, \n\t\t\t\tcount: range.r1 + height - this.model.rows.length, \n\t\t\t\tafter: true\n\t\t\t});\n\t\t}\n\n\t\t// insert columns if needed\n\t\tif (columnPasteMode == 'insert') {\n\t\t\tthis.insertColumns({index: range.c1, count: width, after: false});\n\t\t} else if (columnPasteMode == 'rewrite_append' && range.c1 + width > this.model.columns.length - 1) {\n\t\t\tthis.insertColumns({\n\t\t\t\tindex: this.model.columns.length - 1, \n\t\t\t\tcount: range.c1 + width - this.model.columns.length, \n\t\t\t\tafter: true\n\t\t\t});\n\t\t}\n\n\t\t// duplicate clipboard matrix over selection range if it fits\n\t\tconst dataFitsSelection = height > 0 && width > 0 &&\n\t\t\trange.size.rows % height == 0 && range.size.columns % width == 0;\n\n\t\tconst rMax = Math.min(\n\t\t\tdataFitsSelection ? range.r2 : range.r1 + height - 1, \n\t\t\tthis.model.rows.length - 1\n\t\t);\n\n\t\tconst cMax = Math.min(\n\t\t\tdataFitsSelection ? range.c2 : range.c1 + width - 1, \n\t\t\tthis.model.columns.length - 1\n\t\t);\n\n\t\tfor (let r = range.r1; r <= rMax; r++) {\n\t\t\tconst i = (r - range.r1) % height;\n\t\t\tfor (let c = range.c1; c <= cMax; c++) {\n\t\t\t\tconst cell = this.model.rows[r].cell(c);\n\t\t\t\tif (!cell.editable) continue;\n\n\t\t\t\tconst j = (c - range.c1) % data[i].length;\n\t\t\t\t\n\t\t\t\tif (pasteProps && utils.isObject(data[i][j])) {\n\t\t\t\t\t// filter unwanted properties\n\t\t\t\t\tconst updateProps: Partial<CellSource> = {};\n\t\t\t\t\tpasteProps.forEach(<T extends keyof Partial<CellSource>>(key: T) => {\n\t\t\t\t\t\tupdateProps[key] = (data[i][j] as CellSource)[key];\n\t\t\t\t\t});\n\n\t\t\t\t\t// copiing properties of cell with display value into cell without display value\n\t\t\t\t\tif (!cell.prefersDisplayValue) updateProps.dv = undefined;\n\n\t\t\t\t\tcellValues.push(updateProps);\n\t\t\t\t} else {\n\t\t\t\t\tcellValues.push(data[i][j]);\n\t\t\t\t}\n\n\t\t\t\tcells.push(cell);\n\t\t\t}\n\t\t}\n\n\t\tthis.updateCells(cells, cellValues, true);\n\t\tthis.grid.rendering.updateCells(cells, true);\n\t}\n\n\tprivate pasteText(text: string) {\n\t\tthis.pasteMatrix(csv.csvToArray(text));\n\t}\n\n\tasync paste() {\n\t\tthis.grid.selecting.hideCopySelector();\n\n\t\ttry\t{\n\t\t\tconst clipboardItems = await navigator.clipboard.read();\n\t\t\tif (clipboardItems.length == 0) return;\n\t\t\tconst clipboardItem = clipboardItems[0];\n\t\t\tif (clipboardItem.types.includes(constants.CUSTOM_CLIPBOARD_TYPE)) {\n\t\t\t\tconst data = await clipboardItem.getType(constants.CUSTOM_CLIPBOARD_TYPE);\n\t\t\t\tthis.pasteMatrix(JSON.parse(await data.text()));\n\t\t\t} else if (clipboardItem.types.includes('text/plain')) {\n\t\t\t\tconst data = await clipboardItem.getType('text/plain');\n\t\t\t\tthis.pasteText(await data.text());\n\t\t\t}\n\t\t} catch (_e) {\n\t\t\tthis.grid.logger.error(\"paste rejected\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\topenComments(cell: CellModel) {\n\t\tsetTimeout(() => {\n\t\t\tthis.grid.comment.attachTo(this.grid.table.getCellByCellModel(cell), cell, true);\n\t\t}, 100);\n\t}\n\n\tundo() {\n\t\tlet cells: CellModel[];\n\t\tconst [item] = this.grid.history.pop();\n\t\tif (!item) return;\n\t\tswitch (item.type) {\n\t\t\tcase 'value':\n\t\t\t\tcells = item.addresses.map(addr => this.model.getCellByA1(addr));\n\t\t\t\tthis.updateCells(cells, item.oldProps, true, true);\n\t\t\t\tthis.grid.rendering.updateCells(cells, true);\n\t\t\t\tbreak;\n\t\t\tcase 'insert_column':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.deleteColumns({\n\t\t\t\t\tindex: decodeColumn(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase 'insert_row':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.deleteRows({\n\t\t\t\t\tindex: decodeRow(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tredo() {\n\t\tlet cells: CellModel[];\n\t\tconst [item] = this.grid.history.pop2();\n\t\tif (!item) return;\n\t\tswitch (item.type) {\n\t\t\tcase 'value':\n\t\t\t\tcells = item.addresses.map(addr => this.model.getCellByA1(addr))\n\t\t\t\tthis.updateCells(cells, item.newValues, true, true);\n\t\t\t\tthis.grid.rendering.updateCells(cells, true);\n\t\t\t\tbreak;\n\t\t\tcase 'insert_column':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.insertColumns({\n\t\t\t\t\tindex: decodeColumn(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase 'insert_row':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.insertRows({\n\t\t\t\t\tindex: decodeRow(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tstartColumnMoving(_c: number) {\n\t\tthis.columnMoving = true;\n\t}\n\n}"]}
1
+ {"version":3,"file":"grid.editing.js","sourceRoot":"","sources":["../../src/ui/grid.editing.ts"],"names":[],"mappings":"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","sourcesContent":["import { csv, Matrix, utils } from \"@omegagrid/core\";\nimport { FormulaEditor, getEditorFactory } from \"../editors\";\nimport { BaseEditor } from \"../editors/baseEditor\";\nimport { CellModel, isFormula, CellRange, CellValueType, decodeColumn, decodeRow, CellSource, CellAddress } from \"@omegagrid/grid-core\";\nimport { Grid } from \"./grid\";\nimport { GridEditEvent, GridEvent } from \"./grid.events\";\nimport constants from \"../constants\";\n\nexport type DeleteOptions = {\n\tindex: number,\n\tcount: number,\n\tdispatchEvent?: boolean,\n\tfromHistory?: boolean\n};\n\nexport type InsertOptions = DeleteOptions & {\n\tafter?: boolean\n};\n\nexport type MovingOptions = DeleteOptions & {\n\ttargetIndex: number\n};\n\nexport class GridEditing {\n\n\tprivate editorMap = new Map<string, BaseEditor>();\n\tprivate editor: BaseEditor;\n\t\n\tcolumnMoving = false;\n\trowMoving = false;\n\n\tget model() { return this.grid.model }\n\tget selection() { return this.grid.selection }\n\tget selector() { return this.grid.selector }\n\tget events() { return this.grid.events }\n\tget table() { return this.grid.table }\n\tget isEditing() { return !!this.editor }\n\tget activeEditor() { return this.editor }\n\n\tprivate _formulaMode = false;\n\tget isFormulaMode() { return this._formulaMode || this.grid.group?.isFormulaMode }\n\n\tconstructor(readonly grid: Grid) { }\n\n\tcanEdit(cell: CellModel) {\n\t\treturn cell.editable || this.grid.designMode;\n\t}\n\n\tupdateCell(cell: CellModel, value: CellValueType | CellSource, dispatchEvent = true, fromHistory = false) {\n\t\tthis.updateCells([cell], [value], dispatchEvent, fromHistory);\n\t}\n\n\tupdateCells(cells: CellModel[], values: (CellValueType | CellSource)[], dispatchEvent = true, fromHistory = false) {\n\t\tlet oldValues: CellValueType[];\n\t\tlet oldPropsArr: CellValueType[];\n\t\tlet newValues: CellValueType[];\n\t\tlet newPropsArr: CellValueType[];\n\t\tlet editedCells: CellModel[];\n\t\tcells.forEach((cell, i) => {\n\t\t\tconst oldValue = cell.value;\n\t\t\tlet newValue: CellValueType;\n\t\t\tlet newProps: CellSource;\n\t\t\t\n\t\t\tif (utils.isObject(values[i])) {\n\t\t\t\tnewProps = values[i] as CellSource;\n\t\t\t\tnewValue = ('v' in newProps) ? newProps.v : undefined;\n\t\t\t} else {\n\t\t\t\tnewValue = values[i] as CellValueType;\n\t\t\t}\n\n\t\t\tlet oldProps: Partial<CellSource>;\n\t\t\tif (newProps) {\n\t\t\t\toldProps = cell.update(newProps);\n\t\t\t} else {\n\t\t\t\tcell.clearFormula();\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\toldProps = {v: oldValue, dv: cell.displayValue};\n\t\t\t\t\tcell.value = newValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (dispatchEvent && oldProps) {\n\t\t\t\toldValues = oldValues || [];\n\t\t\t\toldPropsArr = oldPropsArr || [];\n\t\t\t\tnewValues = newValues || [];\n\t\t\t\tnewPropsArr = newPropsArr || [];\n\t\t\t\teditedCells = editedCells || [];\n\t\t\t\toldValues.push(oldValue);\n\t\t\t\toldPropsArr.push(oldProps);\n\t\t\t\tnewValues.push(newValue);\n\t\t\t\tnewPropsArr.push(newProps);\n\t\t\t\teditedCells.push(cell);\n\t\t\t}\n\t\t});\n\n\t\tif (dispatchEvent && editedCells?.length) {\n\t\t\tthis.grid.dispatchEvent(new GridEditEvent({\n\t\t\t\tgrid: this.grid,\n\t\t\t\tfromHistory: !!fromHistory,\n\t\t\t\tcells: editedCells,\n\t\t\t\teditType: 'value',\n\t\t\t\tnewValues: newValues,\n\t\t\t\tnewProps: newPropsArr,\n\t\t\t\toldValues: oldValues,\n\t\t\t\toldProps: oldPropsArr\n\t\t\t}));\n\t\t}\n\t}\n\n\tstartFormulaMode() {\n\t\tthis._formulaMode = true;\n\t\tif (this.grid.group) this.grid.group.startFormulaMode(this.grid);\n\t}\n\n\tendFormulaMode(group = true) {\n\t\tthis._formulaMode = false;\n\t\tif (group && this.grid.group) this.grid.group.endFormulaMode();\n\t\tthis.grid.selecting.hideFormulaSelector();\n\t\tthis.grid.selecting.removeFormulaHighlight();\n\t\tthis.grid.selecting.showSelector();\n\t}\n\n\tstartEdit(initialValue: unknown = null) {\n\t\tconst cell = this.grid.selecting.activeCell;\n\t\tif (cell && this.canEdit(cell)) {\n\t\t\tthis.grid.logger.info(`start edit ${(new CellRange(cell.c, cell.r)).A1}`);\n\t\t\tlet formula = true;\n\t\t\tif (isFormula(initialValue as string)) {\n\t\t\t\tthis.editor = this.getFormulaEditor().open(this.grid, initialValue);\n\t\t\t} else {\n\t\t\t\tif (initialValue == null && cell.hasOwnFormula) {\n\t\t\t\t\tthis.editor = this.getFormulaEditor().open(this.grid, initialValue);\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tformula = false;\n\t\t\t\t\tthis.editor = this.getEditor(cell).open(this.grid, initialValue);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.grid.dispatchEvent(new GridEvent('startEdit', {grid: this.grid}));\n\t\t\tif (formula) {\n\t\t\t\tthis.startFormulaMode();\n\t\t\t\tthis.grid.dispatchEvent(new GridEvent('startFormulaEdit', {grid: this.grid}));\n\t\t\t}\n\t\t}\n\t}\n\n\tendEdit() {\n\t\tif (!this.editor) return;\n\t\tthis.grid.logger.info('end edit');\n\t\tthis.grid.editing.endFormulaMode();\n\t\tthis.editor?.close();\n\t\tthis.editor = null;\n\t\tthis.grid.dispatchEvent(new GridEvent('endEdit', {grid: this.grid}));\n\t}\n\n\tcommitEdit() {\n\t\tif (this.editor) {\n\t\t\tthis.editor.commit();\n\t\t\tthis.endEdit();\n\t\t}\n\t}\n\n\tinsertRows(options: InsertOptions) {\n\t\tconst newRows = this.model.insertRows(options.index, options.count, options.after);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'insert_row',\n\t\t\tnewValues: newRows\n\t\t}));\n\t\treturn newRows;\n\t}\n\n\tinsertColumns(options: InsertOptions) {\n\t\tconst newColumns = this.model.insertColumns(options.index , options.count, options.after);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'insert_column',\n\t\t\tnewValues: newColumns\n\t\t}));\n\t\treturn newColumns;\n\t}\n\n\tdeleteRows(options: DeleteOptions) {\n\t\tconst deletedRows = this.model.deleteRows(options.index, options.count);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'delete_row',\n\t\t\toldValues: deletedRows\n\t\t}));\n\t\treturn deletedRows;\n\t}\n\n\tdeleteColumns(options: DeleteOptions) {\n\t\tconst deletedColumns = this.model.deleteColumns(options.index, options.count);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'delete_column',\n\t\t\toldValues: deletedColumns\n\t\t}));\n\t\treturn deletedColumns\n\t}\n\n\tmoveRows(options: MovingOptions) {\n\t\tthis.model.moveRows(options.index, options.count, options.targetIndex);\n\t\tthis.grid.rendering.renderAll(false);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: options.fromHistory,\n\t\t\teditType: 'move_row',\n\t\t\toldValues: [new CellRange(0, options.index, Infinity, options.index + options.count - 1)],\n\t\t\tnewValues: [new CellRange(0, options.targetIndex, Infinity, options.targetIndex + options.count - 1)],\n\t\t}));\n\t}\n\n\tmoveColumns(options: MovingOptions) {\n\t\tthis.model.moveColumns(options.index, options.count, options.targetIndex);\n\t\tthis.grid.rendering.renderAll(false);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: options.fromHistory,\n\t\t\teditType: 'move_column',\n\t\t\toldValues: [new CellRange(options.index, options.index + options.count - 1, Infinity)],\n\t\t\tnewValues: [new CellRange(options.targetIndex, 0, options.targetIndex + options.count - 1, Infinity)],\n\t\t}));\n\t}\n\n\tclearSelection(dispatchEvent = true) {\n\t\tconst cells = this.model.getCellArray(this.selection.range).filter(cell => this.canEdit(cell));\n\t\tthis.updateCells(cells, cells.map(() => null), dispatchEvent);\n\t\tthis.grid.rendering.updateCells(cells, true);\n\t}\n\n\tgetEditor(cell: CellModel) {\n\t\tconst type = cell.type;\n\t\tif (!this.editorMap.has(type)) {\n\t\t\tconst editor = getEditorFactory(type).createComponent(this.model.options.editing);\n\t\t\tthis.grid.shadowRoot.appendChild(editor);\n\t\t\tthis.editorMap.set(type, editor);\n\t\t}\n\t\treturn this.editorMap.get(type);\n\t}\n\n\tgetFormulaEditor() {\n\t\tconst type = 'formula';\n\t\tif (!this.editorMap.has(type)) {\n\t\t\tconst editor = new FormulaEditor();\n\t\t\tthis.grid.shadowRoot.appendChild(editor);\n\t\t\tthis.editorMap.set(type, editor);\n\t\t}\n\t\treturn this.editorMap.get(type);\n\t}\n\n\tgetSelectionCellData() {\n\t\treturn this.model.getCellMatrix(this.selection.range).map(\n\t\t\trow => row.map(cell => cell.getSourceData({displayValue: true}))\n\t\t);\n\t}\n\n\tcopySelection() {\n\t\tconst customClipboardSupport = ClipboardItem.supports(constants.CUSTOM_CLIPBOARD_TYPE);\n\t\tconst values = this.model.getValuesInRange(this.selection.range, customClipboardSupport);\n\t\tthis.grid.selecting.hideSelector();\n\t\tthis.grid.selecting.showCopySelector();\n\n\t\tconst clipboardData: Record<string, string|Blob> = {'text/plain': new Blob([\n\t\t\tcsv.arrayToCsv(values, {decimalSeparator: this.model.options.systemDecimalSeparator})\n\t\t], {\n\t\t\ttype: \"text/plain\"\n\t\t})};\n\t\t\n\t\tif (customClipboardSupport) {\n\t\t\tclipboardData[constants.CUSTOM_CLIPBOARD_TYPE] = new Blob([JSON.stringify(this.getSelectionCellData())], {\n\t\t\t\ttype: \"application/json\"\n\t\t\t});\n\t\t} else {\n\t\t\tthis.grid.logger.warn(\"Browser does not support custom clipboard type\");\n\t\t}\n\t\t\n\t\tnavigator.clipboard.write([new ClipboardItem(clipboardData)]).then(\n\t\t\t() => this.grid.logger.info(\"selected content copied\"),\n\t\t\t() => this.grid.logger.error(\"copy rejected\")\n\t\t);\n\t}\n\n\tprivate pasteMatrix(data: Matrix<string | CellSource>) {\n\t\tconst range = this.selection.range;\n\t\tconst cells: CellModel[] = [];\n\t\tconst cellValues: CellValueType[] = [];\n\t\tconst rowPasteMode = this.model.options.clipboard?.rowPasteMode;\n\t\tconst columnPasteMode = this.model.options.clipboard?.columnPasteMode;\n\n\t\tconst pasteProps = (this.model.options.clipboard?.pasteProps ?? 'all') == 'all'\n\t\t\t? null : this.model.options.clipboard.pasteProps as (keyof CellSource)[];\n\n\t\tconst height = data.length;\n\t\tconst width = height > 0 ? data[0].length : 0;\n\n\t\t// insert rows if needed\n\t\tif (rowPasteMode == 'insert') {\n\t\t\tthis.insertRows({index: range.r1, count: height, after: false});\n\t\t} else if (rowPasteMode == 'rewrite_append' && range.r1 + height > this.model.rows.length - 1) {\n\t\t\tthis.insertRows({\n\t\t\t\tindex: this.model.rows.length - 1, \n\t\t\t\tcount: range.r1 + height - this.model.rows.length, \n\t\t\t\tafter: true\n\t\t\t});\n\t\t}\n\n\t\t// insert columns if needed\n\t\tif (columnPasteMode == 'insert') {\n\t\t\tthis.insertColumns({index: range.c1, count: width, after: false});\n\t\t} else if (columnPasteMode == 'rewrite_append' && range.c1 + width > this.model.columns.length - 1) {\n\t\t\tthis.insertColumns({\n\t\t\t\tindex: this.model.columns.length - 1, \n\t\t\t\tcount: range.c1 + width - this.model.columns.length, \n\t\t\t\tafter: true\n\t\t\t});\n\t\t}\n\n\t\t// duplicate clipboard matrix over selection range if it fits\n\t\tconst dataFitsSelection = height > 0 && width > 0 &&\n\t\t\trange.size.rows % height == 0 && range.size.columns % width == 0;\n\n\t\tconst rMax = Math.min(\n\t\t\tdataFitsSelection ? range.r2 : range.r1 + height - 1, \n\t\t\tthis.model.rows.length - 1\n\t\t);\n\n\t\tconst cMax = Math.min(\n\t\t\tdataFitsSelection ? range.c2 : range.c1 + width - 1, \n\t\t\tthis.model.columns.length - 1\n\t\t);\n\n\t\tfor (let r = range.r1; r <= rMax; r++) {\n\t\t\tconst i = (r - range.r1) % height;\n\t\t\tfor (let c = range.c1; c <= cMax; c++) {\n\t\t\t\tconst cell = this.model.rows[r].cell(c);\n\t\t\t\tif (!cell.editable) continue;\n\n\t\t\t\tconst j = (c - range.c1) % data[i].length;\n\t\t\t\t\n\t\t\t\tif (pasteProps && utils.isObject(data[i][j])) {\n\t\t\t\t\t// filter unwanted properties\n\t\t\t\t\tconst updateProps: Partial<CellSource> = {};\n\t\t\t\t\tpasteProps.forEach(<T extends keyof Partial<CellSource>>(key: T) => {\n\t\t\t\t\t\tupdateProps[key] = (data[i][j] as CellSource)[key];\n\t\t\t\t\t});\n\n\t\t\t\t\t// copiing properties of cell with display value into cell without display value\n\t\t\t\t\tif (!cell.prefersDisplayValue) updateProps.dv = undefined;\n\n\t\t\t\t\tcellValues.push(updateProps);\n\t\t\t\t} else {\n\t\t\t\t\tcellValues.push(data[i][j]);\n\t\t\t\t}\n\n\t\t\t\tcells.push(cell);\n\t\t\t}\n\t\t}\n\n\t\tthis.updateCells(cells, cellValues, true);\n\t\tthis.grid.rendering.updateCells(cells, true);\n\t}\n\n\tprivate pasteText(text: string) {\n\t\tthis.pasteMatrix(csv.csvToArray(text));\n\t}\n\n\tasync paste() {\n\t\tthis.grid.selecting.hideCopySelector();\n\n\t\ttry\t{\n\t\t\tconst clipboardItems = await navigator.clipboard.read();\n\t\t\tif (clipboardItems.length == 0) return;\n\t\t\tconst clipboardItem = clipboardItems[0];\n\t\t\tif (clipboardItem.types.includes(constants.CUSTOM_CLIPBOARD_TYPE)) {\n\t\t\t\tconst data = await clipboardItem.getType(constants.CUSTOM_CLIPBOARD_TYPE);\n\t\t\t\tthis.pasteMatrix(JSON.parse(await data.text()));\n\t\t\t} else if (clipboardItem.types.includes('text/plain')) {\n\t\t\t\tconst data = await clipboardItem.getType('text/plain');\n\t\t\t\tthis.pasteText(await data.text());\n\t\t\t}\n\t\t} catch (_e) {\n\t\t\tthis.grid.logger.error(\"paste rejected\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\topenComments(cell: CellModel) {\n\t\tsetTimeout(() => {\n\t\t\tthis.grid.comment.attachTo(this.grid.table.getCellByCellModel(cell), cell, true);\n\t\t}, 100);\n\t}\n\n\tundo() {\n\t\tlet cells: CellModel[];\n\t\tconst [item] = this.grid.history.pop();\n\t\tif (!item) return;\n\t\tswitch (item.type) {\n\t\t\tcase 'value':\n\t\t\t\tcells = item.addresses.map(addr => this.model.getCellByA1(addr));\n\t\t\t\tthis.updateCells(cells, item.oldProps, true, true);\n\t\t\t\tthis.grid.rendering.updateCells(cells, true);\n\t\t\t\tbreak;\n\t\t\tcase 'insert_column':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.deleteColumns({\n\t\t\t\t\tindex: decodeColumn(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase 'insert_row':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.deleteRows({\n\t\t\t\t\tindex: decodeRow(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tredo() {\n\t\tlet cells: CellModel[];\n\t\tconst [item] = this.grid.history.pop2();\n\t\tif (!item) return;\n\t\tswitch (item.type) {\n\t\t\tcase 'value':\n\t\t\t\tcells = item.addresses.map(addr => this.model.getCellByA1(addr))\n\t\t\t\tthis.updateCells(cells, item.newValues, true, true);\n\t\t\t\tthis.grid.rendering.updateCells(cells, true);\n\t\t\t\tbreak;\n\t\t\tcase 'insert_column':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.insertColumns({\n\t\t\t\t\tindex: decodeColumn(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase 'insert_row':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.insertRows({\n\t\t\t\t\tindex: decodeRow(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tstartColumnMoving(_c: number) {\n\t\tthis.columnMoving = true;\n\t}\n\n\tmerge(range?: CellAddress) {\n\t\tconst r = range ? CellRange.fromA1(range) : this.selection.range;\n\t\tconst cell = this.model.rows[r.r1]?.cell(r.c1);\n\t\tif (!cell) return;\n\t\tthis.model.merges.add({r: r.r1, c: r.c1, rs: r.size.rows, cs: r.size.columns});\n\t\tthis.grid.rendering.renderCells({vertical: true, horizontal: true});\n\t\tthis.grid.selecting.select(r);\n\t}\n\n\tunmerge(range?: CellAddress) {\n\t\tconst r = range ? CellRange.fromA1(range) : this.selection.range;\n\t\tconst cell = this.model.rows[r.r1]?.cell(r.c1);\n\t\tif (!cell) return;\n\t\tconst merge = this.model.merges.mergedCells.get(cell.address);\n\t\tif (!merge) return;\n\t\tthis.model.merges.remove(cell.address);\n\t\tthis.grid.rendering.renderCells({vertical: true, horizontal: true});\n\t\tthis.grid.selecting.select(new CellRange(merge.c, merge.r, merge.c + merge.cs - 1, merge.r + merge.rs - 1));\n\t}\n\n}"]}
@@ -89,8 +89,6 @@ export declare class GridSelecting {
89
89
  updateCopySelector(): void;
90
90
  showCopySelector(): void;
91
91
  hideCopySelector(): void;
92
- mergeSelection(): void;
93
- unmergeSelection(): void;
94
92
  updateSelectors(): void;
95
93
  stopSelectOperations(): void;
96
94
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"grid.selecting.d.ts","sourceRoot":"","sources":["../../src/ui/grid.selecting.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAGrD,qBAAa,aAAa;IAgCb,QAAQ,CAAC,IAAI,EAAE,IAAI;IA9B/B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,mBAAmB,CAAY;IACvC,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,SAAgB,gBAAgB,wBAA+B;IAE/D,IAAI,KAAK,6CAA6B;IACtC,IAAI,SAAS,mBAA2F;IACxG,IAAI,QAAQ,aAA8F;IAC1G,IAAI,gBAAgB,mBAAoC;IACxD,IAAI,MAAM,uCAA8B;IACxC,IAAI,KAAK,4BAA6B;IACtC,IAAI,WAAW,YAA+E;IAC9F,IAAI,eAAe,YAAuC;IAC1D,IAAI,aAAa,YAAyC;IAC1D,IAAI,QAAQ,YAAoC;IAChD,IAAI,yBAAyB,YAAqD;IAClF,IAAI,gCAAgC,YAMnC;IAED,IAAI,UAAU,6CAGb;gBAEoB,IAAI,EAAE,IAAI;IAI/B,eAAe;IAOf;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAC,SAAS,EAAE,aAAa,UAAQ;IAMrD;;;OAGG;IACH,kBAAkB,CAAC,KAAK,EAAE,SAAS;IAOnC;;;OAGG;IACH,oBAAoB,CAAC,CAAC,EAAE,MAAM;IAO9B;;;OAGG;IACH,iBAAiB,CAAC,CAAC,EAAE,MAAM;IAO3B;;;;OAIG;IACH,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAwBpC;;OAEG;IACH,aAAa;IAUb;;OAEG;IACH,kBAAkB;IAUlB,cAAc,CAAC,aAAa,UAAO;IAUnC;;;OAGG;IACH,YAAY,CAAC,aAAa,UAAO;IAMjC;;OAEG;IACH,YAAY;IAIZ;;;;OAIG;IACH,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAkDjC,oBAAoB;;uBAvNd,CAAC;MAuNgF;IAEvF,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,UAAQ;IAWrD,qBAAqB,CAAC,aAAa,UAAO;IAK1C,mBAAmB,CAAC,aAAa,UAAO;IAKxC,mBAAmB;IAInB,sBAAsB;IAItB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB;IAiBzC,gBAAgB,CAAC,OAAO,EAAE,OAAO;IAqBjC,sBAAsB;IAUtB,kBAAkB;IAIlB,gBAAgB;IAKhB,gBAAgB;IAShB,cAAc;IAUd,gBAAgB;IAYhB,eAAe;IAMf,oBAAoB;IAMpB;;OAEG;IACH,KAAK;CAWL"}
1
+ {"version":3,"file":"grid.selecting.d.ts","sourceRoot":"","sources":["../../src/ui/grid.selecting.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAGrD,qBAAa,aAAa;IAgCb,QAAQ,CAAC,IAAI,EAAE,IAAI;IA9B/B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,mBAAmB,CAAY;IACvC,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,SAAgB,gBAAgB,wBAA+B;IAE/D,IAAI,KAAK,6CAA6B;IACtC,IAAI,SAAS,mBAA2F;IACxG,IAAI,QAAQ,aAA8F;IAC1G,IAAI,gBAAgB,mBAAoC;IACxD,IAAI,MAAM,uCAA8B;IACxC,IAAI,KAAK,4BAA6B;IACtC,IAAI,WAAW,YAA+E;IAC9F,IAAI,eAAe,YAAuC;IAC1D,IAAI,aAAa,YAAyC;IAC1D,IAAI,QAAQ,YAAoC;IAChD,IAAI,yBAAyB,YAAqD;IAClF,IAAI,gCAAgC,YAMnC;IAED,IAAI,UAAU,6CAGb;gBAEoB,IAAI,EAAE,IAAI;IAI/B,eAAe;IAOf;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAC,SAAS,EAAE,aAAa,UAAQ;IAMrD;;;OAGG;IACH,kBAAkB,CAAC,KAAK,EAAE,SAAS;IAOnC;;;OAGG;IACH,oBAAoB,CAAC,CAAC,EAAE,MAAM;IAO9B;;;OAGG;IACH,iBAAiB,CAAC,CAAC,EAAE,MAAM;IAO3B;;;;OAIG;IACH,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAwBpC;;OAEG;IACH,aAAa;IAUb;;OAEG;IACH,kBAAkB;IAUlB,cAAc,CAAC,aAAa,UAAO;IAUnC;;;OAGG;IACH,YAAY,CAAC,aAAa,UAAO;IAMjC;;OAEG;IACH,YAAY;IAIZ;;;;OAIG;IACH,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAkDjC,oBAAoB;;uBAvNd,CAAC;MAuNgF;IAEvF,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,UAAQ;IAWrD,qBAAqB,CAAC,aAAa,UAAO;IAK1C,mBAAmB,CAAC,aAAa,UAAO;IAKxC,mBAAmB;IAInB,sBAAsB;IAItB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB;IAiBzC,gBAAgB,CAAC,OAAO,EAAE,OAAO;IAqBjC,sBAAsB;IAUtB,kBAAkB;IAIlB,gBAAgB;IAKhB,gBAAgB;IAMhB,eAAe;IAMf,oBAAoB;IAMpB;;OAEG;IACH,KAAK;CAWL"}
@@ -291,26 +291,6 @@ export class GridSelecting {
291
291
  this.grid.copySelector.hide();
292
292
  }
293
293
  // #endregion
294
- // #region Selection content editing
295
- mergeSelection() {
296
- const range = this.selection.range;
297
- const cell = this.model.rows[range.r1]?.cell(range.c1);
298
- if (cell) {
299
- cell.rowspan = range.size.rows;
300
- cell.colspan = range.size.columns;
301
- this.grid.rendering.renderCells({ vertical: true, horizontal: true });
302
- }
303
- }
304
- unmergeSelection() {
305
- const range = this.selection.range;
306
- const cell = this.model.rows[range.r1]?.cell(range.c1);
307
- if (cell) {
308
- cell.rowspan = 1;
309
- cell.colspan = 1;
310
- this.grid.rendering.renderCells({ vertical: true, horizontal: true });
311
- }
312
- }
313
- // #endregion
314
294
  updateSelectors() {
315
295
  this.updateSelector(false);
316
296
  this.updateCopySelector();
@@ -1 +1 @@
1
- {"version":3,"file":"grid.selecting.js","sourceRoot":"","sources":["../../src/ui/grid.selecting.ts"],"names":[],"mappings":"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","sourcesContent":["import { dom } from \"@omegagrid/core\";\nimport { debounce } from \"ts-debounce\";\nimport { SelectionModel, Formula, CellRange, FormulaColorItem } from \"@omegagrid/grid-core\";\nimport { Grid } from \"./grid\";\nimport { Selector, SelectorEvent } from \"./selector\";\nimport { GridEvent } from \"./grid.events\";\n\nexport class GridSelecting {\n\n\tprivate columnSelecting = false;\n\tprivate rowSelecting = false;\n\tprivate startSelectingRange: CellRange;\n\tprivate _formulaSelection = new SelectionModel(0, 0, 0, 0);\n\tpublic readonly formulaSelectors = new Map<number, Selector>();\n\t\n\tget model() { return this.grid.model }\n\tget selection() { return this.grid.editing.isFormulaMode ? this.formulaSelection : this.grid.selection }\n\tget selector() { return this.grid.editing.isFormulaMode ? this.grid.formulaSelector : this.grid.selector }\n\tget formulaSelection() { return this._formulaSelection }\n\tget events() { return this.grid.events }\n\tget table() { return this.grid.table }\n\tget isSelecting() { return this.isCellSelecting || this.columnSelecting || this.rowSelecting }\n\tget isCellSelecting() { return this.selector.isSelecting }\n\tget isAutofilling() { return this.selector.isAutofilling }\n\tget isMoving() { return this.selector.isMoving }\n\tget isSelectorOperationActive() { return this.selector.isSelectorOperationActive }\n\tget isFormulaSelectorOperationActive() { \n\t\tif (!this.grid.editing.isFormulaMode) return false;\n\t\tfor (const selector of this.formulaSelectors.values()) {\n\t\t\tif (selector.isSelectorOperationActive) return true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tget activeCell() {\n\t\tconst { c, r } = this.selection.activeCellCoords;\n\t\treturn this.model.rows[r]?.cell(c);\n\t}\n\n\tconstructor(readonly grid: Grid) { }\n\n\t// #region Normal selection\n\n\tmoveToSelection() {\n\t\tconst range = new CellRange(this.selection.range.c1, this.selection.range.r1);\n\t\tconst vpRange = this.table.viewportRange;\n\t\tif (vpRange.contains(range)) return;\n\t\t\n\t}\n\n\t/**\n\t * Select a range of cells.\n\t * @param range \n\t * @param dispatchEvent \n\t */\n\tselect(range: string|CellRange, dispatchEvent = false) {\n\t\tthis.selection.setRange(range);\n\t\tthis.updateSelector();\n\t\tif (dispatchEvent) this.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t}\n\n\t/**\n\t * Enter selection mode, usualy after clicking on a cell.\n\t * @param range \n\t */\n\tstartCellSelecting(range: CellRange) {\n\t\tthis.grid.style.cursor = 'cell';\n\t\tthis.startSelectingRange = range.clone();\n\t\tthis.select(range, true);\n\t\tthis.selector.startSelecting(range);\n\t}\n\t\n\t/**\n\t * Enter column selection mode, usualy after clicking on a column header.\n\t * @param c column index\n\t */\n\tstartColumnSelecting(c: number) {\n\t\tthis.columnSelecting = true;\n\t\tconst range = new CellRange(c, null, c, null);\n\t\tthis.startSelectingRange = range.clone();\n\t\tthis.select(range, true);\n\t}\n\n\t/**\n\t * Enter row selection mode, usualy after clicking on a row header.\n\t * @param r row index\n\t */\n\tstartRowSelecting(r: number) {\n\t\tthis.rowSelecting = true;\n\t\tconst range = new CellRange(null, r, null, r);\n\t\tthis.startSelectingRange = range.clone();\n\t\tthis.select(range, true);\n\t}\n\n\t/**\n\t * Update selector while moving pointer over grid during selection mode.\n\t * @param c column index\n\t * @param r row index\n\t */\n\tupdateSelecting(c: number, r: number) {\n\t\tconst multiSelect = this.model.options.selecting.multiSelect;\n\n\t\tif (this.isCellSelecting || this.rowSelecting) {\n\t\t\tif (!multiSelect) this.selection.range.r1 = r;\n\t\t\tthis.selection.range.r2 = r;\n\t\t}\n\t\t\n\t\tif (this.isCellSelecting || this.columnSelecting) {\n\t\t\tif (!multiSelect) this.selection.range.c1 = c;\n\t\t\tthis.selection.range.c2 = c;\n\t\t}\n\t\t\n\t\tif (this.grid.editing.isFormulaMode) {\n\t\t\tthis.updateFormulaSelector();\n\t\t\tthis.formulaSelectors.forEach(s => s.updateMovingOperations(c, r));\n\t\t} else {\n\t\t\tthis.updateSelector();\n\t\t\tthis.hideFormulaSelector();\n\t\t\tthis.selector.updateMovingOperations(c, r);\n\t\t}\n\n\t}\n\n\t/**\n\t * Stop selection mode.\n\t */\n\tstopSelecting() {\n\t\tthis.grid.rendering.stopAutoscroll();\n\t\tif (this.isSelecting && !this.selection.range.equals(this.startSelectingRange))\n\t\t\tthis.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t\tthis.columnSelecting = false;\n\t\tthis.rowSelecting = false;\n\t\tthis.startSelectingRange = null;\n\t\tthis.selector.stopSelectorOperations();\n\t}\n\n\t/**\n\t * Highlights row/column headers of selected range.\n\t */\n\thighlightSelection() {\n\t\tconst r = this.selection.range;\n\t\tconst [c1, c2] = [Math.min(r.c1, r.c2), Math.max(r.c1, r.c2)];\n\t\tconst [r1, r2] = [Math.min(r.r1, r.r2), Math.max(r.r1, r.r2)];\n\t\tconst cSize = c2 - c1 + 1;\n\t\tconst rSize = r2 - r1 + 1;\n\t\tthis.table.highlightColHeaderCells(cSize < Infinity ? Array.from(new Array(cSize), (x, i) => i + c1) : []);\n\t\tthis.table.highlightRowHeaderCells(rSize < Infinity ? Array.from(new Array(rSize), (x, i) => i + r1) : []);\n\t}\n\n\tupdateSelector(dispatchEvent = true) {\n\t\tif (this.model.options.selecting.enabled) {\n\t\t\tthis.showSelector(dispatchEvent);\n\t\t\tthis.highlightSelection();\n\t\t} else {\n\t\t\tthis.hideSelector();\n\t\t}\n\t\tif (!this.grid.editing.isFormulaMode) this.grid.editing.endEdit();\n\t}\n\n\t/**\n\t * Shows selector if hidden.\n\t * @param dispatchEvent \n\t */\n\tshowSelector(dispatchEvent = true) {\n\t\tif (!this.selector) return;\n\t\tthis.selector.show();\n\t\tthis.selector.select(this.selection.range, dispatchEvent);\n\t}\n\n\t/**\n\t * Hides selector if visible.\n\t */\n\thideSelector() {\n\t\tthis.selector.hide();\n\t}\n\n\t/**\n\t * Moves selector by c columns and r rows.\n\t * @param c \n\t * @param r \n\t */\n\tmoveSelector(c: number, r: number) {\n\t\tthis.selection.move(c, r, this.model.columns.length, this.model.rows.length);\n\n\t\tif (r != 0 && !this.model.rows[this.selection.range.r1].visible) {\n\t\t\tconst nextVisible = r > 0 ? this.model.rows[this.selection.range.r1].nextVisible : this.model.rows[this.selection.range.r1].prevVisible;\n\t\t\tif (nextVisible) {\n\t\t\t\tthis.selection.range.r1 = nextVisible.index;\n\t\t\t\tthis.selection.range.r2 = nextVisible.index;\n\t\t\t}\n\t\t}\n\n\t\tif (c != 0 && !this.model.columns[this.selection.range.c1].visible) {\n\t\t\tconst nextVisible = c > 0 ? this.model.columns[this.selection.range.c1].nextVisible : this.model.columns[this.selection.range.c1].prevVisible;\n\t\t\tif (nextVisible) {\n\t\t\t\tthis.selection.range.c1 = nextVisible.index;\n\t\t\t\tthis.selection.range.c2 = nextVisible.index;\n\t\t\t}\n\t\t}\n\n\t\tthis.selector.selection = this.selection.range;\n\t\tthis.selector.updatePosition();\n\n\t\tconst updateOffset = {c: 0, r: 0};\n\n\t\tif (r > 0 && this.selector.offsetTop + this.selector.offsetHeight > this.grid.clientHeight) {\n\t\t\tupdateOffset.r += r;\n\t\t} else if (r < 0 && this.selector.offsetTop < this.table.totalHeaderHeight - 1) {\n\t\t\tupdateOffset.r += r;\n\t\t} else if (r >= this.table.viewport.rows.length) {\n\t\t\tupdateOffset.r += r;\n\t\t}\n\n\t\tif (c > 0 && this.selector.offsetLeft + this.selector.offsetWidth > this.grid.clientWidth) {\n\t\t\tupdateOffset.c += c;\n\t\t} else if (c < 0 && this.selector.offsetLeft < this.table.totalHeaderWidth - 1) {\n\t\t\tupdateOffset.c += c;\n\t\t}\n\n\t\tif (updateOffset.c != 0 || updateOffset.r != 0) {\n\t\t\tthis.table.colOffset = Math.max(0, this.table.colOffset + updateOffset.c);\n\t\t\tthis.table.rowOffset = Math.min(Math.max(0, this.table.rowOffset + updateOffset.r), this.model.visibleRows.length - 1);\n\t\t\tthis.table.renderCells({horizontal: updateOffset.c != 0, vertical: updateOffset.r != 0});\n\t\t\tthis.grid.rendering.updateSliders();\n\t\t}\n\n\t\tif (!this.grid.editing.isFormulaMode) this.grid.editing.endEdit();\n\t\tthis.highlightSelection();\n\t\tthis.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t}\n\n\tdebounceMoveSelector = debounce((c: number, r: number) => this.moveSelector(c, r), 10);\n\n\tshiftActiveCell(offset: number, dispatchEvent = false) {\n\t\tthis.selection.moveActiveCell(offset, 0);\n\t\tthis.selector.updatePosition();\n\t\tif (dispatchEvent) this.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t}\n\n\t// #endregion\n\n\n\t// #region Formula selection\n\n\tupdateFormulaSelector(dispatchEvent = true) {\n\t\tif (this.grid.editing.isFormulaMode) this.showFormulaSelector(dispatchEvent);\n\t\telse this.hideFormulaSelector();\n\t}\n\n\tshowFormulaSelector(dispatchEvent = true) {\n\t\tthis.grid.formulaSelector.show();\n\t\tthis.grid.formulaSelector?.select(this.formulaSelection.range, dispatchEvent);\n\t}\n\n\thideFormulaSelector() {\n\t\tthis.grid.formulaSelector.hide();\n\t}\n\n\tupdateFormulaSelectors() {\n\t\tthis.formulaSelectors.forEach(s => s.updatePosition());\n\t}\n\n\thighlightColorItem(item: FormulaColorItem) {\n\t\tconst selection = SelectionModel.fromRange(CellRange.fromA1(item.address));\n\t\tconst selector = dom.createElement<Selector>('og-selector');\n\t\tthis.grid.shadowRoot.appendChild(selector);\n\t\tselector.addEventListener('grid.selector.move', (e: SelectorEvent) => this.select(e.selector.selection.clone()));\n\t\tselector.addEventListener('grid.selector.resize', (e: SelectorEvent) => this.select(e.selector.selection.clone()));\n\t\tselector.grid = this.grid;\n\t\tselector.color = item.color;\n\t\tselector.subselector = false;\n\t\tselector.movable = true;\n\t\tselector.resizable = true;\n\t\tselector.index = item.tokenIndex;\n\t\tthis.formulaSelectors.set(item.tokenIndex, selector);\n\t\tselector.select(selection.range.clone(), false);\n\t\tselector.show();\n\t}\n\n\thighlightFormula(formula: Formula) {\n\t\tthis.removeFormulaHighlight();\n\t\tthis.formulaSelectors.clear();\n\t\tconst grids = new Set<Grid>();\n\t\tformula.colors.forEach(item => {\n\t\t\tif (item.sheet == null || item.sheet == this.model.name) {\n\t\t\t\tthis.highlightColorItem(item);\n\t\t\t} else if (this.grid.group) {\n\t\t\t\tconst grid = this.grid.group.getGrid(item.sheet);\n\t\t\t\tif (!grid) return;\n\t\t\t\tif (!grids.has(grid)) {\n\t\t\t\t\tgrids.add(grid);\n\t\t\t\t\tgrid.selecting.removeFormulaHighlight();\n\t\t\t\t}\n\t\t\t\tif (grid.isConnected) {\n\t\t\t\t\tgrid.selecting.highlightColorItem(item);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tremoveFormulaHighlight() {\n\t\tthis.formulaSelectors?.forEach(s => dom.remove(s));\n\t\tthis.formulaSelectors.clear();\n\t}\n\n\t// #endregion\n\n\n\t// #region Copy selection\n\n\tupdateCopySelector() {\n\t\tif (this.grid.copySelector.isVisible) this.grid.copySelector.updatePosition();\n\t}\n\n\tshowCopySelector() {\n\t\tthis.grid.copySelector.show();\n\t\tthis.grid.copySelector?.select(this.selection.range.clone(), false);\n\t}\n\n\thideCopySelector() {\n\t\tthis.grid.copySelector.hide();\n\t}\n\n\t// #endregion\n\n\t\n\t// #region Selection content editing\n\n\tmergeSelection() {\n\t\tconst range = this.selection.range;\n\t\tconst cell = this.model.rows[range.r1]?.cell(range.c1);\n\t\tif (cell) {\n\t\t\tcell.rowspan = range.size.rows;\n\t\t\tcell.colspan = range.size.columns;\n\t\t\tthis.grid.rendering.renderCells({vertical: true, horizontal: true});\n\t\t}\n\t}\n\n\tunmergeSelection() {\n\t\tconst range = this.selection.range;\n\t\tconst cell = this.model.rows[range.r1]?.cell(range.c1);\n\t\tif (cell) {\n\t\t\tcell.rowspan = 1;\n\t\t\tcell.colspan = 1;\n\t\t\tthis.grid.rendering.renderCells({vertical: true, horizontal: true});\n\t\t}\n\t}\n\n\t// #endregion\n\n\tupdateSelectors() {\n\t\tthis.updateSelector(false);\n\t\tthis.updateCopySelector();\n\t\tthis.updateFormulaSelectors();\n\t}\n\n\tstopSelectOperations() {\n\t\tthis.stopSelecting();\n\t\tthis.formulaSelectors.forEach(s => s.stopSelectorOperations());\n\t\tthis.grid.style.removeProperty('cursor');\n\t}\n\n\t/**\n\t * Move selector or submit formula while editing.\n\t */\n\tenter() {\n\t\tconst group = this.grid.group;\n\t\tif (this.grid.editing.isFormulaMode && group) {\n\t\t\tconst grid = group.formulaModeGrid;\n\t\t\tgrid.editing.commitEdit();\n\t\t\tgroup.activateGrid(grid.model.name);\n\t\t} else {\n\t\t\tthis.debounceMoveSelector(0, 1);\n\t\t}\n\t}\n\n}"]}
1
+ {"version":3,"file":"grid.selecting.js","sourceRoot":"","sources":["../../src/ui/grid.selecting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,cAAc,EAAW,SAAS,EAAoB,MAAM,sBAAsB,CAAC;AAG5F,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,OAAO,aAAa;IAQzB,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;IACtC,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA,CAAC,CAAC;IACxG,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAA,CAAC,CAAC;IAC1G,IAAI,gBAAgB,KAAK,OAAO,IAAI,CAAC,iBAAiB,CAAA,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;IACtC,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,CAAA,CAAC,CAAC;IAC9F,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAA,CAAC,CAAC;IAC1D,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAA,CAAC,CAAC;IAC1D,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAA,CAAC,CAAC;IAChD,IAAI,yBAAyB,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAA,CAAC,CAAC;IAClF,IAAI,gCAAgC;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC;QACnD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;YACvD,IAAI,QAAQ,CAAC,yBAAyB;gBAAE,OAAO,IAAI,CAAC;QACrD,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,IAAI,UAAU;QACb,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,YAAqB,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;QA9BvB,oBAAe,GAAG,KAAK,CAAC;QACxB,iBAAY,GAAG,KAAK,CAAC;QAErB,sBAAiB,GAAG,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,qBAAgB,GAAG,IAAI,GAAG,EAAoB,CAAC;QA0N/D,yBAAoB,GAAG,QAAQ,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAhMpD,CAAC;IAEpC,2BAA2B;IAE3B,eAAe;QACd,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACzC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;IAErC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAuB,EAAE,aAAa,GAAG,KAAK;QACpD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,KAAgB;QAClC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAChC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAAC,CAAS;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,CAAS;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,CAAS,EAAE,CAAS;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC;QAE7D,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/C,IAAI,CAAC,WAAW;gBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAClD,IAAI,CAAC,WAAW;gBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;IAEF,CAAC;IAED;;OAEG;IACH,aAAa;QACZ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAC7E,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,kBAAkB;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC/B,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3G,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5G,CAAC;IAED,cAAc,CAAC,aAAa,GAAG,IAAI;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC3B,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,YAAY,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACnE,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,aAAa,GAAG,IAAI;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,YAAY;QACX,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,CAAS,EAAE,CAAS;QAChC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE7E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACjE,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC;YACxI,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC;gBAC5C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC;YAC7C,CAAC;QACF,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACpE,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC;YAC9I,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC;gBAC5C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC;YAC7C,CAAC;QACF,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE/B,MAAM,YAAY,GAAG,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC;QAElC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5F,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;YAChF,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjD,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3F,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;YAChF,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC1E,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvH,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAC,UAAU,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC;YACzF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAClE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAID,eAAe,CAAC,MAAc,EAAE,aAAa,GAAG,KAAK;QACpD,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC/B,IAAI,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,aAAa;IAGb,4BAA4B;IAE5B,qBAAqB,CAAC,aAAa,GAAG,IAAI;QACzC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;;YACxE,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACjC,CAAC;IAED,mBAAmB,CAAC,aAAa,GAAG,IAAI;QACvC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC/E,CAAC;IAED,mBAAmB;QAClB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,sBAAsB;QACrB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,kBAAkB,CAAC,IAAsB;QACxC,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAW,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3C,QAAQ,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,CAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjH,QAAQ,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,CAAC,CAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACnH,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC;QAC7B,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrD,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QAChD,QAAQ,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAED,gBAAgB,CAAC,OAAgB;QAChC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAQ,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC7B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACzD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjD,IAAI,CAAC,IAAI;oBAAE,OAAO;gBAClB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAChB,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC;gBACzC,CAAC;gBACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACtB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBACzC,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,sBAAsB;QACrB,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,aAAa;IAGb,yBAAyB;IAEzB,kBAAkB;QACjB,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;IAC/E,CAAC;IAED,gBAAgB;QACf,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;IAED,gBAAgB;QACf,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,aAAa;IAEb,eAAe;QACd,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAC/B,CAAC;IAED,oBAAoB;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1B,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACF,CAAC;CAED","sourcesContent":["import { dom } from \"@omegagrid/core\";\nimport { debounce } from \"ts-debounce\";\nimport { SelectionModel, Formula, CellRange, FormulaColorItem } from \"@omegagrid/grid-core\";\nimport { Grid } from \"./grid\";\nimport { Selector, SelectorEvent } from \"./selector\";\nimport { GridEvent } from \"./grid.events\";\n\nexport class GridSelecting {\n\n\tprivate columnSelecting = false;\n\tprivate rowSelecting = false;\n\tprivate startSelectingRange: CellRange;\n\tprivate _formulaSelection = new SelectionModel(0, 0, 0, 0);\n\tpublic readonly formulaSelectors = new Map<number, Selector>();\n\t\n\tget model() { return this.grid.model }\n\tget selection() { return this.grid.editing.isFormulaMode ? this.formulaSelection : this.grid.selection }\n\tget selector() { return this.grid.editing.isFormulaMode ? this.grid.formulaSelector : this.grid.selector }\n\tget formulaSelection() { return this._formulaSelection }\n\tget events() { return this.grid.events }\n\tget table() { return this.grid.table }\n\tget isSelecting() { return this.isCellSelecting || this.columnSelecting || this.rowSelecting }\n\tget isCellSelecting() { return this.selector.isSelecting }\n\tget isAutofilling() { return this.selector.isAutofilling }\n\tget isMoving() { return this.selector.isMoving }\n\tget isSelectorOperationActive() { return this.selector.isSelectorOperationActive }\n\tget isFormulaSelectorOperationActive() { \n\t\tif (!this.grid.editing.isFormulaMode) return false;\n\t\tfor (const selector of this.formulaSelectors.values()) {\n\t\t\tif (selector.isSelectorOperationActive) return true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tget activeCell() {\n\t\tconst { c, r } = this.selection.activeCellCoords;\n\t\treturn this.model.rows[r]?.cell(c);\n\t}\n\n\tconstructor(readonly grid: Grid) { }\n\n\t// #region Normal selection\n\n\tmoveToSelection() {\n\t\tconst range = new CellRange(this.selection.range.c1, this.selection.range.r1);\n\t\tconst vpRange = this.table.viewportRange;\n\t\tif (vpRange.contains(range)) return;\n\t\t\n\t}\n\n\t/**\n\t * Select a range of cells.\n\t * @param range \n\t * @param dispatchEvent \n\t */\n\tselect(range: string|CellRange, dispatchEvent = false) {\n\t\tthis.selection.setRange(range);\n\t\tthis.updateSelector();\n\t\tif (dispatchEvent) this.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t}\n\n\t/**\n\t * Enter selection mode, usualy after clicking on a cell.\n\t * @param range \n\t */\n\tstartCellSelecting(range: CellRange) {\n\t\tthis.grid.style.cursor = 'cell';\n\t\tthis.startSelectingRange = range.clone();\n\t\tthis.select(range, true);\n\t\tthis.selector.startSelecting(range);\n\t}\n\t\n\t/**\n\t * Enter column selection mode, usualy after clicking on a column header.\n\t * @param c column index\n\t */\n\tstartColumnSelecting(c: number) {\n\t\tthis.columnSelecting = true;\n\t\tconst range = new CellRange(c, null, c, null);\n\t\tthis.startSelectingRange = range.clone();\n\t\tthis.select(range, true);\n\t}\n\n\t/**\n\t * Enter row selection mode, usualy after clicking on a row header.\n\t * @param r row index\n\t */\n\tstartRowSelecting(r: number) {\n\t\tthis.rowSelecting = true;\n\t\tconst range = new CellRange(null, r, null, r);\n\t\tthis.startSelectingRange = range.clone();\n\t\tthis.select(range, true);\n\t}\n\n\t/**\n\t * Update selector while moving pointer over grid during selection mode.\n\t * @param c column index\n\t * @param r row index\n\t */\n\tupdateSelecting(c: number, r: number) {\n\t\tconst multiSelect = this.model.options.selecting.multiSelect;\n\n\t\tif (this.isCellSelecting || this.rowSelecting) {\n\t\t\tif (!multiSelect) this.selection.range.r1 = r;\n\t\t\tthis.selection.range.r2 = r;\n\t\t}\n\t\t\n\t\tif (this.isCellSelecting || this.columnSelecting) {\n\t\t\tif (!multiSelect) this.selection.range.c1 = c;\n\t\t\tthis.selection.range.c2 = c;\n\t\t}\n\t\t\n\t\tif (this.grid.editing.isFormulaMode) {\n\t\t\tthis.updateFormulaSelector();\n\t\t\tthis.formulaSelectors.forEach(s => s.updateMovingOperations(c, r));\n\t\t} else {\n\t\t\tthis.updateSelector();\n\t\t\tthis.hideFormulaSelector();\n\t\t\tthis.selector.updateMovingOperations(c, r);\n\t\t}\n\n\t}\n\n\t/**\n\t * Stop selection mode.\n\t */\n\tstopSelecting() {\n\t\tthis.grid.rendering.stopAutoscroll();\n\t\tif (this.isSelecting && !this.selection.range.equals(this.startSelectingRange))\n\t\t\tthis.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t\tthis.columnSelecting = false;\n\t\tthis.rowSelecting = false;\n\t\tthis.startSelectingRange = null;\n\t\tthis.selector.stopSelectorOperations();\n\t}\n\n\t/**\n\t * Highlights row/column headers of selected range.\n\t */\n\thighlightSelection() {\n\t\tconst r = this.selection.range;\n\t\tconst [c1, c2] = [Math.min(r.c1, r.c2), Math.max(r.c1, r.c2)];\n\t\tconst [r1, r2] = [Math.min(r.r1, r.r2), Math.max(r.r1, r.r2)];\n\t\tconst cSize = c2 - c1 + 1;\n\t\tconst rSize = r2 - r1 + 1;\n\t\tthis.table.highlightColHeaderCells(cSize < Infinity ? Array.from(new Array(cSize), (x, i) => i + c1) : []);\n\t\tthis.table.highlightRowHeaderCells(rSize < Infinity ? Array.from(new Array(rSize), (x, i) => i + r1) : []);\n\t}\n\n\tupdateSelector(dispatchEvent = true) {\n\t\tif (this.model.options.selecting.enabled) {\n\t\t\tthis.showSelector(dispatchEvent);\n\t\t\tthis.highlightSelection();\n\t\t} else {\n\t\t\tthis.hideSelector();\n\t\t}\n\t\tif (!this.grid.editing.isFormulaMode) this.grid.editing.endEdit();\n\t}\n\n\t/**\n\t * Shows selector if hidden.\n\t * @param dispatchEvent \n\t */\n\tshowSelector(dispatchEvent = true) {\n\t\tif (!this.selector) return;\n\t\tthis.selector.show();\n\t\tthis.selector.select(this.selection.range, dispatchEvent);\n\t}\n\n\t/**\n\t * Hides selector if visible.\n\t */\n\thideSelector() {\n\t\tthis.selector.hide();\n\t}\n\n\t/**\n\t * Moves selector by c columns and r rows.\n\t * @param c \n\t * @param r \n\t */\n\tmoveSelector(c: number, r: number) {\n\t\tthis.selection.move(c, r, this.model.columns.length, this.model.rows.length);\n\n\t\tif (r != 0 && !this.model.rows[this.selection.range.r1].visible) {\n\t\t\tconst nextVisible = r > 0 ? this.model.rows[this.selection.range.r1].nextVisible : this.model.rows[this.selection.range.r1].prevVisible;\n\t\t\tif (nextVisible) {\n\t\t\t\tthis.selection.range.r1 = nextVisible.index;\n\t\t\t\tthis.selection.range.r2 = nextVisible.index;\n\t\t\t}\n\t\t}\n\n\t\tif (c != 0 && !this.model.columns[this.selection.range.c1].visible) {\n\t\t\tconst nextVisible = c > 0 ? this.model.columns[this.selection.range.c1].nextVisible : this.model.columns[this.selection.range.c1].prevVisible;\n\t\t\tif (nextVisible) {\n\t\t\t\tthis.selection.range.c1 = nextVisible.index;\n\t\t\t\tthis.selection.range.c2 = nextVisible.index;\n\t\t\t}\n\t\t}\n\n\t\tthis.selector.selection = this.selection.range;\n\t\tthis.selector.updatePosition();\n\n\t\tconst updateOffset = {c: 0, r: 0};\n\n\t\tif (r > 0 && this.selector.offsetTop + this.selector.offsetHeight > this.grid.clientHeight) {\n\t\t\tupdateOffset.r += r;\n\t\t} else if (r < 0 && this.selector.offsetTop < this.table.totalHeaderHeight - 1) {\n\t\t\tupdateOffset.r += r;\n\t\t} else if (r >= this.table.viewport.rows.length) {\n\t\t\tupdateOffset.r += r;\n\t\t}\n\n\t\tif (c > 0 && this.selector.offsetLeft + this.selector.offsetWidth > this.grid.clientWidth) {\n\t\t\tupdateOffset.c += c;\n\t\t} else if (c < 0 && this.selector.offsetLeft < this.table.totalHeaderWidth - 1) {\n\t\t\tupdateOffset.c += c;\n\t\t}\n\n\t\tif (updateOffset.c != 0 || updateOffset.r != 0) {\n\t\t\tthis.table.colOffset = Math.max(0, this.table.colOffset + updateOffset.c);\n\t\t\tthis.table.rowOffset = Math.min(Math.max(0, this.table.rowOffset + updateOffset.r), this.model.visibleRows.length - 1);\n\t\t\tthis.table.renderCells({horizontal: updateOffset.c != 0, vertical: updateOffset.r != 0});\n\t\t\tthis.grid.rendering.updateSliders();\n\t\t}\n\n\t\tif (!this.grid.editing.isFormulaMode) this.grid.editing.endEdit();\n\t\tthis.highlightSelection();\n\t\tthis.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t}\n\n\tdebounceMoveSelector = debounce((c: number, r: number) => this.moveSelector(c, r), 10);\n\n\tshiftActiveCell(offset: number, dispatchEvent = false) {\n\t\tthis.selection.moveActiveCell(offset, 0);\n\t\tthis.selector.updatePosition();\n\t\tif (dispatchEvent) this.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t}\n\n\t// #endregion\n\n\n\t// #region Formula selection\n\n\tupdateFormulaSelector(dispatchEvent = true) {\n\t\tif (this.grid.editing.isFormulaMode) this.showFormulaSelector(dispatchEvent);\n\t\telse this.hideFormulaSelector();\n\t}\n\n\tshowFormulaSelector(dispatchEvent = true) {\n\t\tthis.grid.formulaSelector.show();\n\t\tthis.grid.formulaSelector?.select(this.formulaSelection.range, dispatchEvent);\n\t}\n\n\thideFormulaSelector() {\n\t\tthis.grid.formulaSelector.hide();\n\t}\n\n\tupdateFormulaSelectors() {\n\t\tthis.formulaSelectors.forEach(s => s.updatePosition());\n\t}\n\n\thighlightColorItem(item: FormulaColorItem) {\n\t\tconst selection = SelectionModel.fromRange(CellRange.fromA1(item.address));\n\t\tconst selector = dom.createElement<Selector>('og-selector');\n\t\tthis.grid.shadowRoot.appendChild(selector);\n\t\tselector.addEventListener('grid.selector.move', (e: SelectorEvent) => this.select(e.selector.selection.clone()));\n\t\tselector.addEventListener('grid.selector.resize', (e: SelectorEvent) => this.select(e.selector.selection.clone()));\n\t\tselector.grid = this.grid;\n\t\tselector.color = item.color;\n\t\tselector.subselector = false;\n\t\tselector.movable = true;\n\t\tselector.resizable = true;\n\t\tselector.index = item.tokenIndex;\n\t\tthis.formulaSelectors.set(item.tokenIndex, selector);\n\t\tselector.select(selection.range.clone(), false);\n\t\tselector.show();\n\t}\n\n\thighlightFormula(formula: Formula) {\n\t\tthis.removeFormulaHighlight();\n\t\tthis.formulaSelectors.clear();\n\t\tconst grids = new Set<Grid>();\n\t\tformula.colors.forEach(item => {\n\t\t\tif (item.sheet == null || item.sheet == this.model.name) {\n\t\t\t\tthis.highlightColorItem(item);\n\t\t\t} else if (this.grid.group) {\n\t\t\t\tconst grid = this.grid.group.getGrid(item.sheet);\n\t\t\t\tif (!grid) return;\n\t\t\t\tif (!grids.has(grid)) {\n\t\t\t\t\tgrids.add(grid);\n\t\t\t\t\tgrid.selecting.removeFormulaHighlight();\n\t\t\t\t}\n\t\t\t\tif (grid.isConnected) {\n\t\t\t\t\tgrid.selecting.highlightColorItem(item);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tremoveFormulaHighlight() {\n\t\tthis.formulaSelectors?.forEach(s => dom.remove(s));\n\t\tthis.formulaSelectors.clear();\n\t}\n\n\t// #endregion\n\n\n\t// #region Copy selection\n\n\tupdateCopySelector() {\n\t\tif (this.grid.copySelector.isVisible) this.grid.copySelector.updatePosition();\n\t}\n\n\tshowCopySelector() {\n\t\tthis.grid.copySelector.show();\n\t\tthis.grid.copySelector?.select(this.selection.range.clone(), false);\n\t}\n\n\thideCopySelector() {\n\t\tthis.grid.copySelector.hide();\n\t}\n\n\t// #endregion\n\n\tupdateSelectors() {\n\t\tthis.updateSelector(false);\n\t\tthis.updateCopySelector();\n\t\tthis.updateFormulaSelectors();\n\t}\n\n\tstopSelectOperations() {\n\t\tthis.stopSelecting();\n\t\tthis.formulaSelectors.forEach(s => s.stopSelectorOperations());\n\t\tthis.grid.style.removeProperty('cursor');\n\t}\n\n\t/**\n\t * Move selector or submit formula while editing.\n\t */\n\tenter() {\n\t\tconst group = this.grid.group;\n\t\tif (this.grid.editing.isFormulaMode && group) {\n\t\t\tconst grid = group.formulaModeGrid;\n\t\t\tgrid.editing.commitEdit();\n\t\t\tgroup.activateGrid(grid.model.name);\n\t\t} else {\n\t\t\tthis.debounceMoveSelector(0, 1);\n\t\t}\n\t}\n\n}"]}
@@ -22,6 +22,7 @@ export declare class Table extends LitElement {
22
22
  private _viewport;
23
23
  private _viewportSize;
24
24
  private _freezeLeft;
25
+ private _freezeTop;
25
26
  private bCache;
26
27
  private hCache;
27
28
  hRows: TableRow[];
@@ -56,6 +57,7 @@ export declare class Table extends LitElement {
56
57
  getCellByCellModel: (m: CellModel) => TableCell;
57
58
  resetFreezeLeft: () => void;
58
59
  get freezeLeft(): number;
60
+ get freezeTop(): number;
59
61
  _highlightedColHeaderCells: TableHeaderCell[];
60
62
  _highlightedRowHeaderCells: TableHeaderCell[];
61
63
  previewZoom(zoom: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/ui/table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/ui/table.ts"],"names":[],"mappings":"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"}
package/dist/ui/table.js CHANGED
@@ -9,7 +9,7 @@ import { dom, Expander, LevelExpander } from "@omegagrid/core";
9
9
  import { LitElement, html } from 'lit';
10
10
  import { customElement, property } from 'lit/decorators.js';
11
11
  import { createRef, ref } from 'lit/directives/ref.js';
12
- import { encodeRow, styleToCSStyle, CellRange } from "@omegagrid/grid-core";
12
+ import { encodeRow, styleToCSStyle, CellRange, MergeCellState } from "@omegagrid/grid-core";
13
13
  import { ElementCache } from "./elementCache";
14
14
  import { tableStyles } from "./table.styles";
15
15
  import { SortingArrow } from "./sortingArrow";
@@ -40,6 +40,12 @@ let Table = class Table extends LitElement {
40
40
  }
41
41
  return this._freezeLeft;
42
42
  }
43
+ get freezeTop() {
44
+ if (this._freezeTop == null) {
45
+ this._freezeTop = this.model.options.freezeTop;
46
+ }
47
+ return this._freezeTop;
48
+ }
43
49
  previewZoom(zoom) {
44
50
  dom.zoomElement(this.table, zoom);
45
51
  }
@@ -337,14 +343,14 @@ let Table = class Table extends LitElement {
337
343
  renderCells(update = { vertical: true, horizontal: true }) {
338
344
  if (this.table && (update.vertical || update.horizontal)) {
339
345
  this._viewport = null;
340
- this.tbody.remove();
346
+ // this.tbody.remove();
341
347
  if (update.horizontal)
342
348
  this.renderHeader();
343
349
  if (this.model.rows.length > 0) {
344
350
  this.renderBody();
345
351
  if (update.vertical)
346
352
  this.renderRowTree();
347
- this.table.appendChild(this.tbody);
353
+ // this.table.appendChild(this.tbody);
348
354
  }
349
355
  else if (this.model.options.emptyPlaceholder) {
350
356
  this.renderEmptyBody();
@@ -781,15 +787,14 @@ let Table = class Table extends LitElement {
781
787
  let cIndex;
782
788
  let colModel;
783
789
  let cellModel;
784
- //let hiddenRowCells: Map<number, Merge>;
785
- // let merge: Merge;
786
- // const freezeLeft = this.freezeLeft;
787
- // const freezeTop = this.model.options.freezeTop || 0;
790
+ let a1;
791
+ const freezeLeft = this.freezeLeft || 0;
792
+ const freezeTop = this.freezeTop || 0;
788
793
  const offset = this.rowHeaderCount;
794
+ const merges = this.model.merges;
789
795
  const rowNumbers = this.model.options.rowNumbers;
790
796
  const viewport = this.viewport;
791
- const mergedCells = [];
792
- //const hiddenCells = this.model.hiddenCells;
797
+ const mainRange = new CellRange(this.viewportRange.c1 + freezeLeft, this.viewportRange.r1 + freezeTop, this.viewportRange.c2, this.viewportRange.r2);
793
798
  this.rowMap.clear();
794
799
  for (let r = 0; r < this.bRows.length; r++) {
795
800
  row = this.bRows[r];
@@ -812,7 +817,6 @@ let Table = class Table extends LitElement {
812
817
  cell.c = -1;
813
818
  cell.innerHTML = `<div>${encodeRow(rIndex)}</div>`;
814
819
  }
815
- //hiddenRowCells = hiddenCells.get(rIndex);
816
820
  for (let c = offset; c < row.children.length; c++) {
817
821
  cell = row.children[c];
818
822
  if (c - offset < viewport.columns.length) {
@@ -820,22 +824,27 @@ let Table = class Table extends LitElement {
820
824
  cIndex = colModel.index;
821
825
  cell.r = rIndex;
822
826
  cell.c = cIndex;
823
- cell.colSpan = 1; //cellModel.colspan;
824
- cell.rowSpan = 1; //cellModel.rowspan;
825
- // merge = hiddenRowCells && hiddenRowCells.get(cIndex);
826
- // if (merge) {
827
- // if (c == offset + freezeLeft) { // || r == freezeTop) {
828
- // cIndex = merge.c;
829
- // rIndex = merge.r;
830
- // mergedCells.push(merge);
831
- // } else {
832
- // dom.hideCell(cell);
833
- // continue;
834
- // }
835
- // }
836
827
  cellModel = rowModel.cell(cIndex);
837
- if (cellModel.colspan > 1 || cellModel.rowspan > 1) {
838
- mergedCells.push({ r: r, c: c, cs: cellModel.colspan, rs: cellModel.rowspan });
828
+ a1 = cellModel.address;
829
+ if (merges.getMergeState(a1) == MergeCellState.HIDDEN) {
830
+ const merge = merges.hiddenCells.get(cellModel.address);
831
+ const inter = mainRange.intersect(new CellRange(merge.c, merge.r, merge.c + merge.cs - 1, merge.r + merge.rs - 1));
832
+ if (cellModel.c == inter.c1 && cellModel.r == inter.r1) {
833
+ // top left cell of the merged range
834
+ cellModel = this.model.rows[merge.r].cell(merge.c);
835
+ cell.colSpan = inter.size.columns;
836
+ cell.rowSpan = inter.size.rows;
837
+ cell.c = cellModel.c;
838
+ cell.r = cellModel.r;
839
+ }
840
+ else {
841
+ dom.hideCell(cell);
842
+ continue;
843
+ }
844
+ }
845
+ else {
846
+ cell.colSpan = cellModel.colspan;
847
+ cell.rowSpan = cellModel.rowspan;
839
848
  }
840
849
  dom.showCell(cell);
841
850
  this.renderBodyCell(cellModel, cell);
@@ -852,7 +861,6 @@ let Table = class Table extends LitElement {
852
861
  row.style.display = 'none';
853
862
  }
854
863
  }
855
- this.mergeBodyCells(mergedCells);
856
864
  }
857
865
  scheduleRenderBodyCell(cellModel, cell) {
858
866
  if (this.cellRenderSchedules.has(cell)) {
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/ui/table.ts"],"names":[],"mappings":"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","sourcesContent":["import constants from '../constants';\nimport { dom, Expander, LevelExpander, LevelExpandEvent } from \"@omegagrid/core\";\nimport { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport {\n\tGridModel, Merge, Viewport, CellModel, RowModel, ColumnModel, ColumnHeaderModel, encodeRow, styleToCSStyle, CellRange, Style\n} from \"@omegagrid/grid-core\";\nimport { ElementCache } from \"./elementCache\";\nimport { tableStyles } from \"./table.styles\";\nimport { SortingArrow } from \"./sortingArrow\";\nimport { FilterLabel } from \"./filterLabel\";\nimport { Grid } from './grid';\nimport { applyStyle, getCellRenderer } from '../renderers';\n\nexport type TableCell = HTMLTableCellElement & {\n\tc: number,\n\tr: number\n}\n\nexport type TableRow = HTMLTableRowElement & {\n\tr: number,\n\texpander: Expander\n}\n\nexport type TableHeaderCell = TableCell;\nexport type TableRenderOptions = {vertical?: boolean, horizontal?: boolean};\n\nexport class TableEvent extends Event { }\n\n@customElement('og-table')\nexport class Table extends LitElement {\n\n\tstatic styles = [tableStyles];\n\n\tprivate _viewport: Viewport;\n\tprivate _viewportSize: {w: number, h: number};\n\tprivate _freezeLeft: number;\n\tprivate bCache: ElementCache;\n\tprivate hCache: ElementCache;\n\tpublic hRows: TableRow[];\n\tpublic bRows: TableRow[];\n\tpublic cols: HTMLTableColElement[];\n\n\t// map of model indexes on element indexes\n\tprivate _rowMap = new Map<number, number>();\n\tprivate _colMap = new Map<number, number>();\n\tprivate cornerDiv: HTMLDivElement;\n\n\tpublic grid: Grid;\n\n\t//#region reactive props\n\t@property({type: Object})\n\tmodel: GridModel;\n\n\t@property({type: Number, hasChanged: () => false})\n\trowOffset = 0;\n\n\t@property({type: Number, hasChanged: () => false})\n\tcolOffset = 0;\n\n\t@property({type: Number, reflect: true})\n\tzoom = 1;\n\n\t@property({type: Boolean, reflect: true})\n\tnogrid = false;\n\n\t@property({type: Boolean, reflect: true})\n\trenderAll = false;\n\t//#endregion\n\n\n\t//#region element references\n\tprivate tableRef = createRef<HTMLTableElement>();\n\tget table() { return this.tableRef.value }\n\n\tprivate colgroupRef = createRef<HTMLElement>();\n\tget colgroup() { return this.colgroupRef.value }\n\n\tprivate theadRef = createRef<HTMLElement>();\n\tget thead() { return this.theadRef.value }\n\n\tprivate tbodyRef = createRef<HTMLElement>();\n\tget tbody() { return this.tbodyRef.value }\n\t//#endregion\n\n\n\t//#region calculated props\n\tget colMap() { return this._colMap }\n\tget rowMap() { return this._rowMap }\n\n\tgetColumnByModelIndex = (c: number) => this.getColumnByGridIndex(this.colMap.get(c));\n\tgetColumnByGridIndex = (c: number) => this.colgroup.children[c + this.rowHeaderCount] as HTMLTableColElement;\n\tgetRowByModelIndex = (r: number) => this.bRows[this.rowMap.get(r)];\n\tgetRowByGridIndex = (r: number) => this.bRows[r];\n\tgetCellByGridIndex = (c: number, r: number) => this.bRows[r].children[c + this.rowHeaderCount] as TableCell;\n\tgetCellByModelIndex = (c: number, r: number) => this.getRowByModelIndex(r)?.children[this.colMap.get(c) + this.rowHeaderCount] as TableCell;\n\tgetCellByCellModel = (m: CellModel) => this.getCellByModelIndex(m.c, m.r);\n\tresetFreezeLeft = () : void => this._freezeLeft = null;\n\n\tget freezeLeft() { \n\t\tif (this._freezeLeft == null) {\n\t\t\tif (this.offsetWidth > 0) {\n\t\t\t\tlet w = 0;\n\t\t\t\tfor (let c = 0; c < this.model.options.freezeLeft; c++) {\n\t\t\t\t\tw += this.model.columns[c].width;\n\t\t\t\t}\n\t\t\t\tthis._freezeLeft = w < this.offsetWidth / 2 ? this.model.options.freezeLeft : 0;\n\t\t\t} else {\n\t\t\t\tthis._freezeLeft = this.model.options.freezeLeft;\n\t\t\t}\n\t\t}\n\t\treturn this._freezeLeft;\n\t}\n\n\t_highlightedColHeaderCells: TableHeaderCell[] = [];\n\t_highlightedRowHeaderCells: TableHeaderCell[] = [];\n\n\tpreviewZoom(zoom: number) {\n\t\tdom.zoomElement(this.table, zoom);\n\t}\n\n\thighlightColHeaderCells(columns: number[]) {\n\t\tif (!this.model.options.colLetters) return;\n\t\tthis._highlightedColHeaderCells.forEach(cell => cell.className = 'hlabel');\n\t\tthis._highlightedColHeaderCells = [];\n\t\tconst offset = this.rowHeaderCount;\n\t\tcolumns.forEach(c => {\n\t\t\tconst cell = this.hRows[this.model.hasColumnTreeEnabled ? 1 : 0].children[this.colMap.get(c) + offset] as TableHeaderCell;\n\t\t\tif (cell) {\n\t\t\t\tthis._highlightedColHeaderCells.push(cell);\n\t\t\t\tcell.className = 'hlabel selected';\n\t\t\t}\n\t\t});\n\t}\n\n\thighlightRowHeaderCells(rows: number[]) {\n\t\tif (!this.model.options.rowNumbers) return;\n\t\tif (this.model.rows.length == 0) return;\n\t\tthis._highlightedRowHeaderCells.forEach(cell => cell.className = 'vlabel');\n\t\tthis._highlightedRowHeaderCells = [];\n\t\trows.forEach(r => {\n\t\t\tconst cell = this.getRowByModelIndex(r)?.children[this.model.hasRowTreeEnabled ? 1 : 0] as TableHeaderCell;\n\t\t\tif (cell) {\n\t\t\t\tthis._highlightedRowHeaderCells.push(cell);\n\t\t\t\tcell.className = 'vlabel selected';\n\t\t\t}\n\t\t});\n\t}\n\n\tget columnHeaderCount() : number {\n\t\treturn this.model.headerCount \n\t\t\t+ (this.model.hasColumnTreeEnabled ? 1 : 0) \n\t\t\t+ (this.model.hasFilter ? 1 : 0)\n\t\t\t+ (this.model.options.colLetters ? 1 : 0);\n\t}\n\n\tget rowHeaderCount() { return (this.model.hasRowTreeEnabled ? 1 : 0) + (this.model.options.rowNumbers ? 1 : 0) }\n\n\tget renderRowCount() { \n\t\treturn this.renderAll \n\t\t\t? this.model.visibleRows.length \n\t\t\t: Math.round(Math.min(this.clientHeight / constants.MIN_ROW_HEIGHT, this.model.rows.length));\n\t}\n\n\tget renderColCount() { \n\t\treturn this.renderAll \n\t\t\t? this.model.visibleColumns.length + this.rowHeaderCount\n\t\t\t: Math.round(Math.min((this.clientWidth / constants.MIN_COL_WIDTH) || 5, this.model.columns.length + this.rowHeaderCount));\n\t}\n\n\tget totalHeaderHeight() : number {\n\t\tlet h = 0, r = 0;\n\n\t\tif (this.model.hasColumnTreeEnabled) {\n\t\t\th += this.treeHeaderHeight;\n\t\t\t++r;\n\t\t}\n\n\t\tif (this.model.options.colLetters) {\n\t\t\th += (this.thead.children[r] as HTMLElement).offsetHeight || this.model.options.rowHeight\n\t\t\t++r;\n\t\t}\n\n\t\tfor (let i = 0; i < this.model.headerCount; i++) {\n\t\t\th += (this.thead.children[r + i] as HTMLElement).offsetHeight || this.model.options.rowHeight;\n\t\t}\n\n\t\tif (this.model.hasFilter) h += this.model.options.rowHeight;\n\t\treturn h;\n\t}\n\n\tget treeHeaderWidth() { return this.model.hasRowTreeEnabled ? this.model.maxRowLevel * 15 + 20 : 0 }\n\tget treeHeaderHeight() {\n\t\treturn this.model.hasColumnTree ? this.model.maxColumnLevel * 15 + 20 : 0\n\t}\n\n\tget totalHeaderWidth() : number {\n\t\tlet w = 0;\n\t\tif (this.model.options.rowNumbers) w += constants.ROW_HEADER_WIDTH;\n\t\tw += this.treeHeaderWidth;\n\t\treturn w;\n\t}\n\n\tget viewportSize() : {w: number, h: number} {\n\t\tif (!this._viewportSize) {\n\t\t\tthis._viewportSize = this.renderAll ? {w: Infinity, h: Infinity} : {\n\t\t\t\tw: (this.clientWidth - this.totalHeaderWidth - constants.SLIDER_SIZE) / this.zoom,\n\t\t\t\th: (this.clientHeight - this.totalHeaderHeight - constants.SLIDER_SIZE) / this.zoom\n\t\t\t};\n\t\t}\n\t\treturn this._viewportSize;\n\t}\n\n\tget viewport() : Viewport {\n\t\tif (!this._viewport) {\n\t\t\tthis._viewport = this.model.getViewport(\n\t\t\t\t{c: this.colOffset, r: this.rowOffset}, \n\t\t\t\tthis.viewportSize, {\n\t\t\t\t\tt: this.model.options.freezeTop, \n\t\t\t\t\tl: this.freezeLeft, \n\t\t\t\t\tb: this.model.options.freezeBottom, \n\t\t\t\t\tr: this.model.options.freezeRight\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\treturn this._viewport;\n\t}\n\n\tget viewportRange() : CellRange {\n\t\treturn new CellRange(\n\t\t\tthis.viewport.columns[0].index, \n\t\t\tthis.viewport.rows[0].index, \n\t\t\tthis.viewport.columns[this.viewport.columns.length - 1].index, \n\t\t\tthis.viewport.rows[this.viewport.rows.length - 1].index\n\t\t);\n\t}\n\t//#endregion\n\n\tfindColumnIndexByOffset(offset: number) : number {\n\t\tlet w = 0;\n\t\tconst columns = this.colgroup.children;\n\t\tfor (let c = 0; c < columns.length; c++) {\n\t\t\tconst col = columns[c] as HTMLTableColElement;\n\t\t\tw += col.offsetWidth;\n\t\t\tif (w >= offset) return c;\n\t\t}\n\t\treturn -1;\n\t}\n\n\tfindRowByOffset(offset: number) : TableRow {\n\t\tconst rows = (offset > this.thead.offsetHeight ? this.tbody : this.thead).children;\n\t\tif (offset > this.thead.offsetHeight) offset -= this.thead.offsetHeight;\n\t\tlet h = 0;\n\t\tfor (let r = 0; r < rows.length; r++) {\n\t\t\tconst row = rows[r] as TableRow;\n\t\t\th += row.offsetHeight;\n\t\t\tif (h >= offset) return row;\n\t\t}\n\t\treturn null;\n\t}\n\n\tfindTableCellByOffset(x: number, y: number) : TableCell {\n\t\tx = x / this.zoom;\n\t\ty = y / this.zoom;\n\t\t\n\t\tconst row = this.findRowByOffset(y);\n\t\tconst column = this.findColumnIndexByOffset(x); // ?? this.colgroup.children.length - 1;\n\t\tconst cell = row && column > -1 ? row.children[column] as TableCell : null;\n\t\treturn cell && !dom.isHidden(cell) ? cell : null;\n\t}\n\n\t/**\n\t * Returns the nearest visible cell to the given offset and exact cell if availible\n\t * @param x \n\t * @param y \n\t * @returns \n\t */\n\tfindNearestTableCellByOffset(x: number, y: number) : [TableCell, TableCell?] {\n\t\tx = x / this.zoom;\n\t\ty = y / this.zoom;\n\t\tlet row: TableRow, c: number;\n\t\tconst exactRow = this.findRowByOffset(y);\n\t\tconst excactColumnIndex = this.findColumnIndexByOffset(x);\n\n\t\tif (y < 0) row = this.tbody.children[0] as TableRow;\n\t\telse if (y > this.tbody.offsetHeight + this.thead.offsetHeight)\n\t\t\trow = this.tbody.children[this.viewport.rows.length - 1] as TableRow;\n\t\telse row = exactRow;\n\t\t\n\t\tif (x < 0) c = this.rowHeaderCount;\n\t\telse if (x >= this.tbody.offsetWidth) c = this.viewport.columns.length + this.rowHeaderCount - 1;\n\t\telse c = excactColumnIndex\n\n\t\tlet cell = row && c > -1 ? row.children[c] as TableCell : null;\n\t\t// find nearest visible cell\n\t\twhile (cell && dom.isHidden(cell)) cell = cell.previousElementSibling as TableCell;\n\n\t\tconst exactCell = exactRow && excactColumnIndex > -1 ? exactRow.children[excactColumnIndex] as TableCell : null;\n\t\treturn [cell, exactCell && !dom.isHidden(exactCell) ? exactCell : null];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\t\n\trender = () => html`\n\t\t<style>\n\t\t\ttable {\n\t\t\t\tfont-size: ${this.model?.options.fontSize || 12}px;\n\t\t\t}\n\n\t\t\ttable tr {\n\t\t\t\tline-height: ${(this.model?.options.rowHeight || 22) - 1}px;\n\t\t\t}\n\t\t</style>\n\n\t\t<table ${ref(this.tableRef)}\n\t\t\tclass=\"${this.model?.options.grid ? '' : 'nogrid'}\"\n\t\t\tstyle=\"transform: scale(${this.zoom})\">\n\t\t\t<colgroup ${ref(this.colgroupRef)}></colgroup>\n\t\t\t<thead ${ref(this.theadRef)}></thead>\n\t\t\t<tbody ${ref(this.tbodyRef)}></tbody>\n\t\t</table>\n\t`;\n\n\twillUpdate() {\n\t\tthis._viewport = null;\n\t\tthis._viewportSize = null;\n\t\tif (this.model) {\n\t\t\tthis.clearHeaderCache();\n\t\t\tthis.clearBodyCache();\n\t\t}\n\t}\n\t\n\tupdated() {\n\t\tif (this.model) {\n\t\t\tthis.createColumns();\n\t\t\tthis.createHeaderRows();\n\t\t\tthis.createBodyRows();\n\t\t\tthis.renderCells();\n\t\t}\n\t}\n\t\n\tclearHeaderCache = () => {\n\t\tthis.resetFreezeLeft();\n\t\tthis.hCache = new ElementCache(this.model.columns.length, this.columnHeaderCount);\n\t\tthis.hCache.disabled = !this.model.options.cellCache;\n\t}\n\n\tclearBodyCache = () => {\n\t\tthis.bCache = new ElementCache(this.model.columns.length, this.model.rows.length);\n\t\tthis.bCache.disabled = !this.model.options.cellCache;\n\t}\n\n\trefresh() {\n\t\tthis.clearHeaderCache();\n\t\tthis.clearBodyCache();\n\t\tthis.requestUpdate();\n\t}\n\t\n\tcreateColumns() {\n\t\tthis._freezeLeft = null;\n\t\tconst colCount = this.renderColCount;\n\t\tif (!this.cols || this.cols.length != colCount) {\n\t\t\tthis.cols = new Array(colCount);\n\t\t\tfor (let c = 0; c < colCount; c++) {\n\t\t\t\tthis.cols[c] = dom.createElement('col');\n\t\t\t\tthis.cols.forEach(() => this.colgroup.appendChild(this.cols[c]));\n\t\t\t}\n\t\t}\n\t}\n\n\tcreateHeaderRows() {\n\t\tconst rowCount = this.columnHeaderCount\n\t\tconst colCount = this.renderColCount;\n\t\tdom.empty(this.thead);\n\n\t\tif (!this.hRows || this.hRows.length != rowCount || !this.hRows[0] || this.hRows[0].children.length != colCount) {\n\t\t\tthis.hRows = new Array(rowCount);\n\t\t\tfor (let r = 0; r < rowCount; r++) {\n\t\t\t\tthis.hRows[r] = dom.createElement('tr');\n\t\t\t\tfor (let c = 0; c < colCount; c++) {\n\t\t\t\t\tthis.hRows[r].appendChild(dom.createElement('th'));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdom.empty(this.thead);\n\t\tthis.hRows.forEach(row => this.thead.appendChild(row));\n\t}\n\n\tcreateBodyRows() {\n\t\tconst rowCount = this.renderRowCount;\n\t\tconst colCount = this.renderColCount;\n\t\tconst offset = this.rowHeaderCount;\n\t\t\n\t\tif (!this.bRows || this.bRows.length == 0 || this.bRows.length != rowCount || this.bRows[0].children.length != colCount) {\n\t\t\tif (rowCount == 0 && this.grid.options.emptyPlaceholder) {\n\t\t\t\tthis.bRows = [dom.createElement('tr')];\n\t\t\t\tthis.bRows[0].appendChild(dom.createElement('td'));\n\t\t\t} else {\n\t\t\t\tthis.bRows = new Array(rowCount);\n\t\t\t\tfor (let r = 0; r < rowCount; r++) {\n\t\t\t\t\tthis.bRows[r] = dom.createElement('tr');\n\t\t\t\t\t\n\t\t\t\t\tfor (let c = 0; c < offset; c++) {\n\t\t\t\t\t\tthis.bRows[r].appendChild(dom.createElement('th'));\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfor (let c = offset; c < colCount; c++) {\n\t\t\t\t\t\tthis.bRows[r].appendChild(dom.createElement('td'));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tdom.empty(this.tbody);\n\t\tthis.bRows.forEach(row => this.tbody.appendChild(row));\n\t}\n\n\trenderCells(update: TableRenderOptions = {vertical: true, horizontal: true}) {\n\t\tif (this.table && (update.vertical || update.horizontal)) {\n\t\t\tthis._viewport = null;\n\t\t\tthis.tbody.remove();\n\t\t\t\n\t\t\tif (update.horizontal) this.renderHeader();\n\t\t\tif (this.model.rows.length > 0) {\n\t\t\t\tthis.renderBody();\n\t\t\t\tif (update.vertical) this.renderRowTree();\n\t\t\t\tthis.table.appendChild(this.tbody);\n\t\t\t} else if (this.model.options.emptyPlaceholder) {\n\t\t\t\tthis.renderEmptyBody();\n\t\t\t\tthis.table.appendChild(this.tbody);\n\t\t\t}\n\n\t\t\tthis.dispatchEvent(new TableEvent('rendercells'));\n\t\t}\n\t}\n\n\trenderEmptyBody() {\n\t\tconst cell = this.bRows[0].children[0] as TableCell;\n\t\tcell.innerHTML = 'no data';\n\t\tcell.className = 'empty-placeholder';\n\t\tcell.colSpan = this.viewport.columns.length + this.rowHeaderCount;\n\t}\n\n\t//#region render header rows\n\trenderHeader() {\n\t\tlet column: ColumnModel;\n\t\tthis.colMap.clear();\n\t\tconst offset = this.rowHeaderCount;\n\t\tconst viewport = this.viewport;\n\n\t\tif (this.model.hasRowTreeEnabled) {\n\t\t\tdom.setSize(this.colgroup.children[0] as HTMLElement, {w: this.treeHeaderWidth}, true);\n\t\t}\n\n\t\tif (this.model.options.rowNumbers) {\n\t\t\tdom.setSize(this.colgroup.children[offset - 1] as HTMLElement, {w: constants.ROW_HEADER_WIDTH}, true);\n\t\t}\n\n\t\tfor (let c = 0; c < viewport.columns.length; c++) {\n\t\t\tcolumn = viewport.columns[c];\n\n\t\t\tif (this.model.autofitColumns.has(column.index)) {\n\t\t\t\tthis.grid.rendering.autofitColumn(column.index, false, false);\n\t\t\t\tthis.model.autofitColumns.delete(column.index); // use autofit only once for performance reasons\n\t\t\t}\n\n\t\t\tthis.colMap.set(column.index, c);\n\t\t\tdom.setSize(this.colgroup.children[c + offset] as HTMLElement, {w: column.width});\n\t\t\tdom.setMinSize(this.colgroup.children[c + offset] as HTMLElement, {w: column.width});\n\t\t\tdom.setMaxSize(this.colgroup.children[c + offset] as HTMLElement, {w: column.width});\n\t\t}\n\t\t\n\t\tlet r = 0;\n\t\tif (this.model.hasColumnTreeEnabled) {\n\t\t\tthis.renderHeaderRowTree(this.hRows[r], r);\n\t\t\t++r;\n\t\t}\n\t\t\n\t\tif (this.model.options.colLetters) {\n\t\t\tdom.setSize(this.hRows[r], {h: this.model.options.rowHeight});\n\t\t\tthis.renderHeaderRowLetters(this.hRows[r], r);\n\t\t\t++r;\n\t\t}\n\t\t\n\t\tfor (let i = 0; i < this.model.headerCount; i++) {\n\t\t\tthis.renderHeaderRowLabels(this.hRows[r + i], r + i, i);\n\t\t}\n\n\t\tr += this.model.headerCount;\n\t\t\n\t\tif (this.model.hasFilter) {\n\t\t\tdom.setSize(this.hRows[r], {h: this.model.options.rowHeight});\n\t\t\tthis.renderHeaderRowFilters(this.hRows[r], r);\n\t\t}\n\t}\n\n\trenderHeaderRowLetters(tr: HTMLTableRowElement, index: number) {\n\t\tlet cell: TableHeaderCell;\n\t\tlet c2: number;\n\t\tconst viewport = this.viewport;\n\t\tconst r = index - this.columnHeaderCount;\n\t\tlet offset = 0; //this.rowHeaderCount;\n\n\t\tdom.setSize(tr, {h: this.model.options.rowHeight});\n\n\t\tif ((this.model.hasRowTree || this.model.options.rowNumbers) && !this.model.hasColumnTreeEnabled) {\n\t\t\tcell = tr.children[offset] as TableCell;\n\t\t\tcell.colSpan = this.rowHeaderCount;\n\t\t\tcell.rowSpan = this.columnHeaderCount;\n\n\t\t\tconst c = offset - this.rowHeaderCount;\n\t\t\tconst cornerCell = this.model.options.levelButtonCell;\n\t\t\tif (!cornerCell || (r == cornerCell.r && c == cornerCell.c)) {\n\t\t\t\tthis.renderHeaderRowCornerCell(cell);\n\t\t\t}\n\n\t\t\toffset++;\n\t\t}\n\n\t\tfor (let i = offset; i < this.rowHeaderCount; i++) {\n\t\t\tdom.hideCell(tr.children[i] as TableCell);\n\t\t\toffset++;\n\t\t}\n\t\t\n\t\tfor (let c = offset; c < tr.children.length; c++) {\n\t\t\tc2 = c - offset;\n\t\t\tcell = tr.children[c] as TableHeaderCell;\n\t\t\tcell.className = 'hlabel';\n\t\t\tif (viewport.columns.length > c2) {\n\t\t\t\tcell.innerHTML = viewport.columns[c2].address;\n\t\t\t\tcell.c = viewport.columns[c2].index;\n\t\t\t\tdom.showCell(cell);\n\t\t\t} else {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t}\n\t\t}\n\t}\n\n\trenderHeaderRowTree(tr: HTMLTableRowElement, index: number) {\n\t\tif (!this.model.hasColumnTreeEnabled) return;\n\n\t\tlet cell: TableCell;\n\t\tlet offset = 0;\n\t\tlet c2: number;\n\t\tconst r = index - this.columnHeaderCount;\n\t\tconst viewport = this.viewport;\n\t\tconst rowNumbers = this.model.options.rowNumbers;\n\t\tconst rowTree = this.model.hasRowTreeEnabled;\n\n\t\tdom.setSize(tr, {h: this.treeHeaderHeight});\n\n\t\tcell = tr.children[offset] as TableCell;\n\t\tif (!cell) return;\n\t\tcell.rowSpan = rowNumbers || rowTree ? this.columnHeaderCount : 1;\n\t\tcell.colSpan = this.rowHeaderCount;\n\t\t\n\t\tconst c = offset - this.rowHeaderCount;\n\t\tconst cornerCell = this.model.options.levelButtonCell;\n\t\tlet cornerCellColumn = null;\n\t\tif ((!cornerCell && (rowNumbers || rowTree)) || (cornerCell && r == cornerCell.r && c == cornerCell.c)) {\n\t\t\tcornerCellColumn = c;\n\t\t\tthis.renderHeaderRowCornerCell(cell);\n\t\t}\n\n\t\tif (rowNumbers || rowTree) {\n\t\t\t++offset;\n\t\t\tif (rowTree) {\n\t\t\t\tcell = tr.children[offset] as TableCell;\n\t\t\t\tcell.innerHTML = '';\n\t\t\t\tdom.hideCell(cell);\n\t\t\t\t++offset;\n\t\t\t}\n\t\t}\n\n\t\tfor (let c = offset; c < tr.children.length; c++) {\n\t\t\tc2 = c - offset;\n\t\t\tcell = tr.children[c] as TableCell;\n\t\t\tif (viewport.columns.length > c2) {\n\t\t\t\tif (cornerCellColumn != c) {\n\t\t\t\t\tcell.innerHTML = '';\n\t\t\t\t\tcell.className = 'htree';\n\t\t\t\t\tthis.renderHeaderRowTreeCell(tr, index, viewport.columns[c2], cell);\n\t\t\t\t}\n\t\t\t\tdom.showCell(cell);\n\t\t\t} else {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t}\n\t\t}\n\t}\n\n\trenderHeaderRowTreeCell(tr: HTMLTableRowElement, rIndex: number, column: ColumnModel, th: HTMLTableCellElement) {\n\t\tlet div = this.hCache.get(column.index, rIndex) as HTMLDivElement & {expander: Expander, expanderLine: HTMLDivElement};\n\t\tif (!div) {\n\t\t\tdiv = dom.createElement('div');\n\t\t\tthis.hCache.set(column.index, rIndex, div);\n\t\t\n\t\t\tconst colWidth = column.width + 1;\n\t\t\tconst treeRowHeight = this.treeHeaderHeight / this.model.maxColumnLevel;\n\n\t\t\tif (column.hasChildren) {\n\t\t\t\tconst expander = new Expander();\n\t\t\t\texpander.addEventListener('toggle', () => this.grid.rendering.toggleColumn(column.index));\n\n\t\t\t\tdiv.expander = expander;\n\t\t\t\tdiv.appendChild(expander);\n\t\t\t\t\n\t\t\t\tdom.setPosition(expander, {\n\t\t\t\t\tl: colWidth / 2 - constants.EXPANDER_SIZE / 2,\n\t\t\t\t\tt: column.level * treeRowHeight + treeRowHeight / 2 - constants.EXPANDER_SIZE / 2\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tdiv.expanderLine = this.createExpanderLine('h');\n\t\t\t\tdiv.appendChild(div.expanderLine);\n\n\t\t\t\tdom.setPosition(div.expanderLine, {\n\t\t\t\t\tl: this.model.options.columnTree.reversed ? 0 : (colWidth / 2),\n\t\t\t\t\tt: column.level * treeRowHeight + treeRowHeight / 2\n\t\t\t\t});\n\n\t\t\t\tdom.setSize(div.expanderLine, {\n\t\t\t\t\th: treeRowHeight / 2,\n\t\t\t\t\tw: colWidth / 2 + 1\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tif (column.hasParent) {\n\t\t\t\tlet parent = column as ColumnModel;\n\t\t\t\twhile (parent.hasParent) {\n\t\t\t\t\tparent = parent.parent as ColumnModel;\n\t\t\t\t\tconst line = this.createExpanderLine('h');\n\t\t\t\t\tdiv.appendChild(line);\n\n\t\t\t\t\tdom.setSize(line, {\n\t\t\t\t\t\th: treeRowHeight / 2,\n\t\t\t\t\t\tw: colWidth - 1\n\t\t\t\t\t});\n\n\t\t\t\t\tdom.setPosition(line, {\n\t\t\t\t\t\tl: 0,\n\t\t\t\t\t\tt: parent.level * treeRowHeight + treeRowHeight / 2\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (div.expander) div.expander.state = column.collapsed ? 'closed' : 'open';\n\t\tth.appendChild(div);\n\t}\n\n\tcreateExpanderLine(direction: string) {\n\t\tconst expanderLine = dom.createElement<HTMLDivElement>('div');\n\t\texpanderLine.className = `${direction}tree-line`;\n\t\treturn expanderLine;\n\t}\n\n\trenderHeaderRowLabels(tr: HTMLTableRowElement, rIndex: number, hIndex: number) {\n\t\tlet colModel: ColumnModel;\n\t\tlet cell: TableHeaderCell;\n\t\tlet header: ColumnHeaderModel;\n\t\tlet offset = 0;\n\t\tlet c2: number;\n\t\tconst viewport = this.viewport;\n\t\tconst r = rIndex - this.columnHeaderCount;\n\t\tconst cornerCell = this.model.options.levelButtonCell;\n\t\tlet rowHeight: number;\n\n\t\tif (this.model.hasRowTreeEnabled) {\n\t\t\tcell = tr.children[offset] as TableHeaderCell;\n\t\t\tcell.innerHTML = '';\n\t\t\tif (this.model.hasColumnTreeEnabled || this.model.options.colLetters || hIndex > 0) {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t} else {\n\t\t\t\tcell.rowSpan = this.columnHeaderCount;\n\t\t\t\tcell.colSpan = this.rowHeaderCount;\n\t\t\t\t\n\t\t\t\tthis.renderHeaderRowCornerCell(cell);\n\t\t\t}\n\t\t\t++offset;\n\t\t}\n\n\t\tif (this.model.options.rowNumbers) {\n\t\t\tcell = tr.children[offset] as TableHeaderCell;\n\t\t\tcell.innerHTML = '';\n\t\t\tif (this.model.hasRowTreeEnabled || this.model.options.colLetters || this.model.hasColumnTreeEnabled || hIndex > 0) {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t} else {\n\t\t\t\tcell.rowSpan = this.columnHeaderCount;\n\t\t\t\tcell.colSpan = this.rowHeaderCount;\n\t\t\t\tthis.renderHeaderRowCornerCell(cell);\n\t\t\t}\n\t\t\t++offset;\n\t\t}\n\n\t\tfor (let c = offset; c < tr.children.length; c++) {\n\t\t\tc2 = c - offset;\n\t\t\tcell = tr.children[c] as TableHeaderCell;\n\t\t\tcell.className = 'hlabel';\n\t\t\tcell.innerHTML = '';\n\t\t\t\n\t\t\tif (viewport.columns.length > c2) {\n\t\t\t\tcolModel = viewport.columns[c2];\n\t\t\t\theader = colModel.header[hIndex];\n\t\t\t\tif (header.height) rowHeight = Math.max(header.height, rowHeight || 0);\n\n\t\t\t\tcell.colSpan = 1;\n\t\t\t\tcell.rowSpan = 1;\n\t\t\t\tcell.c = colModel.index;\n\t\t\t\tcell.r = hIndex;\n\n\t\t\t\tif (header?.hidden) {\n\t\t\t\t\tif (c2 == this.freezeLeft) {\n\t\t\t\t\t\tlet prevModel = colModel.prevVisible;\n\t\t\t\t\t\tlet c3 = 0;\n\t\t\t\t\t\twhile (prevModel && prevModel.header[hIndex]?.hidden) {\n\t\t\t\t\t\t\tprevModel = prevModel.prevVisible;\n\t\t\t\t\t\t\t++c3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (prevModel && prevModel.header[hIndex].cs) {\n\t\t\t\t\t\t\tdom.showCell(cell);\n\t\t\t\t\t\t\tcell.colSpan = prevModel.header[hIndex].cs - c3 - 1;\n\t\t\t\t\t\t\tcell.rowSpan = prevModel.header[hIndex].rs || 1;\n\t\t\t\t\t\t\tthis.renderHeaderRowLabelCell(cell, prevModel, rIndex, hIndex);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdom.hideCell(cell);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdom.hideCell(cell);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (colModel.header && colModel.header[hIndex]) {\n\t\t\t\t\t\tconst cs = colModel.header[hIndex].cs || 1;\n\t\t\t\t\t\tcell.colSpan = cs > 1 ? colModel.calculateRealColspan(cs) : 1;\n\t\t\t\t\t\tcell.rowSpan = colModel.header[hIndex].rs || 1;\n\t\t\t\t\t}\n\t\t\t\t\tdom.showCell(cell);\n\t\t\t\t\tthis.renderHeaderRowLabelCell(cell, colModel, rIndex, hIndex);\n\n\t\t\t\t\tif (cornerCell && cornerCell.r == r && cornerCell.c == colModel.index) {\n\t\t\t\t\t\tthis.renderHeaderRowCornerCell(cell);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t}\n\t\t}\n\n\t\tdom.setSize(tr, {h: rowHeight ?? this.model.options.rowHeight});\n\t}\n\n\trenderHeaderRowLabelCell(th: TableHeaderCell, column: ColumnModel, rIndex: number, hIndex: number) {\n\t\tlet div = this.hCache.get(column.index, rIndex) as HTMLDivElement & {\n\t\t\tsortingArrow?: SortingArrow,\n\t\t\texpander?: Expander,\n\t\t};\n\t\tconst h = column.header[hIndex];\n\t\tif (!div) {\n\t\t\tdiv = dom.createElement('div');\n\t\t\tif (!h) div.innerHTML = '';\n\t\t\telse if (h.html) div.innerHTML = h.label ?? \"\";\n\t\t\telse div.innerText = h.label ?? \"\";\n\n\t\t\tif (h && h._style != null) {\n\t\t\t\tapplyStyle(div, styleToCSStyle(this.model.styles.get(h._style)));\n\t\t\t}\n\n\t\t\tthis.hCache.set(column.index, rIndex, div);\n\t\t}\n\n\t\tif (\n\t\t\tthis.model.options.columnHeaderTreeButtons \n\t\t\t&& column.hasChildren \n\t\t\t&& hIndex == column.level\n\t\t) {\n\t\t\tlet expander = div.expander;\n\t\t\tif (!expander) {\n\t\t\t\texpander = new Expander();\n\t\t\t\texpander.addEventListener('toggle', () => this.grid.rendering.toggleColumn(column.index));\n\t\t\t\tdiv.expander = expander;\n\t\t\t\tdiv.prepend(expander);\n\t\t\t\tdom.setPosition(expander, {l: 4, t: 4});\n\t\t\t}\n\t\t\texpander.state = column.collapsed ? 'closed' : 'open';\n\t\t}\n\n\t\tif (column.sorting && hIndex == column.header.length - 1) {\n\t\t\tth.className += ' sort';\n\t\t\tif (!div.sortingArrow) {\n\t\t\t\tdiv.sortingArrow = new SortingArrow();\t\t\t\t\t\n\t\t\t\tdiv.appendChild(div.sortingArrow);\n\t\t\t\tdom.setPosition(div.sortingArrow, {t: 0, r: 5});\n\t\t\t}\n\t\t\tdiv.sortingArrow.sortSettings = this.model.sorting.get(column.index);\n\t\t}\n\n\t\tth.appendChild(div);\n\t}\n\n\trenderHeaderRowFilters(tr: HTMLTableRowElement, index: number) {\n\t\tlet cell: TableHeaderCell;\n\t\tlet offset = 0;\n\t\tlet c2: number;\n\t\tconst viewport = this.viewport;\n\n\t\tif (this.model.hasRowTreeEnabled) {\n\t\t\tcell = tr.children[offset] as TableHeaderCell;\n\t\t\tcell.innerHTML = '';\n\t\t\tif (this.model.columnHeaderCount > 1) {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t} else {\n\t\t\t\tcell.colSpan = this.model.columnHeaderCount;\n\t\t\t}\n\t\t\t++offset;\n\t\t}\n\n\t\tif (this.model.options.rowNumbers) {\n\t\t\tcell = tr.children[offset] as TableHeaderCell;\n\t\t\tcell.innerHTML = '';\n\t\t\t\n\t\t\tif (\n\t\t\t\tthis.model.hasRowTreeEnabled || this.model.options.colLetters \n\t\t\t\t|| this.model.hasColumnTreeEnabled || this.model.headerCount > 0\n\t\t\t) {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t} else {\n\t\t\t\tcell.rowSpan = this.columnHeaderCount;\n\t\t\t\tcell.colSpan = this.rowHeaderCount;\n\t\t\t\tthis.renderHeaderRowCornerCell(cell);\n\t\t\t}\n\t\t\t++offset;\n\t\t}\n\n\t\tfor (let c = offset; c < tr.children.length; c++) {\n\t\t\tc2 = c - offset;\n\t\t\tcell = tr.children[c] as TableCell;\n\t\t\tif (viewport.columns.length > c2) {\n\t\t\t\tdom.showCell(cell);\n\t\t\t\tconst column = viewport.columns[c2];\n\t\t\t\tif (column.hasFilter) this.renderHeaderRowFilterCell(tr, index, column, cell);\n\t\t\t\telse cell.innerHTML = '';\n\t\t\t} else {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t}\n\t\t}\n\t}\n\n\trenderHeaderRowFilterCell(tr: HTMLTableRowElement, rIndex: number, column: ColumnModel, th: TableHeaderCell) {\n\t\tth.innerHTML = '';\n\t\tth.className = 'filter';\n\t\tth.c = column.index;\n\n\t\tlet div = this.hCache.get(column.index, rIndex) as HTMLDivElement & {filter: FilterLabel};\n\t\tif (!div) {\n\t\t\tdiv = dom.createElement('div');\n\t\t\tdiv.filter = dom.createElement<FilterLabel>('og-filter-label');\n\t\t\tdiv.appendChild(div.filter);\n\t\t\tthis.hCache.set(column.index, rIndex, div);\n\t\t}\n\t\t\n\t\tconst term = this.grid.filtering.filter.get(column.index)?.term;\n\t\tdiv.filter.value = Array.isArray(term) ? term.map(item => item.value ?? item.key).join(', ') : term;\n\t\tth.appendChild(div);\n\t}\n\n\trenderHeaderRowCornerCell(th: TableCell) {\n\t\tthis.cornerDiv = dom.createElement('div');\n\t\tconst treeColWidth = Math.max(\n\t\t\t(this.treeHeaderWidth || (constants.EXPANDER_SIZE + 2)) / (this.model.maxRowLevel + 1),\n\t\t\tconstants.EXPANDER_SIZE + 2\n\t\t);\n\t\t\n\t\tif (this.model.hasRowTree) {\n\t\t\tfor (let l = 0; l <= this.model.maxRowLevel; l++) {\n\t\t\t\tconst expander = new LevelExpander();\n\t\t\t\texpander.level = l;\n\t\t\t\tthis.cornerDiv.appendChild(expander);\n\t\t\t\tdom.setPosition(expander, {\n\t\t\t\t\tl: l * treeColWidth + treeColWidth / 2 - constants.EXPANDER_SIZE / 2,\n\t\t\t\t\tb: 3\n\t\t\t\t});\n\t\t\t\texpander.addEventListener('mousedown', e => e.stopPropagation());\n\t\t\t\texpander.addEventListener('toggle', (e: LevelExpandEvent) => {\n\t\t\t\t\tthis.model.columns.filter(col => col.levelButtons).forEach(col => this.bCache.deleteColumn(col.index));\n\t\t\t\t\tthis.grid.rendering.setRowExpandLevel(e.level);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (this.model.hasColumnTree) {\n\t\t\tconst treeRowHeight = (this.model.hasColumnTree ? this.treeHeaderHeight : th.clientHeight) / (this.model.maxColumnLevel + 1);\n\t\t\tconst vertical = (this.model.maxColumnLevel * 15 + 20) <= th.clientHeight;\n\t\t\tfor (let l = 0; l <= this.model.maxColumnLevel; l++) {\n\t\t\t\tconst expander = new LevelExpander();\n\t\t\t\texpander.level = l;\n\t\t\t\tthis.cornerDiv.appendChild(expander);\n\t\t\t\tdom.setPosition(expander, vertical ? {\n\t\t\t\t\tt: l * treeRowHeight + treeRowHeight / 2 - constants.EXPANDER_SIZE / 2,\n\t\t\t\t\tr: 3\n\t\t\t\t} : {\n\t\t\t\t\tr: l * treeColWidth + treeColWidth / 2 - constants.EXPANDER_SIZE / 2,\n\t\t\t\t\tb: 3\n\t\t\t\t});\n\t\t\t\texpander.addEventListener('mousedown', e => e.stopPropagation());\n\t\t\t\texpander.addEventListener('toggle', (e: LevelExpandEvent) => {\n\t\t\t\t\tthis.grid.rendering.setColumnExpandLevel(e.level);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\tdom.empty(th);\n\t\tth.appendChild(this.cornerDiv);\n\t}\n\t//#endregion\n\n\n\tcellRenderSchedules = new WeakMap<TableCell, number>();\n\n\n\t//#region render body rows\n\trenderBody() {\n\t\tlet row: HTMLTableRowElement;\n\t\tlet cell: TableCell;\n\t\tlet rowModel: RowModel;\n\t\tlet rIndex: number;\n\t\tlet cIndex: number;\n\t\tlet colModel: ColumnModel;\n\t\tlet cellModel: CellModel;\n\t\t//let hiddenRowCells: Map<number, Merge>;\n\t\t// let merge: Merge;\n\t\t\n\t\t// const freezeLeft = this.freezeLeft;\n\t\t// const freezeTop = this.model.options.freezeTop || 0;\n\t\tconst offset = this.rowHeaderCount;\n\t\tconst rowNumbers = this.model.options.rowNumbers;\n\t\tconst viewport = this.viewport;\n\t\tconst mergedCells: Merge[] = [];\n\t\t//const hiddenCells = this.model.hiddenCells;\n\t\tthis.rowMap.clear();\n\n\t\tfor (let r = 0; r < this.bRows.length; r++) {\n\t\t\trow = this.bRows[r];\n\t\t\tif (r < viewport.rows.length) {\n\t\t\t\trowModel = viewport.rows[r];\n\t\t\t\trIndex = rowModel.index;\n\n\t\t\t\tif (this.model.autofitRows.has(rIndex)) {\n\t\t\t\t\tthis.grid.rendering.autofitRow(rIndex, false, false);\n\t\t\t\t\tthis.model.autofitRows.delete(rIndex); // use autofit only once for performance reasons\n\t\t\t\t}\n\n\t\t\t\tdom.setSize(row, {h: rowModel.height});\n\t\t\t\t\n\t\t\t\tif (rowModel.height < this.model.options.rowHeight) {\n\t\t\t\t\tdom.setLineHeight(row, rowModel.height);\n\t\t\t\t}\n\n\t\t\t\tthis.rowMap.set(rIndex, r);\n\n\t\t\t\tif (rowNumbers) {\n\t\t\t\t\tcell = row.children[offset - 1] as TableCell;\n\t\t\t\t\tcell.className = 'vlabel';\n\t\t\t\t\tcell.r = rIndex;\n\t\t\t\t\tcell.c = -1;\n\t\t\t\t\tcell.innerHTML = `<div>${encodeRow(rIndex)}</div>`;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//hiddenRowCells = hiddenCells.get(rIndex);\n\t\t\t\tfor (let c = offset; c < row.children.length; c++) {\n\t\t\t\t\tcell = row.children[c] as TableCell;\n\t\t\t\t\tif (c - offset < viewport.columns.length) {\n\t\t\t\t\t\tcolModel = viewport.columns[c - offset];\n\t\t\t\t\t\tcIndex = colModel.index;\n\n\t\t\t\t\t\tcell.r = rIndex;\n\t\t\t\t\t\tcell.c = cIndex;\n\t\t\t\t\t\tcell.colSpan = 1; //cellModel.colspan;\n\t\t\t\t\t\tcell.rowSpan = 1; //cellModel.rowspan;\n\n\t\t\t\t\t\t// merge = hiddenRowCells && hiddenRowCells.get(cIndex);\n\t\t\t\t\t\t// if (merge) {\n\t\t\t\t\t\t// \tif (c == offset + freezeLeft) { // || r == freezeTop) {\n\t\t\t\t\t\t// \t\tcIndex = merge.c;\n\t\t\t\t\t\t// \t\trIndex = merge.r;\n\t\t\t\t\t\t// \t\tmergedCells.push(merge);\n\t\t\t\t\t\t// \t} else {\n\t\t\t\t\t\t// \t\tdom.hideCell(cell);\n\t\t\t\t\t\t// \t\tcontinue;\n\t\t\t\t\t\t// \t}\n\t\t\t\t\t\t// }\n\n\t\t\t\t\t\tcellModel = rowModel.cell(cIndex);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (cellModel.colspan > 1 || cellModel.rowspan > 1) {\n\t\t\t\t\t\t\tmergedCells.push({r: r, c: c, cs: cellModel.colspan, rs: cellModel.rowspan});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdom.showCell(cell);\n\t\t\t\t\t\tthis.renderBodyCell(cellModel, cell);\n\t\t\t\t\t\t// this.scheduleRenderBodyCell(cellModel, cell);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdom.hideCell(cell);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.style.display = 'table-row';\n\t\t\t\trow.className = rowModel.filterState > 1 ? `filtered` : '';\n\t\t\t} else {\n\t\t\t\trow.style.display = 'none';\n\t\t\t}\n\t\t}\n\n\t\tthis.mergeBodyCells(mergedCells);\n\t}\n\n\tscheduleRenderBodyCell(cellModel: CellModel, cell: TableCell) {\n\t\tif (this.cellRenderSchedules.has(cell)) {\n\t\t\twindow.clearTimeout(this.cellRenderSchedules.get(cell));\n\t\t\tthis.cellRenderSchedules.delete(cell);\n\t\t}\n\t\tthis.cellRenderSchedules.set(cell, window.setTimeout(() => this.renderBodyCell(cellModel, cell)));\n\t}\n\n\tfixCellBorders(cell: TableCell, style: Style) {\n\t\tif (style.bottom?.style == 'none') {\n\t\t\tcell.style.borderBottomColor = 'transparent';\n\t\t}\n\t\tif (style.top?.style == 'none') {\n\t\t\tcell.style.borderTop = 'transparent';\n\t\t}\n\n\t\tif (style.right?.style == 'none') {\n\t\t\tcell.style.borderRight = 'transparent';\n\t\t}\n\t\tif (style.left?.style == 'none') {\n\t\t\tcell.style.borderLeft = 'transparent';\n\t\t}\n\t}\n\n\trenderBodyCell(cellModel: CellModel, cell?: TableCell) {\n\t\tconst force = !cell;\n\t\tcell = cell || this.getCellByCellModel(cellModel);\n\t\tif (cell) {\n\t\t\tlet div = (force ? null : this.bCache.get(cellModel.c, cellModel.r)) as HTMLDivElement;\n\t\t\tif (!div) {\n\t\t\t\tdiv = dom.createElement('div');\n\t\t\t\tgetCellRenderer(cellModel).call(this, div, cellModel);\n\t\t\t\tthis.bCache.set(cellModel.c, cellModel.r, div);\n\t\t\t}\n\n\t\t\tif (this.renderAll) {\n\t\t\t\t// do this only when rendering all cells for performance reasons, good for exports to raw html\n\t\t\t\tconst s = cellModel.composedStyle;\n\t\t\t\tif (s) this.fixCellBorders(cell, s);\n\t\t\t}\n\n\t\t\tdom.empty(cell);\n\t\t\tcell.appendChild(div);\n\t\t} else {\n\t\t\tthis.bCache.delete(cellModel.c, cellModel.r);\n\t\t}\n\t}\n\n\tmergeBodyCells(mergedCells: Merge[]) {\n\t\tlet cell: TableCell;\n\t\tconst skipSet = new Set<TableCell>();\n\t\tfor (const m of mergedCells) {\n\t\t\tcell = this.bRows[m.r].cells[m.c] as TableCell;\n\t\t\tif (!cell || skipSet.has(cell)) continue;\n\t\t\tfor (let r = m.r; r < m.r + m.rs; r++) {\n\t\t\t\tfor (let c = m.c; c < m.c + m.cs; c++) {\n\t\t\t\t\tcell = this.bRows[r].cells[c] as TableCell;\n\t\t\t\t\tif (!cell) continue;\n\t\t\t\t\tif (r == m.r && c == m.c) {\n\t\t\t\t\t\tcell.colSpan = m.cs;\n\t\t\t\t\t\tcell.rowSpan = m.rs;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tskipSet.add(cell);\n\t\t\t\t\t\tdom.hideCell(cell);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\n\t\t}\n\t}\n\t\n\trenderRowTree() {\n\t\tif (!this.model.hasRowTreeEnabled) return;\n\t\tlet cell: TableCell;\n\t\tconst viewport = this.viewport;\n\t\tconst cIndex = -this.rowHeaderCount;\n\t\tfor (let r = 0; r < this.bRows.length; r++) {\n\t\t\tcell = this.bRows[r].children[0] as TableCell;\n\t\t\tcell.innerHTML = '';\n\t\t\tif (r < viewport.rows.length) {\n\t\t\t\tcell.className = 'vtree';\n\t\t\t\tthis.renderRowTreeCell(cIndex, viewport.rows[r], cell )\n\t\t\t}\n\t\t}\n\t}\n\n\trenderRowTreeCell(cIndex: number, row: RowModel, th: HTMLTableCellElement) {\n\t\tlet div = this.bCache.get(cIndex, row.index) as HTMLDivElement & {expander: Expander};\n\t\tif (!div) {\n\t\t\tdiv = dom.createElement('div');\n\t\t\tthis.bCache.set(cIndex, row.index, div);\n\t\t\n\t\t\tconst rowHeight = row.height + 1;\n\t\t\tconst treeColWidth = this.treeHeaderWidth / this.model.maxRowLevel;\n\n\t\t\tif (row.hasChildren) {\n\t\t\t\tconst expander = new Expander();\n\t\t\t\texpander.addEventListener('toggle', () => this.grid.rendering.toggleRow(row.index));\n\t\t\t\t(th.parentElement as TableRow).expander = expander;\n\t\t\t\tdiv.expander = expander;\n\t\t\t\tdiv.appendChild(expander);\n\t\t\t\t\n\t\t\t\tdom.setPosition(expander, {\n\t\t\t\t\tt: rowHeight / 2 - constants.EXPANDER_SIZE / 2,\n\t\t\t\t\tl: row.level * treeColWidth + treeColWidth / 2 - constants.EXPANDER_SIZE / 2\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tconst line = this.createExpanderLine('v');\n\t\t\t\tdiv.appendChild(line);\n\n\t\t\t\tdom.setPosition(line, {\n\t\t\t\t\tt: this.model.options.rowTree.reversed ? 0 : (rowHeight / 2),\n\t\t\t\t\tl: row.level * treeColWidth + treeColWidth / 2\n\t\t\t\t});\n\n\t\t\t\tdom.setSize(line, {\n\t\t\t\t\tw: treeColWidth / 2,\n\t\t\t\t\th: rowHeight / 2 + 1\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tif (row.hasParent) {\n\t\t\t\tlet parent = row as RowModel;\n\t\t\t\twhile (parent.hasParent) {\n\t\t\t\t\tparent = parent.parent as RowModel;\n\t\t\t\t\tconst line = this.createExpanderLine('v');\n\t\t\t\t\tdiv.appendChild(line);\n\n\t\t\t\t\tdom.setSize(line, {\n\t\t\t\t\t\tw: treeColWidth / 2,\n\t\t\t\t\t\th: rowHeight + 2\n\t\t\t\t\t});\n\n\t\t\t\t\tdom.setPosition(line, {\n\t\t\t\t\t\tt: -1,\n\t\t\t\t\t\tl: parent.level * treeColWidth + treeColWidth / 2\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (div.expander) div.expander.state = row.collapsed ? 'closed' : 'open';\n\t\tth.appendChild(div);\n\t}\n\t//#endregion\n\n}"]}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/ui/table.ts"],"names":[],"mappings":"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","sourcesContent":["import constants from '../constants';\nimport { dom, Expander, LevelExpander, LevelExpandEvent } from \"@omegagrid/core\";\nimport { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport {\n\tGridModel, Merge, Viewport, CellModel, RowModel, ColumnModel, ColumnHeaderModel, encodeRow, styleToCSStyle, CellRange, Style,\n\tCellAddress,\n\tMergeCellState\n} from \"@omegagrid/grid-core\";\nimport { ElementCache } from \"./elementCache\";\nimport { tableStyles } from \"./table.styles\";\nimport { SortingArrow } from \"./sortingArrow\";\nimport { FilterLabel } from \"./filterLabel\";\nimport { Grid } from './grid';\nimport { applyStyle, getCellRenderer } from '../renderers';\n\nexport type TableCell = HTMLTableCellElement & {\n\tc: number,\n\tr: number\n}\n\nexport type TableRow = HTMLTableRowElement & {\n\tr: number,\n\texpander: Expander\n}\n\nexport type TableHeaderCell = TableCell;\nexport type TableRenderOptions = {vertical?: boolean, horizontal?: boolean};\n\nexport class TableEvent extends Event { }\n\n@customElement('og-table')\nexport class Table extends LitElement {\n\n\tstatic styles = [tableStyles];\n\n\tprivate _viewport: Viewport;\n\tprivate _viewportSize: {w: number, h: number};\n\tprivate _freezeLeft: number;\n\tprivate _freezeTop: number;\n\tprivate bCache: ElementCache;\n\tprivate hCache: ElementCache;\n\tpublic hRows: TableRow[];\n\tpublic bRows: TableRow[];\n\tpublic cols: HTMLTableColElement[];\n\n\t// map of model indexes on element indexes\n\tprivate _rowMap = new Map<number, number>();\n\tprivate _colMap = new Map<number, number>();\n\tprivate cornerDiv: HTMLDivElement;\n\n\tpublic grid: Grid;\n\n\t//#region reactive props\n\t@property({type: Object})\n\tmodel: GridModel;\n\n\t@property({type: Number, hasChanged: () => false})\n\trowOffset = 0;\n\n\t@property({type: Number, hasChanged: () => false})\n\tcolOffset = 0;\n\n\t@property({type: Number, reflect: true})\n\tzoom = 1;\n\n\t@property({type: Boolean, reflect: true})\n\tnogrid = false;\n\n\t@property({type: Boolean, reflect: true})\n\trenderAll = false;\n\t//#endregion\n\n\n\t//#region element references\n\tprivate tableRef = createRef<HTMLTableElement>();\n\tget table() { return this.tableRef.value }\n\n\tprivate colgroupRef = createRef<HTMLElement>();\n\tget colgroup() { return this.colgroupRef.value }\n\n\tprivate theadRef = createRef<HTMLElement>();\n\tget thead() { return this.theadRef.value }\n\n\tprivate tbodyRef = createRef<HTMLElement>();\n\tget tbody() { return this.tbodyRef.value }\n\t//#endregion\n\n\n\t//#region calculated props\n\tget colMap() { return this._colMap }\n\tget rowMap() { return this._rowMap }\n\n\tgetColumnByModelIndex = (c: number) => this.getColumnByGridIndex(this.colMap.get(c));\n\tgetColumnByGridIndex = (c: number) => this.colgroup.children[c + this.rowHeaderCount] as HTMLTableColElement;\n\tgetRowByModelIndex = (r: number) => this.bRows[this.rowMap.get(r)];\n\tgetRowByGridIndex = (r: number) => this.bRows[r];\n\tgetCellByGridIndex = (c: number, r: number) => this.bRows[r].children[c + this.rowHeaderCount] as TableCell;\n\tgetCellByModelIndex = (c: number, r: number) => this.getRowByModelIndex(r)?.children[this.colMap.get(c) + this.rowHeaderCount] as TableCell;\n\tgetCellByCellModel = (m: CellModel) => this.getCellByModelIndex(m.c, m.r);\n\tresetFreezeLeft = () : void => this._freezeLeft = null;\n\n\tget freezeLeft() {\n\t\tif (this._freezeLeft == null) {\n\t\t\tif (this.offsetWidth > 0) {\n\t\t\t\tlet w = 0;\n\t\t\t\tfor (let c = 0; c < this.model.options.freezeLeft; c++) {\n\t\t\t\t\tw += this.model.columns[c].width;\n\t\t\t\t}\n\t\t\t\tthis._freezeLeft = w < this.offsetWidth / 2 ? this.model.options.freezeLeft : 0;\n\t\t\t} else {\n\t\t\t\tthis._freezeLeft = this.model.options.freezeLeft;\n\t\t\t}\n\t\t}\n\t\treturn this._freezeLeft;\n\t}\n\n\tget freezeTop() {\n\t\tif (this._freezeTop == null) {\n\t\t\tthis._freezeTop = this.model.options.freezeTop;\n\t\t}\n\t\treturn this._freezeTop;\n\t}\n\n\t_highlightedColHeaderCells: TableHeaderCell[] = [];\n\t_highlightedRowHeaderCells: TableHeaderCell[] = [];\n\n\tpreviewZoom(zoom: number) {\n\t\tdom.zoomElement(this.table, zoom);\n\t}\n\n\thighlightColHeaderCells(columns: number[]) {\n\t\tif (!this.model.options.colLetters) return;\n\t\tthis._highlightedColHeaderCells.forEach(cell => cell.className = 'hlabel');\n\t\tthis._highlightedColHeaderCells = [];\n\t\tconst offset = this.rowHeaderCount;\n\t\tcolumns.forEach(c => {\n\t\t\tconst cell = this.hRows[this.model.hasColumnTreeEnabled ? 1 : 0].children[this.colMap.get(c) + offset] as TableHeaderCell;\n\t\t\tif (cell) {\n\t\t\t\tthis._highlightedColHeaderCells.push(cell);\n\t\t\t\tcell.className = 'hlabel selected';\n\t\t\t}\n\t\t});\n\t}\n\n\thighlightRowHeaderCells(rows: number[]) {\n\t\tif (!this.model.options.rowNumbers) return;\n\t\tif (this.model.rows.length == 0) return;\n\t\tthis._highlightedRowHeaderCells.forEach(cell => cell.className = 'vlabel');\n\t\tthis._highlightedRowHeaderCells = [];\n\t\trows.forEach(r => {\n\t\t\tconst cell = this.getRowByModelIndex(r)?.children[this.model.hasRowTreeEnabled ? 1 : 0] as TableHeaderCell;\n\t\t\tif (cell) {\n\t\t\t\tthis._highlightedRowHeaderCells.push(cell);\n\t\t\t\tcell.className = 'vlabel selected';\n\t\t\t}\n\t\t});\n\t}\n\n\tget columnHeaderCount() : number {\n\t\treturn this.model.headerCount \n\t\t\t+ (this.model.hasColumnTreeEnabled ? 1 : 0) \n\t\t\t+ (this.model.hasFilter ? 1 : 0)\n\t\t\t+ (this.model.options.colLetters ? 1 : 0);\n\t}\n\n\tget rowHeaderCount() { return (this.model.hasRowTreeEnabled ? 1 : 0) + (this.model.options.rowNumbers ? 1 : 0) }\n\n\tget renderRowCount() { \n\t\treturn this.renderAll \n\t\t\t? this.model.visibleRows.length \n\t\t\t: Math.round(Math.min(this.clientHeight / constants.MIN_ROW_HEIGHT, this.model.rows.length));\n\t}\n\n\tget renderColCount() { \n\t\treturn this.renderAll \n\t\t\t? this.model.visibleColumns.length + this.rowHeaderCount\n\t\t\t: Math.round(Math.min((this.clientWidth / constants.MIN_COL_WIDTH) || 5, this.model.columns.length + this.rowHeaderCount));\n\t}\n\n\tget totalHeaderHeight() : number {\n\t\tlet h = 0, r = 0;\n\n\t\tif (this.model.hasColumnTreeEnabled) {\n\t\t\th += this.treeHeaderHeight;\n\t\t\t++r;\n\t\t}\n\n\t\tif (this.model.options.colLetters) {\n\t\t\th += (this.thead.children[r] as HTMLElement).offsetHeight || this.model.options.rowHeight\n\t\t\t++r;\n\t\t}\n\n\t\tfor (let i = 0; i < this.model.headerCount; i++) {\n\t\t\th += (this.thead.children[r + i] as HTMLElement).offsetHeight || this.model.options.rowHeight;\n\t\t}\n\n\t\tif (this.model.hasFilter) h += this.model.options.rowHeight;\n\t\treturn h;\n\t}\n\n\tget treeHeaderWidth() { return this.model.hasRowTreeEnabled ? this.model.maxRowLevel * 15 + 20 : 0 }\n\tget treeHeaderHeight() {\n\t\treturn this.model.hasColumnTree ? this.model.maxColumnLevel * 15 + 20 : 0\n\t}\n\n\tget totalHeaderWidth() : number {\n\t\tlet w = 0;\n\t\tif (this.model.options.rowNumbers) w += constants.ROW_HEADER_WIDTH;\n\t\tw += this.treeHeaderWidth;\n\t\treturn w;\n\t}\n\n\tget viewportSize() : {w: number, h: number} {\n\t\tif (!this._viewportSize) {\n\t\t\tthis._viewportSize = this.renderAll ? {w: Infinity, h: Infinity} : {\n\t\t\t\tw: (this.clientWidth - this.totalHeaderWidth - constants.SLIDER_SIZE) / this.zoom,\n\t\t\t\th: (this.clientHeight - this.totalHeaderHeight - constants.SLIDER_SIZE) / this.zoom\n\t\t\t};\n\t\t}\n\t\treturn this._viewportSize;\n\t}\n\n\tget viewport() : Viewport {\n\t\tif (!this._viewport) {\n\t\t\tthis._viewport = this.model.getViewport(\n\t\t\t\t{c: this.colOffset, r: this.rowOffset}, \n\t\t\t\tthis.viewportSize, {\n\t\t\t\t\tt: this.model.options.freezeTop, \n\t\t\t\t\tl: this.freezeLeft, \n\t\t\t\t\tb: this.model.options.freezeBottom, \n\t\t\t\t\tr: this.model.options.freezeRight\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\treturn this._viewport;\n\t}\n\n\tget viewportRange() : CellRange {\n\t\treturn new CellRange(\n\t\t\tthis.viewport.columns[0].index, \n\t\t\tthis.viewport.rows[0].index, \n\t\t\tthis.viewport.columns[this.viewport.columns.length - 1].index, \n\t\t\tthis.viewport.rows[this.viewport.rows.length - 1].index\n\t\t);\n\t}\n\t//#endregion\n\n\tfindColumnIndexByOffset(offset: number) : number {\n\t\tlet w = 0;\n\t\tconst columns = this.colgroup.children;\n\t\tfor (let c = 0; c < columns.length; c++) {\n\t\t\tconst col = columns[c] as HTMLTableColElement;\n\t\t\tw += col.offsetWidth;\n\t\t\tif (w >= offset) return c;\n\t\t}\n\t\treturn -1;\n\t}\n\n\tfindRowByOffset(offset: number) : TableRow {\n\t\tconst rows = (offset > this.thead.offsetHeight ? this.tbody : this.thead).children;\n\t\tif (offset > this.thead.offsetHeight) offset -= this.thead.offsetHeight;\n\t\tlet h = 0;\n\t\tfor (let r = 0; r < rows.length; r++) {\n\t\t\tconst row = rows[r] as TableRow;\n\t\t\th += row.offsetHeight;\n\t\t\tif (h >= offset) return row;\n\t\t}\n\t\treturn null;\n\t}\n\n\tfindTableCellByOffset(x: number, y: number) : TableCell {\n\t\tx = x / this.zoom;\n\t\ty = y / this.zoom;\n\t\t\n\t\tconst row = this.findRowByOffset(y);\n\t\tconst column = this.findColumnIndexByOffset(x); // ?? this.colgroup.children.length - 1;\n\t\tconst cell = row && column > -1 ? row.children[column] as TableCell : null;\n\t\treturn cell && !dom.isHidden(cell) ? cell : null;\n\t}\n\n\t/**\n\t * Returns the nearest visible cell to the given offset and exact cell if availible\n\t * @param x \n\t * @param y \n\t * @returns \n\t */\n\tfindNearestTableCellByOffset(x: number, y: number) : [TableCell, TableCell?] {\n\t\tx = x / this.zoom;\n\t\ty = y / this.zoom;\n\t\tlet row: TableRow, c: number;\n\t\tconst exactRow = this.findRowByOffset(y);\n\t\tconst excactColumnIndex = this.findColumnIndexByOffset(x);\n\n\t\tif (y < 0) row = this.tbody.children[0] as TableRow;\n\t\telse if (y > this.tbody.offsetHeight + this.thead.offsetHeight)\n\t\t\trow = this.tbody.children[this.viewport.rows.length - 1] as TableRow;\n\t\telse row = exactRow;\n\t\t\n\t\tif (x < 0) c = this.rowHeaderCount;\n\t\telse if (x >= this.tbody.offsetWidth) c = this.viewport.columns.length + this.rowHeaderCount - 1;\n\t\telse c = excactColumnIndex\n\n\t\tlet cell = row && c > -1 ? row.children[c] as TableCell : null;\n\t\t// find nearest visible cell\n\t\twhile (cell && dom.isHidden(cell)) cell = cell.previousElementSibling as TableCell;\n\n\t\tconst exactCell = exactRow && excactColumnIndex > -1 ? exactRow.children[excactColumnIndex] as TableCell : null;\n\t\treturn [cell, exactCell && !dom.isHidden(exactCell) ? exactCell : null];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\t\n\trender = () => html`\n\t\t<style>\n\t\t\ttable {\n\t\t\t\tfont-size: ${this.model?.options.fontSize || 12}px;\n\t\t\t}\n\n\t\t\ttable tr {\n\t\t\t\tline-height: ${(this.model?.options.rowHeight || 22) - 1}px;\n\t\t\t}\n\t\t</style>\n\n\t\t<table ${ref(this.tableRef)}\n\t\t\tclass=\"${this.model?.options.grid ? '' : 'nogrid'}\"\n\t\t\tstyle=\"transform: scale(${this.zoom})\">\n\t\t\t<colgroup ${ref(this.colgroupRef)}></colgroup>\n\t\t\t<thead ${ref(this.theadRef)}></thead>\n\t\t\t<tbody ${ref(this.tbodyRef)}></tbody>\n\t\t</table>\n\t`;\n\n\twillUpdate() {\n\t\tthis._viewport = null;\n\t\tthis._viewportSize = null;\n\t\tif (this.model) {\n\t\t\tthis.clearHeaderCache();\n\t\t\tthis.clearBodyCache();\n\t\t}\n\t}\n\t\n\tupdated() {\n\t\tif (this.model) {\n\t\t\tthis.createColumns();\n\t\t\tthis.createHeaderRows();\n\t\t\tthis.createBodyRows();\n\t\t\tthis.renderCells();\n\t\t}\n\t}\n\t\n\tclearHeaderCache = () => {\n\t\tthis.resetFreezeLeft();\n\t\tthis.hCache = new ElementCache(this.model.columns.length, this.columnHeaderCount);\n\t\tthis.hCache.disabled = !this.model.options.cellCache;\n\t}\n\n\tclearBodyCache = () => {\n\t\tthis.bCache = new ElementCache(this.model.columns.length, this.model.rows.length);\n\t\tthis.bCache.disabled = !this.model.options.cellCache;\n\t}\n\n\trefresh() {\n\t\tthis.clearHeaderCache();\n\t\tthis.clearBodyCache();\n\t\tthis.requestUpdate();\n\t}\n\t\n\tcreateColumns() {\n\t\tthis._freezeLeft = null;\n\t\tconst colCount = this.renderColCount;\n\t\tif (!this.cols || this.cols.length != colCount) {\n\t\t\tthis.cols = new Array(colCount);\n\t\t\tfor (let c = 0; c < colCount; c++) {\n\t\t\t\tthis.cols[c] = dom.createElement('col');\n\t\t\t\tthis.cols.forEach(() => this.colgroup.appendChild(this.cols[c]));\n\t\t\t}\n\t\t}\n\t}\n\n\tcreateHeaderRows() {\n\t\tconst rowCount = this.columnHeaderCount\n\t\tconst colCount = this.renderColCount;\n\t\tdom.empty(this.thead);\n\n\t\tif (!this.hRows || this.hRows.length != rowCount || !this.hRows[0] || this.hRows[0].children.length != colCount) {\n\t\t\tthis.hRows = new Array(rowCount);\n\t\t\tfor (let r = 0; r < rowCount; r++) {\n\t\t\t\tthis.hRows[r] = dom.createElement('tr');\n\t\t\t\tfor (let c = 0; c < colCount; c++) {\n\t\t\t\t\tthis.hRows[r].appendChild(dom.createElement('th'));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdom.empty(this.thead);\n\t\tthis.hRows.forEach(row => this.thead.appendChild(row));\n\t}\n\n\tcreateBodyRows() {\n\t\tconst rowCount = this.renderRowCount;\n\t\tconst colCount = this.renderColCount;\n\t\tconst offset = this.rowHeaderCount;\n\t\t\n\t\tif (!this.bRows || this.bRows.length == 0 || this.bRows.length != rowCount || this.bRows[0].children.length != colCount) {\n\t\t\tif (rowCount == 0 && this.grid.options.emptyPlaceholder) {\n\t\t\t\tthis.bRows = [dom.createElement('tr')];\n\t\t\t\tthis.bRows[0].appendChild(dom.createElement('td'));\n\t\t\t} else {\n\t\t\t\tthis.bRows = new Array(rowCount);\n\t\t\t\tfor (let r = 0; r < rowCount; r++) {\n\t\t\t\t\tthis.bRows[r] = dom.createElement('tr');\n\t\t\t\t\t\n\t\t\t\t\tfor (let c = 0; c < offset; c++) {\n\t\t\t\t\t\tthis.bRows[r].appendChild(dom.createElement('th'));\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfor (let c = offset; c < colCount; c++) {\n\t\t\t\t\t\tthis.bRows[r].appendChild(dom.createElement('td'));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tdom.empty(this.tbody);\n\t\tthis.bRows.forEach(row => this.tbody.appendChild(row));\n\t}\n\n\trenderCells(update: TableRenderOptions = {vertical: true, horizontal: true}) {\n\t\tif (this.table && (update.vertical || update.horizontal)) {\n\t\t\tthis._viewport = null;\n\t\t\t// this.tbody.remove();\n\t\t\t\n\t\t\tif (update.horizontal) this.renderHeader();\n\t\t\tif (this.model.rows.length > 0) {\n\t\t\t\tthis.renderBody();\n\t\t\t\tif (update.vertical) this.renderRowTree();\n\t\t\t\t// this.table.appendChild(this.tbody);\n\t\t\t} else if (this.model.options.emptyPlaceholder) {\n\t\t\t\tthis.renderEmptyBody();\n\t\t\t\tthis.table.appendChild(this.tbody);\n\t\t\t}\n\n\t\t\tthis.dispatchEvent(new TableEvent('rendercells'));\n\t\t}\n\t}\n\n\trenderEmptyBody() {\n\t\tconst cell = this.bRows[0].children[0] as TableCell;\n\t\tcell.innerHTML = 'no data';\n\t\tcell.className = 'empty-placeholder';\n\t\tcell.colSpan = this.viewport.columns.length + this.rowHeaderCount;\n\t}\n\n\t//#region render header rows\n\trenderHeader() {\n\t\tlet column: ColumnModel;\n\t\tthis.colMap.clear();\n\t\tconst offset = this.rowHeaderCount;\n\t\tconst viewport = this.viewport;\n\n\t\tif (this.model.hasRowTreeEnabled) {\n\t\t\tdom.setSize(this.colgroup.children[0] as HTMLElement, {w: this.treeHeaderWidth}, true);\n\t\t}\n\n\t\tif (this.model.options.rowNumbers) {\n\t\t\tdom.setSize(this.colgroup.children[offset - 1] as HTMLElement, {w: constants.ROW_HEADER_WIDTH}, true);\n\t\t}\n\n\t\tfor (let c = 0; c < viewport.columns.length; c++) {\n\t\t\tcolumn = viewport.columns[c];\n\n\t\t\tif (this.model.autofitColumns.has(column.index)) {\n\t\t\t\tthis.grid.rendering.autofitColumn(column.index, false, false);\n\t\t\t\tthis.model.autofitColumns.delete(column.index); // use autofit only once for performance reasons\n\t\t\t}\n\n\t\t\tthis.colMap.set(column.index, c);\n\t\t\tdom.setSize(this.colgroup.children[c + offset] as HTMLElement, {w: column.width});\n\t\t\tdom.setMinSize(this.colgroup.children[c + offset] as HTMLElement, {w: column.width});\n\t\t\tdom.setMaxSize(this.colgroup.children[c + offset] as HTMLElement, {w: column.width});\n\t\t}\n\t\t\n\t\tlet r = 0;\n\t\tif (this.model.hasColumnTreeEnabled) {\n\t\t\tthis.renderHeaderRowTree(this.hRows[r], r);\n\t\t\t++r;\n\t\t}\n\t\t\n\t\tif (this.model.options.colLetters) {\n\t\t\tdom.setSize(this.hRows[r], {h: this.model.options.rowHeight});\n\t\t\tthis.renderHeaderRowLetters(this.hRows[r], r);\n\t\t\t++r;\n\t\t}\n\t\t\n\t\tfor (let i = 0; i < this.model.headerCount; i++) {\n\t\t\tthis.renderHeaderRowLabels(this.hRows[r + i], r + i, i);\n\t\t}\n\n\t\tr += this.model.headerCount;\n\t\t\n\t\tif (this.model.hasFilter) {\n\t\t\tdom.setSize(this.hRows[r], {h: this.model.options.rowHeight});\n\t\t\tthis.renderHeaderRowFilters(this.hRows[r], r);\n\t\t}\n\t}\n\n\trenderHeaderRowLetters(tr: HTMLTableRowElement, index: number) {\n\t\tlet cell: TableHeaderCell;\n\t\tlet c2: number;\n\t\tconst viewport = this.viewport;\n\t\tconst r = index - this.columnHeaderCount;\n\t\tlet offset = 0; //this.rowHeaderCount;\n\n\t\tdom.setSize(tr, {h: this.model.options.rowHeight});\n\n\t\tif ((this.model.hasRowTree || this.model.options.rowNumbers) && !this.model.hasColumnTreeEnabled) {\n\t\t\tcell = tr.children[offset] as TableCell;\n\t\t\tcell.colSpan = this.rowHeaderCount;\n\t\t\tcell.rowSpan = this.columnHeaderCount;\n\n\t\t\tconst c = offset - this.rowHeaderCount;\n\t\t\tconst cornerCell = this.model.options.levelButtonCell;\n\t\t\tif (!cornerCell || (r == cornerCell.r && c == cornerCell.c)) {\n\t\t\t\tthis.renderHeaderRowCornerCell(cell);\n\t\t\t}\n\n\t\t\toffset++;\n\t\t}\n\n\t\tfor (let i = offset; i < this.rowHeaderCount; i++) {\n\t\t\tdom.hideCell(tr.children[i] as TableCell);\n\t\t\toffset++;\n\t\t}\n\t\t\n\t\tfor (let c = offset; c < tr.children.length; c++) {\n\t\t\tc2 = c - offset;\n\t\t\tcell = tr.children[c] as TableHeaderCell;\n\t\t\tcell.className = 'hlabel';\n\t\t\tif (viewport.columns.length > c2) {\n\t\t\t\tcell.innerHTML = viewport.columns[c2].address;\n\t\t\t\tcell.c = viewport.columns[c2].index;\n\t\t\t\tdom.showCell(cell);\n\t\t\t} else {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t}\n\t\t}\n\t}\n\n\trenderHeaderRowTree(tr: HTMLTableRowElement, index: number) {\n\t\tif (!this.model.hasColumnTreeEnabled) return;\n\n\t\tlet cell: TableCell;\n\t\tlet offset = 0;\n\t\tlet c2: number;\n\t\tconst r = index - this.columnHeaderCount;\n\t\tconst viewport = this.viewport;\n\t\tconst rowNumbers = this.model.options.rowNumbers;\n\t\tconst rowTree = this.model.hasRowTreeEnabled;\n\n\t\tdom.setSize(tr, {h: this.treeHeaderHeight});\n\n\t\tcell = tr.children[offset] as TableCell;\n\t\tif (!cell) return;\n\t\tcell.rowSpan = rowNumbers || rowTree ? this.columnHeaderCount : 1;\n\t\tcell.colSpan = this.rowHeaderCount;\n\t\t\n\t\tconst c = offset - this.rowHeaderCount;\n\t\tconst cornerCell = this.model.options.levelButtonCell;\n\t\tlet cornerCellColumn = null;\n\t\tif ((!cornerCell && (rowNumbers || rowTree)) || (cornerCell && r == cornerCell.r && c == cornerCell.c)) {\n\t\t\tcornerCellColumn = c;\n\t\t\tthis.renderHeaderRowCornerCell(cell);\n\t\t}\n\n\t\tif (rowNumbers || rowTree) {\n\t\t\t++offset;\n\t\t\tif (rowTree) {\n\t\t\t\tcell = tr.children[offset] as TableCell;\n\t\t\t\tcell.innerHTML = '';\n\t\t\t\tdom.hideCell(cell);\n\t\t\t\t++offset;\n\t\t\t}\n\t\t}\n\n\t\tfor (let c = offset; c < tr.children.length; c++) {\n\t\t\tc2 = c - offset;\n\t\t\tcell = tr.children[c] as TableCell;\n\t\t\tif (viewport.columns.length > c2) {\n\t\t\t\tif (cornerCellColumn != c) {\n\t\t\t\t\tcell.innerHTML = '';\n\t\t\t\t\tcell.className = 'htree';\n\t\t\t\t\tthis.renderHeaderRowTreeCell(tr, index, viewport.columns[c2], cell);\n\t\t\t\t}\n\t\t\t\tdom.showCell(cell);\n\t\t\t} else {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t}\n\t\t}\n\t}\n\n\trenderHeaderRowTreeCell(tr: HTMLTableRowElement, rIndex: number, column: ColumnModel, th: HTMLTableCellElement) {\n\t\tlet div = this.hCache.get(column.index, rIndex) as HTMLDivElement & {expander: Expander, expanderLine: HTMLDivElement};\n\t\tif (!div) {\n\t\t\tdiv = dom.createElement('div');\n\t\t\tthis.hCache.set(column.index, rIndex, div);\n\t\t\n\t\t\tconst colWidth = column.width + 1;\n\t\t\tconst treeRowHeight = this.treeHeaderHeight / this.model.maxColumnLevel;\n\n\t\t\tif (column.hasChildren) {\n\t\t\t\tconst expander = new Expander();\n\t\t\t\texpander.addEventListener('toggle', () => this.grid.rendering.toggleColumn(column.index));\n\n\t\t\t\tdiv.expander = expander;\n\t\t\t\tdiv.appendChild(expander);\n\t\t\t\t\n\t\t\t\tdom.setPosition(expander, {\n\t\t\t\t\tl: colWidth / 2 - constants.EXPANDER_SIZE / 2,\n\t\t\t\t\tt: column.level * treeRowHeight + treeRowHeight / 2 - constants.EXPANDER_SIZE / 2\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tdiv.expanderLine = this.createExpanderLine('h');\n\t\t\t\tdiv.appendChild(div.expanderLine);\n\n\t\t\t\tdom.setPosition(div.expanderLine, {\n\t\t\t\t\tl: this.model.options.columnTree.reversed ? 0 : (colWidth / 2),\n\t\t\t\t\tt: column.level * treeRowHeight + treeRowHeight / 2\n\t\t\t\t});\n\n\t\t\t\tdom.setSize(div.expanderLine, {\n\t\t\t\t\th: treeRowHeight / 2,\n\t\t\t\t\tw: colWidth / 2 + 1\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tif (column.hasParent) {\n\t\t\t\tlet parent = column as ColumnModel;\n\t\t\t\twhile (parent.hasParent) {\n\t\t\t\t\tparent = parent.parent as ColumnModel;\n\t\t\t\t\tconst line = this.createExpanderLine('h');\n\t\t\t\t\tdiv.appendChild(line);\n\n\t\t\t\t\tdom.setSize(line, {\n\t\t\t\t\t\th: treeRowHeight / 2,\n\t\t\t\t\t\tw: colWidth - 1\n\t\t\t\t\t});\n\n\t\t\t\t\tdom.setPosition(line, {\n\t\t\t\t\t\tl: 0,\n\t\t\t\t\t\tt: parent.level * treeRowHeight + treeRowHeight / 2\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (div.expander) div.expander.state = column.collapsed ? 'closed' : 'open';\n\t\tth.appendChild(div);\n\t}\n\n\tcreateExpanderLine(direction: string) {\n\t\tconst expanderLine = dom.createElement<HTMLDivElement>('div');\n\t\texpanderLine.className = `${direction}tree-line`;\n\t\treturn expanderLine;\n\t}\n\n\trenderHeaderRowLabels(tr: HTMLTableRowElement, rIndex: number, hIndex: number) {\n\t\tlet colModel: ColumnModel;\n\t\tlet cell: TableHeaderCell;\n\t\tlet header: ColumnHeaderModel;\n\t\tlet offset = 0;\n\t\tlet c2: number;\n\t\tconst viewport = this.viewport;\n\t\tconst r = rIndex - this.columnHeaderCount;\n\t\tconst cornerCell = this.model.options.levelButtonCell;\n\t\tlet rowHeight: number;\n\n\t\tif (this.model.hasRowTreeEnabled) {\n\t\t\tcell = tr.children[offset] as TableHeaderCell;\n\t\t\tcell.innerHTML = '';\n\t\t\tif (this.model.hasColumnTreeEnabled || this.model.options.colLetters || hIndex > 0) {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t} else {\n\t\t\t\tcell.rowSpan = this.columnHeaderCount;\n\t\t\t\tcell.colSpan = this.rowHeaderCount;\n\t\t\t\t\n\t\t\t\tthis.renderHeaderRowCornerCell(cell);\n\t\t\t}\n\t\t\t++offset;\n\t\t}\n\n\t\tif (this.model.options.rowNumbers) {\n\t\t\tcell = tr.children[offset] as TableHeaderCell;\n\t\t\tcell.innerHTML = '';\n\t\t\tif (this.model.hasRowTreeEnabled || this.model.options.colLetters || this.model.hasColumnTreeEnabled || hIndex > 0) {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t} else {\n\t\t\t\tcell.rowSpan = this.columnHeaderCount;\n\t\t\t\tcell.colSpan = this.rowHeaderCount;\n\t\t\t\tthis.renderHeaderRowCornerCell(cell);\n\t\t\t}\n\t\t\t++offset;\n\t\t}\n\n\t\tfor (let c = offset; c < tr.children.length; c++) {\n\t\t\tc2 = c - offset;\n\t\t\tcell = tr.children[c] as TableHeaderCell;\n\t\t\tcell.className = 'hlabel';\n\t\t\tcell.innerHTML = '';\n\t\t\t\n\t\t\tif (viewport.columns.length > c2) {\n\t\t\t\tcolModel = viewport.columns[c2];\n\t\t\t\theader = colModel.header[hIndex];\n\t\t\t\tif (header.height) rowHeight = Math.max(header.height, rowHeight || 0);\n\n\t\t\t\tcell.colSpan = 1;\n\t\t\t\tcell.rowSpan = 1;\n\t\t\t\tcell.c = colModel.index;\n\t\t\t\tcell.r = hIndex;\n\n\t\t\t\tif (header?.hidden) {\n\t\t\t\t\tif (c2 == this.freezeLeft) {\n\t\t\t\t\t\tlet prevModel = colModel.prevVisible;\n\t\t\t\t\t\tlet c3 = 0;\n\t\t\t\t\t\twhile (prevModel && prevModel.header[hIndex]?.hidden) {\n\t\t\t\t\t\t\tprevModel = prevModel.prevVisible;\n\t\t\t\t\t\t\t++c3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (prevModel && prevModel.header[hIndex].cs) {\n\t\t\t\t\t\t\tdom.showCell(cell);\n\t\t\t\t\t\t\tcell.colSpan = prevModel.header[hIndex].cs - c3 - 1;\n\t\t\t\t\t\t\tcell.rowSpan = prevModel.header[hIndex].rs || 1;\n\t\t\t\t\t\t\tthis.renderHeaderRowLabelCell(cell, prevModel, rIndex, hIndex);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdom.hideCell(cell);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdom.hideCell(cell);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (colModel.header && colModel.header[hIndex]) {\n\t\t\t\t\t\tconst cs = colModel.header[hIndex].cs || 1;\n\t\t\t\t\t\tcell.colSpan = cs > 1 ? colModel.calculateRealColspan(cs) : 1;\n\t\t\t\t\t\tcell.rowSpan = colModel.header[hIndex].rs || 1;\n\t\t\t\t\t}\n\t\t\t\t\tdom.showCell(cell);\n\t\t\t\t\tthis.renderHeaderRowLabelCell(cell, colModel, rIndex, hIndex);\n\n\t\t\t\t\tif (cornerCell && cornerCell.r == r && cornerCell.c == colModel.index) {\n\t\t\t\t\t\tthis.renderHeaderRowCornerCell(cell);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t}\n\t\t}\n\n\t\tdom.setSize(tr, {h: rowHeight ?? this.model.options.rowHeight});\n\t}\n\n\trenderHeaderRowLabelCell(th: TableHeaderCell, column: ColumnModel, rIndex: number, hIndex: number) {\n\t\tlet div = this.hCache.get(column.index, rIndex) as HTMLDivElement & {\n\t\t\tsortingArrow?: SortingArrow,\n\t\t\texpander?: Expander,\n\t\t};\n\t\tconst h = column.header[hIndex];\n\t\tif (!div) {\n\t\t\tdiv = dom.createElement('div');\n\t\t\tif (!h) div.innerHTML = '';\n\t\t\telse if (h.html) div.innerHTML = h.label ?? \"\";\n\t\t\telse div.innerText = h.label ?? \"\";\n\n\t\t\tif (h && h._style != null) {\n\t\t\t\tapplyStyle(div, styleToCSStyle(this.model.styles.get(h._style)));\n\t\t\t}\n\n\t\t\tthis.hCache.set(column.index, rIndex, div);\n\t\t}\n\n\t\tif (\n\t\t\tthis.model.options.columnHeaderTreeButtons \n\t\t\t&& column.hasChildren \n\t\t\t&& hIndex == column.level\n\t\t) {\n\t\t\tlet expander = div.expander;\n\t\t\tif (!expander) {\n\t\t\t\texpander = new Expander();\n\t\t\t\texpander.addEventListener('toggle', () => this.grid.rendering.toggleColumn(column.index));\n\t\t\t\tdiv.expander = expander;\n\t\t\t\tdiv.prepend(expander);\n\t\t\t\tdom.setPosition(expander, {l: 4, t: 4});\n\t\t\t}\n\t\t\texpander.state = column.collapsed ? 'closed' : 'open';\n\t\t}\n\n\t\tif (column.sorting && hIndex == column.header.length - 1) {\n\t\t\tth.className += ' sort';\n\t\t\tif (!div.sortingArrow) {\n\t\t\t\tdiv.sortingArrow = new SortingArrow();\t\t\t\t\t\n\t\t\t\tdiv.appendChild(div.sortingArrow);\n\t\t\t\tdom.setPosition(div.sortingArrow, {t: 0, r: 5});\n\t\t\t}\n\t\t\tdiv.sortingArrow.sortSettings = this.model.sorting.get(column.index);\n\t\t}\n\n\t\tth.appendChild(div);\n\t}\n\n\trenderHeaderRowFilters(tr: HTMLTableRowElement, index: number) {\n\t\tlet cell: TableHeaderCell;\n\t\tlet offset = 0;\n\t\tlet c2: number;\n\t\tconst viewport = this.viewport;\n\n\t\tif (this.model.hasRowTreeEnabled) {\n\t\t\tcell = tr.children[offset] as TableHeaderCell;\n\t\t\tcell.innerHTML = '';\n\t\t\tif (this.model.columnHeaderCount > 1) {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t} else {\n\t\t\t\tcell.colSpan = this.model.columnHeaderCount;\n\t\t\t}\n\t\t\t++offset;\n\t\t}\n\n\t\tif (this.model.options.rowNumbers) {\n\t\t\tcell = tr.children[offset] as TableHeaderCell;\n\t\t\tcell.innerHTML = '';\n\t\t\t\n\t\t\tif (\n\t\t\t\tthis.model.hasRowTreeEnabled || this.model.options.colLetters \n\t\t\t\t|| this.model.hasColumnTreeEnabled || this.model.headerCount > 0\n\t\t\t) {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t} else {\n\t\t\t\tcell.rowSpan = this.columnHeaderCount;\n\t\t\t\tcell.colSpan = this.rowHeaderCount;\n\t\t\t\tthis.renderHeaderRowCornerCell(cell);\n\t\t\t}\n\t\t\t++offset;\n\t\t}\n\n\t\tfor (let c = offset; c < tr.children.length; c++) {\n\t\t\tc2 = c - offset;\n\t\t\tcell = tr.children[c] as TableCell;\n\t\t\tif (viewport.columns.length > c2) {\n\t\t\t\tdom.showCell(cell);\n\t\t\t\tconst column = viewport.columns[c2];\n\t\t\t\tif (column.hasFilter) this.renderHeaderRowFilterCell(tr, index, column, cell);\n\t\t\t\telse cell.innerHTML = '';\n\t\t\t} else {\n\t\t\t\tdom.hideCell(cell);\n\t\t\t}\n\t\t}\n\t}\n\n\trenderHeaderRowFilterCell(tr: HTMLTableRowElement, rIndex: number, column: ColumnModel, th: TableHeaderCell) {\n\t\tth.innerHTML = '';\n\t\tth.className = 'filter';\n\t\tth.c = column.index;\n\n\t\tlet div = this.hCache.get(column.index, rIndex) as HTMLDivElement & {filter: FilterLabel};\n\t\tif (!div) {\n\t\t\tdiv = dom.createElement('div');\n\t\t\tdiv.filter = dom.createElement<FilterLabel>('og-filter-label');\n\t\t\tdiv.appendChild(div.filter);\n\t\t\tthis.hCache.set(column.index, rIndex, div);\n\t\t}\n\t\t\n\t\tconst term = this.grid.filtering.filter.get(column.index)?.term;\n\t\tdiv.filter.value = Array.isArray(term) ? term.map(item => item.value ?? item.key).join(', ') : term;\n\t\tth.appendChild(div);\n\t}\n\n\trenderHeaderRowCornerCell(th: TableCell) {\n\t\tthis.cornerDiv = dom.createElement('div');\n\t\tconst treeColWidth = Math.max(\n\t\t\t(this.treeHeaderWidth || (constants.EXPANDER_SIZE + 2)) / (this.model.maxRowLevel + 1),\n\t\t\tconstants.EXPANDER_SIZE + 2\n\t\t);\n\t\t\n\t\tif (this.model.hasRowTree) {\n\t\t\tfor (let l = 0; l <= this.model.maxRowLevel; l++) {\n\t\t\t\tconst expander = new LevelExpander();\n\t\t\t\texpander.level = l;\n\t\t\t\tthis.cornerDiv.appendChild(expander);\n\t\t\t\tdom.setPosition(expander, {\n\t\t\t\t\tl: l * treeColWidth + treeColWidth / 2 - constants.EXPANDER_SIZE / 2,\n\t\t\t\t\tb: 3\n\t\t\t\t});\n\t\t\t\texpander.addEventListener('mousedown', e => e.stopPropagation());\n\t\t\t\texpander.addEventListener('toggle', (e: LevelExpandEvent) => {\n\t\t\t\t\tthis.model.columns.filter(col => col.levelButtons).forEach(col => this.bCache.deleteColumn(col.index));\n\t\t\t\t\tthis.grid.rendering.setRowExpandLevel(e.level);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (this.model.hasColumnTree) {\n\t\t\tconst treeRowHeight = (this.model.hasColumnTree ? this.treeHeaderHeight : th.clientHeight) / (this.model.maxColumnLevel + 1);\n\t\t\tconst vertical = (this.model.maxColumnLevel * 15 + 20) <= th.clientHeight;\n\t\t\tfor (let l = 0; l <= this.model.maxColumnLevel; l++) {\n\t\t\t\tconst expander = new LevelExpander();\n\t\t\t\texpander.level = l;\n\t\t\t\tthis.cornerDiv.appendChild(expander);\n\t\t\t\tdom.setPosition(expander, vertical ? {\n\t\t\t\t\tt: l * treeRowHeight + treeRowHeight / 2 - constants.EXPANDER_SIZE / 2,\n\t\t\t\t\tr: 3\n\t\t\t\t} : {\n\t\t\t\t\tr: l * treeColWidth + treeColWidth / 2 - constants.EXPANDER_SIZE / 2,\n\t\t\t\t\tb: 3\n\t\t\t\t});\n\t\t\t\texpander.addEventListener('mousedown', e => e.stopPropagation());\n\t\t\t\texpander.addEventListener('toggle', (e: LevelExpandEvent) => {\n\t\t\t\t\tthis.grid.rendering.setColumnExpandLevel(e.level);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\tdom.empty(th);\n\t\tth.appendChild(this.cornerDiv);\n\t}\n\t//#endregion\n\n\n\tcellRenderSchedules = new WeakMap<TableCell, number>();\n\n\n\t//#region render body rows\n\trenderBody() {\n\t\tlet row: HTMLTableRowElement;\n\t\tlet cell: TableCell;\n\t\tlet rowModel: RowModel;\n\t\tlet rIndex: number;\n\t\tlet cIndex: number;\n\t\tlet colModel: ColumnModel;\n\t\tlet cellModel: CellModel;\n\t\tlet a1: CellAddress;\n\t\t\n\t\tconst freezeLeft = this.freezeLeft || 0;\n\t\tconst freezeTop = this.freezeTop || 0;\n\t\t\n\t\tconst offset = this.rowHeaderCount;\n\t\tconst merges = this.model.merges;\n\t\tconst rowNumbers = this.model.options.rowNumbers;\n\t\tconst viewport = this.viewport;\n\t\t\n\t\tconst mainRange = new CellRange(\n\t\t\tthis.viewportRange.c1 + freezeLeft, \n\t\t\tthis.viewportRange.r1 + freezeTop,\n\t\t\tthis.viewportRange.c2,\n\t\t\tthis.viewportRange.r2\n\t\t);\n\n\t\tthis.rowMap.clear();\n\n\t\tfor (let r = 0; r < this.bRows.length; r++) {\n\t\t\trow = this.bRows[r];\n\t\t\tif (r < viewport.rows.length) {\n\t\t\t\trowModel = viewport.rows[r];\n\t\t\t\trIndex = rowModel.index;\n\n\t\t\t\tif (this.model.autofitRows.has(rIndex)) {\n\t\t\t\t\tthis.grid.rendering.autofitRow(rIndex, false, false);\n\t\t\t\t\tthis.model.autofitRows.delete(rIndex); // use autofit only once for performance reasons\n\t\t\t\t}\n\n\t\t\t\tdom.setSize(row, {h: rowModel.height});\n\t\t\t\t\n\t\t\t\tif (rowModel.height < this.model.options.rowHeight) {\n\t\t\t\t\tdom.setLineHeight(row, rowModel.height);\n\t\t\t\t}\n\n\t\t\t\tthis.rowMap.set(rIndex, r);\n\n\t\t\t\tif (rowNumbers) {\n\t\t\t\t\tcell = row.children[offset - 1] as TableCell;\n\t\t\t\t\tcell.className = 'vlabel';\n\t\t\t\t\tcell.r = rIndex;\n\t\t\t\t\tcell.c = -1;\n\t\t\t\t\tcell.innerHTML = `<div>${encodeRow(rIndex)}</div>`;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (let c = offset; c < row.children.length; c++) {\n\t\t\t\t\tcell = row.children[c] as TableCell;\n\t\t\t\t\tif (c - offset < viewport.columns.length) {\n\t\t\t\t\t\tcolModel = viewport.columns[c - offset];\n\t\t\t\t\t\tcIndex = colModel.index;\n\n\t\t\t\t\t\tcell.r = rIndex;\n\t\t\t\t\t\tcell.c = cIndex;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcellModel = rowModel.cell(cIndex);\n\t\t\t\t\t\ta1 = cellModel.address;\n\t\t\t\t\t\tif (merges.getMergeState(a1) == MergeCellState.HIDDEN) {\n\t\t\t\t\t\t\tconst merge = merges.hiddenCells.get(cellModel.address);\n\t\t\t\t\t\t\tconst inter = mainRange.intersect(new CellRange(merge.c, merge.r, merge.c + merge.cs - 1, merge.r + merge.rs - 1));\n\t\t\t\t\t\t\tif (cellModel.c == inter.c1 && cellModel.r == inter.r1) {\n\t\t\t\t\t\t\t\t// top left cell of the merged range\n\t\t\t\t\t\t\t\tcellModel = this.model.rows[merge.r].cell(merge.c);\n\t\t\t\t\t\t\t\tcell.colSpan = inter.size.columns;\n\t\t\t\t\t\t\t\tcell.rowSpan = inter.size.rows;\n\t\t\t\t\t\t\t\tcell.c = cellModel.c;\n\t\t\t\t\t\t\t\tcell.r = cellModel.r;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdom.hideCell(cell);\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcell.colSpan = cellModel.colspan;\n\t\t\t\t\t\t\tcell.rowSpan = cellModel.rowspan;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tdom.showCell(cell);\n\t\t\t\t\t\tthis.renderBodyCell(cellModel, cell);\n\t\t\t\t\t\t// this.scheduleRenderBodyCell(cellModel, cell);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdom.hideCell(cell);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.style.display = 'table-row';\n\t\t\t\trow.className = rowModel.filterState > 1 ? `filtered` : '';\n\t\t\t} else {\n\t\t\t\trow.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n\n\tscheduleRenderBodyCell(cellModel: CellModel, cell: TableCell) {\n\t\tif (this.cellRenderSchedules.has(cell)) {\n\t\t\twindow.clearTimeout(this.cellRenderSchedules.get(cell));\n\t\t\tthis.cellRenderSchedules.delete(cell);\n\t\t}\n\t\tthis.cellRenderSchedules.set(cell, window.setTimeout(() => this.renderBodyCell(cellModel, cell)));\n\t}\n\n\tfixCellBorders(cell: TableCell, style: Style) {\n\t\tif (style.bottom?.style == 'none') {\n\t\t\tcell.style.borderBottomColor = 'transparent';\n\t\t}\n\t\tif (style.top?.style == 'none') {\n\t\t\tcell.style.borderTop = 'transparent';\n\t\t}\n\n\t\tif (style.right?.style == 'none') {\n\t\t\tcell.style.borderRight = 'transparent';\n\t\t}\n\t\tif (style.left?.style == 'none') {\n\t\t\tcell.style.borderLeft = 'transparent';\n\t\t}\n\t}\n\n\trenderBodyCell(cellModel: CellModel, cell?: TableCell) {\n\t\tconst force = !cell;\n\t\tcell = cell || this.getCellByCellModel(cellModel);\n\t\tif (cell) {\n\t\t\tlet div = (force ? null : this.bCache.get(cellModel.c, cellModel.r)) as HTMLDivElement;\n\t\t\tif (!div) {\n\t\t\t\tdiv = dom.createElement('div');\n\t\t\t\tgetCellRenderer(cellModel).call(this, div, cellModel);\n\t\t\t\tthis.bCache.set(cellModel.c, cellModel.r, div);\n\t\t\t}\n\n\t\t\tif (this.renderAll) {\n\t\t\t\t// do this only when rendering all cells for performance reasons, good for exports to raw html\n\t\t\t\tconst s = cellModel.composedStyle;\n\t\t\t\tif (s) this.fixCellBorders(cell, s);\n\t\t\t}\n\n\t\t\tdom.empty(cell);\n\t\t\tcell.appendChild(div);\n\t\t} else {\n\t\t\tthis.bCache.delete(cellModel.c, cellModel.r);\n\t\t}\n\t}\n\n\tmergeBodyCells(mergedCells: Merge[]) {\n\t\tlet cell: TableCell;\n\t\tconst skipSet = new Set<TableCell>();\n\t\tfor (const m of mergedCells) {\n\t\t\tcell = this.bRows[m.r].cells[m.c] as TableCell;\n\t\t\tif (!cell || skipSet.has(cell)) continue;\n\t\t\tfor (let r = m.r; r < m.r + m.rs; r++) {\n\t\t\t\tfor (let c = m.c; c < m.c + m.cs; c++) {\n\t\t\t\t\tcell = this.bRows[r].cells[c] as TableCell;\n\t\t\t\t\tif (!cell) continue;\n\t\t\t\t\tif (r == m.r && c == m.c) {\n\t\t\t\t\t\tcell.colSpan = m.cs;\n\t\t\t\t\t\tcell.rowSpan = m.rs;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tskipSet.add(cell);\n\t\t\t\t\t\tdom.hideCell(cell);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\n\t\t}\n\t}\n\t\n\trenderRowTree() {\n\t\tif (!this.model.hasRowTreeEnabled) return;\n\t\tlet cell: TableCell;\n\t\tconst viewport = this.viewport;\n\t\tconst cIndex = -this.rowHeaderCount;\n\t\tfor (let r = 0; r < this.bRows.length; r++) {\n\t\t\tcell = this.bRows[r].children[0] as TableCell;\n\t\t\tcell.innerHTML = '';\n\t\t\tif (r < viewport.rows.length) {\n\t\t\t\tcell.className = 'vtree';\n\t\t\t\tthis.renderRowTreeCell(cIndex, viewport.rows[r], cell )\n\t\t\t}\n\t\t}\n\t}\n\n\trenderRowTreeCell(cIndex: number, row: RowModel, th: HTMLTableCellElement) {\n\t\tlet div = this.bCache.get(cIndex, row.index) as HTMLDivElement & {expander: Expander};\n\t\tif (!div) {\n\t\t\tdiv = dom.createElement('div');\n\t\t\tthis.bCache.set(cIndex, row.index, div);\n\t\t\n\t\t\tconst rowHeight = row.height + 1;\n\t\t\tconst treeColWidth = this.treeHeaderWidth / this.model.maxRowLevel;\n\n\t\t\tif (row.hasChildren) {\n\t\t\t\tconst expander = new Expander();\n\t\t\t\texpander.addEventListener('toggle', () => this.grid.rendering.toggleRow(row.index));\n\t\t\t\t(th.parentElement as TableRow).expander = expander;\n\t\t\t\tdiv.expander = expander;\n\t\t\t\tdiv.appendChild(expander);\n\t\t\t\t\n\t\t\t\tdom.setPosition(expander, {\n\t\t\t\t\tt: rowHeight / 2 - constants.EXPANDER_SIZE / 2,\n\t\t\t\t\tl: row.level * treeColWidth + treeColWidth / 2 - constants.EXPANDER_SIZE / 2\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tconst line = this.createExpanderLine('v');\n\t\t\t\tdiv.appendChild(line);\n\n\t\t\t\tdom.setPosition(line, {\n\t\t\t\t\tt: this.model.options.rowTree.reversed ? 0 : (rowHeight / 2),\n\t\t\t\t\tl: row.level * treeColWidth + treeColWidth / 2\n\t\t\t\t});\n\n\t\t\t\tdom.setSize(line, {\n\t\t\t\t\tw: treeColWidth / 2,\n\t\t\t\t\th: rowHeight / 2 + 1\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tif (row.hasParent) {\n\t\t\t\tlet parent = row as RowModel;\n\t\t\t\twhile (parent.hasParent) {\n\t\t\t\t\tparent = parent.parent as RowModel;\n\t\t\t\t\tconst line = this.createExpanderLine('v');\n\t\t\t\t\tdiv.appendChild(line);\n\n\t\t\t\t\tdom.setSize(line, {\n\t\t\t\t\t\tw: treeColWidth / 2,\n\t\t\t\t\t\th: rowHeight + 2\n\t\t\t\t\t});\n\n\t\t\t\t\tdom.setPosition(line, {\n\t\t\t\t\t\tt: -1,\n\t\t\t\t\t\tl: parent.level * treeColWidth + treeColWidth / 2\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (div.expander) div.expander.state = row.collapsed ? 'closed' : 'open';\n\t\tth.appendChild(div);\n\t}\n\t//#endregion\n\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omegagrid/grid",
3
- "version": "0.6.71",
3
+ "version": "0.6.72",
4
4
  "license": "UNLICENSED",
5
5
  "description": "Universal datagrid component",
6
6
  "main": "./dist/index.js",
@@ -35,12 +35,12 @@
35
35
  "_prepublish": "yarn test && yarn lint"
36
36
  },
37
37
  "dependencies": {
38
- "@omegagrid/commands": "^0.6.71",
39
- "@omegagrid/core": "^0.6.71",
40
- "@omegagrid/grid-core": "^0.6.71",
41
- "@omegagrid/localize": "^0.6.71",
42
- "@omegagrid/tabs": "^0.6.71",
43
- "@omegagrid/tree": "^0.6.71",
38
+ "@omegagrid/commands": "^0.6.72",
39
+ "@omegagrid/core": "^0.6.72",
40
+ "@omegagrid/grid-core": "^0.6.72",
41
+ "@omegagrid/localize": "^0.6.72",
42
+ "@omegagrid/tabs": "^0.6.72",
43
+ "@omegagrid/tree": "^0.6.72",
44
44
  "@stdlib/stats": "^0.0.13",
45
45
  "date-fns": "^3.2.0",
46
46
  "lit": "^3.1.1",