@omegagrid/grid 0.11.17 → 0.11.19

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 +1 @@
1
- {"version":3,"file":"grid.rendering.js","sourceRoot":"","sources":["../../src/ui/grid.rendering.ts"],"names":[],"mappings":"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","sourcesContent":["import { Direction, dom, getThemeManager, utils } from \"@omegagrid/core\";\nimport { debounce } from \"ts-debounce\";\nimport { CellModel, ColumnModel, RowModel, CellRange, gridConstants as constants, RangeAddress } from \"@omegagrid/grid-core\";\nimport { Grid } from \"./grid\";\nimport { Table, TableRenderOptions, TableRow } from \"./table\";\nimport { GridEvent } from \"./grid.events\";\nimport { getCellRenderer } from \"../renderers\";\nimport { CELL_BORDER_WIDTH, CELL_PADDING } from \"./table.styles\";\nimport { RequestFilters } from \"../gridAdapter\";\nimport { createThemeVariablesCss } from \"@omegagrid/core\";\n\nexport type RefreshOptions = {\n\tvertical?: boolean,\n\thorizontal?: boolean\n\trerenderTable?: boolean\n};\n\n/** Room the column autofit leaves around the content, the cell chrome included. */\nconst AUTOFIT_COLUMN_SPACE = 22;\n\n/**\n * The width the table gives a cell for its content when its row is autofitted: the column width, for a merged\n * cell the width of the shown columns it spans. Null for a cell that must not size the row: one in a column\n * that is not shown (hidden or in a collapsed group), one covered by a merge, or a merge that spans other rows as well.\n * @param visibleColumns the columns the table shows (`model.visibleColumns`)\n */\nexport function autofitCellWidth(cell: CellModel, visibleColumns: ReadonlySet<ColumnModel>): number|null {\n\tif (!visibleColumns.has(cell.column)) return null;\n\tconst merges = cell.model.merges;\n\tif (merges.hiddenCells.has(cell.address)) return null;\n\tconst merge = merges.mergedCells.get(cell.address);\n\tif (!merge) return cell.column.width;\n\tif (merge.rs > 1) return null;\n\tlet width = 0;\n\tfor (let c = merge.c; c < merge.c + merge.cs; c++) {\n\t\tconst column = cell.model.columns[c];\n\t\tif (column && visibleColumns.has(column)) width += column.width;\n\t}\n\treturn width;\n}\n\n/**\n * The columns (or rows) a double click on the divider of `node` autofits. Like in Excel: all the selected ones\n * when the selection covers whole columns (rows) and `node` is among them, otherwise `node` alone.\n * @param visibleNodes the columns (rows) the table shows (`model.visibleColumns` / `model.visibleRows`)\n * @param whole whether the selection covers whole columns (rows)\n * @param from the selected index span, in either order (a selection dragged backwards is not normalized)\n */\nexport function autofitTargets<T extends {index: number}>(node: T, visibleNodes: readonly T[], whole: boolean, from: number, to: number): T[] {\n\tconst [first, last] = [Math.min(from, to), Math.max(from, to)];\n\tif (!whole || node.index < first || node.index > last) return [node];\n\treturn visibleNodes.filter(n => n.index >= first && n.index <= last);\n}\n\nexport class GridRendering {\n\n\trequireVerticalUpdate = true;\n\trequireHorizontalUpdate = false;\n\t/** touch position whose movement has not been turned into scrolling yet (GridEvents._onTouchMove) */\n\ttouchAnchor: {x: number, y: number};\n\tresizing = false;\n\tcurrentResizedColumn: ColumnModel;\n\tcurrentResizedColumnWidth: number;\n\tcurrentResizedRow: RowModel;\n\tcurrentResizedRowHeight: number;\n\n\tprivate _vScrolling = true;\n\tget vScrolling() { return this._vScrolling }\n\tprivate _hScrolling = true;\n\tget hScrolling() { return this._hScrolling }\n\n\tget model() { return this.grid.model }\n\tget selection() { return this.grid.selection }\n\tget table() { return this.grid.table }\n\n\tconstructor(readonly grid: Grid) { }\n\n\treadonly debounceRenderCells = debounce(this.renderCells, 50, {isImmediate: false, maxWait: 100});\n\treadonly debounceCalculateViewport = debounce(this.calculateViewport, 200);\n\n\tisLastRowInViewport() {\n\t\tconst viewportRows = this.grid.table.viewport.rows;\n\t\tconst visibleRows = this.model.visibleRows;\n\t\treturn viewportRows[viewportRows.length - 1] == visibleRows[visibleRows.length - 1];\n\t}\n\n\trenderCells(update?: TableRenderOptions) {\n\t\tupdate = update || {vertical: this.requireVerticalUpdate, horizontal: this.requireHorizontalUpdate};\n\t\tthis.grid.comment.deatach();\n\t\tthis.grid.table.renderCells(update);\n\t\tthis.requireHorizontalUpdate = false;\n\t\tthis.requireVerticalUpdate = false;\n\t\tthis.debounceCalculateViewport();\n\t\tthis.grid.objects.updatePostions();\n\t}\n\n\trenderAll(rerenderTable = false) {\n\t\tif (this.grid.group) this.grid.group.grids.forEach((g: Grid) => g.rendering.render(rerenderTable));\n\t\telse this.render(rerenderTable);\n\t}\n\n\tasync render(rerenderTable = false) {\n\t\tif (!this.grid.table || !this.model) return;\n\t\tthis.grid.table.clearHeaderCache();\n\t\tthis.grid.table.clearBodyCache();\n\t\tif (this.grid.table.isConnected) {\n\t\t\tif (rerenderTable) {\n\t\t\t\tthis.grid.table.requestUpdate();\n\t\t\t\tawait this.grid.table.updateComplete;\n\t\t\t}\n\t\t\tthis.grid.table.renderCells({horizontal: true, vertical: true});\n\t\t\tthis.calculateViewport();\n\t\t}\n\t}\n\n\tupdateRange(range: CellRange, recalculate = false) {\n\t\tfor (const cell of this.model.getRangeIterator(range)) {\n\t\t\tthis.updateCells([cell], recalculate);\n\t\t}\n\t}\n\n\tupdateCell(cell: CellModel, recalculate = false) {\n\t\tthis.updateCells([cell], recalculate);\n\t}\n\n\tupdateSpilledCells(cell: CellModel) {\n\t\tlet spillCells: Set<CellModel>;\n\t\tif (cell.prevSpillRange) {\n\t\t\tspillCells = new Set();\n\t\t\tthis.model.getRangeIterator(cell.prevSpillRange).forEach(cell => spillCells.add(cell));\n\t\t}\n\t\tif (cell.spillRange) {\n\t\t\tspillCells = spillCells || new Set();\n\t\t\tthis.model.getRangeIterator(cell.spillRange).forEach(cell => spillCells.add(cell));\n\t\t}\n\t\tif (spillCells?.size > 0) this.updateCells(spillCells);\n\t}\n\n\tupdateCells(cells: Iterable<CellModel>, recalculate = false) {\n\t\tif (recalculate) {\n\t\t\tfor (const cell of cells) {\n\t\t\t\tcell.invalidateStyle();\n\t\t\t\tcell.invalidateValue();\n\t\t\t\tthis.model.calculations.clearDependecies(cell).evaluate(cell);\n\t\t\t\tthis.updateSpilledCells(cell);\n\t\t\t}\n\t\t}\n\n\t\tconst table = this.grid.table;\n\t\tfor (const cell of cells) table.renderBodyCell(cell);\n\n\t\tif (recalculate) {\n\t\t\tthis.model.calculations.invalidateDependants(cells).forEach((sheet, cell) => {\n\t\t\t\tif (sheet) this.grid.group.getGrid(sheet)?.table.renderBodyCell(cell);\n\t\t\t\telse table.renderBodyCell(cell);\n\t\t\t\tthis.updateSpilledCells(cell);\n\t\t\t});\n\t\t\tthis.grid.dispatchGridEvent('calculate', { cells: Array.from(cells) });\n\t\t}\n\t}\n\n\tupdateHeaders() {\n\t\tthis.model.indexVisibleColumns();\n\t\tthis.table.clearHeaderCache();\n\t\tthis.table.createHeaderRows();\n\t\tthis.table.renderHeader();\n\t}\n\n\tcalculateViewport(recalculate = false) {\n\t\tthis.grid.logger.info('calculate viwport');\n\t\tthis.updateCells(this.model.calculateViewport(), recalculate);\n\t}\n\n\tupdateSliders() {\n\t\tconst ws = this.table.viewportSize;\n\t\tthis.grid.vSlider.maxValue = this.model.visibleRows.length;\n\t\tthis.grid.vSlider.pageSize = ws.h / this.model.options.rowHeight;\n\t\tthis.grid.vSlider.value = this.table.rowOffset;\n\t\tthis.grid.hSlider.maxValue = this.model.visibleColumns.length;\n\t\tthis.grid.hSlider.pageSize = ws.w / this.model.options.columnWidth;\n\t\tthis.grid.hSlider.value = this.table.colOffset;\n\t}\n\n\tisVerticalScrollingEnabled() {\n\t\treturn this.grid.options.scrolling.verticalOverscroll !== false\n\t\t\t|| this.table.viewport.rows.length < this.model.visibleRows.length;\n\t}\n\n\tisHorizontalScrollingEnabled() {\n\t\treturn this.grid.options.scrolling.horizontalOverscroll !== false\n\t\t\t|| this.table.viewport.columns.length < this.model.visibleColumns.length;\n\t}\n\n\tupdateSliderVisibility() {\n\t\tthis._vScrolling = this.isVerticalScrollingEnabled();\n\t\tif (this._vScrolling) {\n\t\t\tthis.grid.vSlider.show();\n\t\t\tdom.showElement(this.grid.vSlider);\n\t\t} else {\n\t\t\tthis.grid.vSlider.hide();\n\t\t\tdom.hideElement(this.grid.vSlider);\n\t\t}\n\n\t\tthis._hScrolling = this.isHorizontalScrollingEnabled();\n\t\tif (this._hScrolling) {\n\t\t\tthis.grid.hSlider.show();\n\t\t\tdom.showElement(this.grid.hSlider);\n\t\t} else {\n\t\t\tthis.grid.hSlider.hide();\n\t\t\tdom.hideElement(this.grid.hSlider);\n\t\t}\n\t}\n\n\thideSliders() {\n\t\tthis.grid.vSlider.hide();\n\t\tthis.grid.hSlider.hide();\n\t}\n\n\tscrollVerticalByPixels(pixels: number) {\n\t\tif (!this.vScrolling) return;\n\n\t\tlet topRow = this.table.rowOffset;\n\t\tlet top = 0, r = 0;\n\t\tlet row: RowModel;\n\n\t\tif (pixels > 0) {\n\t\t\twhile (top < pixels && topRow + r < this.model.visibleRows.length) {\n\t\t\t\ttop += this.model.visibleRows[topRow + (r++)].height + 2;\n\t\t\t}\n\t\t\ttopRow = topRow + r;\n\t\t} else if (pixels < 0) {\n\t\t\tpixels = Math.abs(pixels);\n\t\t\twhile (top < pixels && topRow + r >= 0) {\n\t\t\t\trow = this.model.visibleRows[Math.min(this.model.visibleRows.length - 1, topRow + (r--))];\n\t\t\t\ttop += (row ? row.height : 0) + 2;\n\t\t\t}\n\t\t\ttopRow = topRow + r;\n\t\t}\n\n\t\tif (topRow >= this.model.visibleRows.length) topRow = this.model.visibleRows.length - 1;\n\n\t\tthis.requireVerticalUpdate = true;\n\t\tthis.table.rowOffset = Math.max(0, topRow);\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t}\n\n\tscrollHorizontalByPixels(pixels: number) {\n\t\tif (!this.hScrolling) return;\n\n\t\tlet leftCol = this.table.colOffset;\n\t\tlet left = 0, c = 0;\n\t\tif (pixels > 0) {\n\t\t\twhile (left < pixels && leftCol + c < this.model.visibleColumns.length) {\n\t\t\t\tleft += this.model.visibleColumns[leftCol + (c++)].width + 2;\n\t\t\t}\n\t\t\tleftCol = leftCol + c;\n\t\t} else if (pixels < 0) {\n\t\t\tpixels = Math.abs(pixels);\n\t\t\twhile (left < pixels && leftCol + c >= 0) {\n\t\t\t\tleft += this.model.visibleColumns[Math.min(this.model.visibleColumns.length - 1, leftCol + (c--))].width + 2;\n\t\t\t}\n\t\t\tleftCol = leftCol + c;\n\t\t}\n\n\t\tif (leftCol >= this.model.visibleColumns.length) leftCol = this.model.visibleColumns.length - 1;\n\n\t\tthis.requireHorizontalUpdate = true;\n\t\tthis.table.colOffset = Math.max(0, leftCol);\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t}\n\n\t/**\n\t * Touch panning: scrolls by the whole columns whose widths fit into `pixels`, so the content follows the finger\n\t * (scrollHorizontalByPixels rounds up to the next column, right for the wheel, a jump under a finger).\n\t * Returns the pixels actually scrolled - the caller keeps the remainder for the next move.\n\t */\n\tpanHorizontal(pixels: number): number {\n\t\tif (!this.hScrolling) return 0;\n\t\tconst columns = this.model.visibleColumns;\n\t\tconst freeze = this.table.freezeLeft || 0;\n\t\tconst max = Math.max(0, columns.length - 1 - freeze);\n\t\tlet offset = Math.min(this.table.colOffset, max), scrolled = 0;\n\t\tif (pixels > 0) {\n\t\t\twhile (offset < max && scrolled + columns[freeze + offset].width <= pixels) scrolled += columns[freeze + offset++].width;\n\t\t} else {\n\t\t\twhile (offset > 0 && scrolled - columns[freeze + offset - 1].width >= pixels) scrolled -= columns[freeze + --offset].width;\n\t\t}\n\t\tif (offset == this.table.colOffset) return 0;\n\t\tthis.table.colOffset = offset;\n\t\tthis.requireHorizontalUpdate = true;\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t\treturn scrolled;\n\t}\n\n\t/** vertical counterpart of panHorizontal */\n\tpanVertical(pixels: number): number {\n\t\tif (!this.vScrolling) return 0;\n\t\tconst rows = this.model.visibleRows;\n\t\tconst freeze = this.model.options.freezeTop || 0;\n\t\tconst max = Math.max(0, rows.length - 1 - freeze);\n\t\tlet offset = Math.min(this.table.rowOffset, max), scrolled = 0;\n\t\tif (pixels > 0) {\n\t\t\twhile (offset < max && scrolled + rows[freeze + offset].height <= pixels) scrolled += rows[freeze + offset++].height;\n\t\t} else {\n\t\t\twhile (offset > 0 && scrolled - rows[freeze + offset - 1].height >= pixels) scrolled -= rows[freeze + --offset].height;\n\t\t}\n\t\tif (offset == this.table.rowOffset) return 0;\n\t\tthis.table.rowOffset = offset;\n\t\tthis.requireVerticalUpdate = true;\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t\treturn scrolled;\n\t}\n\n\t/**\n\t * Sets colOffset so that the column with model index `c` is whole in the viewport (a column wider than the\n\t * viewport gets aligned to its left edge). Works from the model sizes, so the column need not be rendered.\n\t * Returns true when colOffset changed - the caller renders.\n\t */\n\tscrollColumnIntoView(c: number): boolean {\n\t\tconst column = this.model.columns[c];\n\t\tif (!column?.visible || this.table.renderAll) return false;\n\t\tconst columns = this.model.visibleColumns;\n\t\tconst index = columns.indexOf(column);\n\t\tconst freeze = this.table.freezeLeft || 0;\n\t\tconst freezeRight = this.model.options.freezeRight || 0;\n\t\t// frozen columns are always visible\n\t\tif (index < freeze || index >= columns.length - freezeRight) return false;\n\t\tlet available = this.table.viewportSize.w;\n\t\tfor (let i = 0; i < freeze; i++) available -= columns[i].width + 1;\n\t\tfor (let i = columns.length - freezeRight; i < columns.length; i++) available -= columns[i].width + 1;\n\t\tconst offset = this._offsetIntoView(columns, freeze, this.table.colOffset, index, available, col => col.width + 1);\n\t\tif (offset == this.table.colOffset) return false;\n\t\tthis.table.colOffset = offset;\n\t\treturn true;\n\t}\n\n\t/** vertical counterpart of scrollColumnIntoView */\n\tscrollRowIntoView(r: number): boolean {\n\t\tconst row = this.model.rows[r];\n\t\tif (!row?.visible || this.table.renderAll) return false;\n\t\tconst rows = this.model.visibleRows;\n\t\tconst index = rows.indexOf(row);\n\t\tconst freeze = this.model.options.freezeTop || 0;\n\t\tconst freezeBottom = this.model.options.freezeBottom || 0;\n\t\tif (index < freeze || index >= rows.length - freezeBottom) return false;\n\t\tlet available = this.table.viewportSize.h;\n\t\tfor (let i = 0; i < freeze; i++) available -= rows[i].height + 1;\n\t\tfor (let i = rows.length - freezeBottom; i < rows.length; i++) available -= rows[i].height + 1;\n\t\tconst offset = this._offsetIntoView(rows, freeze, this.table.rowOffset, index, available, row => row.height + 1);\n\t\tif (offset == this.table.rowOffset) return false;\n\t\tthis.table.rowOffset = offset;\n\t\treturn true;\n\t}\n\n\t/**\n\t * The smallest change of `offset` (items scrolled out behind the `freeze` fixed ones) that shows item `target`\n\t * whole within `available` pixels. Sizes include the 1px collapsed cell border.\n\t */\n\tprivate _offsetIntoView<T>(items: T[], freeze: number, offset: number, target: number, available: number, sizeOf: (item: T) => number) {\n\t\t// before the viewport: align it right behind the fixed items\n\t\tif (target < freeze + offset) return target - freeze;\n\t\tlet size = 0;\n\t\tfor (let i = freeze + offset; i <= target; i++) size += sizeOf(items[i]);\n\t\t// already whole in the viewport\n\t\tif (size <= available) return offset;\n\t\t// behind the viewport: scroll just enough, keeping as many items before it as still fit\n\t\tlet first = target;\n\t\tsize = sizeOf(items[target]);\n\t\twhile (first > freeze + offset && size + sizeOf(items[first - 1]) <= available) size += sizeOf(items[--first]);\n\t\treturn first - freeze;\n\t}\n\n\tupdateCellSelectionRange() {\n\t\tconst table = this.table;\n\t\tfor (const cell of this.model.getRangeIterator(this.selection.range, false)) {\n\t\t\ttable.renderBodyCell(cell);\n\t\t}\n\t}\n\n\tgetAdapterRequestFilters(): RequestFilters {\n\t\treturn {\n\t\t\toffset: 0,\n\t\t\tfilter: this.model?.filter ? Array.from(this.model.filter.settings.values()) : null,\n\t\t\torder: this.model?.sorting?.settings\n\t\t};\n\t}\n\n\tasync toggleRow(index: number, dispatchEvent = true) {\n\t\tconst row = this.model.rows[index];\n\t\tif (row.isLoaded || row.isPartialyLoaded) {\n\t\t\trow.toggleCollapse(false, this.model.options.unhideRowAfterExpand);\n\t\t\tthis.table.renderCells({vertical: true});\n\t\t} else if (this.grid.adapter) {\n\t\t\tconst tr = this.table.getRowByModelIndex(index) as TableRow;\n\t\t\tif (tr && tr.expander) tr.expander.state = 'waiting';\n\n\t\t\trow.collapsed = false;\n\n\t\t\tconst requestFilters = Object.assign(this.getAdapterRequestFilters(), {\n\t\t\t\tparent: {r: row.index, props: row.properties}\n\t\t\t})\n\n\t\t\tconst [newRowSources] = await Promise.all([this.grid.adapter.getRows(requestFilters)]);\n\t\t\tthis.model.insertRowData(row, 0, newRowSources);\n\n\t\t\trequestFilters.rows = newRowSources;\n\t\t\tconst [newCellSources] = await Promise.all([this.grid.adapter.getCells(requestFilters)]);\n\t\t\tnewCellSources?.map(cellSource => this.model.getCellByCoords(cellSource.r, cellSource.c)?.update(cellSource));\n\n\t\t\tthis.table.requestUpdate();\n\t\t}\n\n\t\tthis.updateSliders();\n\t\tif (dispatchEvent) this.grid.dispatchEvent(new GridEvent('row.toggle', {grid: this.grid, row}));\n\t}\n\n\ttoggleColumn(index: number, dispatchEvent = true) {\n\t\tconst column = this.model.columns[index];\n\t\tcolumn.toggleCollapse(false, this.model.options.unhideColumnAfterExpand);\n\t\tthis.table.renderCells({horizontal: true});\n\t\tthis.updateSliders();\n\t\tif (dispatchEvent) this.grid.dispatchEvent(new GridEvent('column.toggle', {grid: this.grid, column }));\n\t}\n\n\tsetRowExpandLevel(level: number) {\n\t\tthis.model.setRowExpandLevel(level);\n\t\tthis.table.rowOffset = 0;\n\t\tthis.table.renderCells({vertical: true});\n\t\tthis.updateSliders();\n\t\tthis.grid.dispatchEvent(new GridEvent('row.toggle', {grid: this.grid}));\n\t}\n\n\tsetColumnExpandLevel(level: number) {\n\t\tthis.model.setColumnExpandLevel(level);\n\t\tthis.table.colOffset = 0;\n\t\tthis.table.renderCells({horizontal: true});\n\t\tthis.updateSliders();\n\t\tthis.grid.dispatchEvent(new GridEvent('column.toggle', {grid: this.grid}));\n\t}\n\n\tasync exportHTML() {\n\t\tconst div = dom.createElement<HTMLDivElement>('div');\n\t\tdom.hideElement(div);\n\t\tdocument.body.appendChild(div);\n\t\tconst table = dom.createElement<Table>('og-table');\n\t\ttable.grid = this.grid;\n\t\ttable.model = this.model;\n\t\ttable.renderAll = true;\n\t\tdiv.appendChild(table);\n\t\tawait table.updateComplete;\n\n\t\tconst rowBreaks = this.model.options?.print?.rowBreaks;\n\t\tconst tableElm = table.table;\n\n\t\t// split table into multiple tables if page breaks are defined\n\t\tconst hasRowBreaks = rowBreaks && rowBreaks.length > 0;\n\t\tif (hasRowBreaks) {\n\t\t\tconst colgroup = tableElm.querySelector('colgroup');\n\t\t\tconst rows = [...tableElm.tBodies[0].rows];\n\n\t\t\tconst rowTitlesRange = this.model.options?.print?.rowTitles\n\t\t\t\t? CellRange.fromA1(this.model.options?.print?.rowTitles) : null;\n\n\t\t\tconst rowTitles = rowTitlesRange ? Array.from({\n\t\t\t\tlength: rowTitlesRange.r2 - rowTitlesRange.r1 + 1},\n\t\t\t\t(_, i) => rows[table.rowMap.get(rowTitlesRange.r1 + i)]\n\t\t\t) : [];\n\n\t\t\tfor (let i = 0; i < rowBreaks.length; i++) {\n\t\t\t\tconst tableElm2 = dom.createElement<HTMLTableElement>('table');\n\t\t\t\ttableElm2.appendChild(colgroup.cloneNode(true));\n\t\t\t\tconst tbody = dom.createElement<HTMLTableSectionElement>('tbody');\n\t\t\t\ttableElm2.appendChild(tbody);\n\n\t\t\t\tconst rMin = table.rowMap.get(rowBreaks[i]);\n\t\t\t\tconst rMax = i < rowBreaks.length - 1\n\t\t\t\t\t? table.rowMap.get(rowBreaks[i + 1])\n\t\t\t\t\t: this.model.visibleRows.length - 1;\n\n\t\t\t\trowTitles.forEach(row => tbody.appendChild(row.cloneNode(true)));\n\n\t\t\t\tfor (let r = rMin; r <= rMax; r++) {\n\t\t\t\t\ttbody.appendChild(rows[r]);\n\t\t\t\t}\n\n\t\t\t\ttable.shadowRoot.appendChild(tableElm2);\n\t\t\t}\n\n\t\t\tcolgroup.cloneNode(true);\n\t\t}\n\n\t\tconst tableCss = `\n\t\t\t<style>\n\t\t\t\thtml {\n\t\t\t\t\t${createThemeVariablesCss(getThemeManager().themes.get('og-light')).cssText}\n\t\t\t\t}\n\t\t\t\t${hasRowBreaks ? 'table {break-after: page}' : ''}\n\t\t\t\t${Table.styles.map(style => style.cssText).join('\\n')}\n\t\t\t</style>\\n\n\t\t`;\n\n\t\tconst html = tableCss + table.shadowRoot.innerHTML.replace(/<!---->/g, '');\n\t\tdiv.remove();\n\t\treturn html;\n\t}\n\n\tautoscrollDirection: Direction;\n\tautoscrollTimer: number;\n\tautoscrollValue: number;\n\n\tstopAutoscroll() {\n\t\tif (this.autoscrollTimer) {\n\t\t\twindow.clearInterval(this.autoscrollTimer);\n\t\t}\n\t}\n\n\tstartAutoscroll() {\n\t\tthis.stopAutoscroll();\n\t\tthis.autoscrollTimer = window.setInterval(() => {\n\t\t\tif (this.autoscrollValue == 0) return this.stopAutoscroll();\n\t\t\tconst amount = Math.pow(this.autoscrollValue, constants.AUTOSCROLL_RATIO);\n\t\t\tswitch (this.autoscrollDirection) {\n\t\t\t\tcase 'down': this.scrollVerticalByPixels(amount); break;\n\t\t\t\tcase 'up': this.scrollVerticalByPixels(-amount); break;\n\t\t\t\tcase 'left': this.scrollHorizontalByPixels(-amount); break;\n\t\t\t\tcase 'right': this.scrollHorizontalByPixels(amount); break;\n\t\t\t}\n\t\t}, constants.AUTOSCROLL_INTERVAL);\n\t}\n\n\tautoscroll(moousePosition: {x: number, y: number}) {\n\t\tconst { x, y } = moousePosition;\n\t\tconst w = (this.table.clientWidth / this.table.zoom) - this.table.totalHeaderWidth;\n\t\tconst h = (this.table.clientHeight / this.table.zoom) - (this.table.totalHeaderHeight);\n\t\tlet direction: Direction;\n\t\tlet value = 0;\n\n\t\tif (x < constants.AUTOSCROLL_TRESHOLD && x < y && x < h - y) {\n\t\t\tdirection = 'left';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - x;\n\t\t} else if (w - x < constants.AUTOSCROLL_TRESHOLD && w - x < y && w - x < h - y) {\n\t\t\tdirection = 'right';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - w + x;\n\t\t} else if (y < constants.AUTOSCROLL_TRESHOLD) {\n\t\t\tdirection = 'up';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - y;\n\t\t} else if (h - y < constants.AUTOSCROLL_TRESHOLD) {\n\t\t\tdirection = 'down';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - h + y;\n\t\t}\n\n\t\tthis.autoscrollDirection = direction;\n\t\tthis.autoscrollValue = value;\n\t\tthis.stopAutoscroll();\n\t\tif (value > 0) {\n\t\t\tthis.startAutoscroll();\n\t\t}\n\t}\n\n\tasync load(requestFilters?: RequestFilters) {\n\t\trequestFilters = requestFilters || this.getAdapterRequestFilters();\n\t\tconst parentIndex = requestFilters.parent?.r ?? null;\n\t\tconst parentRow = parentIndex != null ? this.model.rows[parentIndex] : this.model.rowRoot;\n\n\t\tconst [newRowSources] = await Promise.all([this.grid.adapter.getRows(requestFilters)]);\n\t\tif (newRowSources.length > 0 && parentIndex === null) {\n\t\t\tthis.model.insertRowData(parentRow, requestFilters.offset, newRowSources);\n\t\t}\n\n\t\tconst [newCellSources] = await Promise.all([this.grid.adapter.getCells(requestFilters)]);\n\t\tnewCellSources?.map(cellSource => this.model.getCellByCoords(cellSource.r, cellSource.c)?.update(cellSource));\n\n\t\tthis.table.requestUpdate();\n\n\t\tif (newRowSources.length >= this.model.options.pageSize) parentRow.count = Infinity;\n\t\telse parentRow.count = parentRow.children.length;\n\n\t\tthis.grid.logger.info(`loaded ${newRowSources.length} rows`);\n\t\tthis.grid.loading = false;\n\t\tthis.grid.dispatchEvent(new GridEvent('afterLoad', {grid: this.grid}));\n\t}\n\n\tasync loadNextPage(parentIndex: number = null, forceLoad = false) {\n\t\tif (this.grid.loading) return;\n\t\tconst parentRow = parentIndex != null ? this.model.rows[parentIndex] : this.model.rowRoot;\n\t\tif (!forceLoad && parentRow.isLoaded) return;\n\n\t\tthis.grid.dispatchEvent(new GridEvent('beforeLoad', {grid: this.grid}));\n\t\tthis.grid.loading = true;\n\n\t\tconst offset = this.model.rows.length;\n\t\tthis.grid.logger.info(`loading rows offset = ${offset}`);\n\n\t\tawait this.load(Object.assign(this.getAdapterRequestFilters(), {\n\t\t\toffset: offset,\n\t\t\tparent: {r: parentIndex, props: null}\n\t\t}));\n\t}\n\n\tget totalSize() { return {\n\t\twidth: this.table.totalHeaderWidth + this.model.visibleColumns.reduce((acc, col) => acc + col.width, 0),\n\t\theight: this.table.thead.offsetHeight + this.model.visibleRows.reduce((acc, row) => acc + row.height, 0)\n\t} }\n\n\tprivate autofitDiv: HTMLDivElement;\n\n\t/**\n\t * The detached div the autofit renders cells into, reset and given the chrome of a body cell\n\t * (`td>div` in table.styles, font size and line height of the table style) so that it measures\n\t * what the table shows. The renderers leave inline styles and classes behind, hence the reset per cell.\n\t * @param width the width the table gives the cell, `'auto'` to measure the content width\n\t */\n\tprivate prepareAutofitDiv(width: number|'auto') {\n\t\tconst div = this.autofitDiv ?? (this.autofitDiv = dom.createElement<HTMLDivElement>('div'));\n\t\tdom.empty(div);\n\t\tdiv.className = '';\n\t\tdiv.removeAttribute('style');\n\t\tdom.setPosition(div, {l: -10000, t: -10000});\n\t\tdiv.style.visibility = 'hidden';\n\t\tdiv.style.boxSizing = 'border-box';\n\t\tdiv.style.border = `${CELL_BORDER_WIDTH}px solid transparent`;\n\t\tdiv.style.padding = `0 ${CELL_PADDING}px`;\n\t\tdiv.style.fontSize = dom.numToPixels(this.table.cellFontSize);\n\t\tdiv.style.lineHeight = dom.numToPixels(this.table.rowLineHeight);\n\t\tdiv.style.whiteSpace = 'nowrap';\n\t\tdiv.style.width = width === 'auto' ? 'auto' : dom.numToPixels(width);\n\t\tif (!div.isConnected) this.grid.shadowRoot.appendChild(div);\n\t\treturn div;\n\t}\n\n\tprivate renderToAutofitDiv(cell: CellModel, width: number|'auto'): HTMLDivElement {\n\t\tconst div = this.prepareAutofitDiv(width);\n\t\treturn getCellRenderer(cell).call(this.table, div, cell) || div;\n\t}\n\n\t/** Width of the content rendered into the autofit div: the client width less the padding, so the border rendering (1.5px snaps to device pixels) does not get in. */\n\tprivate autofitContentWidth(div: HTMLDivElement) {\n\t\treturn div.clientWidth - 2 * CELL_PADDING;\n\t}\n\n\t/** Drops the last measured cell from the autofit div: its elements (buttons, expanders) would keep the cell and its model alive. */\n\tprivate releaseAutofitDiv() {\n\t\tif (this.autofitDiv) dom.empty(this.autofitDiv);\n\t}\n\n\tautofitColumn(c: number|ColumnModel, visibleValuesOnly = false, rerender = true) {\n\t\tconst column = typeof c === 'number' ? this.model.columns[c] : c;\n\t\tlet maxWidth = 0;\n\t\tfor (const cell of this.model.getRangeIterator(CellRange.fromA1(column.address), !!visibleValuesOnly)) {\n\t\t\tmaxWidth = Math.max(maxWidth, this.autofitContentWidth(this.renderToAutofitDiv(cell, 'auto')));\n\t\t}\n\t\tif (column.header) {\n\t\t\tconst div = this.prepareAutofitDiv('auto');\n\t\t\tfor (const h of column.header) {\n\t\t\t\tif (!h) continue;\n\t\t\t\tif (h.html) div.innerHTML = h.label ?? '';\n\t\t\t\telse div.innerText = h.label ?? '';\n\t\t\t\tmaxWidth = Math.max(maxWidth, this.autofitContentWidth(div));\n\t\t\t}\n\t\t}\n\t\tthis.releaseAutofitDiv();\n\t\tcolumn.width = maxWidth + AUTOFIT_COLUMN_SPACE;\n\n\t\t// limit max column width to 90% of the table body\n\t\tmaxWidth = (this.grid.offsetWidth - (this.table?.totalHeaderWidth ?? 0)) * 0.9;\n\t\tif (maxWidth > 0 && column.width > maxWidth) column.width = maxWidth;\n\n\t\tif (rerender) this.table.renderCells({horizontal: true});\n\t}\n\n\tautofitColumns(visibleValuesOnly = false) {\n\t\tthis.model.columns.forEach(col => this.autofitColumn(col, visibleValuesOnly, false));\n\t\tthis.table.renderCells({horizontal: true});\n\t}\n\n\tautofitRow(r: number|RowModel, visibleValuesOnly = false, rerender = true) {\n\t\tconst row = typeof r === 'number' ? this.model.rows[r] : r;\n\t\tconst table = this.table;\n\t\tconst visibleColumns = new Set(this.model.visibleColumns);\n\t\tlet maxHeight = table.rowLineHeight; // an empty row keeps one line\n\t\tfor (const cell of this.model.getRangeIterator(CellRange.fromA1(row.address), !!visibleValuesOnly)) {\n\t\t\tconst width = autofitCellWidth(cell, visibleColumns);\n\t\t\tif (width == null) continue;\n\t\t\t// the cell wraps within the width the table gives it; clientHeight is the content without the border\n\t\t\tmaxHeight = Math.max(maxHeight, this.renderToAutofitDiv(cell, width).clientHeight);\n\t\t}\n\t\tthis.releaseAutofitDiv();\n\t\t// the default row is one line plus a pixel - keep the same around the measured lines\n\t\trow.height = maxHeight + table.defaultRowHeight - table.rowLineHeight;\n\t\tif (rerender) this.table.renderCells({vertical: true});\n\t}\n\n\tautofitRows(visibleValuesOnly = false) {\n\t\tthis.model.rows.forEach(row => this.autofitRow(row, visibleValuesOnly, false));\n\t\tthis.table.renderCells({vertical: true});\n\t}\n\n\t/**\n\t * Autofits `column` or, when the selection covers whole columns including it, all the selected columns (see autofitTargets).\n\t * @returns the autofitted columns\n\t */\n\tautofitColumnWithSelection(column: ColumnModel): ColumnModel[] {\n\t\tconst range = this.grid.selection.range;\n\t\tconst columns = autofitTargets(column, this.model.visibleColumns, range.isColumn, range.c1, range.c2);\n\t\tcolumns.forEach(col => this.autofitColumn(col, false, false));\n\t\tthis.table.renderCells({horizontal: true});\n\t\treturn columns;\n\t}\n\n\t/**\n\t * Autofits `row` or, when the selection covers whole rows including it, all the selected rows (see autofitTargets).\n\t * @returns the autofitted rows\n\t */\n\tautofitRowWithSelection(row: RowModel): RowModel[] {\n\t\tconst range = this.grid.selection.range;\n\t\tconst rows = autofitTargets(row, this.model.visibleRows, range.isRow, range.r1, range.r2);\n\t\trows.forEach(r => this.autofitRow(r, false, false));\n\t\tthis.table.renderCells({vertical: true});\n\t\treturn rows;\n\t}\n\n\tscrollTo(r: number|RangeAddress, c = 0) {\n\t\tlet range: CellRange;\n\t\tif (utils.isString(r)) range = CellRange.fromA1(r as RangeAddress);\n\t\telse range = new CellRange(c, r as number);\n\n\t\tthis.table.rowOffset = range.r1;\n\t\tthis.table.colOffset = range.c1;\n\t\tthis.requireVerticalUpdate = true;\n\t\tthis.requireHorizontalUpdate = true;\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t}\n\n}\n"]}
1
+ {"version":3,"file":"grid.rendering.js","sourceRoot":"","sources":["../../src/ui/grid.rendering.ts"],"names":[],"mappings":"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","sourcesContent":["import { Direction, dom, getThemeManager, utils } from \"@omegagrid/core\";\nimport { debounce } from \"ts-debounce\";\nimport { CellModel, ColumnModel, RowModel, CellRange, gridConstants as constants, RangeAddress } from \"@omegagrid/grid-core\";\nimport { Grid } from \"./grid\";\nimport { Table, TableRenderOptions, TableRow } from \"./table\";\nimport { GridEvent } from \"./grid.events\";\nimport { getCellRenderer } from \"../renderers\";\nimport { CELL_BORDER_WIDTH, CELL_PADDING } from \"./table.styles\";\nimport { RequestFilters } from \"../gridAdapter\";\nimport { createThemeVariablesCss } from \"@omegagrid/core\";\n\nexport type RefreshOptions = {\n\tvertical?: boolean,\n\thorizontal?: boolean\n\trerenderTable?: boolean\n};\n\n/** Room the column autofit leaves around the content, the cell chrome included. */\nconst AUTOFIT_COLUMN_SPACE = 22;\n\n/**\n * The width the table gives a cell for its content when its row is autofitted: the column width, for a merged\n * cell the width of the shown columns it spans. Null for a cell that must not size the row: one in a column\n * that is not shown (hidden or in a collapsed group), one covered by a merge, or a merge that spans other rows as well.\n * @param visibleColumns the columns the table shows (`model.visibleColumns`)\n */\nexport function autofitCellWidth(cell: CellModel, visibleColumns: ReadonlySet<ColumnModel>): number|null {\n\tif (!visibleColumns.has(cell.column)) return null;\n\tconst merges = cell.model.merges;\n\tif (merges.hiddenCells.has(cell.address)) return null;\n\tconst merge = merges.mergedCells.get(cell.address);\n\tif (!merge) return cell.column.width;\n\tif (merge.rs > 1) return null;\n\tlet width = 0;\n\tfor (let c = merge.c; c < merge.c + merge.cs; c++) {\n\t\tconst column = cell.model.columns[c];\n\t\tif (column && visibleColumns.has(column)) width += column.width;\n\t}\n\treturn width;\n}\n\n/**\n * The columns (or rows) a double click on the divider of `node` autofits. Like in Excel: all the selected ones\n * when the selection covers whole columns (rows) and `node` is among them, otherwise `node` alone.\n * @param visibleNodes the columns (rows) the table shows (`model.visibleColumns` / `model.visibleRows`)\n * @param whole whether the selection covers whole columns (rows)\n * @param from the selected index span, in either order (a selection dragged backwards is not normalized)\n */\nexport function autofitTargets<T extends {index: number}>(node: T, visibleNodes: readonly T[], whole: boolean, from: number, to: number): T[] {\n\tconst [first, last] = [Math.min(from, to), Math.max(from, to)];\n\tif (!whole || node.index < first || node.index > last) return [node];\n\treturn visibleNodes.filter(n => n.index >= first && n.index <= last);\n}\n\nexport class GridRendering {\n\n\trequireVerticalUpdate = true;\n\trequireHorizontalUpdate = false;\n\t/** touch position whose movement has not been turned into scrolling yet (GridEvents._onTouchMove) */\n\ttouchAnchor: {x: number, y: number};\n\tresizing = false;\n\tcurrentResizedColumn: ColumnModel;\n\tcurrentResizedColumnWidth: number;\n\tcurrentResizedRow: RowModel;\n\tcurrentResizedRowHeight: number;\n\n\tprivate _vScrolling = true;\n\tget vScrolling() { return this._vScrolling }\n\tprivate _hScrolling = true;\n\tget hScrolling() { return this._hScrolling }\n\n\tget model() { return this.grid.model }\n\tget selection() { return this.grid.selection }\n\tget table() { return this.grid.table }\n\n\tconstructor(readonly grid: Grid) { }\n\n\treadonly debounceRenderCells = debounce(this.renderCells, 50, {isImmediate: false, maxWait: 100});\n\treadonly debounceCalculateViewport = debounce(this.calculateViewport, 200);\n\n\tisLastRowInViewport() {\n\t\tconst viewportRows = this.grid.table.viewport.rows;\n\t\tconst visibleRows = this.model.visibleRows;\n\t\treturn viewportRows[viewportRows.length - 1] == visibleRows[visibleRows.length - 1];\n\t}\n\n\trenderCells(update?: TableRenderOptions) {\n\t\tupdate = update || {vertical: this.requireVerticalUpdate, horizontal: this.requireHorizontalUpdate};\n\t\tthis.grid.comment.deatach();\n\t\tthis.grid.table.renderCells(update);\n\t\tthis.requireHorizontalUpdate = false;\n\t\tthis.requireVerticalUpdate = false;\n\t\tthis.debounceCalculateViewport();\n\t\tthis.grid.objects.updatePostions();\n\t}\n\n\trenderAll(rerenderTable = false) {\n\t\tif (this.grid.group) this.grid.group.grids.forEach((g: Grid) => g.rendering.render(rerenderTable));\n\t\telse this.render(rerenderTable);\n\t}\n\n\tasync render(rerenderTable = false) {\n\t\tif (!this.grid.table || !this.model) return;\n\t\tthis.grid.table.clearHeaderCache();\n\t\tthis.grid.table.clearBodyCache();\n\t\tif (this.grid.table.isConnected) {\n\t\t\tif (rerenderTable) {\n\t\t\t\tthis.grid.table.requestUpdate();\n\t\t\t\tawait this.grid.table.updateComplete;\n\t\t\t}\n\t\t\tthis.grid.table.renderCells({horizontal: true, vertical: true});\n\t\t\tthis.calculateViewport();\n\t\t}\n\t}\n\n\tupdateRange(range: CellRange, recalculate = false) {\n\t\tfor (const cell of this.model.getRangeIterator(range)) {\n\t\t\tthis.updateCells([cell], recalculate);\n\t\t}\n\t}\n\n\tupdateCell(cell: CellModel, recalculate = false) {\n\t\tthis.updateCells([cell], recalculate);\n\t}\n\n\tupdateSpilledCells(cell: CellModel) {\n\t\tlet spillCells: Set<CellModel>;\n\t\tif (cell.prevSpillRange) {\n\t\t\tspillCells = new Set();\n\t\t\tthis.model.getRangeIterator(cell.prevSpillRange).forEach(cell => spillCells.add(cell));\n\t\t}\n\t\tif (cell.spillRange) {\n\t\t\tspillCells = spillCells || new Set();\n\t\t\tthis.model.getRangeIterator(cell.spillRange).forEach(cell => spillCells.add(cell));\n\t\t}\n\t\tif (spillCells?.size > 0) this.updateCells(spillCells);\n\t}\n\n\tupdateCells(cells: Iterable<CellModel>, recalculate = false) {\n\t\tif (recalculate) {\n\t\t\tfor (const cell of cells) {\n\t\t\t\tcell.invalidateStyle();\n\t\t\t\tcell.invalidateValue();\n\t\t\t\tthis.model.calculations.clearDependecies(cell).evaluate(cell);\n\t\t\t\tthis.updateSpilledCells(cell);\n\t\t\t}\n\t\t}\n\n\t\tconst table = this.grid.table;\n\t\tfor (const cell of cells) table.renderBodyCell(cell);\n\n\t\tif (recalculate) {\n\t\t\tthis.model.calculations.invalidateDependants(cells).forEach((sheet, cell) => {\n\t\t\t\tif (sheet) this.grid.group.getGrid(sheet)?.table.renderBodyCell(cell);\n\t\t\t\telse table.renderBodyCell(cell);\n\t\t\t\tthis.updateSpilledCells(cell);\n\t\t\t});\n\t\t\tthis.grid.dispatchGridEvent('calculate', { cells: Array.from(cells) });\n\t\t}\n\t}\n\n\tupdateHeaders() {\n\t\tthis.model.indexVisibleColumns();\n\t\tthis.table.clearHeaderCache();\n\t\tthis.table.createHeaderRows();\n\t\tthis.table.renderHeader();\n\t}\n\n\tcalculateViewport(recalculate = false) {\n\t\tthis.grid.logger.info('calculate viwport');\n\t\tthis.updateCells(this.model.calculateViewport(), recalculate);\n\t}\n\n\tupdateSliders() {\n\t\tconst ws = this.table.viewportSize;\n\t\tthis.grid.vSlider.maxValue = this.model.visibleRows.length;\n\t\tthis.grid.vSlider.pageSize = ws.h / this.model.options.rowHeight;\n\t\tthis.grid.vSlider.value = this.table.rowOffset;\n\t\tthis.grid.hSlider.maxValue = this.model.visibleColumns.length;\n\t\tthis.grid.hSlider.pageSize = ws.w / this.model.options.columnWidth;\n\t\tthis.grid.hSlider.value = this.table.colOffset;\n\t}\n\n\tisVerticalScrollingEnabled() {\n\t\treturn this.grid.options.scrolling.verticalOverscroll !== false\n\t\t\t|| this.table.viewport.rows.length < this.model.visibleRows.length;\n\t}\n\n\tisHorizontalScrollingEnabled() {\n\t\treturn this.grid.options.scrolling.horizontalOverscroll !== false\n\t\t\t|| this.table.viewport.columns.length < this.model.visibleColumns.length;\n\t}\n\n\tupdateSliderVisibility() {\n\t\tthis._vScrolling = this.isVerticalScrollingEnabled();\n\t\tif (this._vScrolling) {\n\t\t\tthis.grid.vSlider.show();\n\t\t\tdom.showElement(this.grid.vSlider);\n\t\t} else {\n\t\t\tthis.grid.vSlider.hide();\n\t\t\tdom.hideElement(this.grid.vSlider);\n\t\t}\n\n\t\tthis._hScrolling = this.isHorizontalScrollingEnabled();\n\t\tif (this._hScrolling) {\n\t\t\tthis.grid.hSlider.show();\n\t\t\tdom.showElement(this.grid.hSlider);\n\t\t} else {\n\t\t\tthis.grid.hSlider.hide();\n\t\t\tdom.hideElement(this.grid.hSlider);\n\t\t}\n\t}\n\n\thideSliders() {\n\t\tthis.grid.vSlider.hide();\n\t\tthis.grid.hSlider.hide();\n\t}\n\n\tscrollVerticalByPixels(pixels: number) {\n\t\tif (!this.vScrolling) return;\n\n\t\tlet topRow = this.table.rowOffset;\n\t\tlet top = 0, r = 0;\n\t\tlet row: RowModel;\n\n\t\tif (pixels > 0) {\n\t\t\twhile (top < pixels && topRow + r < this.model.visibleRows.length) {\n\t\t\t\ttop += this.model.visibleRows[topRow + (r++)].height + 2;\n\t\t\t}\n\t\t\ttopRow = topRow + r;\n\t\t} else if (pixels < 0) {\n\t\t\tpixels = Math.abs(pixels);\n\t\t\twhile (top < pixels && topRow + r >= 0) {\n\t\t\t\trow = this.model.visibleRows[Math.min(this.model.visibleRows.length - 1, topRow + (r--))];\n\t\t\t\ttop += (row ? row.height : 0) + 2;\n\t\t\t}\n\t\t\ttopRow = topRow + r;\n\t\t}\n\n\t\tif (topRow >= this.model.visibleRows.length) topRow = this.model.visibleRows.length - 1;\n\n\t\tthis.requireVerticalUpdate = true;\n\t\tthis.table.rowOffset = Math.max(0, topRow);\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t}\n\n\tscrollHorizontalByPixels(pixels: number) {\n\t\tif (!this.hScrolling) return;\n\n\t\tlet leftCol = this.table.colOffset;\n\t\tlet left = 0, c = 0;\n\t\tif (pixels > 0) {\n\t\t\twhile (left < pixels && leftCol + c < this.model.visibleColumns.length) {\n\t\t\t\tleft += this.model.visibleColumns[leftCol + (c++)].width + 2;\n\t\t\t}\n\t\t\tleftCol = leftCol + c;\n\t\t} else if (pixels < 0) {\n\t\t\tpixels = Math.abs(pixels);\n\t\t\twhile (left < pixels && leftCol + c >= 0) {\n\t\t\t\tleft += this.model.visibleColumns[Math.min(this.model.visibleColumns.length - 1, leftCol + (c--))].width + 2;\n\t\t\t}\n\t\t\tleftCol = leftCol + c;\n\t\t}\n\n\t\tif (leftCol >= this.model.visibleColumns.length) leftCol = this.model.visibleColumns.length - 1;\n\n\t\tthis.requireHorizontalUpdate = true;\n\t\tthis.table.colOffset = Math.max(0, leftCol);\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t}\n\n\t/**\n\t * Touch panning: scrolls by the whole columns whose widths fit into `pixels`, so the content follows the finger\n\t * (scrollHorizontalByPixels rounds up to the next column, right for the wheel, a jump under a finger).\n\t * Returns the pixels actually scrolled - the caller keeps the remainder for the next move.\n\t */\n\tpanHorizontal(pixels: number): number {\n\t\tif (!this.hScrolling) return 0;\n\t\tconst columns = this.model.visibleColumns;\n\t\tconst freeze = this.table.freezeLeft || 0;\n\t\tconst max = Math.max(0, columns.length - 1 - freeze);\n\t\tlet offset = Math.min(this.table.colOffset, max), scrolled = 0;\n\t\tif (pixels > 0) {\n\t\t\twhile (offset < max && scrolled + columns[freeze + offset].width <= pixels) scrolled += columns[freeze + offset++].width;\n\t\t} else {\n\t\t\twhile (offset > 0 && scrolled - columns[freeze + offset - 1].width >= pixels) scrolled -= columns[freeze + --offset].width;\n\t\t}\n\t\tif (offset == this.table.colOffset) return 0;\n\t\tthis.table.colOffset = offset;\n\t\tthis.requireHorizontalUpdate = true;\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t\treturn scrolled;\n\t}\n\n\t/** vertical counterpart of panHorizontal */\n\tpanVertical(pixels: number): number {\n\t\tif (!this.vScrolling) return 0;\n\t\tconst rows = this.model.visibleRows;\n\t\tconst freeze = this.model.options.freezeTop || 0;\n\t\tconst max = Math.max(0, rows.length - 1 - freeze);\n\t\tlet offset = Math.min(this.table.rowOffset, max), scrolled = 0;\n\t\tif (pixels > 0) {\n\t\t\twhile (offset < max && scrolled + rows[freeze + offset].height <= pixels) scrolled += rows[freeze + offset++].height;\n\t\t} else {\n\t\t\twhile (offset > 0 && scrolled - rows[freeze + offset - 1].height >= pixels) scrolled -= rows[freeze + --offset].height;\n\t\t}\n\t\tif (offset == this.table.rowOffset) return 0;\n\t\tthis.table.rowOffset = offset;\n\t\tthis.requireVerticalUpdate = true;\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t\treturn scrolled;\n\t}\n\n\t/**\n\t * Sets colOffset so that the column with model index `c` is whole in the viewport (a column wider than the\n\t * viewport gets aligned to its left edge). Works from the model sizes, so the column need not be rendered.\n\t * Returns true when colOffset changed - the caller renders.\n\t */\n\tscrollColumnIntoView(c: number): boolean {\n\t\tconst column = this.model.columns[c];\n\t\tif (!column?.visible || this.table.renderAll) return false;\n\t\tconst columns = this.model.visibleColumns;\n\t\tconst index = columns.indexOf(column);\n\t\tconst freeze = this.table.freezeLeft || 0;\n\t\tconst freezeRight = this.model.options.freezeRight || 0;\n\t\t// frozen columns are always visible\n\t\tif (index < freeze || index >= columns.length - freezeRight) return false;\n\t\tlet available = this.table.viewportSize.w;\n\t\tfor (let i = 0; i < freeze; i++) available -= columns[i].width + 1;\n\t\tfor (let i = columns.length - freezeRight; i < columns.length; i++) available -= columns[i].width + 1;\n\t\tconst offset = this._offsetIntoView(columns, freeze, this.table.colOffset, index, available, col => col.width + 1);\n\t\tif (offset == this.table.colOffset) return false;\n\t\tthis.table.colOffset = offset;\n\t\treturn true;\n\t}\n\n\t/** vertical counterpart of scrollColumnIntoView */\n\tscrollRowIntoView(r: number): boolean {\n\t\tconst row = this.model.rows[r];\n\t\tif (!row?.visible || this.table.renderAll) return false;\n\t\tconst rows = this.model.visibleRows;\n\t\tconst index = rows.indexOf(row);\n\t\tconst freeze = this.model.options.freezeTop || 0;\n\t\tconst freezeBottom = this.model.options.freezeBottom || 0;\n\t\tif (index < freeze || index >= rows.length - freezeBottom) return false;\n\t\tlet available = this.table.viewportSize.h;\n\t\tfor (let i = 0; i < freeze; i++) available -= rows[i].height + 1;\n\t\tfor (let i = rows.length - freezeBottom; i < rows.length; i++) available -= rows[i].height + 1;\n\t\tconst offset = this._offsetIntoView(rows, freeze, this.table.rowOffset, index, available, row => row.height + 1);\n\t\tif (offset == this.table.rowOffset) return false;\n\t\tthis.table.rowOffset = offset;\n\t\treturn true;\n\t}\n\n\t/**\n\t * The smallest change of `offset` (items scrolled out behind the `freeze` fixed ones) that shows item `target`\n\t * whole within `available` pixels. Sizes include the 1px collapsed cell border.\n\t */\n\tprivate _offsetIntoView<T>(items: T[], freeze: number, offset: number, target: number, available: number, sizeOf: (item: T) => number) {\n\t\t// before the viewport: align it right behind the fixed items\n\t\tif (target < freeze + offset) return target - freeze;\n\t\tlet size = 0;\n\t\tfor (let i = freeze + offset; i <= target; i++) size += sizeOf(items[i]);\n\t\t// already whole in the viewport\n\t\tif (size <= available) return offset;\n\t\t// behind the viewport: scroll just enough, keeping as many items before it as still fit\n\t\tlet first = target;\n\t\tsize = sizeOf(items[target]);\n\t\twhile (first > freeze + offset && size + sizeOf(items[first - 1]) <= available) size += sizeOf(items[--first]);\n\t\treturn first - freeze;\n\t}\n\n\tupdateCellSelectionRange() {\n\t\tconst table = this.table;\n\t\tfor (const cell of this.model.getRangeIterator(this.selection.range, false)) {\n\t\t\ttable.renderBodyCell(cell);\n\t\t}\n\t}\n\n\tgetAdapterRequestFilters(): RequestFilters {\n\t\treturn {\n\t\t\toffset: 0,\n\t\t\tfilter: this.model?.filter ? Array.from(this.model.filter.settings.values()) : null,\n\t\t\torder: this.model?.sorting?.settings\n\t\t};\n\t}\n\n\tasync toggleRow(index: number, dispatchEvent = true) {\n\t\tconst row = this.model.rows[index];\n\t\tif (row.isLoaded || row.isPartialyLoaded) {\n\t\t\trow.toggleCollapse(false, this.model.options.unhideRowAfterExpand);\n\t\t\tthis.table.renderCells({vertical: true});\n\t\t} else if (this.grid.adapter) {\n\t\t\tconst tr = this.table.getRowByModelIndex(index) as TableRow;\n\t\t\tif (tr && tr.expander) tr.expander.state = 'waiting';\n\n\t\t\trow.collapsed = false;\n\n\t\t\tconst requestFilters = Object.assign(this.getAdapterRequestFilters(), {\n\t\t\t\tparent: {r: row.index, props: row.properties}\n\t\t\t})\n\n\t\t\tconst [newRowSources] = await Promise.all([this.grid.adapter.getRows(requestFilters)]);\n\t\t\tthis.model.insertRowData(row, 0, newRowSources);\n\n\t\t\trequestFilters.rows = newRowSources;\n\t\t\tconst [newCellSources] = await Promise.all([this.grid.adapter.getCells(requestFilters)]);\n\t\t\tnewCellSources?.map(cellSource => this.model.getCellByCoords(cellSource.r, cellSource.c)?.update(cellSource));\n\n\t\t\tthis.table.requestUpdate();\n\t\t}\n\n\t\tthis.updateSliders();\n\t\tif (dispatchEvent) this.grid.dispatchEvent(new GridEvent('row.toggle', {grid: this.grid, row}));\n\t}\n\n\ttoggleColumn(index: number, dispatchEvent = true) {\n\t\tconst column = this.model.columns[index];\n\t\tcolumn.toggleCollapse(false, this.model.options.unhideColumnAfterExpand);\n\t\tthis.table.renderCells({horizontal: true});\n\t\tthis.updateSliders();\n\t\tif (dispatchEvent) this.grid.dispatchEvent(new GridEvent('column.toggle', {grid: this.grid, column }));\n\t}\n\n\tsetRowExpandLevel(level: number) {\n\t\tthis.model.setRowExpandLevel(level);\n\t\tthis.table.rowOffset = 0;\n\t\tthis.table.renderCells({vertical: true});\n\t\tthis.updateSliders();\n\t\tthis.grid.dispatchEvent(new GridEvent('row.toggle', {grid: this.grid}));\n\t}\n\n\tsetColumnExpandLevel(level: number) {\n\t\tthis.model.setColumnExpandLevel(level);\n\t\tthis.table.colOffset = 0;\n\t\tthis.table.renderCells({horizontal: true});\n\t\tthis.updateSliders();\n\t\tthis.grid.dispatchEvent(new GridEvent('column.toggle', {grid: this.grid}));\n\t}\n\n\tasync exportHTML() {\n\t\tconst div = dom.createElement<HTMLDivElement>('div');\n\t\tdom.hideElement(div);\n\t\tdocument.body.appendChild(div);\n\t\tconst table = dom.createElement<Table>('og-table');\n\t\ttable.grid = this.grid;\n\t\ttable.model = this.model;\n\t\ttable.renderAll = true;\n\t\tdiv.appendChild(table);\n\t\tawait table.updateComplete;\n\n\t\tconst rowBreaks = this.model.options?.print?.rowBreaks;\n\t\tconst tableElm = table.table;\n\n\t\t// split table into multiple tables if page breaks are defined\n\t\tconst hasRowBreaks = rowBreaks && rowBreaks.length > 0;\n\t\tif (hasRowBreaks) {\n\t\t\tconst colgroup = tableElm.querySelector('colgroup');\n\t\t\tconst rows = [...tableElm.tBodies[0].rows];\n\n\t\t\tconst rowTitlesRange = this.model.options?.print?.rowTitles\n\t\t\t\t? CellRange.fromA1(this.model.options?.print?.rowTitles) : null;\n\n\t\t\tconst rowTitles = rowTitlesRange ? Array.from({\n\t\t\t\tlength: rowTitlesRange.r2 - rowTitlesRange.r1 + 1},\n\t\t\t\t(_, i) => rows[table.rowMap.get(rowTitlesRange.r1 + i)]\n\t\t\t) : [];\n\n\t\t\tfor (let i = 0; i < rowBreaks.length; i++) {\n\t\t\t\tconst tableElm2 = dom.createElement<HTMLTableElement>('table');\n\t\t\t\ttableElm2.appendChild(colgroup.cloneNode(true));\n\t\t\t\tconst tbody = dom.createElement<HTMLTableSectionElement>('tbody');\n\t\t\t\ttableElm2.appendChild(tbody);\n\n\t\t\t\tconst rMin = table.rowMap.get(rowBreaks[i]);\n\t\t\t\tconst rMax = i < rowBreaks.length - 1\n\t\t\t\t\t? table.rowMap.get(rowBreaks[i + 1])\n\t\t\t\t\t: this.model.visibleRows.length - 1;\n\n\t\t\t\trowTitles.forEach(row => tbody.appendChild(row.cloneNode(true)));\n\n\t\t\t\tfor (let r = rMin; r <= rMax; r++) {\n\t\t\t\t\ttbody.appendChild(rows[r]);\n\t\t\t\t}\n\n\t\t\t\ttable.shadowRoot.appendChild(tableElm2);\n\t\t\t}\n\n\t\t\tcolgroup.cloneNode(true);\n\t\t}\n\n\t\tconst tableCss = `\n\t\t\t<style>\n\t\t\t\thtml {\n\t\t\t\t\t${createThemeVariablesCss(getThemeManager().themes.get('og-light')).cssText}\n\t\t\t\t}\n\t\t\t\t${hasRowBreaks ? 'table {break-after: page}' : ''}\n\t\t\t\t${Table.styles.map(style => style.cssText).join('\\n')}\n\t\t\t</style>\\n\n\t\t`;\n\n\t\tconst html = tableCss + table.shadowRoot.innerHTML.replace(/<!---->/g, '');\n\t\tdiv.remove();\n\t\treturn html;\n\t}\n\n\tautoscrollDirection: Direction;\n\tautoscrollTimer: number;\n\tautoscrollValue: number;\n\n\tstopAutoscroll() {\n\t\tif (this.autoscrollTimer) {\n\t\t\twindow.clearInterval(this.autoscrollTimer);\n\t\t}\n\t}\n\n\tstartAutoscroll() {\n\t\tthis.stopAutoscroll();\n\t\tthis.autoscrollTimer = window.setInterval(() => {\n\t\t\tif (this.autoscrollValue == 0) return this.stopAutoscroll();\n\t\t\tconst amount = Math.pow(this.autoscrollValue, constants.AUTOSCROLL_RATIO);\n\t\t\tswitch (this.autoscrollDirection) {\n\t\t\t\tcase 'down': this.scrollVerticalByPixels(amount); break;\n\t\t\t\tcase 'up': this.scrollVerticalByPixels(-amount); break;\n\t\t\t\tcase 'left': this.scrollHorizontalByPixels(-amount); break;\n\t\t\t\tcase 'right': this.scrollHorizontalByPixels(amount); break;\n\t\t\t}\n\t\t}, constants.AUTOSCROLL_INTERVAL);\n\t}\n\n\tautoscroll(moousePosition: {x: number, y: number}) {\n\t\tconst { x, y } = moousePosition;\n\t\tconst w = (this.table.clientWidth / this.table.zoom) - this.table.totalHeaderWidth;\n\t\tconst h = (this.table.clientHeight / this.table.zoom) - (this.table.totalHeaderHeight);\n\t\tlet direction: Direction;\n\t\tlet value = 0;\n\n\t\tif (x < constants.AUTOSCROLL_TRESHOLD && x < y && x < h - y) {\n\t\t\tdirection = 'left';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - x;\n\t\t} else if (w - x < constants.AUTOSCROLL_TRESHOLD && w - x < y && w - x < h - y) {\n\t\t\tdirection = 'right';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - w + x;\n\t\t} else if (y < constants.AUTOSCROLL_TRESHOLD) {\n\t\t\tdirection = 'up';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - y;\n\t\t} else if (h - y < constants.AUTOSCROLL_TRESHOLD) {\n\t\t\tdirection = 'down';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - h + y;\n\t\t}\n\n\t\tthis.autoscrollDirection = direction;\n\t\tthis.autoscrollValue = value;\n\t\tthis.stopAutoscroll();\n\t\tif (value > 0) {\n\t\t\tthis.startAutoscroll();\n\t\t}\n\t}\n\n\tasync load(requestFilters?: RequestFilters) {\n\t\trequestFilters = requestFilters || this.getAdapterRequestFilters();\n\t\tconst parentIndex = requestFilters.parent?.r ?? null;\n\t\tconst parentRow = parentIndex != null ? this.model.rows[parentIndex] : this.model.rowRoot;\n\n\t\tconst [newRowSources] = await Promise.all([this.grid.adapter.getRows(requestFilters)]);\n\t\tif (newRowSources.length > 0 && parentIndex === null) {\n\t\t\tthis.model.insertRowData(parentRow, requestFilters.offset, newRowSources);\n\t\t}\n\n\t\tconst [newCellSources] = await Promise.all([this.grid.adapter.getCells(requestFilters)]);\n\t\tnewCellSources?.map(cellSource => this.model.getCellByCoords(cellSource.r, cellSource.c)?.update(cellSource));\n\n\t\tthis.table.requestUpdate();\n\n\t\tif (newRowSources.length >= this.model.options.pageSize) parentRow.count = Infinity;\n\t\telse parentRow.count = parentRow.children.length;\n\n\t\tthis.grid.logger.info(`loaded ${newRowSources.length} rows`);\n\t\tthis.grid.loading = false;\n\t\tthis.grid.dispatchEvent(new GridEvent('afterLoad', {grid: this.grid}));\n\t}\n\n\tasync loadNextPage(parentIndex: number = null, forceLoad = false) {\n\t\tif (this.grid.loading) return;\n\t\tconst parentRow = parentIndex != null ? this.model.rows[parentIndex] : this.model.rowRoot;\n\t\tif (!forceLoad && parentRow.isLoaded) return;\n\n\t\tthis.grid.dispatchEvent(new GridEvent('beforeLoad', {grid: this.grid}));\n\t\tthis.grid.loading = true;\n\n\t\tconst offset = this.model.rows.length;\n\t\tthis.grid.logger.info(`loading rows offset = ${offset}`);\n\n\t\tawait this.load(Object.assign(this.getAdapterRequestFilters(), {\n\t\t\toffset: offset,\n\t\t\tparent: {r: parentIndex, props: null}\n\t\t}));\n\t}\n\n\tget totalSize() { return {\n\t\twidth: this.table.totalHeaderWidth + this.model.visibleColumns.reduce((acc, col) => acc + col.width, 0),\n\t\theight: this.table.thead.offsetHeight + this.model.visibleRows.reduce((acc, row) => acc + row.height, 0)\n\t} }\n\n\tprivate autofitDiv: HTMLDivElement;\n\n\t/**\n\t * The detached div the autofit renders cells into, reset and given the chrome of a body cell\n\t * (`td>div` in table.styles, font size and line height of the table style) so that it measures\n\t * what the table shows. The renderers leave inline styles and classes behind, hence the reset per cell.\n\t * @param width the width the table gives the cell, `'auto'` to measure the content width\n\t */\n\tprivate prepareAutofitDiv(width: number|'auto') {\n\t\tconst div = this.autofitDiv ?? (this.autofitDiv = dom.createElement<HTMLDivElement>('div'));\n\t\tdom.empty(div);\n\t\tdiv.className = '';\n\t\tdiv.removeAttribute('style');\n\t\tdom.setPosition(div, {l: -10000, t: -10000});\n\t\tdiv.style.visibility = 'hidden';\n\t\tdiv.style.boxSizing = 'border-box';\n\t\tdiv.style.border = `${CELL_BORDER_WIDTH}px solid transparent`;\n\t\tdiv.style.padding = `0 ${CELL_PADDING}px`;\n\t\tdiv.style.fontSize = dom.numToPixels(this.table.cellFontSize);\n\t\tdiv.style.lineHeight = dom.numToPixels(this.table.rowLineHeight);\n\t\tdiv.style.whiteSpace = 'nowrap';\n\t\tdiv.style.width = width === 'auto' ? 'auto' : dom.numToPixels(width);\n\t\tif (!div.isConnected) this.grid.shadowRoot.appendChild(div);\n\t\treturn div;\n\t}\n\n\tprivate renderToAutofitDiv(cell: CellModel, width: number|'auto'): HTMLDivElement {\n\t\tconst div = this.prepareAutofitDiv(width);\n\t\treturn getCellRenderer(cell).call(this.table, div, cell) || div;\n\t}\n\n\t/** Width of the content rendered into the autofit div: the client width less the padding, so the border rendering (1.5px snaps to device pixels) does not get in. */\n\tprivate autofitContentWidth(div: HTMLDivElement) {\n\t\treturn div.clientWidth - 2 * CELL_PADDING;\n\t}\n\n\t/** Drops the last measured cell from the autofit div: its elements (buttons, expanders) would keep the cell and its model alive. */\n\tprivate releaseAutofitDiv() {\n\t\tif (this.autofitDiv) dom.empty(this.autofitDiv);\n\t}\n\n\tautofitColumn(c: number|ColumnModel, visibleValuesOnly = false, rerender = true) {\n\t\tconst column = typeof c === 'number' ? this.model.columns[c] : c;\n\t\tlet maxWidth = 0;\n\t\tfor (const cell of this.model.getRangeIterator(CellRange.fromA1(column.address), !!visibleValuesOnly)) {\n\t\t\tmaxWidth = Math.max(maxWidth, this.autofitContentWidth(this.renderToAutofitDiv(cell, 'auto')));\n\t\t}\n\t\tif (column.header && this.model.options.autofit?.includeHeaders !== false) {\n\t\t\tconst div = this.prepareAutofitDiv('auto');\n\t\t\tfor (const h of column.header) {\n\t\t\t\tif (!h) continue;\n\t\t\t\tif (h.html) div.innerHTML = h.label ?? '';\n\t\t\t\telse div.innerText = h.label ?? '';\n\t\t\t\tmaxWidth = Math.max(maxWidth, this.autofitContentWidth(div));\n\t\t\t}\n\t\t}\n\t\tthis.releaseAutofitDiv();\n\t\tcolumn.width = maxWidth + AUTOFIT_COLUMN_SPACE;\n\n\t\t// limit max column width to 90% of the table body\n\t\tmaxWidth = (this.grid.offsetWidth - (this.table?.totalHeaderWidth ?? 0)) * 0.9;\n\t\tif (maxWidth > 0 && column.width > maxWidth) column.width = maxWidth;\n\n\t\tif (rerender) this.table.renderCells({horizontal: true});\n\t}\n\n\tautofitColumns(visibleValuesOnly = false) {\n\t\tthis.model.columns.forEach(col => this.autofitColumn(col, visibleValuesOnly, false));\n\t\tthis.table.renderCells({horizontal: true});\n\t}\n\n\tautofitRow(r: number|RowModel, visibleValuesOnly = false, rerender = true) {\n\t\tconst row = typeof r === 'number' ? this.model.rows[r] : r;\n\t\tconst table = this.table;\n\t\tconst visibleColumns = new Set(this.model.visibleColumns);\n\t\tlet maxHeight = table.rowLineHeight; // an empty row keeps one line\n\t\tfor (const cell of this.model.getRangeIterator(CellRange.fromA1(row.address), !!visibleValuesOnly)) {\n\t\t\tconst width = autofitCellWidth(cell, visibleColumns);\n\t\t\tif (width == null) continue;\n\t\t\t// the cell wraps within the width the table gives it; clientHeight is the content without the border\n\t\t\tmaxHeight = Math.max(maxHeight, this.renderToAutofitDiv(cell, width).clientHeight);\n\t\t}\n\t\tthis.releaseAutofitDiv();\n\t\t// the default row is one line plus a pixel - keep the same around the measured lines\n\t\trow.height = maxHeight + table.defaultRowHeight - table.rowLineHeight;\n\t\tif (rerender) this.table.renderCells({vertical: true});\n\t}\n\n\tautofitRows(visibleValuesOnly = false) {\n\t\tthis.model.rows.forEach(row => this.autofitRow(row, visibleValuesOnly, false));\n\t\tthis.table.renderCells({vertical: true});\n\t}\n\n\t/**\n\t * Autofits `column` or, when the selection covers whole columns including it, all the selected columns (see autofitTargets).\n\t * @returns the autofitted columns\n\t */\n\tautofitColumnWithSelection(column: ColumnModel): ColumnModel[] {\n\t\tconst range = this.grid.selection.range;\n\t\tconst columns = autofitTargets(column, this.model.visibleColumns, range.isColumn, range.c1, range.c2);\n\t\tcolumns.forEach(col => this.autofitColumn(col, false, false));\n\t\tthis.table.renderCells({horizontal: true});\n\t\treturn columns;\n\t}\n\n\t/**\n\t * Autofits `row` or, when the selection covers whole rows including it, all the selected rows (see autofitTargets).\n\t * @returns the autofitted rows\n\t */\n\tautofitRowWithSelection(row: RowModel): RowModel[] {\n\t\tconst range = this.grid.selection.range;\n\t\tconst rows = autofitTargets(row, this.model.visibleRows, range.isRow, range.r1, range.r2);\n\t\trows.forEach(r => this.autofitRow(r, false, false));\n\t\tthis.table.renderCells({vertical: true});\n\t\treturn rows;\n\t}\n\n\tscrollTo(r: number|RangeAddress, c = 0) {\n\t\tlet range: CellRange;\n\t\tif (utils.isString(r)) range = CellRange.fromA1(r as RangeAddress);\n\t\telse range = new CellRange(c, r as number);\n\n\t\tthis.table.rowOffset = range.r1;\n\t\tthis.table.colOffset = range.c1;\n\t\tthis.requireVerticalUpdate = true;\n\t\tthis.requireHorizontalUpdate = true;\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t}\n\n}\n"]}
@@ -86,6 +86,24 @@ export declare class GridSelecting {
86
86
  (this: unknown, ...args: [c: number, r: number] & any[]): Promise<void>;
87
87
  cancel: (reason?: any) => void;
88
88
  };
