@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.
- package/dist/gridAdapter.d.ts +5 -0
- package/dist/gridAdapter.d.ts.map +1 -1
- package/dist/gridAdapter.js.map +1 -1
- package/dist/ui/grid.d.ts.map +1 -1
- package/dist/ui/grid.editing.d.ts +5 -0
- package/dist/ui/grid.editing.d.ts.map +1 -1
- package/dist/ui/grid.editing.js +8 -4
- package/dist/ui/grid.editing.js.map +1 -1
- package/dist/ui/grid.events.d.ts +4 -0
- package/dist/ui/grid.events.d.ts.map +1 -1
- package/dist/ui/grid.events.js +28 -10
- package/dist/ui/grid.events.js.map +1 -1
- package/dist/ui/grid.js +15 -10
- package/dist/ui/grid.js.map +1 -1
- package/dist/ui/grid.rendering.js +1 -1
- package/dist/ui/grid.rendering.js.map +1 -1
- package/dist/ui/grid.selecting.d.ts +18 -0
- package/dist/ui/grid.selecting.d.ts.map +1 -1
- package/dist/ui/grid.selecting.js +69 -0
- package/dist/ui/grid.selecting.js.map +1 -1
- package/package.json +7 -7
|
@@ -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":"AAAA,OAAO,EAAa,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAoC,SAAS,EAAE,aAAa,IAAI,SAAS,EAAgB,MAAM,sBAAsB,CAAC;AAE7H,OAAO,EAAE,KAAK,EAAgC,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAQ1D,mFAAmF;AACnF,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAe,EAAE,cAAwC;IACzF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IACjC,IAAI,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACrC,IAAI,KAAK,CAAC,EAAE,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;IACjE,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAA4B,IAAO,EAAE,YAA0B,EAAE,KAAc,EAAE,IAAY,EAAE,EAAU;IACtI,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,OAAO,aAAa;IAazB,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,CAAA,CAAC,CAAC;IAE5C,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,CAAA,CAAC,CAAC;IAE5C,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;IACtC,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA,CAAC,CAAC;IAC9C,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;IAEtC,YAAqB,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;QAnB/B,0BAAqB,GAAG,IAAI,CAAC;QAC7B,4BAAuB,GAAG,KAAK,CAAC;QAGhC,aAAQ,GAAG,KAAK,CAAC;QAMT,gBAAW,GAAG,IAAI,CAAC;QAEnB,gBAAW,GAAG,IAAI,CAAC;QASlB,wBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,EAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAC,CAAC,CAAC;QACzF,8BAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IAHxC,CAAC;IAKpC,mBAAmB;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QAC3C,OAAO,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,WAAW,CAAC,MAA2B;QACtC,MAAM,GAAG,MAAM,IAAI,EAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,EAAE,IAAI,CAAC,uBAAuB,EAAC,CAAC;QACpG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACrC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,CAAC;IAED,SAAS,CAAC,aAAa,GAAG,KAAK;QAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;;YAC9F,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,KAAK;QACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACjC,IAAI,aAAa,EAAE,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBAChC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YACtC,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;YAChE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC1B,CAAC;IACF,CAAC;IAED,WAAW,CAAC,KAAgB,EAAE,WAAW,GAAG,KAAK;QAChD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;QACvC,CAAC;IACF,CAAC;IAED,UAAU,CAAC,IAAe,EAAE,WAAW,GAAG,KAAK;QAC9C,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,kBAAkB,CAAC,IAAe;QACjC,IAAI,UAA0B,CAAC;QAC/B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,UAAU,GAAG,UAAU,IAAI,IAAI,GAAG,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,UAAU,EAAE,IAAI,GAAG,CAAC;YAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;IAED,WAAW,CAAC,KAA0B,EAAE,WAAW,GAAG,KAAK;QAC1D,IAAI,WAAW,EAAE,CAAC;YACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACF,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAErD,IAAI,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBAC3E,IAAI,KAAK;oBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;;oBACjE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;IACF,CAAC;IAED,aAAa;QACZ,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;IAC3B,CAAC;IAED,iBAAiB,CAAC,WAAW,GAAG,KAAK;QACpC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC;IAED,aAAa;QACZ,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;IAChD,CAAC;IAED,0BAA0B;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,kBAAkB,KAAK,KAAK;eAC3D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;IACrE,CAAC;IAED,4BAA4B;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,oBAAoB,KAAK,KAAK;eAC7D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;IAC3E,CAAC;IAED,sBAAsB;QACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACrD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACzB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACzB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACvD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACzB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACzB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;IACF,CAAC;IAED,WAAW;QACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,sBAAsB,CAAC,MAAc;QACpC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAE7B,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QAClC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,GAAa,CAAC;QAElB,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,GAAG,GAAG,MAAM,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBACnE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,GAAG,GAAG,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1F,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM;YAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAExF,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAED,wBAAwB,CAAC,MAAc;QACtC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAE7B,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QACnC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,IAAI,GAAG,MAAM,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;gBACxE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,IAAI,GAAG,MAAM,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAC9G,CAAC;YACD,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM;YAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAEhG,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,MAAc;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACrD,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;QAC/D,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,MAAM,GAAG,GAAG,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,IAAI,MAAM;gBAAE,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC;QAC1H,CAAC;aAAM,CAAC;YACP,OAAO,MAAM,GAAG,CAAC,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM;gBAAE,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC;QAC5H,CAAC;QACD,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAC9B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,4CAA4C;IAC5C,WAAW,CAAC,MAAc;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAClD,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;QAC/D,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,MAAM,GAAG,GAAG,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,IAAI,MAAM;gBAAE,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACtH,CAAC;aAAM,CAAC;YACP,OAAO,MAAM,GAAG,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM;gBAAE,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC;QACxH,CAAC;QACD,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAC9B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAC,CAAS;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;QAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;QACxD,oCAAoC;QACpC,IAAI,KAAK,GAAG,MAAM,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,WAAW;YAAE,OAAO,KAAK,CAAC;QAC1E,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;YAAE,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACnE,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACtG,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACnH,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,mDAAmD;IACnD,iBAAiB,CAAC,CAAS;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;QAC1D,IAAI,KAAK,GAAG,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,YAAY;YAAE,OAAO,KAAK,CAAC;QACxE,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;YAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACjE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/F,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjH,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;OAGG;IACK,eAAe,CAAI,KAAU,EAAE,MAAc,EAAE,MAAc,EAAE,MAAc,EAAE,SAAiB,EAAE,MAA2B;QACpI,6DAA6D;QAC7D,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM;YAAE,OAAO,MAAM,GAAG,MAAM,CAAC;QACrD,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,gCAAgC;QAChC,IAAI,IAAI,IAAI,SAAS;YAAE,OAAO,MAAM,CAAC;QACrC,wFAAwF;QACxF,IAAI,KAAK,GAAG,MAAM,CAAC;QACnB,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7B,OAAO,KAAK,GAAG,MAAM,GAAG,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS;YAAE,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/G,OAAO,KAAK,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,wBAAwB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YAC7E,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,wBAAwB;QACvB,OAAO;YACN,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;YACnF,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ;SACpC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,aAAa,GAAG,IAAI;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAC1C,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YACnE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAa,CAAC;YAC5D,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ;gBAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC;YAErD,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;YAEtB,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE;gBACrE,MAAM,EAAE,EAAC,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAC;aAC7C,CAAC,CAAA;YAEF,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACvF,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;YAEhD,cAAc,CAAC,IAAI,GAAG,aAAa,CAAC;YACpC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACzF,cAAc,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAE9G,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,YAAY,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAC,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,YAAY,CAAC,KAAa,EAAE,aAAa,GAAG,IAAI;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,eAAe,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACxG,CAAC;IAED,iBAAiB,CAAC,KAAa;QAC9B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,YAAY,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,oBAAoB,CAAC,KAAa;QACjC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,eAAe,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,UAAU;QACf,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAiB,KAAK,CAAC,CAAC;QACrD,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAQ,UAAU,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACvB,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,KAAK,CAAC,cAAc,CAAC;QAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC;QACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;QAE7B,8DAA8D;QAC9D,MAAM,YAAY,GAAG,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACvD,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAE3C,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS;gBAC1D,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAEjE,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC7C,MAAM,EAAE,cAAc,CAAC,EAAE,GAAG,cAAc,CAAC,EAAE,GAAG,CAAC;aAAC,EAClD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CACvD,CAAC,CAAC,CAAC,EAAE,CAAC;YAEP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAmB,OAAO,CAAC,CAAC;gBAC/D,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAA0B,OAAO,CAAC,CAAC;gBAClE,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAE7B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5C,MAAM,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;oBACpC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBAErC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAEjE,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBACnC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;gBAED,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACzC,CAAC;YAED,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,QAAQ,GAAG;;;OAGZ,uBAAuB,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;;MAE1E,YAAY,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE;MAC/C,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;GAEtD,CAAC;QAEF,MAAM,IAAI,GAAG,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3E,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACb,CAAC;IAMD,cAAc;QACb,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;IAED,eAAe;QACd,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE;YAC9C,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAC1E,QAAQ,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAClC,KAAK,MAAM;oBAAE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;oBAAC,MAAM;gBACxD,KAAK,IAAI;oBAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;oBAAC,MAAM;gBACvD,KAAK,MAAM;oBAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;oBAAC,MAAM;gBAC3D,KAAK,OAAO;oBAAE,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;oBAAC,MAAM;YAC5D,CAAC;QACF,CAAC,EAAE,SAAS,CAAC,mBAAmB,CAAC,CAAC;IACnC,CAAC;IAED,UAAU,CAAC,cAAsC;QAChD,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACnF,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACvF,IAAI,SAAoB,CAAC;QACzB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,IAAI,CAAC,GAAG,SAAS,CAAC,mBAAmB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7D,SAAS,GAAG,MAAM,CAAC;YACnB,KAAK,GAAG,SAAS,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,mBAAmB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAChF,SAAS,GAAG,OAAO,CAAC;YACpB,KAAK,GAAG,SAAS,CAAC,mBAAmB,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,CAAC,GAAG,SAAS,CAAC,mBAAmB,EAAE,CAAC;YAC9C,SAAS,GAAG,IAAI,CAAC;YACjB,KAAK,GAAG,SAAS,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,mBAAmB,EAAE,CAAC;YAClD,SAAS,GAAG,MAAM,CAAC;YACnB,KAAK,GAAG,SAAS,CAAC,mBAAmB,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,EAAE,CAAC;QACxB,CAAC;IACF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAA+B;QACzC,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACnE,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC;QACrD,MAAM,SAAS,GAAG,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAE1F,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACzF,cAAc,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAE9G,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAE3B,IAAI,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ;YAAE,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC;;YAC/E,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAEjD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,aAAa,CAAC,MAAM,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,WAAW,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,cAAsB,IAAI,EAAE,SAAS,GAAG,KAAK;QAC/D,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC9B,MAAM,SAAS,GAAG,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1F,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ;YAAE,OAAO;QAE7C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,YAAY,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;QAEzD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE;YAC9D,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,EAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAC;SACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,SAAS;QAAK,OAAO;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACvG,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;SACxG,CAAA;IAAC,CAAC;IAIH;;;;;OAKG;IACK,iBAAiB,CAAC,KAAoB;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,aAAa,CAAiB,KAAK,CAAC,CAAC,CAAC;QAC5F,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACf,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;QACnB,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC7B,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,EAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,KAAK,EAAC,CAAC,CAAC;QAC7C,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;QAChC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;QACnC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,iBAAiB,sBAAsB,CAAC;QAC9D,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,YAAY,IAAI,CAAC;QAC1C,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9D,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACjE,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;QAChC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,CAAC,WAAW;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5D,OAAO,GAAG,CAAC;IACZ,CAAC;IAEO,kBAAkB,CAAC,IAAe,EAAE,KAAoB;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;IACjE,CAAC;IAED,qKAAqK;IAC7J,mBAAmB,CAAC,GAAmB;QAC9C,OAAO,GAAG,CAAC,WAAW,GAAG,CAAC,GAAG,YAAY,CAAC;IAC3C,CAAC;IAED,oIAAoI;IAC5H,iBAAiB;QACxB,IAAI,IAAI,CAAC,UAAU;YAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,aAAa,CAAC,CAAqB,EAAE,iBAAiB,GAAG,KAAK,EAAE,QAAQ,GAAG,IAAI;QAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACvG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,KAAK,KAAK,EAAE,CAAC;YAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC3C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC/B,IAAI,CAAC,CAAC;oBAAE,SAAS;gBACjB,IAAI,CAAC,CAAC,IAAI;oBAAE,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;;oBACrC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACnC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,CAAC;QACF,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,GAAG,QAAQ,GAAG,oBAAoB,CAAC;QAE/C,kDAAkD;QAClD,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC/E,IAAI,QAAQ,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,QAAQ;YAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;QAErE,IAAI,QAAQ;YAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;IAC1D,CAAC;IAED,cAAc,CAAC,iBAAiB,GAAG,KAAK;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;IAC5C,CAAC;IAED,UAAU,CAAC,CAAkB,EAAE,iBAAiB,GAAG,KAAK,EAAE,QAAQ,GAAG,IAAI;QACxE,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC1D,IAAI,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,8BAA8B;QACnE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACpG,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YACrD,IAAI,KAAK,IAAI,IAAI;gBAAE,SAAS;YAC5B,qGAAqG;YACrG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,qFAAqF;QACrF,GAAG,CAAC,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAC;QACtE,IAAI,QAAQ;YAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;IACxD,CAAC;IAED,WAAW,CAAC,iBAAiB,GAAG,KAAK;QACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,0BAA0B,CAAC,MAAmB;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACxC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACtG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,uBAAuB,CAAC,GAAa;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACxC,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,QAAQ,CAAC,CAAsB,EAAE,CAAC,GAAG,CAAC;QACrC,IAAI,KAAgB,CAAC;QACrB,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAiB,CAAC,CAAC;;YAC9D,KAAK,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,CAAW,CAAC,CAAC;QAE3C,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;CAED","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,
|
|
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":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,cAAc,EAAW,SAAS,EAAoB,MAAM,sBAAsB,CAAC;AAG5F,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,OAAO,aAAa;IAQzB,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;IACtC,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA,CAAC,CAAC;IACxG,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAA,CAAC,CAAC;IAC1G,IAAI,gBAAgB,KAAK,OAAO,IAAI,CAAC,iBAAiB,CAAA,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;IACtC,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,CAAA,CAAC,CAAC;IAC9F,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAA,CAAC,CAAC;IAC1D,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAA,CAAC,CAAC;IAC1D,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAA,CAAC,CAAC;IAChD,IAAI,yBAAyB,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAA,CAAC,CAAC;IAClF,IAAI,gCAAgC;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC;QACnD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;YACvD,IAAI,QAAQ,CAAC,yBAAyB;gBAAE,OAAO,IAAI,CAAC;QACrD,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,IAAI,UAAU;QACb,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,YAAqB,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;QA9BvB,oBAAe,GAAG,KAAK,CAAC;QACxB,iBAAY,GAAG,KAAK,CAAC;QAErB,sBAAiB,GAAG,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,qBAAgB,GAAG,IAAI,GAAG,EAAoB,CAAC;QA2Q/D,yBAAoB,GAAG,QAAQ,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAjPpD,CAAC;IAEpC,2BAA2B;IAE3B,eAAe;QACd,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACzC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;IAErC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAuB,EAAE,aAAa,GAAG,KAAK;QACpD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED;;;OAGG;IACK,SAAS;QAChB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAC9D,OAAO,OAAO,IAAI,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC3D,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,KAAgB,EAAE,MAAM,GAAG,KAAK;QAClD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAChC,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YAChC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,gGAAgG;YAChG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3D,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;gBAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC;;gBAC7D,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;IACF,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAC,CAAS,EAAE,MAAM,GAAG,KAAK;QAC7C,kFAAkF;QAClF,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,yEAAyE;YACzE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,mBAAmB,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC3D,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC9C,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,CAAS,EAAE,MAAM,GAAG,KAAK;QAC1C,kFAAkF;QAClF,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAClE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,gEAAgE;YAChE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,mBAAmB,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,CAAS,EAAE,CAAS;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC;QAE7D,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/C,IAAI,CAAC,WAAW;gBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAClD,IAAI,CAAC,WAAW;gBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;IAEF,CAAC;IAED;;OAEG;IACH,aAAa;QACZ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAC7E,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,kBAAkB;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC/B,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3G,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5G,CAAC;IAED,cAAc,CAAC,aAAa,GAAG,IAAI;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC3B,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,YAAY,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACnE,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,aAAa,GAAG,IAAI;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,YAAY;QACX,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,CAAS,EAAE,CAAS;QAChC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE7E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACjE,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC;YACxI,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC;gBAC5C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC;YAC7C,CAAC;QACF,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACpE,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC;YAC9I,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC;gBAC5C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC;YAC7C,CAAC;QACF,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAE/C,wGAAwG;QACxG,2GAA2G;QAC3G,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACnC,MAAM,MAAM,GAAuB,EAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACZ,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACnI,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpD,+EAA+E;gBAC/E,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC1G,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9H,CAAC;QACF,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAClE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAID,eAAe,CAAC,MAAc,EAAE,aAAa,GAAG,KAAK;QACpD,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC/B,IAAI,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,aAAa;IAGb,4BAA4B;IAE5B,qBAAqB,CAAC,aAAa,GAAG,IAAI;QACzC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;;YACxE,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACjC,CAAC;IAED,mBAAmB,CAAC,aAAa,GAAG,IAAI;QACvC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC/E,CAAC;IAED,mBAAmB;QAClB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,sBAAsB;QACrB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,kBAAkB,CAAC,IAAsB;QACxC,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAW,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3C,QAAQ,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,CAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjH,QAAQ,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,CAAC,CAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACnH,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC;QAC7B,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrD,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QAChD,QAAQ,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAED,gBAAgB,CAAC,OAAgB;QAChC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAQ,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC7B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACzD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjD,IAAI,CAAC,IAAI;oBAAE,OAAO;gBAClB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAChB,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC;gBACzC,CAAC;gBACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACtB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBACzC,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,sBAAsB;QACrB,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,aAAa;IAGb,yBAAyB;IAEzB,kBAAkB;QACjB,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;IAC/E,CAAC;IAED,gBAAgB;QACf,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;IAED,gBAAgB;QACf,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,aAAa;IAEb,eAAe;QACd,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAC/B,CAAC;IAED,oBAAoB;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1B,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACF,CAAC;CAED","sourcesContent":["import { dom } from \"@omegagrid/core\";\nimport { debounce } from \"ts-debounce\";\nimport { SelectionModel, Formula, CellRange, FormulaColorItem } from \"@omegagrid/grid-core\";\nimport { Grid } from \"./grid\";\nimport { Selector, SelectorEvent } from \"./selector\";\nimport { GridEvent } from \"./grid.events\";\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.
|
|
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.
|
|
39
|
-
"@omegagrid/core": "^0.11.
|
|
40
|
-
"@omegagrid/grid-core": "^0.11.
|
|
41
|
-
"@omegagrid/localize": "^0.11.
|
|
42
|
-
"@omegagrid/tabs": "^0.11.
|
|
43
|
-
"@omegagrid/tree": "^0.11.
|
|
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",
|