89
+ /**
90
+ * Extends the selection by c columns and r rows - the keyboard counterpart of a pointer drag (Shift+arrows,
91
+ * Shift+PageUp/PageDown, Shift+Home/End). The anchor corner (c1/r1, the active cell) stays and the opposite
92
+ * corner (c2/r2) moves, as updateSelecting does, so the range may end up reversed; the selector and the
93
+ * header highlighting take the min/max of the corners. Where the selection cannot be extended it moves instead.
94
+ * @param c
95
+ * @param r
96
+ */
97
+ extendSelector(c: number, r: number): void;
98
+ debounceExtendSelector: {
99
+ (this: unknown, ...args: [c: number, r: number] & any[]): Promise<void>;
100
+ cancel: (reason?: any) => void;
101
+ };
102
+ /**
103
+ * The index the moving end of a selection lands on when it goes `count` items from `end`: kept within the
104
+ * items, and a hidden item is skipped for the next shown one in that direction (the end stays when there is none).
105
+ */
106
+ private _extendedEnd;
89
107
  shiftActiveCell(offset: number, dispatchEvent?: boolean): void;
90
108
  updateFormulaSelector(dispatchEvent?: boolean): void;
91
109
  showFormulaSelector(dispatchEvent?: boolean): void;
@@ -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;AAIrD,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,OAAO,CAAC,SAAS;IAKjB;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,UAAQ;IAoBnD;;;;OAIG;IACH,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,UAAQ;IAoB9C;;;;OAIG;IACH,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,UAAQ;IAoB3C;;;;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;IAgDjC,oBAAoB;;uBA3Q0C,CAAC;MA2QwB;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"}
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,EAAyB,MAAM,sBAAsB,CAAC;AACnH,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAIrD,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,OAAO,CAAC,SAAS;IAKjB;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,UAAQ;IAoBnD;;;;OAIG;IACH,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,UAAQ;IAoB9C;;;;OAIG;IACH,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,UAAQ;IAoB3C;;;;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;IAgDjC,oBAAoB;;uBA3QmB,CAAC;MA2Q+C;IAEvF;;;;;;;OAOG;IACH,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAwCnC,sBAAsB;;uBA7TiB,CAAC;MA6TmD;IAE3F;;;OAGG;IACH,OAAO,CAAC,YAAY;IAUpB,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"}
@@ -34,6 +34,7 @@ export class GridSelecting {
34
34
  this._formulaSelection = new SelectionModel(0, 0, 0, 0);
35
35
  this.formulaSelectors = new Map();
36
36
  this.debounceMoveSelector = debounce((c, r) => this.moveSelector(c, r), 10);
37
+ this.debounceExtendSelector = debounce((c, r) => this.extendSelector(c, r), 10);
37
38
  }
38
39
  // #region Normal selection
39
40
  moveToSelection() {
@@ -265,6 +266,74 @@ export class GridSelecting {
265
266
  this.highlightSelection();
266
267
  this.grid.dispatchEvent(new GridEvent('select', { grid: this.grid }));
267
268
  }
269
+ /**
270
+ * Extends the selection by c columns and r rows - the keyboard counterpart of a pointer drag (Shift+arrows,
271
+ * Shift+PageUp/PageDown, Shift+Home/End). The anchor corner (c1/r1, the active cell) stays and the opposite
272
+ * corner (c2/r2) moves, as updateSelecting does, so the range may end up reversed; the selector and the
273
+ * header highlighting take the min/max of the corners. Where the selection cannot be extended it moves instead.
274
+ * @param c
275
+ * @param r
276
+ */
277
+ extendSelector(c, r) {
278
+ if (!this.canExtend()) {
279
+ this.moveSelector(c, r);
280
+ return;
281
+ }
282
+ const range = this.selection.range;
283
+ // whole rows have no column end to move, whole columns no row end
284
+ if (range.isRow)
285
+ c = 0;
286
+ if (range.isColumn)
287
+ r = 0;
288
+ if (c == 0 && r == 0)
289
+ return;
290
+ const c2 = this._extendedEnd(this.model.columns, range.c2, c);
291
+ const r2 = this._extendedEnd(this.model.rows, range.r2, r);
292
+ if (c2 == range.c2 && r2 == range.r2)
293
+ return;
294
+ range.c2 = c2;
295
+ range.r2 = r2;
296
+ if (this.grid.editing.isFormulaMode)
297
+ this.updateFormulaSelector();
298
+ else
299
+ this.updateSelector();
300
+ // bring the moving corner into view, from the model sizes as moveSelector does
301
+ const update = { horizontal: false, vertical: false };
302
+ if (c != 0)
303
+ update.horizontal = this.grid.rendering.scrollColumnIntoView(c2);
304
+ if (r != 0) {
305
+ if (Math.abs(r) == this.table.viewport.rows.length) {
306
+ // paging keeps the corner at its place in the viewport: scroll by the whole page
307
+ this.table.rowOffset = Math.min(Math.max(0, this.table.rowOffset + r), this.model.visibleRows.length - 1);
308
+ update.vertical = true;
309
+ }
310
+ else {
311
+ update.vertical = this.grid.rendering.scrollRowIntoView(r2);
312
+ }
313
+ }
314
+ if (update.horizontal || update.vertical) {
315
+ this.table.renderCells(update);
316
+ this.grid.rendering.updateSliders();
317
+ }
318
+ this.selector.updatePosition();
319
+ this.grid.dispatchEvent(new GridEvent('select', { grid: this.grid }));
320
+ }
321
+ /**
322
+ * The index the moving end of a selection lands on when it goes `count` items from `end`: kept within the
323
+ * items, and a hidden item is skipped for the next shown one in that direction (the end stays when there is none).
324
+ */
325
+ _extendedEnd(items, end, count) {
326
+ if (count == 0)
327
+ return end;
328
+ const index = Math.min(Math.max(0, end + count), items.length - 1);
329
+ const item = items[index];
330
+ if (!item)
331
+ return end; // nothing to extend over (an empty grid)
332
+ if (item.visible)
333
+ return index;
334
+ const shown = count > 0 ? item.nextVisible : item.prevVisible;
335
+ return shown ? shown.index : end;
336
+ }
268
337
  shiftActiveCell(offset, dispatchEvent = false) {
269
338
  this.selection.moveActiveCell(offset, 0);
270
339
  this.selector.updatePosition();
@@ -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\";\nimport type { TableRenderOptions } from \"./table\";\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 * Whether the current selection can be extended via Shift+click.\n\t * Requires selection enabled, multiSelect allowed and a visible selector to anchor from.\n\t */\n\tprivate canExtend() {\n\t\tconst { enabled, multiSelect } = this.model.options.selecting;\n\t\treturn enabled && multiSelect && this.selector?.isVisible;\n\t}\n\n\t/**\n\t * Enter selection mode, usualy after clicking on a cell.\n\t * @param range\n\t * @param extend extend the current selection from its anchor (Shift+click) instead of starting a new one\n\t */\n\tstartCellSelecting(range: CellRange, extend = false) {\n\t\tthis.grid.style.cursor = 'cell';\n\t\tif (extend && this.canExtend()) {\n\t\t\tthis.columnSelecting = false;\n\t\t\tthis.rowSelecting = false;\n\t\t\t// keep the existing anchor (c1/r1), extend to clicked cell via direct assignment (no normalize)\n\t\t\tthis.selection.range.c2 = range.c1;\n\t\t\tthis.selection.range.r2 = range.r1;\n\t\t\tthis.startSelectingRange = range.clone();\n\t\t\tthis.selector.startSelecting(this.selection.range.clone());\n\t\t\tif (this.grid.editing.isFormulaMode) this.updateFormulaSelector();\n\t\t\telse this.updateSelector();\n\t\t\tthis.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t\t} else {\n\t\t\tthis.startSelectingRange = range.clone();\n\t\t\tthis.select(range, true);\n\t\t\tthis.selector.startSelecting(range);\n\t\t}\n\t}\n\n\t/**\n\t * Enter column selection mode, usualy after clicking on a column header.\n\t * @param c column index\n\t * @param extend extend the current column selection to the clicked column (Shift+click)\n\t */\n\tstartColumnSelecting(c: number, extend = false) {\n\t\t// extend a column selection unless the current selection is a whole-row selection\n\t\tif (extend && this.canExtend() && !this.selection.range.isRow) {\n\t\t\tthis.columnSelecting = true;\n\t\t\tthis.rowSelecting = false;\n\t\t\t// keep anchor column (c1), make a full-column range up to clicked column\n\t\t\tthis.selection.range.r1 = 0;\n\t\t\tthis.selection.range.r2 = Infinity;\n\t\t\tthis.selection.range.c2 = c;\n\t\t\tthis.startSelectingRange = new CellRange(c, null, c, null);\n\t\t\tthis.updateSelector();\n\t\t\tthis.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t\t} else {\n\t\t\tthis.columnSelecting = true;\n\t\t\tconst range = new CellRange(c, null, c, null);\n\t\t\tthis.startSelectingRange = range.clone();\n\t\t\tthis.select(range, true);\n\t\t}\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 * @param extend extend the current row selection to the clicked row (Shift+click)\n\t */\n\tstartRowSelecting(r: number, extend = false) {\n\t\t// extend a row selection unless the current selection is a whole-column selection\n\t\tif (extend && this.canExtend() && !this.selection.range.isColumn) {\n\t\t\tthis.rowSelecting = true;\n\t\t\tthis.columnSelecting = false;\n\t\t\t// keep anchor row (r1), make a full-row range up to clicked row\n\t\t\tthis.selection.range.c1 = 0;\n\t\t\tthis.selection.range.c2 = Infinity;\n\t\t\tthis.selection.range.r2 = r;\n\t\t\tthis.startSelectingRange = new CellRange(null, r, null, r);\n\t\t\tthis.updateSelector();\n\t\t\tthis.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t\t} else {\n\t\t\tthis.rowSelecting = true;\n\t\t\tconst range = new CellRange(null, r, null, r);\n\t\t\tthis.startSelectingRange = range.clone();\n\t\t\tthis.select(range, true);\n\t\t}\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\n\t\t// bring the cell into view from the model sizes - the selector cannot be measured on a cell that is not\n\t\t// rendered yet (that used to leave the grid stuck one column short, with the active cell outside the view)\n\t\tconst range = this.selection.range;\n\t\tconst update: TableRenderOptions = {horizontal: false, vertical: false};\n\t\tif (c != 0) {\n\t\t\tupdate.horizontal = this.grid.rendering.scrollColumnIntoView(c > 0 ? Math.max(range.c1, range.c2) : Math.min(range.c1, range.c2));\n\t\t}\n\t\tif (r != 0) {\n\t\t\tif (Math.abs(r) == this.table.viewport.rows.length) {\n\t\t\t\t// paging keeps the cell at its place in the viewport: scroll by the whole page\n\t\t\t\tthis.table.rowOffset = Math.min(Math.max(0, this.table.rowOffset + r), this.model.visibleRows.length - 1);\n\t\t\t\tupdate.vertical = true;\n\t\t\t} else {\n\t\t\t\tupdate.vertical = this.grid.rendering.scrollRowIntoView(r > 0 ? Math.max(range.r1, range.r2) : Math.min(range.r1, range.r2));\n\t\t\t}\n\t\t}\n\t\tif (update.horizontal || update.vertical) {\n\t\t\tthis.table.renderCells(update);\n\t\t\tthis.grid.rendering.updateSliders();\n\t\t}\n\t\tthis.selector.updatePosition();\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}"]}
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, RowModel, ColumnModel } from \"@omegagrid/grid-core\";\nimport { Grid } from \"./grid\";\nimport { Selector, SelectorEvent } from \"./selector\";\nimport { GridEvent } from \"./grid.events\";\nimport type { TableRenderOptions } from \"./table\";\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 * Whether the current selection can be extended via Shift+click.\n\t * Requires selection enabled, multiSelect allowed and a visible selector to anchor from.\n\t */\n\tprivate canExtend() {\n\t\tconst { enabled, multiSelect } = this.model.options.selecting;\n\t\treturn enabled && multiSelect && this.selector?.isVisible;\n\t}\n\n\t/**\n\t * Enter selection mode, usualy after clicking on a cell.\n\t * @param range\n\t * @param extend extend the current selection from its anchor (Shift+click) instead of starting a new one\n\t */\n\tstartCellSelecting(range: CellRange, extend = false) {\n\t\tthis.grid.style.cursor = 'cell';\n\t\tif (extend && this.canExtend()) {\n\t\t\tthis.columnSelecting = false;\n\t\t\tthis.rowSelecting = false;\n\t\t\t// keep the existing anchor (c1/r1), extend to clicked cell via direct assignment (no normalize)\n\t\t\tthis.selection.range.c2 = range.c1;\n\t\t\tthis.selection.range.r2 = range.r1;\n\t\t\tthis.startSelectingRange = range.clone();\n\t\t\tthis.selector.startSelecting(this.selection.range.clone());\n\t\t\tif (this.grid.editing.isFormulaMode) this.updateFormulaSelector();\n\t\t\telse this.updateSelector();\n\t\t\tthis.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t\t} else {\n\t\t\tthis.startSelectingRange = range.clone();\n\t\t\tthis.select(range, true);\n\t\t\tthis.selector.startSelecting(range);\n\t\t}\n\t}\n\n\t/**\n\t * Enter column selection mode, usualy after clicking on a column header.\n\t * @param c column index\n\t * @param extend extend the current column selection to the clicked column (Shift+click)\n\t */\n\tstartColumnSelecting(c: number, extend = false) {\n\t\t// extend a column selection unless the current selection is a whole-row selection\n\t\tif (extend && this.canExtend() && !this.selection.range.isRow) {\n\t\t\tthis.columnSelecting = true;\n\t\t\tthis.rowSelecting = false;\n\t\t\t// keep anchor column (c1), make a full-column range up to clicked column\n\t\t\tthis.selection.range.r1 = 0;\n\t\t\tthis.selection.range.r2 = Infinity;\n\t\t\tthis.selection.range.c2 = c;\n\t\t\tthis.startSelectingRange = new CellRange(c, null, c, null);\n\t\t\tthis.updateSelector();\n\t\t\tthis.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t\t} else {\n\t\t\tthis.columnSelecting = true;\n\t\t\tconst range = new CellRange(c, null, c, null);\n\t\t\tthis.startSelectingRange = range.clone();\n\t\t\tthis.select(range, true);\n\t\t}\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 * @param extend extend the current row selection to the clicked row (Shift+click)\n\t */\n\tstartRowSelecting(r: number, extend = false) {\n\t\t// extend a row selection unless the current selection is a whole-column selection\n\t\tif (extend && this.canExtend() && !this.selection.range.isColumn) {\n\t\t\tthis.rowSelecting = true;\n\t\t\tthis.columnSelecting = false;\n\t\t\t// keep anchor row (r1), make a full-row range up to clicked row\n\t\t\tthis.selection.range.c1 = 0;\n\t\t\tthis.selection.range.c2 = Infinity;\n\t\t\tthis.selection.range.r2 = r;\n\t\t\tthis.startSelectingRange = new CellRange(null, r, null, r);\n\t\t\tthis.updateSelector();\n\t\t\tthis.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t\t} else {\n\t\t\tthis.rowSelecting = true;\n\t\t\tconst range = new CellRange(null, r, null, r);\n\t\t\tthis.startSelectingRange = range.clone();\n\t\t\tthis.select(range, true);\n\t\t}\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\n\t\t// bring the cell into view from the model sizes - the selector cannot be measured on a cell that is not\n\t\t// rendered yet (that used to leave the grid stuck one column short, with the active cell outside the view)\n\t\tconst range = this.selection.range;\n\t\tconst update: TableRenderOptions = {horizontal: false, vertical: false};\n\t\tif (c != 0) {\n\t\t\tupdate.horizontal = this.grid.rendering.scrollColumnIntoView(c > 0 ? Math.max(range.c1, range.c2) : Math.min(range.c1, range.c2));\n\t\t}\n\t\tif (r != 0) {\n\t\t\tif (Math.abs(r) == this.table.viewport.rows.length) {\n\t\t\t\t// paging keeps the cell at its place in the viewport: scroll by the whole page\n\t\t\t\tthis.table.rowOffset = Math.min(Math.max(0, this.table.rowOffset + r), this.model.visibleRows.length - 1);\n\t\t\t\tupdate.vertical = true;\n\t\t\t} else {\n\t\t\t\tupdate.vertical = this.grid.rendering.scrollRowIntoView(r > 0 ? Math.max(range.r1, range.r2) : Math.min(range.r1, range.r2));\n\t\t\t}\n\t\t}\n\t\tif (update.horizontal || update.vertical) {\n\t\t\tthis.table.renderCells(update);\n\t\t\tthis.grid.rendering.updateSliders();\n\t\t}\n\t\tthis.selector.updatePosition();\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\t/**\n\t * Extends the selection by c columns and r rows - the keyboard counterpart of a pointer drag (Shift+arrows,\n\t * Shift+PageUp/PageDown, Shift+Home/End). The anchor corner (c1/r1, the active cell) stays and the opposite\n\t * corner (c2/r2) moves, as updateSelecting does, so the range may end up reversed; the selector and the\n\t * header highlighting take the min/max of the corners. Where the selection cannot be extended it moves instead.\n\t * @param c\n\t * @param r\n\t */\n\textendSelector(c: number, r: number) {\n\t\tif (!this.canExtend()) {\n\t\t\tthis.moveSelector(c, r);\n\t\t\treturn;\n\t\t}\n\t\tconst range = this.selection.range;\n\t\t// whole rows have no column end to move, whole columns no row end\n\t\tif (range.isRow) c = 0;\n\t\tif (range.isColumn) r = 0;\n\t\tif (c == 0 && r == 0) return;\n\n\t\tconst c2 = this._extendedEnd(this.model.columns, range.c2, c);\n\t\tconst r2 = this._extendedEnd(this.model.rows, range.r2, r);\n\t\tif (c2 == range.c2 && r2 == range.r2) return;\n\t\trange.c2 = c2;\n\t\trange.r2 = r2;\n\n\t\tif (this.grid.editing.isFormulaMode) this.updateFormulaSelector();\n\t\telse this.updateSelector();\n\n\t\t// bring the moving corner into view, from the model sizes as moveSelector does\n\t\tconst update: TableRenderOptions = {horizontal: false, vertical: false};\n\t\tif (c != 0) update.horizontal = this.grid.rendering.scrollColumnIntoView(c2);\n\t\tif (r != 0) {\n\t\t\tif (Math.abs(r) == this.table.viewport.rows.length) {\n\t\t\t\t// paging keeps the corner at its place in the viewport: scroll by the whole page\n\t\t\t\tthis.table.rowOffset = Math.min(Math.max(0, this.table.rowOffset + r), this.model.visibleRows.length - 1);\n\t\t\t\tupdate.vertical = true;\n\t\t\t} else {\n\t\t\t\tupdate.vertical = this.grid.rendering.scrollRowIntoView(r2);\n\t\t\t}\n\t\t}\n\t\tif (update.horizontal || update.vertical) {\n\t\t\tthis.table.renderCells(update);\n\t\t\tthis.grid.rendering.updateSliders();\n\t\t}\n\t\tthis.selector.updatePosition();\n\t\tthis.grid.dispatchEvent(new GridEvent('select', {grid: this.grid}));\n\t}\n\n\tdebounceExtendSelector = debounce((c: number, r: number) => this.extendSelector(c, r), 10);\n\n\t/**\n\t * The index the moving end of a selection lands on when it goes `count` items from `end`: kept within the\n\t * items, and a hidden item is skipped for the next shown one in that direction (the end stays when there is none).\n\t */\n\tprivate _extendedEnd(items: (RowModel|ColumnModel)[], end: number, count: number) {\n\t\tif (count == 0) return end;\n\t\tconst index = Math.min(Math.max(0, end + count), items.length - 1);\n\t\tconst item = items[index];\n\t\tif (!item) return end; // nothing to extend over (an empty grid)\n\t\tif (item.visible) return index;\n\t\tconst shown = count > 0 ? item.nextVisible : item.prevVisible;\n\t\treturn shown ? shown.index : end;\n\t}\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}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omegagrid/grid",
3
- "version": "0.11.17",
3
+ "version": "0.11.19",
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.11.17",
39
- "@omegagrid/core": "^0.11.17",
40
- "@omegagrid/grid-core": "^0.11.17",
41
- "@omegagrid/localize": "^0.11.17",
42
- "@omegagrid/tabs": "^0.11.17",
43
- "@omegagrid/tree": "^0.11.17",
38
+ "@omegagrid/commands": "^0.11.19",
39
+ "@omegagrid/core": "^0.11.19",
40
+ "@omegagrid/grid-core": "^0.11.19",
41
+ "@omegagrid/localize": "^0.11.19",
42
+ "@omegagrid/tabs": "^0.11.19",
43
+ "@omegagrid/tree": "^0.11.19",
44
44
  "@stdlib/stats": "^0.0.13",
45
45
  "date-fns": "^3.2.0",
46
46
  "lit": "^3.1.1",